aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSebastian Spaeth <Sebastian@SSpaeth.de>2009-12-17 13:47:50 +0100
committerSebastian Spaeth <Sebastian@SSpaeth.de>2009-12-17 13:47:50 +0100
commitf45580a1527dccdda100eee7f25f9f2c41af4db8 (patch)
tree2218d4955f368e1804d86f212cc78317b4327f77
parent887b437869709625f5323438808ded9990cf590a (diff)
parente3df24d64a48aff19aa9960dd9308a071b243b09 (diff)
downloadopenembedded-f45580a1527dccdda100eee7f25f9f2c41af4db8.tar.gz
Merge commit 'origin/shr/merge' into shr/testing2009
Conflicts: conf/distro/include/sane-srcrevs.inc recipes/enotes/enotes_svn.bb recipes/intone-video/intone-video_svn.bb recipes/intone/intone_svn.bb recipes/shr/shr-wizard_git.bb recipes/tasks/task-shr-minimal.bb Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
-rw-r--r--classes/openmoko2.bbclass13
-rw-r--r--classes/package.bbclass18
-rw-r--r--classes/package_ipk.bbclass4
-rw-r--r--conf/bitbake.conf1
-rw-r--r--conf/checksums.ini182
-rw-r--r--conf/compatibility-providers.conf72
-rw-r--r--conf/distro/angstrom-2008.1.conf72
-rw-r--r--conf/distro/include/angstrom-package-deb.inc4
-rw-r--r--conf/distro/include/angstrom-package-ipk.inc5
-rw-r--r--conf/distro/include/angstrom.inc6
-rw-r--r--conf/distro/include/preferred-om-2008-versions.inc4
-rw-r--r--conf/distro/include/preferred-shr-versions.inc3
-rw-r--r--conf/distro/include/preferred-slugos-versions.inc14
-rw-r--r--conf/distro/include/preferred-xorg-versions-live.inc22
-rw-r--r--conf/distro/include/sane-feed-deb.inc4
-rw-r--r--conf/distro/include/sane-feed-ipk.inc5
-rw-r--r--conf/distro/include/sane-srcrevs-fso.inc2
-rw-r--r--conf/distro/include/sane-srcrevs.inc33
-rw-r--r--conf/distro/include/slugos.inc6
-rw-r--r--conf/distro/micro.conf6
-rw-r--r--conf/distro/minimal.conf14
-rw-r--r--conf/distro/shr.conf27
-rw-r--r--conf/distro/slugos.conf3
-rw-r--r--conf/machine/cm-t35.conf46
-rw-r--r--conf/machine/da830-omapl137-evm.conf1
-rw-r--r--conf/machine/da850-omapl138-evm.conf1
-rw-r--r--conf/machine/davinci-sffsdr.conf1
-rw-r--r--conf/machine/dm355-evm.conf2
-rw-r--r--conf/machine/dm365-evm.conf1
-rw-r--r--conf/machine/dm6446-evm.conf1
-rw-r--r--conf/machine/hawkboard.conf1
-rw-r--r--conf/machine/include/davinci.inc2
-rw-r--r--conf/machine/include/dm355.inc9
-rw-r--r--conf/machine/include/dm365.inc12
-rw-r--r--conf/machine/include/dm6446.inc13
-rw-r--r--conf/machine/include/omap3.inc13
-rw-r--r--conf/machine/include/omapl137.conf2
-rw-r--r--conf/machine/include/omapl138.conf1
-rw-r--r--conf/machine/include/tune-atom.inc5
-rw-r--r--conf/machine/include/zaurus-kernel.inc3
-rw-r--r--conf/machine/ion.conf2
-rw-r--r--conf/machine/neuros-osd2.conf1
-rw-r--r--conf/machine/om-gta01.conf2
-rw-r--r--conf/machine/om-gta02.conf4
-rw-r--r--conf/machine/sgh-i900.conf1
-rwxr-xr-xcontrib/angstrom/build-feeds.sh2
-rwxr-xr-xcontrib/angstrom/omap3-mkcard.sh52
-rw-r--r--recipes/aceofpenguins/aceofpenguins-launcher_0.4.bb (renamed from recipes/aceofpenguins/aceofpenguins-launcher_0.3.bb)0
-rw-r--r--recipes/angstrom/angstrom-led-config.bb2
-rw-r--r--recipes/angstrom/angstrom-led-config/cm-t35/leds2
-rw-r--r--recipes/apache2/apache2-native_2.2.14.bb3
-rw-r--r--recipes/apache2/apache2_2.2.14.bb4
-rw-r--r--recipes/asio/asio.inc14
-rw-r--r--recipes/asio/asio_1.1.1.bb19
-rw-r--r--recipes/asio/asio_1.4.1.bb3
-rw-r--r--recipes/binutils/binutils-2.20/binutils-2.16.91.0.6-objcopy-rename-errorcode.patch39
-rw-r--r--recipes/binutils/binutils-2.20/binutils-arm-pr7093.patch19
-rw-r--r--recipes/binutils/binutils-2.20/uclibc-segfault.patch23
-rw-r--r--recipes/binutils/binutils_2.20.bb3
-rw-r--r--recipes/boost/boost-14x.inc3
-rw-r--r--recipes/boost/boost_1.41.0.bb16
-rw-r--r--recipes/boost/files/1.41.0_uclibc.patch13
-rw-r--r--recipes/clutter/clutter-0.9_git.bb2
-rw-r--r--recipes/clutter/clutter-glx_svn.bb1
-rw-r--r--recipes/clutter/clutter.inc2
-rw-r--r--recipes/clutter/clutter_0.4svn.bb1
-rw-r--r--recipes/clutter/clutter_0.6svn.bb1
-rw-r--r--recipes/clutter/clutter_0.8+git.bb1
-rw-r--r--recipes/clutter/clutter_svn.bb2
-rw-r--r--recipes/comic-reader/comic-reader_svn.bb2
-rw-r--r--recipes/connman/connman_0.46.bb2
-rw-r--r--recipes/dvnixload/dvnixload_0.2.6.bb9
-rw-r--r--recipes/e17/e-tasks_svn.bb26
-rw-r--r--recipes/e17/e-wm/drop-illume-keyboards.patch17
-rw-r--r--recipes/e17/e-wm_svn.bb11
-rw-r--r--recipes/e17/elmdentica_svn.bb2
-rw-r--r--recipes/e17/eve_svn.bb2
-rw-r--r--recipes/e17/illume-keyboard-default_svn.bb43
-rw-r--r--recipes/e17/illume-keyboards-shr_git.bb78
-rw-r--r--recipes/efl1/illume-keyboard-arabic_git.bb12
-rw-r--r--recipes/efl1/illume-keyboard-browse_git.bb20
-rw-r--r--recipes/efl1/illume-keyboard-danish_git.bb12
-rw-r--r--recipes/efl1/illume-keyboard-default-alt_git.bb12
-rw-r--r--recipes/efl1/illume-keyboard-dutch_git.bb22
-rw-r--r--recipes/efl1/illume-keyboard-dvorak_git.bb12
-rw-r--r--recipes/efl1/illume-keyboard-french_git.bb11
-rw-r--r--recipes/efl1/illume-keyboard-german_git.bb12
-rw-r--r--recipes/efl1/illume-keyboard-hebrew_git.bb12
-rw-r--r--recipes/efl1/illume-keyboard-numeric-alt_git.bb19
-rw-r--r--recipes/efl1/illume-keyboard-russian-terminal_git.bb10
-rw-r--r--recipes/efl1/illume-keyboard-russian_git.bb12
-rw-r--r--recipes/efl1/illume-keyboard.inc14
-rw-r--r--recipes/eglibc/eglibc_2.10.bb4
-rw-r--r--recipes/eglibc/eglibc_2.11.bb4
-rw-r--r--recipes/eglibc/eglibc_svn.bb2
-rw-r--r--recipes/enotes/enotes_svn.bb2
-rw-r--r--recipes/epdfview/epdfview_0.1.7.bb15
-rw-r--r--recipes/epdfview/files/poppler8.diff10395
-rw-r--r--recipes/euphony/euphony_0.1.3.bb1
-rw-r--r--recipes/eyeos/eyeos_1.8.7.1.bb16
-rw-r--r--recipes/ez-ipupdate/ez-ipupdate_3.0.10.bb17
-rw-r--r--recipes/fbreader/fbreader-0.12.1/Makefile.patch22
-rw-r--r--recipes/fbreader/fbreader_0.12.1.bb35
-rw-r--r--recipes/gabriel/gabriel_svn.bb2
-rw-r--r--recipes/gcc/gcc-configure-cross.inc3
-rw-r--r--recipes/gcc/gcc-cross-initial_svn.bb2
-rw-r--r--recipes/gcc/gcc-cross-intermediate_svn.bb2
-rw-r--r--recipes/gcc/gcc-cross-sdk_svn.bb2
-rw-r--r--recipes/gcc/gcc-cross_svn.bb2
-rw-r--r--recipes/gcc/gcc-svn.inc2
-rw-r--r--recipes/glew/libglew_1.5.1.bb2
-rw-r--r--recipes/glib-2.0/glib-2.0-2.22.1/uclibc-res_query.patch36
-rw-r--r--recipes/glib-2.0/glib-2.0_2.22.1.bb3
-rw-r--r--recipes/gnome/zenity_2.28.0.bb11
-rw-r--r--recipes/gstreamer/gst-plugins.inc1
-rw-r--r--recipes/gtk-webcore/midori-0.2.1/retain-navigationbar-in-fullwindow.patch39
-rw-r--r--recipes/gtk-webcore/midori/config11
-rw-r--r--recipes/gtk-webcore/midori_0.2.1.bb6
-rw-r--r--recipes/icu/icu-3.6.inc2
-rw-r--r--recipes/icu/icu-native_3.6.bb2
-rw-r--r--recipes/icu/icu_3.6.bb2
-rw-r--r--recipes/intone-video/intone-video_svn.bb21
-rw-r--r--recipes/intone/intone_svn.bb12
-rw-r--r--recipes/iproute2/iproute2-2.6.29/use-cross-compiler.patch53
-rw-r--r--recipes/iproute2/iproute2.inc2
-rw-r--r--recipes/iproute2/iproute2_2.6.18.bb2
-rw-r--r--recipes/iproute2/iproute2_2.6.20.bb2
-rw-r--r--recipes/iproute2/iproute2_2.6.22.bb2
-rw-r--r--recipes/iproute2/iproute2_2.6.29.bb3
-rw-r--r--recipes/kexec-tools/files/dietlibc.patch (renamed from recipes/kexec/files/dietlibc.patch)0
-rw-r--r--recipes/kexec-tools/files/fix-arm-arch-detection.patch (renamed from recipes/kexec/files/fix-arm-arch-detection.patch)0
-rw-r--r--recipes/kexec-tools/files/kexec-arm-atags.patch (renamed from recipes/kexec/files/kexec-arm-atags.patch)0
-rw-r--r--recipes/kexec-tools/files/kexec-klibc.patch (renamed from recipes/kexec/files/kexec-klibc.patch)0
-rw-r--r--recipes/kexec-tools/files/kexec-static.patch (renamed from recipes/kexec/files/kexec-static.patch)0
-rw-r--r--recipes/kexec-tools/files/kexec-tools-2-arm-add-uImage.patch (renamed from recipes/kexec/files/kexec-tools-2-arm-add-uImage.patch)0
-rw-r--r--recipes/kexec-tools/files/kexec-tools-2-headers.patch (renamed from recipes/kexec/files/kexec-tools-2-headers.patch)0
-rw-r--r--recipes/kexec-tools/files/kexec-tools-2-klibc.patch (renamed from recipes/kexec/files/kexec-tools-2-klibc.patch)0
-rw-r--r--recipes/kexec-tools/files/kexec-tools-arm.patch (renamed from recipes/kexec/files/kexec-tools-arm.patch)0
-rw-r--r--recipes/kexec-tools/files/no-getline-no-fscanf.patch (renamed from recipes/kexec/files/no-getline-no-fscanf.patch)0
-rw-r--r--recipes/kexec-tools/kexec-tools-dietlibc_2.0.1.bb (renamed from recipes/kexec/kexec-tools-dietlibc_2.0.1.bb)4
-rw-r--r--recipes/kexec-tools/kexec-tools-klibc-static_1.101.bb (renamed from recipes/kexec/kexec-tools-klibc-static_1.101.bb)7
-rw-r--r--recipes/kexec-tools/kexec-tools-klibc-static_2.0.1.bb (renamed from recipes/kexec/kexec-tools-klibc-static_2.0.1.bb)7
-rw-r--r--recipes/kexec-tools/kexec-tools.inc (renamed from recipes/kexec/kexec-tools.inc)0
-rw-r--r--recipes/kexec-tools/kexec-tools2.inc (renamed from recipes/kexec/kexec-tools2.inc)0
-rw-r--r--recipes/kexec-tools/kexec-tools_1.101.bb (renamed from recipes/kexec/kexec-tools_1.101.bb)0
-rw-r--r--recipes/kexec-tools/kexec-tools_2.0.1.bb (renamed from recipes/kexec/kexec-tools_2.0.1.bb)0
-rw-r--r--recipes/kexecboot/initramfs-kexecboot-image.bb7
-rw-r--r--recipes/kexecboot/kexecboot.inc10
-rw-r--r--recipes/kexecboot/kexecboot_git.bb4
-rw-r--r--recipes/kexecboot/linux-kexecboot-2.6.32/ARM-Add-support-for-LZMA-compressed-kernel-images.patch51
-rw-r--r--recipes/kexecboot/linux-kexecboot-2.6.32/c7x0/defconfig1176
-rw-r--r--recipes/kexecboot/linux-kexecboot-2.6.32/v3-1-4-Add-support-for-LZO-compressed-kernels.patch321
-rw-r--r--recipes/kexecboot/linux-kexecboot-2.6.32/v3-2-4-Add-support-for-LZO-compressed-kernels-for-ARM.patch298
-rw-r--r--recipes/kexecboot/linux-kexecboot-2.6.32/v3-3-4-Add-support-for-LZO-compressed-kernels-on-x86.patch54
-rw-r--r--recipes/kexecboot/linux-kexecboot-2.6.32/v3-4-4-Add-LZO-compression-support-for-initramfs-and-old-style-initrd.patch114
-rw-r--r--recipes/kexecboot/linux-kexecboot_2.6.32.bb37
-rw-r--r--recipes/klibc/klibc-1.5.15/isystem.patch13
-rw-r--r--recipes/klibc/klibc_1.5.15.bb2
-rw-r--r--recipes/klibc/klibc_1.5.15.inc3
-rw-r--r--recipes/libc-client/libc-client_2007b.bb (renamed from recipes/libc-client/libc-client_2007a1.bb)15
-rw-r--r--recipes/libcli/files/autotools.patch88
-rw-r--r--recipes/libcli/libcli_1.9.4.bb11
-rw-r--r--recipes/libdessert/files/0001-big-fat-autotools-patch.patch87483
-rw-r--r--recipes/libdessert/libdessert_0.86.14.bb15
-rw-r--r--recipes/libpcre/libpcre_7.6.bb9
-rw-r--r--recipes/libqpe/libqpe-opie.inc3
-rw-r--r--recipes/libqpe/libqpe-opie_1.2.2.bb2
-rw-r--r--recipes/libqpe/libqpe-opie_1.2.3.bb2
-rw-r--r--recipes/libqpe/libqpe-opie_1.2.4.bb2
-rw-r--r--recipes/libqpe/libqpe-opie_cvs.bb2
-rw-r--r--recipes/libsdl/libsdl-directfb_1.2.11.bb2
-rw-r--r--recipes/libsdl/libsdl-directfb_1.2.9.bb2
-rw-r--r--recipes/libsdl/libsdl-qpe_1.2.9.bb2
-rw-r--r--recipes/libsdl/libsdl-x11_1.2.11.bb2
-rw-r--r--recipes/libsdl/libsdl-x11_1.2.14.bb2
-rw-r--r--recipes/libsdl/libsdl.inc2
-rw-r--r--recipes/linphone/files/b64_assert.patch11
-rw-r--r--recipes/linphone/linphone_3.1.0.bb2
-rw-r--r--recipes/linux-libc-headers/linux-libc-headers-2.6.32/0001-implement-TIF_RESTORE_SIGMASK-support-and-enable-the.patch429
-rw-r--r--recipes/linux-libc-headers/linux-libc-headers_2.6.32.bb50
-rw-r--r--recipes/linux/linux-2.6.20/0001-kbuild-include-limits.h-in-sumversion.c-for-PATH_MAX.patch29
-rw-r--r--recipes/linux/linux-2.6.22/mx31moboard/defconfig (renamed from recipes/linux/linux-2.6.22.6/mx31moboard/defconfig)0
-rw-r--r--recipes/linux/linux-2.6.23/em-x270/01-prevent_loop_timespec_add_ns.patch19
-rw-r--r--recipes/linux/linux-2.6.23/sched-cfs-v2.6.23.12-v24.1.patch8567
-rw-r--r--recipes/linux/linux-2.6.23/time.h.patch (renamed from recipes/linux/linux-2.6.24/time.h.patch)0
-rw-r--r--recipes/linux/linux-2.6.24/hipox/defconfig14
-rw-r--r--recipes/linux/linux-2.6.25/ronetix-pm9261/defconfig (renamed from recipes/linux/linux-2.6.25.20/ronetix-pm9261/defconfig)0
-rw-r--r--recipes/linux/linux-2.6.25/ronetix-pm9263/defconfig (renamed from recipes/linux/linux-2.6.25.20/ronetix-pm9263/defconfig)0
-rw-r--r--recipes/linux/linux-2.6.29/micro2440/0005-920T-Temp-fix-for-the-40-relocation-binutils-pro.patch49
-rw-r--r--recipes/linux/linux-2.6.29/micro2440/0012-GRO-Disable-GRO-on-legacy-netif_rx-path.patch54
-rw-r--r--recipes/linux/linux-davinci_git.bb43
-rw-r--r--recipes/linux/linux-h1940_2.6.14-h1940.bb4
-rw-r--r--recipes/linux/linux-handhelds-2.6_cvs.bb8
-rw-r--r--recipes/linux/linux-omap-2.6.32/beagleboard/defconfig102
-rw-r--r--recipes/linux/linux-omap-2.6.32/cm-t35/0001-OMAP-DSS2-add-Toppoly-TDO35S-panel.patch159
-rw-r--r--recipes/linux/linux-omap-2.6.32/cm-t35/0001-backlight-tdo24m-ensure-chip-select-changes-between-.patch30
-rw-r--r--recipes/linux/linux-omap-2.6.32/cm-t35/0001-omap3-cm-t35-add-mux-initialization.patch153
-rw-r--r--recipes/linux/linux-omap-2.6.32/cm-t35/0002-omap3-cm-t35-add-DSS2-display-support.patch307
-rw-r--r--recipes/linux/linux-omap-2.6.32/cm-t35/0003-omap3-cm-t35-update-defconfig-for-DSS2.patch145
-rw-r--r--recipes/linux/linux-omap-2.6.32/cm-t35/0004-omap3-cm-t35-add-cm-t35-mux-configs.patch427
-rw-r--r--recipes/linux/linux-omap-2.6.32/cm-t35/0006-omap3-cm-t35-update-defconfig.patch87
-rw-r--r--recipes/linux/linux-omap-2.6.32/cm-t35/defconfig1823
-rw-r--r--recipes/linux/linux-omap-2.6.32/sctp-fix.patch47
-rw-r--r--recipes/linux/linux-omap-zoomsync_2.6.31.bb2
-rw-r--r--recipes/linux/linux-omap_2.6.32.bb13
-rw-r--r--recipes/linux/linux-sgh-i900/sgh-i900-support.patch13031
-rw-r--r--recipes/linux/linux-sgh-i900/sgh_i900_defconfig414
-rw-r--r--recipes/linux/linux-sgh-i900/wm97xx-ts-fix.patch130
-rw-r--r--recipes/linux/linux-sgh-i900_2.6.32.bb (renamed from recipes/linux/linux-sgh-i900_2.6.29.bb)10
-rw-r--r--recipes/linux/linux_2.6.14.bb4
-rw-r--r--recipes/linux/linux_2.6.18.bb3
-rw-r--r--recipes/linux/linux_2.6.20.bb2
-rw-r--r--recipes/linux/linux_2.6.21+2.6.22-rc1.bb2
-rw-r--r--recipes/linux/linux_2.6.21.bb3
-rw-r--r--recipes/linux/linux_2.6.22+2.6.23-rc3.bb2
-rw-r--r--recipes/linux/linux_2.6.22+2.6.23-rc5.bb2
-rw-r--r--recipes/linux/linux_2.6.22.6.bb31
-rw-r--r--recipes/linux/linux_2.6.22.bb6
-rw-r--r--recipes/linux/linux_2.6.23+2.6.24-rc5.bb2
-rw-r--r--recipes/linux/linux_2.6.23+2.6.24-rc6.bb2
-rw-r--r--recipes/linux/linux_2.6.23.bb15
-rw-r--r--recipes/linux/linux_2.6.24.bb4
-rw-r--r--recipes/linux/linux_2.6.25.20.bb33
-rw-r--r--recipes/linux/linux_2.6.25.bb17
-rw-r--r--recipes/linux/linux_2.6.26.bb6
-rw-r--r--recipes/linux/linux_2.6.27.bb3
-rw-r--r--recipes/linux/linux_2.6.28.bb3
-rw-r--r--recipes/linux/linux_2.6.29+2.6.30-rc5.bb2
-rw-r--r--recipes/linux/linux_2.6.29.bb5
-rw-r--r--recipes/linux/linux_2.6.30.bb4
-rw-r--r--recipes/linux/linux_2.6.31.bb4
-rw-r--r--recipes/linux/linux_2.6.32.bb23
-rw-r--r--recipes/matchbox2/matchbox2/matchbox-session-2.in2
-rw-r--r--recipes/matchbox2/matchbox2_2.0.bb2
-rw-r--r--recipes/mesa/mesa-common-old.inc5
-rw-r--r--recipes/mesa/mesa-dri_6.5.2.bb2
-rw-r--r--recipes/mesa/mesa-dri_7.0.3.bb2
-rw-r--r--recipes/mesa/mesa-dri_7.6.bb2
-rw-r--r--recipes/mesa/mesa-dri_git.bb3
-rw-r--r--recipes/mesa/mesa-xlib_7.2.bb3
-rw-r--r--recipes/mesa/mesa-xlib_7.4.bb20
-rw-r--r--recipes/mesa/mesa_6.5.2.bb4
-rw-r--r--recipes/mesa/mesa_7.0.2.bb2
-rw-r--r--recipes/moblin/librest_git.bb2
-rw-r--r--recipes/mpc/mpc-native_0.8.1.bb3
-rw-r--r--recipes/mpc/mpc.inc6
-rw-r--r--recipes/mpc/mpc_0.8.1.bb10
-rw-r--r--recipes/mythtv/mythtv_0.22.bb34
-rw-r--r--recipes/navit/files/navit.xml-so.patch30
-rw-r--r--recipes/navit/files/osd.xml57
-rw-r--r--recipes/navit/files/shr/osd.xml44
-rw-r--r--recipes/navit/navit.inc38
-rw-r--r--recipes/navit/navit_svn.bb56
-rw-r--r--recipes/networkmanager/networkmanager_0.7.1.997.bb6
-rw-r--r--recipes/obexpush/obexpush_1.0.0.bb5
-rw-r--r--recipes/openmax/libomxil-bellagio_0.9.2.bb17
-rw-r--r--recipes/openmoko-3rdparty/epiano_0.3.1.bb2
-rw-r--r--recipes/openmoko-3rdparty/guitartune_svn.bb28
-rw-r--r--recipes/openmoko-projects/diversity-radar_svn.bb2
-rw-r--r--recipes/openmoko-projects/enlazar_svn.bb2
-rw-r--r--recipes/openmoko-projects/om-locations_git.bb2
-rw-r--r--recipes/openmoko-projects/pyefl-sudoku_svn.bb2
-rw-r--r--recipes/openmoko-system/ompower_svn.bb2
-rw-r--r--recipes/openmoko2/openmoko-alsa-scenarios.bb1
-rw-r--r--recipes/opkg/opkg-native_svn.bb1
-rw-r--r--recipes/opkg/opkg-nogpg-nocurl-slugos_svn.bb62
-rw-r--r--recipes/opkg/opkg.inc3
-rw-r--r--recipes/opkg/opkg/dont-install-update-alternatives.patch6
-rw-r--r--recipes/opkg/opkg_svn.bb2
-rw-r--r--recipes/php/php-5.2.11/acinclude-xml2-config.patch18
-rw-r--r--recipes/php/php-5.2.11/imap-fix-autofoo.patch41
-rw-r--r--recipes/php/php-5.2.11/pear-makefile.patch13
-rw-r--r--recipes/php/php_5.2.11.bb94
-rw-r--r--recipes/php/php_5.2.6.bb5
-rw-r--r--recipes/poptop/poptop_1.3.4.bb2
-rw-r--r--recipes/powervr-drivers/libgles-omap3.inc5
-rw-r--r--recipes/powervr-drivers/omap3-sgx-modules_1.4.14.2514.bb4
-rw-r--r--recipes/prelink/prelink_20090925.bb48
-rw-r--r--recipes/qt4/qt-4.6.0.inc46
-rw-r--r--recipes/qt4/qt4-embedded-4.6.0/0010-no-simpledecoration-example.patch12
-rw-r--r--recipes/qt4/qt4-embedded-4.6.0/linux.conf2
-rw-r--r--recipes/qt4/qt4-embedded-gles/linux.conf63
-rw-r--r--recipes/qt4/qt4-embedded-gles_4.6.0.bb13
-rw-r--r--recipes/qt4/qt4-embedded_4.6.0.bb34
-rw-r--r--recipes/qt4/qt4-tools-sdk_4.6.0.bb74
-rw-r--r--recipes/qt4/qt4-x11-free-4.6.0/0010-no-simpledecoration-example.patch11
-rw-r--r--recipes/qt4/qt4-x11-free-4.6.0/linux.conf2
-rw-r--r--recipes/qt4/qt4-x11-free-gles/linux.conf60
-rw-r--r--recipes/qt4/qt4-x11-free-gles_4.6.0.bb17
-rw-r--r--recipes/qt4/qt4-x11-free_4.6.0.bb36
-rw-r--r--recipes/qt4/qt4.inc59
-rw-r--r--recipes/qt4/wolfenqt-e_git.bb5
-rw-r--r--recipes/qt4/wolfenqt.inc19
-rw-r--r--recipes/qt4/wolfenqt_git.bb5
-rw-r--r--recipes/rp-pppoe/rp-pppoe_3.8.bb2
-rw-r--r--recipes/sg3-utils/sg3-utils_1.24.bb4
-rw-r--r--recipes/shr/e-wm-config-illume-shr_git.bb11
-rw-r--r--recipes/shr/initscripts-shr/palmpre/usb-gadget.sh10
-rw-r--r--recipes/shr/initscripts-shr_0.0.1.bb8
-rw-r--r--recipes/shr/libframeworkd-phonegui-efl2_git.bb2
-rw-r--r--recipes/shr/libframeworkd-phonegui-efl_git.bb2
-rw-r--r--recipes/shr/libphone-ui-shr_git.bb2
-rw-r--r--recipes/shr/phonefsod_git.bb3
-rw-r--r--recipes/shr/phoneuid_git.bb6
-rw-r--r--recipes/shr/shr-config_git.bb2
-rw-r--r--recipes/shr/shr-launcher_svn.bb25
-rw-r--r--recipes/shr/shr-wizard_git.bb2
-rw-r--r--recipes/sysfsutils/sysfsutils.inc18
-rw-r--r--recipes/sysfsutils/sysfsutils_1.3.0.bb23
-rw-r--r--recipes/sysfsutils/sysfsutils_2.0.0.bb25
-rw-r--r--recipes/sysfsutils/sysfsutils_2.1.0.bb24
-rw-r--r--recipes/tasks/task-boot.bb2
-rw-r--r--recipes/tasks/task-shr-feed.bb5
-rw-r--r--recipes/tasks/task-shr-minimal.bb6
-rw-r--r--recipes/tasks/task-slugos.bb4
-rw-r--r--recipes/tcltk/tcl_8.4.19.bb4
-rw-r--r--recipes/ti/bitblit_svn.bb12
-rw-r--r--[-rwxr-xr-x]recipes/ti/files/Makefile-dsplink-dsp0
-rw-r--r--[-rwxr-xr-x]recipes/ti/files/Makefile-dsplink-gpp0
-rw-r--r--recipes/ti/files/dm355mm.patch498
-rw-r--r--recipes/ti/files/loadmodules-ti-dmai-dm365_al.sh14
-rw-r--r--[-rwxr-xr-x]recipes/ti/files/mapdmaqbin7680 -> 7680 bytes
-rw-r--r--recipes/ti/files/mp3dec_cs1omap3530.patch41
-rw-r--r--[-rwxr-xr-x]recipes/ti/files/unloadmodules-ti-dmai-apps.sh0
-rw-r--r--recipes/ti/gstreamer-ti/gstreamer-ti-dm355-rc.sh61
-rw-r--r--recipes/ti/gstreamer-ti/gstreamer-ti-dm6446-rc.sh71
-rw-r--r--recipes/ti/gstreamer-ti/gstreamer-ti-omap3530-rc.sh10
-rw-r--r--recipes/ti/gstreamer-ti_svn.bb103
-rw-r--r--recipes/ti/ti-cgt6x-native_6.1.9.bb4
-rw-r--r--recipes/ti/ti-cgt6x.inc39
-rw-r--r--recipes/ti/ti-cmem-module_2.23.1.bb68
-rw-r--r--recipes/ti/ti-cmem-module_2.23.bb51
-rw-r--r--recipes/ti/ti-cmem-module_2.24.01.bb66
-rw-r--r--recipes/ti/ti-codec-combo-dm355.inc38
-rw-r--r--recipes/ti/ti-codec-combo-dm355_1.13.bb28
-rw-r--r--recipes/ti/ti-codec-combo-dm6446.inc39
-rw-r--r--recipes/ti/ti-codec-combo-omap3530.inc46
-rw-r--r--recipes/ti/ti-codec-combo-omap3530_3.16.1.bb51
-rw-r--r--recipes/ti/ti-codec-combos_3.16.bb90
-rw-r--r--recipes/ti/ti-codec-engine.inc27
-rw-r--r--recipes/ti/ti-codec-engine_2.21.bb278
-rw-r--r--recipes/ti/ti-codec-engine_2.23.1.bb32
-rw-r--r--recipes/ti/ti-codec-engine_2.24.01.bb66
-rw-r--r--recipes/ti/ti-codec-engine_2.25.01.bb7
-rw-r--r--recipes/ti/ti-codecs-dm355.inc37
-rw-r--r--recipes/ti/ti-codecs-dm355_1.13.bb6
-rw-r--r--recipes/ti/ti-codecs-dm365.inc26
-rw-r--r--recipes/ti/ti-codecs-dm365_1.0.6.bb6
-rw-r--r--recipes/ti/ti-codecs-dm6446_2.05.bb (renamed from recipes/ti/ti-codec-combo-dm6446_2.05.bb)6
-rw-r--r--recipes/ti/ti-codecs-omap3530_1.01.bb (renamed from recipes/ti/ti-cs1-omap3530_1.0.1.bb)8
-rw-r--r--recipes/ti/ti-codecs-omapl137_1.0.bb (renamed from recipes/ti/ti-codec-combo-omapl137_1.0.bb)2
-rw-r--r--recipes/ti/ti-cs1-omap3530.inc41
-rw-r--r--recipes/ti/ti-dm355mm-module_1.13.bb33
-rw-r--r--recipes/ti/ti-dm365mm-module.inc28
-rw-r--r--recipes/ti/ti-dm365mm-module_1.0.1.bb9
-rw-r--r--recipes/ti/ti-dmai.inc18
-rw-r--r--recipes/ti/ti-dmai_svn.bb47
-rw-r--r--recipes/ti/ti-dspbios-native_5.33.02.bb2
-rw-r--r--recipes/ti/ti-dspbios.inc38
-rw-r--r--recipes/ti/ti-dsplink-module_1.61.3.bb40
-rw-r--r--recipes/ti/ti-dvsdk-demos.inc41
-rw-r--r--recipes/ti/ti-dvsdk-demos_3.10.00.00.bb5
-rw-r--r--recipes/ti/ti-eula-unpack.inc62
-rw-r--r--recipes/ti/ti-framework-components.inc23
-rw-r--r--recipes/ti/ti-framework-components_2.25.00.04.bb5
-rw-r--r--recipes/ti/ti-linuxutils.inc82
-rw-r--r--recipes/ti/ti-linuxutils_2.25.01.06.bb3
-rw-r--r--recipes/ti/ti-lpm-module_2.23.1.bb65
-rw-r--r--recipes/ti/ti-lpm-module_2.24.01.bb45
-rw-r--r--recipes/ti/ti-multimedia-common.inc55
-rw-r--r--recipes/ti/ti-paths.inc45
-rw-r--r--recipes/ti/ti-sdma-module_2.23.1.bb56
-rw-r--r--recipes/ti/ti-sdma-module_2.24.01.bb54
-rw-r--r--recipes/ti/ti-xdais-native_6.23.bb13
-rw-r--r--recipes/ti/ti-xdais.inc10
-rw-r--r--recipes/ti/ti-xdctools-native_3.10.03.bb21
-rw-r--r--recipes/ti/ti-xdctools-native_3.15.01.59.bb20
-rw-r--r--recipes/ti/ti-xdctools.inc38
-rw-r--r--recipes/u-boot/u-boot-git/cm-t35/cm-t35.patch1487
-rw-r--r--recipes/u-boot/u-boot-mkimage-native_1.3.2.bb2
-rw-r--r--recipes/u-boot/u-boot_git.bb2
-rw-r--r--recipes/uclibc/uclibc-nptl/installfix.patch13
-rw-r--r--recipes/uclibc/uclibc-nptl/uClibc.distro1
-rw-r--r--recipes/uclibc/uclibc.inc3
-rw-r--r--recipes/uclibc/uclibc_nptl.bb3
-rw-r--r--recipes/udev/udev-092/mtd-exclude-persistent.patch17
-rw-r--r--recipes/udev/udev-100/mtd-exclude-persistent.patch17
-rw-r--r--recipes/udev/udev-118/mtd-exclude-persistent.patch13
-rw-r--r--recipes/udev/udev-124/mtd-exclude-persistent.patch13
-rw-r--r--recipes/udev/udev_092.bb3
-rw-r--r--recipes/udev/udev_100.bb3
-rw-r--r--recipes/udev/udev_118.bb3
-rw-r--r--recipes/udev/udev_124.bb3
-rw-r--r--recipes/wesnoth/wesnoth_1.6.5.bb172
-rw-r--r--recipes/xorg-app/listres_1.0.2.bb5
-rw-r--r--recipes/xorg-app/xdriinfo_1.0.1.bb1
-rw-r--r--recipes/xorg-app/xdriinfo_1.0.2.bb1
-rw-r--r--recipes/xorg-app/xlogo_1.0.2.bb5
-rw-r--r--recipes/xorg-driver/xf86-input-evdev_2.3.0.bb1
-rw-r--r--recipes/xorg-driver/xf86-input-evdev_2.3.2.bb4
-rw-r--r--recipes/xorg-driver/xf86-input-synaptics_1.2.1.bb4
-rw-r--r--recipes/xorg-driver/xf86-input-tslib/dontfloodevents006.patch22
-rw-r--r--recipes/xorg-driver/xf86-input-tslib_0.0.6.bb4
-rw-r--r--recipes/xorg-driver/xf86-video-nv_2.1.16.bb4
-rw-r--r--recipes/xorg-lib/liblbxutil/mkg3states-1.1.patch55
-rw-r--r--recipes/xorg-lib/liblbxutil_1.1.0.bb10
-rw-r--r--recipes/xorg-lib/libpciaccess_0.11.0.bb5
-rw-r--r--recipes/xorg-util/util-macros-1.4.1/malloc_zero_returns_null.patch27
-rw-r--r--recipes/xorg-util/util-macros-native_1.4.1.bb7
-rw-r--r--recipes/xorg-util/util-macros_1.4.1.bb8
-rw-r--r--recipes/xorg-xserver/xorg-xserver-common.inc2
-rw-r--r--recipes/xorg-xserver/xserver-kdrive-1.4.0.90/vm86_masks.patch20
-rw-r--r--recipes/xorg-xserver/xserver-kdrive_1.4.0.90.bb3
-rw-r--r--recipes/xorg-xserver/xserver-xorg-conf/cm-t35/xorg.conf29
-rw-r--r--recipes/xorg-xserver/xserver-xorg-conf_0.1.bb2
-rw-r--r--recipes/xscreensaver/xscreensaver.inc2
-rw-r--r--recipes/xscreensaver/xscreensaver_4.16.bb2
-rw-r--r--recipes/xscreensaver/xscreensaver_4.22.bb2
-rw-r--r--recipes/xscreensaver/xscreensaver_5.07.bb2
-rw-r--r--site/arm-common3
-rw-r--r--site/ix86-common5
-rw-r--r--site/mips-linux2
-rw-r--r--site/mipsel-linux2
-rw-r--r--site/powerpc-common2
-rw-r--r--site/x86_64-linux24
425 files changed, 120751 insertions, 13419 deletions
diff --git a/classes/openmoko2.bbclass b/classes/openmoko2.bbclass
index f553d03a51..233c721ff7 100644
--- a/classes/openmoko2.bbclass
+++ b/classes/openmoko2.bbclass
@@ -5,17 +5,11 @@ OPENMOKO_RELEASE ?= "OM-2007.2"
OPENMOKO_MIRROR ?= "svn://svn.openmoko.org/trunk"
def openmoko_two_get_license(d):
- if bb.data.getVar('SECTION', d, 1).find("/") != -1 :
- openmoko, section = bb.data.getVar('SECTION', d, 1).split("/")
- else :
- section = bb.data.getVar('SECTION', d, 1)
+ openmoko, section = bb.data.getVar('SECTION', d, 1).split("/")
return "LGPL GPL".split()[section != "libs"]
def openmoko_two_get_subdir(d):
- if bb.data.getVar('SECTION', d, 1).find("/") != -1 :
- openmoko, section = bb.data.getVar('SECTION', d, 1).split("/")
- else :
- section = bb.data.getVar('SECTION', d, 1)
+ openmoko, section = bb.data.getVar('SECTION', d, 1).split("/")
if section == 'base': return ""
elif section == 'libs': return "libraries"
elif section in 'apps tools pim'.split(): return "applications"
@@ -32,3 +26,6 @@ SRC_URI := "${OPENMOKO_MIRROR}/src/target/${OPENMOKO_RELEASE}/${SUBDIR};module=$
S = "${WORKDIR}/${PN}"
FILES_${PN} += "${datadir}/icons"
+
+SVNREV = "r${SRCREV}"
+#SVNREV = "${SRCDATE}"
diff --git a/classes/package.bbclass b/classes/package.bbclass
index 4196135710..062f782129 100644
--- a/classes/package.bbclass
+++ b/classes/package.bbclass
@@ -5,6 +5,12 @@
PKGD = "${WORKDIR}/package"
PKGDEST = "${WORKDIR}/packages-split"
+PKGV ?= "${PV}"
+PKGR ?= "${PR}${DISTRO_PR}"
+
+EXTENDPKGEVER = "${@['','${PKGE\x7d:'][bb.data.getVar('PKGE',d,1) > 0]}"
+EXTENDPKGV ?= "${EXTENDPKGEVER}${PKGV}-${PKGR}"
+
def legitimize_package_name(s):
"""
Make sure package names are legitimate strings
@@ -489,7 +495,7 @@ python populate_packages () {
for pkg in package_list:
rdepends = explode_deps(bb.data.getVar('RDEPENDS_' + pkg, d, 0) or bb.data.getVar('RDEPENDS', d, 0) or "")
- remstr = "${PN} (= ${EXTENDPV})"
+ remstr = "${PN} (= ${EXTENDPKGV})"
if main_is_empty and remstr in rdepends:
rdepends.remove(remstr)
for l in dangling_links[pkg]:
@@ -551,6 +557,8 @@ python emit_pkgdata() {
write_if_exists(sf, pkg, 'PN')
write_if_exists(sf, pkg, 'PV')
write_if_exists(sf, pkg, 'PR')
+ write_if_exists(sf, pkg, 'PKGV')
+ write_if_exists(sf, pkg, 'PKGR')
write_if_exists(sf, pkg, 'DESCRIPTION')
write_if_exists(sf, pkg, 'RDEPENDS')
write_if_exists(sf, pkg, 'RPROVIDES')
@@ -611,9 +619,9 @@ python package_do_shlibs() {
workdir = bb.data.getVar('WORKDIR', d, True)
- ver = bb.data.getVar('PV', d, True)
+ ver = bb.data.getVar('PKGV', d, True)
if not ver:
- bb.error("PV not defined")
+ bb.error("PKGV not defined")
return
pkgdest = bb.data.getVar('PKGDEST', d, True)
@@ -641,7 +649,9 @@ python package_do_shlibs() {
needs_ldconfig = False
bb.debug(2, "calculating shlib provides for %s" % pkg)
- pkgver = bb.data.getVar('PV_' + pkg, d, True)
+ pkgver = bb.data.getVar('PKGV_' + pkg, d, True)
+ if not pkgver:
+ pkgver = bb.data.getVar('PV_' + pkg, d, True)
if not pkgver:
pkgver = ver
diff --git a/classes/package_ipk.bbclass b/classes/package_ipk.bbclass
index 3582195393..420c892f10 100644
--- a/classes/package_ipk.bbclass
+++ b/classes/package_ipk.bbclass
@@ -208,9 +208,9 @@ python do_package_ipk () {
fields = []
pe = bb.data.getVar('PE', d, 1)
if pe and int(pe) > 0:
- fields.append(["Version: %s:%s-%s%s\n", ['PE', 'PV', 'PR', 'DISTRO_PR']])
+ fields.append(["Version: %s:%s-%s\n", ['PE', 'PKGV', 'PKGR']])
else:
- fields.append(["Version: %s-%s%s\n", ['PV', 'PR', 'DISTRO_PR']])
+ fields.append(["Version: %s-%s\n", ['PKGV', 'PKGR']])
fields.append(["Description: %s\n", ['DESCRIPTION']])
fields.append(["Section: %s\n", ['SECTION']])
fields.append(["Priority: %s\n", ['PRIORITY']])
diff --git a/conf/bitbake.conf b/conf/bitbake.conf
index b69b6757db..48e098db44 100644
--- a/conf/bitbake.conf
+++ b/conf/bitbake.conf
@@ -688,6 +688,7 @@ include conf/documentation.conf
require conf/sanity.conf
require conf/abi_version.conf
require conf/enterprise.conf
+require conf/compatibility-providers.conf
##################################################################
# Weak variables (usually to retain backwards compatibility)
diff --git a/conf/checksums.ini b/conf/checksums.ini
index e77f316c9d..1f76481579 100644
--- a/conf/checksums.ini
+++ b/conf/checksums.ini
@@ -1,7 +1,3 @@
-[http://downloads.sourceforge.net/wxwindows/wxWidgets-2.8.10.tar.bz2]
-md5=0461c2085ac1ad7e648aa84c4ba51dd1
-sha256=b84617a2fd219153a6df95dc7f4aa1ba9c07af5859a3d00fc23f9aaed2a1e3d5
-
[http://www.directfb.org/downloads/Extras/++DFB-0.9.25.tar.gz]
md5=c6a2705f6210d8ede50a947b375f1c0b
sha256=b3dbf01563dd60d63cff543ea8cd0c885381e78ecbbab8ff176e46df3f198a88
@@ -62,6 +58,14 @@ sha256=8930ebfdc8a606d8cb26f073d4700460c3289fb79e943e12948329e17336ca47
md5=779472ae02c2a99937879a8d1d4b9b25
sha256=cfb98e7635c985733dba0fb9c3cadee22ab70fb3b0db7eac8eacaebc65c92a59
+[http://maxim.org.za/AT91RM9200/2.6/2.6.22-rc1-at91.patch.gz]
+md5=2453815aba40e9487d24822d769fbab1
+sha256=95cec79fb6db261760421c1bb9df8a0f4955e0ee90e08cb9930a4c7a2482c1a6
+
+[http://maxim.org.za/AT91RM9200/2.6/2.6.23-rc3-at91.patch.gz]
+md5=822f2f85b658fb1f39b8a20fab781cfc
+sha256=e8ead43fa562cc76ac34d0d4841fd1e4f4964a830403801433e34961d1ce0e84
+
[http://maxim.org.za/AT91RM9200/2.6/2.6.25-at91.patch.gz]
md5=4469d6336f9659f1725fedd4a52261ad
sha256=7a960180e7873b1bdb522e76b0423b5c2c1b8efe1d30d7ca80c41eb97d822b2d
@@ -1546,9 +1550,9 @@ sha256=68b1d0acd1a6e17d91412635cd4f65ba58d293e62a01475a43f3712c49a46e7d
md5=03e5e7ab8ac3acc59661c6e9c09089b7
sha256=fcda8bca508490bea642c83fcf718565bf4ed4c50f2d7b34761da61fe2e6bc9d
-[http://downloads.vdm-design.de/aceofpenguins-launcher-0.3.tar.gz]
-md5=2fe7dcdbbdbf3b2821f627e02c406caa
-sha256=13013cd19cb165825f4ef5cc790b0e103705f68ece470fd12012db97e3e60839
+[http://downloads.vdm-design.de/aceofpenguins-launcher-0.4.tar.gz]
+md5=40f19a26cbfa35de8346efe582b5d984
+sha256=ea09581b3a31e3409968876461da3e384dcb0000abbb0060ae14e4fccb4994e1
[http://downloads.sourceforge.net/acpid/acpid-1.0.10.tar.gz]
md5=61156ef32015c56dc0f2e3317f4ae09e
@@ -2082,6 +2086,10 @@ sha256=f6277da4651bceaeab442f864b735a5d7b0998d55f9209e37cf18f7464320e3e
md5=3e6bcedc549cb4c014227f882969db5c
sha256=f6277da4651bceaeab442f864b735a5d7b0998d55f9209e37cf18f7464320e3e
+[http://downloads.sourceforge.net/asio/asio-1.4.1.tar.bz2]
+md5=1879b246f9217d64bd3126aa16488bc2
+sha256=aeb5c997940e6afd399c62316f03f480557f2b721354adff065d230183ff2782
+
[http://802.11ninja.net/~jwright/code/asleap-2.1.tgz]
md5=eb74eca847fa71ba89a965548526f7ac
sha256=ba77747cfb107d31cf4ae2eb27839cfa196c0fca08c98465256a4820b9d85d29
@@ -5782,6 +5790,10 @@ sha256=6d851f4117002d3523354b70c3f9be4abe5325b084ff54d01ac6daa5ce9a5944
md5=cc101da3b436607ee2265b5af5001484
sha256=ab7c305be32708c4ede670e13783b718e6a28e35b5495e6c42c31c35a8b512a6
+[http://www.hugovil.com/repository/dvnixload-0.2.6.tar.gz]
+md5=33308f47405c0e96a8248c7b1229dee5
+sha256=5b76e9cb0ee843208c17053315926e0e168db8a89fe960655a0d0f4871e2b9da
+
[http://www.threekong.com/download/dweba/dweba-1.0.0-pre14.tar.gz]
md5=6f0bd0bcda35c6a96cc3853f16ba82d4
sha256=ea32ca58b6500d9061177da23ef03f918ef0c5bbbdd082a843f4834cef9c4957
@@ -6530,6 +6542,10 @@ sha256=14fbf10de1fc3b58cfeb00bcfebf54e0182cc7cc346c4bbc90248cfc61add462
md5=987956757c3707ba0e62ce2cd133011b
sha256=7754930742d3c3cc2a05af38263ba58ba416b7359f8a0c598ae0f7377277d3b3
+[http://downloads.sourceforge.net/eyeos/eyeOS_1.8.7.1.zip]
+md5=020b1ffd9edc3fe7af25b0d6cca430ae
+sha256=660cd2de4fbd511b767839cb5caa734ebfa9cc5935aa58604f764d7e295768d4
+
[http://www.ez-ipupdate.com/dist/ez-ipupdate-3.0.10.tar.gz]
md5=6505c9d18ef6b5ce13fe2a668eb5724b
sha256=f7ff9bf972139b303616018a6937aa4c6df4e93c935ffd004b30845e2ad41ea6
@@ -6726,6 +6742,10 @@ sha256=e4db7a6305ffe2333fae08c940ded8f7e5b02999e0917b0ea4ef3764c80f58c8
md5=145f4d2ba24c54288bad2d66ddd2baf2
sha256=d7bcc7cafb1c78f00b380dc2facdb82c5a2fb1475e1ddfc8e5d44a2b855cec1a
+[http://www.fbreader.org/fbreader-sources-0.12.1.tgz]
+md5=7236d094a91f26d19a3cfd3db8fcf946
+sha256=02a6a143abf3b5ab875392acef8d67f5cc991ea364e3bd250628e6a31b1f9923
+
[http://only.mawhrin.net/fbreader/obsolete/fbreader-sources-0.7.3d.tgz]
md5=705a89bb03860fb312a7afa25db0310e
sha256=ec9f93968147526a9b2dd17e31a6d2795356b2eeed309f796f655b37b98abd83
@@ -7682,6 +7702,10 @@ sha256=44b7e18ba9ae5667dd64c89f7b04627bda5807a3a90255a125702d63c0c4ee17
md5=d5e8be59e307cef76bc479e1684df705
sha256=9f3b3ed7c9fffccefefa9af432eee7244a65592118851f75b5897814cb79b86f
+[http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/fc/2_25_00_04/exports/framework_components_2_25_00_04.tar.gz]
+md5=11410b5cf4142ae415b683af0e9929b5
+sha256=161432f5cf184f96de290f807a4a6fddf11f2612d5b2efd91f8187c0ac612a40
+
[http://downloads.sourceforge.net/free42/free42.tgz]
md5=1fc21e04b3b77150846027dc7cb5210d
sha256=9d348a9d2d5bf8eabc7e7bb6f0907e611403e4abe6dc1e11b1b2ad1118b3088a
@@ -7886,6 +7910,10 @@ sha256=fa1b97a6d9d2f7d7699f6b0ccd433ab132c7d10835b449ed14b12b48e7749aad
md5=d133e77f625c496ae9d58629d7443596
sha256=b3e0409d69783ecfa90c893c817bb584296b4c45d9f17b0f2fdd7c07ef411a3f
+[http://rtp-net.org/ipaq/patches/2.6.14-3/full.patch]
+md5=d7ec27a9b44eed194426038640af5460
+sha256=70e8e8230390fb355d62270764f18f6b553bcb9383ddabfbed4a1238b0e79b80
+
[http://rtpnet.nerim.net/ipaq/patches/2.6.14-3/full.patch]
md5=230b98276779339a4102abdb1c36197a
sha256=866d1e45a575f448148c227f60cde4c8b607c51f179da3a7ec1acb5036b8e3ec
@@ -10946,6 +10974,10 @@ sha256=01ba0c34c3bf3bc4ea7728550e3bcfca779a48907ea4d6d9e5a83e8678df5096
md5=dbb085088337e2dd8c0216c36523ea06
sha256=68a114ece326b258b26259d31b9bb59c10049ff0162bcaa0f4f7a7dea9d244dc
+[http://gupnp.org/sources/gssdp/gssdp-0.7.1.tar.gz]
+md5=725c32e8f92a072cc34f0e091937df2a
+sha256=8eaab799f699836770ec2fcc08abfef2f824a82ae959c6af7b39ffb6968b9fd7
+
[http://gstreamer.freedesktop.org/src/gst-ffmpeg/gst-ffmpeg-0.10.1.tar.bz2]
md5=e21aef9a84d67dea9a68c1379781f763
sha256=a2c877c38d057875c7dfbf1803030c5cc9707020b77f91673500d6ea8d858607
@@ -11562,6 +11594,10 @@ sha256=f78e4b0a361b67805892c1a0e72f3cef92fbc96112157895660a478979ddeef4
md5=bfb12195c76bb6632bd917f2c2bc12d6
sha256=241e416cbe2c02f413fde82a8587bfe2fe9915fbed3a6fb20c86520b8d7543ef
+[http://gupnp.org/sources/gupnp/gupnp-0.13.1.tar.gz]
+md5=9b5fcf8146ba9a2bd84382f61717aa0e
+sha256=e97faaebf0da42617a43de4c7c1148a51148f2a2cdaa2a10855e377b968a07fd
+
[http://gupnp.org/sources/gupnp-av/gupnp-av-0.2.tar.gz]
md5=ab485bf263d0a3d2f771817241c970b9
sha256=782e4e45abcba1b3fe34276580653f4dbfbe8a26eee69a290675dfa7faa309f8
@@ -11570,6 +11606,10 @@ sha256=782e4e45abcba1b3fe34276580653f4dbfbe8a26eee69a290675dfa7faa309f8
md5=f6e813591ff89e8e61a46f416046450f
sha256=34b6e104b480e501e430daa68fca63906a939a6cb02bc43814ed06d2856a72ac
+[http://gupnp.org/sources/gupnp-av/gupnp-av-0.5.2.tar.gz]
+md5=15ccfbb17553bf1cb00bf8e1d801005e
+sha256=dfd438f40e31047d6f06db30db05d5f876c6294a8509f170482d712f552e9892
+
[http://gupnp.org/sources/gupnp-tools/gupnp-tools-0.6.1.tar.gz]
md5=27d3a55eae2243661f49a7cf40e1e195
sha256=c4004de997674bb54d5844391dd824c6aee78184b075e7ea5d8f816e0d031e25
@@ -12410,6 +12450,10 @@ sha256=76167e10c30d60534dc2b04fa4e202e16531df8170fc23cc4414d9afff09c32a
md5=828a84c64ef933bfcc805b838576a774
sha256=8ba0eda3157193643eb3c5ccd46c0ca8060d702f260df60f89656cb891cbeeb8
+[ftp://ftp.cac.washington.edu/imap/imap-2007b.tar.Z]
+md5=4d59ce6303cf8ef93ff51341b1ce2df7
+sha256=b3170bef59f416be1f710be58333f9b0c2c8b0fe137062accd4f5f13a3785cd0
+
[http://downloads.sourceforge.net/imdbpy/imdbpy-2.5.tar.gz]
md5=dbbb53f835fd3f7aebcf7601dd902920
sha256=edaad2859a4f0785a34c3c0bb5a1e09d8f16efa3c0e4616f6a5a6cf18c282aa6
@@ -14474,6 +14518,10 @@ sha256=03d751bd836174e2d6766d8036fc72e130dd090b13256d40a58ba6ab659475ef
md5=866fd13611a8de946428db1df9be8468
sha256=74def55ba6a61e966e0873a4081fd3dd65089b94b837810d3bc056221d7e41c7
+[http://libcli.googlecode.com/files/libcli-1.9.4.tar.gz]
+md5=b917617d21b90db214971efe64a33416
+sha256=c1e56ff2e55a879b7c89b5808aea76063512d9a24cffd601aa3d9a84cd6a7928
+
[http://repository.maemo.org/pool/maemo5.0alpha/free/libc/libconbtui/libconbtui_1.4.1.tar.gz]
md5=68ac3177685c577aadf8d2e9f47b1878
sha256=c3540df46bd9716c6a6f521806c70ae548822a5e62d245900cc28b5fa9fc3eb3
@@ -14586,6 +14634,10 @@ sha256=9422e73c55aa921fbbce06e5e01bba0b98bb7a0f1640c27cfd307c290dba792c
md5=6c5b6fff276c3a1171ceb41c6d4b6e34
sha256=76866075a54aa04f4f18f2cf09cf19c84dee4ed22c45b741dc4067f5e224430d
+[http://www.des-testbed.net/sites/default/files/libdessert0.86.14.tar.gz]
+md5=7c9f9ecfcc36217ac2af3dba7828e284
+sha256=4cea899ab0fc3d96a6ba1e5e7e28253636f4ceb3ed3cba88da4cbaa328e42285
+
[http://handhelds.org/~paxanima/files/libdictionary.tar.gz]
md5=10ee733c70e96e8e9f01d3de2cc0c78c
sha256=46f0a85f340e099e9010c8eb9a28d727830aedb32be48fe0a2f0cd081e0623fd
@@ -15514,6 +15566,10 @@ sha256=3453c1426fdc06b32bc5f4e7d3ce039ec7f38f0fa4018d505e515099b209dd25
md5=b73cbd5bc3cd268722a624a5f1318fde
sha256=94c31c7090106d3a95e2a7c083961efca1321b970118fe103ab06e5d927b7258
+[http://xorg.freedesktop.org/releases/individual/lib/liblbxutil-1.1.0.tar.bz2]
+md5=273329a78c2e9ea189ac416c7fde94a1
+sha256=c6b6ff7858ec619cafa8205debca6bf78c5610a2844a782ed643c7fd017cf8ae
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/lib/liblbxutil-X11R7.0-1.0.0.tar.bz2]
md5=1bcffde85723f78243d1ba60e1ebaef6
sha256=e485f36d74f477f3d235a05bb67b502dc744092569842d9ab45e2f785f74f556
@@ -15878,6 +15934,10 @@ sha256=07128710a699b453dcd7b92e33f2aa8dcbbfe0a657d33040803cdaf0997e442c
md5=757371e21e4f3653ce4d12d3ba0be1e0
sha256=9a0864cd442c43e5b69072dc0617b56252bc933fce26f6bfd6d47909287a353a
+[http://downloads.sourceforge.net/omxil/libomxil-bellagio-0.9.2.tar.gz]
+md5=42ab7383c4ca4093000ec7062289112b
+sha256=dc5d3cf256390d5419ea7dc3fc35761999a1da99fa4b645ac3e92a6a279c38fc
+
[http://ftp.gnome.org/pub/GNOME/sources/liboobs/2.22/liboobs-2.22.0.tar.bz2]
md5=1b090ecd6c0df58b131795ff9a5c9057
sha256=b35760855d7d1def532e9e808cecde29b75cec455b238590072abf4a8206536e
@@ -16066,6 +16126,10 @@ sha256=b9532db51a093221f82e6659ab2979d357eac770d6eb9e9361efead0aca709ce
md5=685cb20e7a6165bc010972f1183addbd
sha256=5ccb9683b8be76edfceab4bf006e1cce9018e0d3dea5e54aa72e82798213fead
+[http://xorg.freedesktop.org/releases/individual/lib/libpciaccess-0.11.0.tar.bz2]
+md5=686320dcec98daad0bdfb8894d4f2a2b
+sha256=6e38be12b656c83c66a6fd8ba56c041d8188218278219c88ee635242ec1c7dab
+
[http://www.xmailserver.org/libpcl-1.4.tar.gz]
md5=6d63c462911349de80109c0161ed6d37
sha256=3c64155a9218c0367f3b0afd4bd8a4a46cc467ad6c85e98952a4ef517b183686
@@ -17086,6 +17150,10 @@ sha256=ba1c32207fd62d374c9397a81fb1247da93edb859e30d0d855dc65e5457f690b
md5=ed40cf4088c306400b005bbd63ac36be
sha256=e41e99925e8c81a9e6c7f4cf399da1d9f571927413196898af46ecbebee6a91b
+[http://mirror.lihnidos.org/GNU/savannah/linphone/3.1.x/sources/linphone-3.1.0.tar.gz]
+md5=ed40cf4088c306400b005bbd63ac36be
+sha256=e41e99925e8c81a9e6c7f4cf399da1d9f571927413196898af46ecbebee6a91b
+
[http://developer.ezaurus.com/sl_j/source/c860/20031107/linux-2.4.18-rmk7-pxa3-embedix-slc860-20031107-rom1_10.bz2]
md5=d74fc9ea01384bead3925434b932d6b7
sha256=3dcafe41355fcc688f4a376a5dc71901ea2fbb95698397c87c6a6b12aa058c69
@@ -17342,6 +17410,10 @@ sha256=d7b9f19b92fd5c693c16cd62f441d051b699f28ec6a175d1b464e58bacd8c78f
md5=84c077a37684e4cbfa67b18154390d8a
sha256=0acd83f7b85db7ee18c2b0b7505e1ba6fd722c36f49a8870a831c851660e3512
+[http://kernel.org/pub/linux/kernel/v2.6/linux-2.6.32.tar.bz2]
+md5=260551284ac224c3a43c4adac7df4879
+sha256=5099786d80b8407d98a619df00209c2353517f22d804fdd9533b362adcb4504e
+
[http://kernel.org//pub/linux/kernel/v2.6/linux-2.6.9.tar.bz2]
md5=e921200f074ca97184e150ef5a4af825
sha256=f5dba6366e87e91234d1b0069cfea655b0a4cb37ea97f899226f16998e6ab9f1
@@ -17406,6 +17478,10 @@ sha256=e4b6ab08eaff2766c3bf85ea8d63ab31ae774266b8351772117fcc94d1318ade
md5=de958cdb8d00e74792dd69f3c945b037
sha256=371f8133db705bde6c2f79cccb0b1a1f626a0d94bf41acceba5d76a69155f057
+[http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/linuxutils/2_25_01_06/exports/linuxutils_2_25_01_06.tar.gz]
+md5=15486b27c9960f06b53f8a60e90f941d
+sha256=61b86cdb5c1b2f9eb766fece6ea5ae89f29cf84d0c3eecbcc9b5d0ffd42d2bcb
+
[http://gpephone.linuxtogo.org/download/gpephone/liblipsevent-0.1/lips_event-0.1.tar.gz]
md5=1fd0f41f9676ef0c882921bc37628d07
sha256=7182cf3f63e11e7ea6c6a994f9e70ef3bf6e430a5db643f5b29a0fd0996ddfd5
@@ -17450,6 +17526,10 @@ sha256=986a923a5247468db1d2a03e93268f4025ae5dc27e911dafc7b37e6a802122db
md5=827a1ac5adf9aadd0c13b54a897e297b
sha256=7156e58025e240a501d5b32244b923b283bb35014ea5a4081b70044af8aef7a3
+[http://xorg.freedesktop.org/releases/individual/app/listres-1.0.2.tar.bz2]
+md5=3c0d5d8d6abaf411cd0647bc7073ac38
+sha256=4d9e24b95619bc961936d241106ffcc483995de55629567113ad78ba0b37ffb7
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/app/listres-X11R7.0-1.0.1.tar.bz2]
md5=2eeb802272a7910bb8a52b308bf0d5f6
sha256=41711ff3c94144b8a561146948b9b5fd49a55756532fa4d254d9a959e6622d87
@@ -19090,6 +19170,10 @@ sha256=76e151048a736cf490630ace4909f2d4b65f1afe2447c7fd794d270eb956e045
md5=48897aeb3a7ee5c64f30e56789f105a8
sha256=7b549ca4af77fc5b0472df1ecd9e76d2f8415258ddcfb63dfa64a55a04e1e590
+[http://www.multiprecision.org/mpc/download/mpc-0.8.1.tar.gz]
+md5=5b34aa804d514cc295414a963aedb6bf
+sha256=e664603757251fd8a352848276497a4c79b7f8b21fd8aedd5cc0598a38fee3e4
+
[http://downloads.sourceforge.net/musicpd/mpd-0.11.2.tar.gz]
md5=b6e913dc4b63b161bb1b96030763c3a7
sha256=e784f78b3cce93367c105619c690465b78a88d3e4c616cc829f4cb5e66f2bbe0
@@ -20986,6 +21070,10 @@ sha256=34beecc0dd156267e8004fb79efea9bf97e1157ed597bdde1841c16def2e9195
md5=955088e5139ef5914d44fe15b4a50b90
sha256=924c27b95f0c3792bf3d48ff854ef145e8916452b917067d653f59102f03c0d4
+[http://kernel.org/pub/linux/kernel/v2.6/patch-2.6.18.8.bz2]
+md5=090f582d2a0e1951d500b2e55f7df7b4
+sha256=cde777361d2a4818ea9c215e195a87da4847dafa94a10ac8c9f4bd8dc49fde3f
+
[http://www.muru.com/linux/omap/patches/patch-2.6.19-omap1.bz2]
md5=3590e42e1a6ea4676df5b187b830b402
sha256=b7cba2e38e81abb4d1d33c3f7f7c028310b392d5ee1ed5e3b2137e024598d903
@@ -21014,6 +21102,10 @@ sha256=808ca62a66d7cfe40123301c2f51fc0dcd817ee3bb0df96d1e9e97cc3bad6a9c
md5=b9c8734471a454806c77f040fcf9869b
sha256=5ee24e1c5636bcffed155b1c01d7d09fedb135fa2458c190a0da03a82c8c2f60
+[http://kernel.org/pub/linux/kernel/v2.6/testing/v2.6.22/patch-2.6.22-rc1.bz2]
+md5=9bc06492dce31c87f1cdfa2ce5b0cf4c
+sha256=dd33f3e9059bed043194ee5200239f26d3ad607ab5c872e7ce92595c1eb5d0e4
+
[http://kernel.org/pub/linux/kernel/v2.6/patch-2.6.22.19.bz2]
md5=066cc3bdd2783dcd01f6ff466e449ec0
sha256=829c48b49c71d89468f2a5a05587714811197545eeba31e9643cabacf344d33a
@@ -21042,6 +21134,10 @@ sha256=c2085fc8fc6df586ef8c19a4562b84162f0b77956d691aa4fbee5e90c9800cb7
md5=736ea68a03158c24e55aa95e0ab15ceb
sha256=4d2c13dee5ea7bd8b5cdbf63afa9383b45f6bad1f75b163c49e086a5030a04de
+[http://kernel.org/pub/linux/kernel/v2.6/testing/v2.6.23/patch-2.6.23-rc5.bz2]
+md5=8253467313749aee6065093cd3c5fd9c
+sha256=c8c2068183aca79c46182f3d3fe6d7579cd60809681d42c52d71cf1873cd1a0e
+
[http://kernel.org/pub/linux/kernel/v2.6/patch-2.6.23.1.bz2]
md5=896c5d4e7fd68d37b8c16e5d2842563b
sha256=55e811b4d4b0cbfde500bdd5455b7180d3def3dbdc52314520b7327d32b23f42
@@ -21138,6 +21234,10 @@ sha256=7fc735b85225850dae3c3acfe4bf0fe59f4c884d7c37f89395867dc73bf8f8af
md5=e75d87c11065955871b2e005d0242c99
sha256=0e5e633e81f1dcc0dcd2372494fbd2d6a72b28bb177a3285c4766a9659b454bd
+[http://kernel.org/pub/linux/kernel/v2.6/patch-2.6.27.41.bz2]
+md5=a431f1f68badcfa5a6cecc6b4d52d319
+sha256=ed3ec802ccb3585bf0a57724471fa24b98cce5caef8f35d6c26fed7c9213168d
+
[http://kernel.org/pub/linux/kernel/v2.6/patch-2.6.27.8.bz2]
md5=ec23e3dce22b23ca681199fe515f10fb
sha256=31c35db09289c6e0436a258745d7180e0cd8f567949f27b3dab5a57a3664ed2f
@@ -21182,6 +21282,10 @@ sha256=25a9aff47cc568e4bcaa4377cacbcae11ea454aeeea9519aa3a1b6dbffea713c
md5=2f399a5e286a9fe7cb40bfd3d42a7a3d
sha256=79a9913a74e58af6431bb952aac2cf0a1f4422287f420844f24ca6bc5ed0fdc4
+[http://kernel.org/pub/linux/kernel/v2.6/patch-2.6.30.10.bz2]
+md5=6485fe0cf0f0220493647505bfd2f7b0
+sha256=a1ffb806d7d0083aa8d0525cbccede4172f4a44c8df1ddfeece629b6d8304201
+
[http://kernel.org/pub/linux/kernel/v2.6/patch-2.6.30.4.bz2]
md5=d0fc44b54ba5953140b3f2aa9a1f2580
sha256=b7716971e73c8fa96ecd9cdb598c8bd3a2a946e289cfef5dcfaa11a0022737ce
@@ -21210,6 +21314,18 @@ sha256=bc670682ed9b81d5d3859130c600601bd72053fd738b51b2daf8ddf3f4614a66
md5=6cac5e59d5562b591cdda485941204d5
sha256=41e7d98a205d58a62901daf4e46ecf5fb0b177e5a233a3c0ad3250a3a0abe8aa
+[http://kernel.org/pub/linux/kernel/v2.6/patch-2.6.31.7.bz2]
+md5=801b9c379a12339c0210dc5d1a8e9537
+sha256=f9edbb3c15c4094d840d5954131bb91c4513d333b30bced7b5c906d36c843d5e
+
+[http://kernel.org/pub/linux/kernel/v2.6/patch-2.6.31.8.bz2]
+md5=0fda994c76a981a67464f43c766f2180
+sha256=c120bf7018749fca765773975b3d4444fa244781ceb844e4b9bab9b478cad213
+
+[http://kernel.org/pub/linux/kernel/v2.6/patch-2.6.32.1.bz2]
+md5=abc24a9beb8431a75301dd3884b37a3c
+sha256=26f6fad3259ad6d2356cfa04462ace5fd3b5cecec410bbcefe7d5f6dbeb00baa
+
[http://www.muru.com/linux/omap/patches/patch-2.6.9-omap1.bz2]
md5=d6249654087f0bcafaa860ac573316a4
sha256=91806347cb386002a8bfd20ee66e536e4a7dfb01f207dd751341f2971090d9ac
@@ -21462,6 +21578,10 @@ sha256=3e9510ce715f28b7e6b803fcdadb73b37c83792c0b5e1e9bcb066ab972649996
md5=e6029fafcee029edcfa2ceed7a005333
sha256=e105b6aad55589aecf20ae70ab7aa81eb202296fc52531f62e546af23077cca1
+[http://us2.php.net/distributions/php-5.2.11.tar.bz2]
+md5=286bf34630f5643c25ebcedfec5e0a09
+sha256=9bcd14ceda2b4bd7abcc7eb59bd74bae490d9335e4207580de783b48aa7e8f23
+
[http://us2.php.net/distributions/php-5.2.5.tar.bz2]
md5=1fe14ca892460b09f06729941a1bb605
sha256=5cac1e70df5019ebdfdab2e0b8b216f7fdf56b9895c9f68c993313918249bba3
@@ -21998,6 +22118,10 @@ sha256=a1c6170e508a3516d0a23963d7fa5cf0a457be431c210096f6b1cecd0731a9f4
md5=6617a6681f4e5e3d8ddc48955d73d7ab
sha256=a1c6170e508a3516d0a23963d7fa5cf0a457be431c210096f6b1cecd0731a9f4
+[ftp://ftp.debian.org/debian/pool/main/p/prelink/prelink_0.0.20090925.orig.tar.gz]
+md5=ed90412ad4ee7f5b5e8fff3d6649e49b
+sha256=2110261aedd8423fa3f1dba5ecb08bd61beb708883f82753b09835076cba2e36
+
[http://www.red-bean.com/~proski/firmware/primary.tar.bz2]
md5=0c7c82264602ee2b7ad832d5cd1e1940
sha256=3b5bd68653ff5054586f9fad7ad729bd2d551e76949aec2d14b8a89308393a36
@@ -23814,6 +23938,10 @@ sha256=04ecd2577ee0c210df610b4a5d870f2bda57c80962fb5b51ae9c4a94098c726c
md5=7a0c73ccf0e31808ad37b61e730cd10e
sha256=33d2363d40b1db7568864dc063ce4af70e50a9f9292a16445f0b167618d8fbba
+[http://ftp.acc.umu.se/pub/GNOME/sources/rygel/0.4/rygel-0.4.6.tar.bz2]
+md5=f28c48e2caf79b8e9056636259056de7
+sha256=67c58590430d04799644d164e4a5977356d95528864ea787356e35dd314e660f
+
[http://www.informatik.hu-berlin.de/~tkunze/zaurus/patches/sa1100-dma.patch]
md5=4336cca098b577608813a7c1454f2edd
sha256=c532c14ffb9358d1e0dbb67fce113c6aec0dd9c77ad41875222d69979baac9e7
@@ -26826,6 +26954,10 @@ sha256=f3804f02f51a1be243ce7413dc67dca774f000686f8f2efedc77203a1962d401
md5=51bb54c08415ee3c3000b7df9e9b07c5
sha256=57d2629849796b4dc919261eadd1eea3ee6e634d58979797287f7e09408cde67
+[http://xorg.freedesktop.org/releases/individual/util/util-macros-1.4.1.tar.gz]
+md5=8ac38951e753f250aaefbd4ba0afda94
+sha256=d49ab68cad724ae51f6cb69f7f5cfff7629cbb066f4c5c8bda81d62675a21986
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/util/util-macros-X11R7.0-1.0.1.tar.bz2]
md5=bc6be634532d4936eb753de54e1663d3
sha256=e95a45db65b33be472a3134492e348c4cd6edc200d02a85654ffe62bc2e6fdcd
@@ -26850,6 +26982,10 @@ sha256=060c15bfba6cfd1171ad81f782789032113e199a5aded8f8e0c1c5bd1385b62c
md5=64c54d43787339a7cced48390eb3e1d0
sha256=060c15bfba6cfd1171ad81f782789032113e199a5aded8f8e0c1c5bd1385b62c
+[http://rtp-net.org/ipaq/patches/2.6.14-3/v2.6.14-gitcurrent.patch]
+md5=e0b42e51630e9cd7e3b0adf1be42f4a1
+sha256=0c625e90d13f91269d3a02ebdfba97226651a849ad8d69a0734bb5df7964c571
+
[http://rtpnet.nerim.net/ipaq/patches/2.6.14-3/v2.6.14-gitcurrent.patch]
md5=e0b42e51630e9cd7e3b0adf1be42f4a1
sha256=0c625e90d13f91269d3a02ebdfba97226651a849ad8d69a0734bb5df7964c571
@@ -27598,6 +27734,10 @@ sha256=b31c3bc4e85e7f972db1dfb7b447d213694569e2a5794a84116295c334a11f43
md5=43cbe5c7508f7dc3e141c346a897fbe7
sha256=b31c3bc4e85e7f972db1dfb7b447d213694569e2a5794a84116295c334a11f43
+[http://downloads.sourceforge.net/wxwindows/wxWidgets-2.8.10.tar.bz2]
+md5=0461c2085ac1ad7e648aa84c4ba51dd1
+sha256=b84617a2fd219153a6df95dc7f4aa1ba9c07af5859a3d00fc23f9aaed2a1e3d5
+
[http://downloads.sourceforge.net/wxwindows/wxWidgets-2.8.10.tar.gz]
md5=05b32ca051651f4b1885a90f62969faf
sha256=4a65573bc12e15b21a4acdce89e7e6b71edbe214817457f90fcf855220bafe66
@@ -27934,6 +28074,10 @@ sha256=8290616302932e72d4224cbe27d872efa5f44b0b8553ded0bbfb3537abe76907
md5=59d8d79fb950a55722c0089496fd18b1
sha256=ae38043c9dbf99a516f4edc58ef6235ceba975d8b5f374244a2b3e96793d7d5a
+[http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/xdais/6_23/exports/xdais_6_23.tar.gz]
+md5=09b0a14b9f8fb98686a98857eedd10a1
+sha256=12e60870930d9392c37dabdd25988e6dd5fb66ce0fe1e3b0d72250c90c8c26b7
+
[http://xorg.freedesktop.org/releases/individual/app/xdbedizzy-1.0.2.tar.bz2]
md5=ecef9cfd197d00980e0d69ee4126d890
sha256=74e882e9fee7ebeb274caf43071afff92531b8a41f34650376146a131166012d
@@ -27954,6 +28098,10 @@ sha256=d398bfb7a5d9657b802db835c28db892ec8fe54cf332420edef0b3ba1c231fcb
md5=c7cd094cdc49459018b6f0e1eb95af30
sha256=0d5fbc8cfdaa968090ad11b0b84cfb122e2a1c54c4d261fd722b27c6d6972c23
+[http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/rtsc/xdctools_3_15/exports/xdctools_setuplinux_3_15_01_59.bin]
+md5=c7cd094cdc49459018b6f0e1eb95af30
+sha256=0d5fbc8cfdaa968090ad11b0b84cfb122e2a1c54c4d261fd722b27c6d6972c23
+
[http://gpe.linuxtogo.org/download/source/xdemineur-2.1.1.tar.bz2]
md5=b3884eaec59a63691f66bc29ce57a56d
sha256=75378ad3eacbe32c625de3b4af3e1f6fc9772ab45c1cd1393483d95ac4da3b22
@@ -28342,6 +28490,10 @@ sha256=6d57420cce9201a14f2fb5c5f6bc8999ffdcc9520020d54290eb22db27c366c8
md5=e56ce4424b89b2409c6e73e007a85da7
sha256=462f2ae2fd389a87e09fa764a236cd04dcbf85bcfcd8000aa9a3810055511d8f
+[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-evdev-2.3.2.tar.bz2]
+md5=b2bfe368022eedf2671ee28daba31efc
+sha256=029bf469bd013bcc3e384c1297a05a59e4b9b3ba90a26c022b32c0819d115e28
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/driver/xf86-input-evdev-X11R7.0-1.0.0.5.tar.bz2]
md5=d982c6f185f4c75a4b65703ceed7be06
sha256=ba53e8ce6bfa01da7fa86a31853542a71722b41b511041bdb58cf66c10f3edb4
@@ -28658,6 +28810,10 @@ sha256=e7d481c375a11df55eb8f12390c329c2bfda3258c689cec11cfec27cb5895c8b
md5=2cf0a2b0b3006bcfcd85bb77d966244a
sha256=ddd5ad4c25ad2f2e46134272bf047522882deba8ac3ac04d5e11f8bd9718620c
+[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-synaptics-1.2.1.tar.bz2]
+md5=29a6f9da5123149e4abc8ff83880ed5c
+sha256=a63b48c5c8eb09416b941dea591a948e111d1b2e14d4620f25377cf47cf877e6
+
[http://xorg.freedesktop.org/releases/individual/driver/xf86-input-tek4957-1.1.0.tar.bz2]
md5=be8a4bd474ad6c85b93f66dd6fcfa6ee
sha256=09b9506d1bb1deaaf69872392bc56e1d75997bb8157e85a9121749bf5fe15727
@@ -29162,6 +29318,10 @@ sha256=f56d2bb42f6c4369dd3c6adc30988c53a229650f910b0db1bb3bf9376054011e
md5=1b22188bd9012a148206940708b52ea6
sha256=c18ce0410437ced9c171d2d6328a8406b79b6edacf55b9526594b446ee5a3641
+[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-nv-2.1.16.tar.bz2]
+md5=fb02d5506e35054348d1c2b2c924530d
+sha256=4bf2f964b78d309769faa6a5d21c90a9907886623adf1f30ea890b4329bf578d
+
[http://xorg.freedesktop.org/releases/individual/driver/xf86-video-nv-2.1.3.tar.bz2]
md5=f9b38e24157c3aac6014119ac18d76da
sha256=8d9b5ea137c31919f7821e7f3ecbd133158813c1059f4a8ed0a723535d969952
@@ -30414,6 +30574,10 @@ sha256=400bc7d84dcfb3265a7a1ce51819679dc3adaeda231514bd89b0f932b78ff5c4
md5=4c5482552f38a7d42398a694cc9b2ee6
sha256=de59f9be3d45fe93f445f39bec3cea09753a671e56863ce77e3a797d2df526b2
+[http://xorg.freedesktop.org/releases/individual/app/xlogo-1.0.2.tar.bz2]
+md5=7365c0852750134119734bc1879f60ca
+sha256=47a8aa4e8190772e24dd58266fdd4ba2723b5d7a23365a3e4c07c1263ffb3130
+
[http://xorg.freedesktop.org/releases/X11R7.0/src/app/xlogo-X11R7.0-1.0.1.tar.bz2]
md5=0314b2f5173da64957031400638fa5f8
sha256=1397377bae07e8907f73bc445e967d4d4400769e683c2119598d952c8ad28131
@@ -31462,6 +31626,10 @@ sha256=cc3b203acbd745a7c3b6ea3d8e74d7fb07cf8f8aa92bcaa3b2edb023dee02a36
md5=6660ce6dac0a6ca495a0e954cb6b40a2
sha256=fc619215ca90cab48efae7bdf524d1de690b75832f07f3cbcb6d5c3910d402a1
+[http://ftp.gnome.org/pub/GNOME/sources/zenity/2.28/zenity-2.28.0.tar.bz2]
+md5=262c476aebbf67a7043cd80c6a03add3
+sha256=3747a23ce46b0ee68e6261d669ae461f0f460d9c6ad19e04acbd518ddfcc8c63
+
[http://www.progsoc.org/~wildfire/zeroconf/download/zeroconf-0.6.1.tar.gz]
md5=31ac40fdaf24b3e666ed83c1320dd7a5
sha256=3e93416ad44202c2952a1342dad12f2ad0e61dd3f1c59110d9ad8cb1d4c639e5
diff --git a/conf/compatibility-providers.conf b/conf/compatibility-providers.conf
new file mode 100644
index 0000000000..10a81f2943
--- /dev/null
+++ b/conf/compatibility-providers.conf
@@ -0,0 +1,72 @@
+#############################################################################
+# DEFAULT PREFERRED PROVIDERS
+# Every distribution should include this file.
+# It will make adding new providers easier.
+#PREFERRED_PROVIDER_atd ?= "atd-over-fso"
+PREFERRED_PROVIDER_atd ?= "atd"
+PREFERRED_PROVIDER_avahi ?= "avahi"
+PREFERRED_PROVIDER_bluez-libs ?= "bluez4"
+PREFERRED_PROVIDER_bluez-utils ?= "bluez4"
+PREFERRED_PROVIDER_bluez-utils-dbus ?= "bluez-utils"
+PREFERRED_PROVIDER_classpath ?= "classpath"
+PREFERRED_PROVIDER_dbus-glib ?= "dbus-glib"
+PREFERRED_PROVIDER_esound ?= "pulseaudio"
+#PREFERRED_PROVIDER_e-wm-menu ?= "e-wm-menu-shr"
+PREFERRED_PROVIDER_e-wm-menu ?= "e-wm-menu"
+#PREFERRED_PROVIDER_frameworkd-config ?= "frameworkd-config-shr"
+PREFERRED_PROVIDER_frameworkd-config ?= "frameworkd-config"
+PREFERRED_PROVIDER_gconf ?= "gconf"
+#PREFERRED_PROVIDER_gconf ?= "gconf-dbus"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-ani ?= "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-bmpg ?= "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-gif ?= "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-ico ?= "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-jpeg ?= "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-pcx ?= "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-png ?= "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-pnm ?= "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-ras ?= "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-tga ?= "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-wbmp ?= "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-xbm ?= "gtk+"
+PREFERRED_PROVIDER_gdk-pixbuf-loader-xpm ?= "gtk+"
+PREFERRED_PROVIDER_gnome-vfs ?= "gnome-vfs"
+PREFERRED_PROVIDER_gnome-vfs-plugin-file ?= "gnome-vfs"
+#PREFERRED_PROVIDER_gpsd ?= "fso-gpsd"
+PREFERRED_PROVIDER_gpsd ?= "gpsd"
+PREFERRED_PROVIDER_gtk+ ?= "gtk+"
+PREFERRED_PROVIDER_hostap-conf ?= "hostap-conf"
+PREFERRED_PROVIDER_hostap-modules_hx4700 ?= "hostap-modules"
+PREFERRED_PROVIDER_hostap-modules_h2200 ?= "hostap-modules"
+PREFERRED_PROVIDER_hotplug ?= "udev"
+PREFERRED_PROVIDER_libfribidi ?= "fribidi"
+PREFERRED_PROVIDER_libgpewidget ?= "libgpewidget"
+PREFERRED_PROVIDER_libxss ?= "libxss"
+PREFERRED_PROVIDER_ntp ?= "ntp"
+PREFERRED_PROVIDER_openmoko-alsa-scenarios ?= "alsa-scenarii-shr"
+PREFERRED_PROVIDER_opkg ?= "opkg"
+#PREFERRED_PROVIDER_opkg ?= "opkg-nogpg"
+PREFERRED_PROVIDER_qemu-native ?= "qemu-native"
+PREFERRED_PROVIDER_qt4x11 ?= "qt4-x11-free"
+PREFERRED_PROVIDER_task-bootstrap ?= "task-bootstrap"
+PREFERRED_PROVIDER_tslib-conf ?= "tslib"
+PREFERRED_PROVIDER_tslib ?= "tslib"
+PREFERRED_PROVIDER_util-linux ?= "util-linux-ng"
+PREFERRED_PROVIDER_virtual/alsa-scenarios ?= "alsa-scenarii-shr"
+PREFERRED_PROVIDER_virtual/db ?= "db"
+#PREFERRED_PROVIDER_virtual/db ?= "db3"
+PREFERRED_PROVIDER_virtual/db-native ?= "db-native"
+#PREFERRED_PROVIDER_virtual/db-native ?= "db3-native"
+PREFERRED_PROVIDER_virtual/gail ?= "gtk+"
+PREFERRED_PROVIDER_virtual/javac-native ?= "ecj-bootstrap-native"
+PREFERRED_PROVIDER_virtual/java-initial ?= "jamvm-initial"
+PREFERRED_PROVIDER_virtual/java-native ?= "jamvm-native"
+PREFERRED_PROVIDER_virtual/libgl ?= "mesa"
+PREFERRED_PROVIDER_virtual/libsdl ?= "libsdl-x11"
+#PREFERRED_PROVIDER_virtual/libusb0 ?= "libusb"
+PREFERRED_PROVIDER_virtual/libusb0 ?= "libusb-compat"
+PREFERRED_PROVIDER_virtual/libx11 ?= "libx11"
+PREFERRED_PROVIDER_virtual/psplash ?= "psplash-angstrom"
+PREFERRED_PROVIDER_virtual/shr-splash-theme ?= "shr-splash-theme-logo"
+PREFERRED_PROVIDER_virtual/xserver ?= "xserver-xorg"
+PREFERRED_PROVIDER_xserver ?= "xserver-xorg"
diff --git a/conf/distro/angstrom-2008.1.conf b/conf/distro/angstrom-2008.1.conf
index abc9a936d6..26614adb72 100644
--- a/conf/distro/angstrom-2008.1.conf
+++ b/conf/distro/angstrom-2008.1.conf
@@ -87,21 +87,6 @@ PREFERRED_VERSION_glibc-initial ?= "2.9"
PREFERRED_VERSION_uclibc ?= "0.9.30.1"
PREFERRED_VERSION_uclibc-initial ?= "0.9.30.1"
-# Preferred provider for virtual/psplash
-# This enforces a specific brand to be used, in our case the angstrom
-# one. In case you want to change the logo or something like that we
-# suggest you to create another recipe (e.g: psplash-<brand>) for that
-# and add that into your image.
-# You can also opt to change or override this line, but that isn't
-# needed because psplash is using update-alternatives.
-PREFERRED_PROVIDER_virtual/psplash ?= "psplash-angstrom"
-
-PREFERRED_PROVIDER_avahi = "avahi"
-PREFERRED_PROVIDER_virtual/libusb0 ?= "libusb-compat"
-PREFERRED_PROVIDER_virtual/gail ?= "gtk+"
-
-PREFERRED_PROVIDER_libfribidi = "fribidi"
-
#powerpc needs additional patches to gcc
ANGSTROM_GCC_VERSION_ppc405 ?= "4.1.1"
ANGSTROM_GCC_VERSION_xilinx-ml403 ?= "4.1.1"
@@ -140,33 +125,10 @@ PREFERRED_VERSION_binutils-cross-sdk_avr32 = "2.17"
# Toolchain virtuals:
require conf/distro/include/toolchain-${TOOLCHAIN_TYPE}.inc
-# hostap stuff, we prefer the in-kernel modules, but those don't work for all machines
-PREFERRED_PROVIDER_hostap-conf ?= "hostap-conf"
-PREFERRED_PROVIDER_hostap-modules_h2200 ?= "hostap-modules"
-PREFERRED_PROVIDER_hostap-modules_hx4700 ?= "hostap-modules"
-
-PREFERRED_PROVIDER_virtual/db ?= "db"
-PREFERRED_PROVIDER_virtual/db-native ?= "db-native"
-PREFERRED_PROVIDER_virtual/libsdl ?= "libsdl-x11"
-PREFERRED_PROVIDER_virtual/libx11 ?= "libx11"
-
-# Others:
PREFERRED_PROVIDER_dbus-glib = "dbus-glib"
-PREFERRED_PROVIDER_esound ?= "pulseaudio"
-PREFERRED_PROVIDER_gconf ?= "gconf"
-PREFERRED_PROVIDER_gnome-vfs ?= "gnome-vfs"
-PREFERRED_PROVIDER_gnome-vfs-plugin-file ?= "gnome-vfs"
-PREFERRED_PROVIDER_tslib ?= "tslib"
-PREFERRED_PROVIDER_tslib-conf ?= "tslib"
-PREFERRED_PROVIDER_libgpewidget ?= "libgpewidget"
-PREFERRED_PROVIDER_ntp ?= "ntp"
PREFERRED_PROVIDER_hotplug = "udev"
-PREFERRED_PROVIDER_opkg ?= "opkg-nogpg"
-PREFERRED_PROVIDER_libxss = "libxss"
-PREFERRED_PROVIDER_bluez-utils-dbus = "bluez-utils"
-PREFERRED_PROVIDER_bluez-libs = "bluez4"
-PREFERRED_PROVIDER_bluez-utils = "bluez4"
-PREFERRED_PROVIDER_util-linux = "util-linux-ng"
+PREFERRED_PROVIDER_opkg ?= "opkg-nogpg-nocurl"
+
# The default is too old for linux-libc-headers-2.6.31:
PREFERRED_VERSION_mplayer = "0.0+1.0rc2+svnr29789"
@@ -175,43 +137,19 @@ ANGSTROM_BLACKLIST_pn-bluez-utils = "bluez-utils 3.x has been replaced by bluez4
ANGSTROM_BLACKLIST_pn-fso-apm = "regular apmd is good enough"
-# we don't ship gtk-directfb by default
-PREFERRED_PROVIDER_gtk+ ?= "gtk+"
-PREFERRED_PROVIDER_gdk-pixbuf-loader-ani ?= "gtk+"
-PREFERRED_PROVIDER_gdk-pixbuf-loader-bmpg ?= "gtk+"
-PREFERRED_PROVIDER_gdk-pixbuf-loader-gif ?= "gtk+"
-PREFERRED_PROVIDER_gdk-pixbuf-loader-ico ?= "gtk+"
-PREFERRED_PROVIDER_gdk-pixbuf-loader-jpeg ?= "gtk+"
-PREFERRED_PROVIDER_gdk-pixbuf-loader-pcx ?= "gtk+"
-PREFERRED_PROVIDER_gdk-pixbuf-loader-png ?= "gtk+"
-PREFERRED_PROVIDER_gdk-pixbuf-loader-pnm ?= "gtk+"
-PREFERRED_PROVIDER_gdk-pixbuf-loader-ras ?= "gtk+"
-PREFERRED_PROVIDER_gdk-pixbuf-loader-tga ?= "gtk+"
-PREFERRED_PROVIDER_gdk-pixbuf-loader-wbmp ?= "gtk+"
-PREFERRED_PROVIDER_gdk-pixbuf-loader-xbm ?= "gtk+"
-PREFERRED_PROVIDER_gdk-pixbuf-loader-xpm ?= "gtk+"
-
-# QT stuff:
-# There are several flavours of qt4x11 in OE, so lets pick one that is buildable for everyone
-PREFERRED_PROVIDER_qt4x11 ?= "qt4-x11-free"
-
-#Silence a warning during parsing
-PREFERRED_PROVIDER_task-bootstrap = "task-bootstrap"
-
#This is needed to get a correct PACKAGE_ARCH for packages that have PACKAGE_ARCH = ${MACHINE_ARCH}
ARM_ABI ?= "${@['','oabi'][bb.data.getVar('MACHINE',d) in ['collie','h3600', 'h3800', 'simpad', 'htcwallaby']]}"
require conf/distro/include/angstrom${ARM_ABI}.inc
-
-
# If we're using an .ipk based rootfs, we want to have opkg-nogpg installed so postinst script can run
# We also take this opportunity to inject angstrom-version and the feed configs into the rootfs
IPKG_VARIANT = "opkg-nogpg-nocurl angstrom-version ${ANGSTROM_FEED_CONFIGS}"
+# we need the same provider for opkg and u-a
+PREFERRED_PROVIDER_virtual/update-alternatives = "opkg-nogpg-nocurl"
+
# Select xserver-xorg as default, since kdrive has been EOL'ed
XSERVER ?= "xserver-xorg xf86-input-evdev xf86-input-keyboard xf86-input-mouse xf86-video-fbdev"
-PREFERRED_PROVIDER_virtual/xserver ?= "xserver-xorg"
-PREFERRED_PROVIDER_xserver ?= "xserver-xorg"
# do some task-base stuff here
diff --git a/conf/distro/include/angstrom-package-deb.inc b/conf/distro/include/angstrom-package-deb.inc
index 3dbb175f93..e060bb1ccf 100644
--- a/conf/distro/include/angstrom-package-deb.inc
+++ b/conf/distro/include/angstrom-package-deb.inc
@@ -1,4 +1,4 @@
INHERIT += "package_deb"
-PREFERRED_PROVIDER_virtual/update-alternatives-native = "update-alternatives-cworth-native"
-PREFERRED_PROVIDER_virtual/update-alternatives = "update-alternatives-cworth"
+PREFERRED_PROVIDER_virtual/update-alternatives-native ?= "update-alternatives-cworth-native"
+PREFERRED_PROVIDER_virtual/update-alternatives ?= "update-alternatives-cworth"
diff --git a/conf/distro/include/angstrom-package-ipk.inc b/conf/distro/include/angstrom-package-ipk.inc
index a33a4ad2b4..14206bda2d 100644
--- a/conf/distro/include/angstrom-package-ipk.inc
+++ b/conf/distro/include/angstrom-package-ipk.inc
@@ -1,5 +1,4 @@
INHERIT += "package_ipk"
-PREFERRED_PROVIDER_virtual/update-alternatives-native = "update-alternatives-cworth-native"
-PREFERRED_PROVIDER_virtual/update-alternatives = "update-alternatives-cworth"
-
+PREFERRED_PROVIDER_virtual/update-alternatives-native ?= "opkg-native"
+PREFERRED_PROVIDER_virtual/update-alternatives ?= ${PREFERRED_PROVIDER_opkg}
diff --git a/conf/distro/include/angstrom.inc b/conf/distro/include/angstrom.inc
index 6e65285e99..8647dd7ec4 100644
--- a/conf/distro/include/angstrom.inc
+++ b/conf/distro/include/angstrom.inc
@@ -11,8 +11,10 @@ BUILDNAME = "Angstrom ${DISTRO_VERSION}"
TARGET_VENDOR = "-angstrom"
-# Add FEED_ARCH to overrides
-OVERRIDES .= ":${FEED_ARCH}"
+SOC_FAMILY ?= "Unknown"
+
+# Add FEED_ARCH and SOC_FAMILY to overrides
+OVERRIDES .= ":${FEED_ARCH}:${SOC_FAMILY}"
# Put links to sources in deploy/sources to make it easier for people to be GPL compliant
INHERIT += "src_distribute_local"
diff --git a/conf/distro/include/preferred-om-2008-versions.inc b/conf/distro/include/preferred-om-2008-versions.inc
index 7cc923cc60..d881202b09 100644
--- a/conf/distro/include/preferred-om-2008-versions.inc
+++ b/conf/distro/include/preferred-om-2008-versions.inc
@@ -175,7 +175,7 @@ PREFERRED_VERSION_comprec ?= "0.02"
PREFERRED_VERSION_confuse ?= "2.5"
PREFERRED_VERSION_confuse-native ?= "2.5"
PREFERRED_VERSION_connect ?= "0.1"
-PREFERRED_VERSION_connman ?= "0.10"
+PREFERRED_VERSION_connman ?= "0.15"
PREFERRED_VERSION_conserver ?= "8.1.14"
PREFERRED_VERSION_console-tools ?= "0.3.2"
PREFERRED_VERSION_contacts ?= "0.7"
@@ -1963,7 +1963,7 @@ PREFERRED_VERSION_wlan-ng-modules ?= "0.2.7"
PREFERRED_VERSION_wlan-ng-utils ?= "0.2.7"
PREFERRED_VERSION_wmctrl ?= "1.07"
PREFERRED_VERSION_wpa-gui ?= "0.4.8"
-PREFERRED_VERSION_wpa-supplicant ?= "0.6.3"
+PREFERRED_VERSION_wpa-supplicant ?= "0.6.9"
PREFERRED_VERSION_wpa-supplicant-nossl ?= "0.2.6"
PREFERRED_VERSION_wpa-supplicant-ssl ?= "0.2.6"
PREFERRED_VERSION_wrt-imagetools-native ?= "1.0"
diff --git a/conf/distro/include/preferred-shr-versions.inc b/conf/distro/include/preferred-shr-versions.inc
index f4ddf2fa25..fd83e02afe 100644
--- a/conf/distro/include/preferred-shr-versions.inc
+++ b/conf/distro/include/preferred-shr-versions.inc
@@ -17,8 +17,7 @@ PREFERRED_VERSION_classpath-native = "0.98"
PREFERRED_VERSION_linux-libc-headers = "2.6.31"
# override EFL_SRCREV from sane-srcrevs.inc
-# now is EFL_SRCREV newer in sane-srcrevs.inc
-# EFL_SRCREV ?= "43898"
+EFL_SRCREV ?= "44424"
# specifically set an openssh version
# NOTE: whenever changing the version here make sure
diff --git a/conf/distro/include/preferred-slugos-versions.inc b/conf/distro/include/preferred-slugos-versions.inc
index 5ec80ffeb1..204047fd63 100644
--- a/conf/distro/include/preferred-slugos-versions.inc
+++ b/conf/distro/include/preferred-slugos-versions.inc
@@ -36,22 +36,22 @@ PREFERRED_VERSION_binutils ?= "2.18.50.0.7"
PREFERRED_VERSION_binutils-cross ?= "2.18.50.0.7"
PREFERRED_VERSION_binutils-cross-sdk ?= "2.18.50.0.7"
PREFERRED_VERSION_busybox ?= "1.13.2"
-PREFERRED_VERSION_dbus ?= "1.2.1"
+PREFERRED_VERSION_dbus ?= "1.2.3"
PREFERRED_VERSION_gcc ?= "4.2.4"
PREFERRED_VERSION_gcc-cross ?= "4.2.4"
PREFERRED_VERSION_gcc-cross-sdk ?= "4.2.4"
PREFERRED_VERSION_gcc-cross-initial ?= "4.2.4"
PREFERRED_VERSION_gcc-cross-intermediate ?= "4.2.4"
-PREFERRED_VERSION_glib-2.0 ?= "2.18.3"
-PREFERRED_VERSION_glib-2.0-native ?= "2.18.0"
+PREFERRED_VERSION_glib-2.0 ?= "2.22.1"
+PREFERRED_VERSION_glib-2.0-native ?= "2.22.1"
PREFERRED_VERSION_glibc ?= "2.6.1"
PREFERRED_VERSION_glibc-initial ?= "2.6.1"
PREFERRED_VERSION_ipkg ?= "0.99.163"
PREFERRED_VERSION_ipkg-native ?= "0.99.163"
-PREFERRED_VERSION_libtool ?= "2.2.4"
-PREFERRED_VERSION_libtool-native ?= "2.2.4"
-PREFERRED_VERSION_libtool-cross ?= "2.2.4"
-PREFERRED_VERSION_libtool-sdk ?= "2.2.4"
+PREFERRED_VERSION_libtool ?= "2.2.6a"
+PREFERRED_VERSION_libtool-native ?= "2.2.6a"
+PREFERRED_VERSION_libtool-cross ?= "2.2.6a"
+PREFERRED_VERSION_libtool-sdk ?= "2.2.6a"
PREFERRED_VERSION_linux-libc-headers ?= "2.6.23"
PREFERRED_VERSION_m4 ?= "1.4.8"
PREFERRED_VERSION_m4-native ?= "1.4.8"
diff --git a/conf/distro/include/preferred-xorg-versions-live.inc b/conf/distro/include/preferred-xorg-versions-live.inc
index 3d1ae5235f..7da1c16a2a 100644
--- a/conf/distro/include/preferred-xorg-versions-live.inc
+++ b/conf/distro/include/preferred-xorg-versions-live.inc
@@ -1,4 +1,4 @@
-#Fri Dec 4 07:59:36 CET 2009
+#Wed Dec 16 09:33:47 CET 2009
#app
PREFERRED_VERSION_appres ?= "1.0.2"
PREFERRED_VERSION_bdftopcf ?= "1.0.2"
@@ -13,7 +13,7 @@ PREFERRED_VERSION_fstobdf ?= "1.0.3"
PREFERRED_VERSION_iceauth ?= "1.0.3"
PREFERRED_VERSION_ico ?= "1.0.2"
PREFERRED_VERSION_lbxproxy ?= "1.0.2"
-PREFERRED_VERSION_listres ?= "1.0.1"
+PREFERRED_VERSION_listres ?= "1.0.2"
PREFERRED_VERSION_luit ?= "1.0.4"
PREFERRED_VERSION_mkcfm ?= "1.0.1"
PREFERRED_VERSION_mkcomposecache ?= "1.2.1"
@@ -72,7 +72,7 @@ PREFERRED_VERSION_xkbprint ?= "1.0.2"
PREFERRED_VERSION_xkbutils ?= "1.0.2"
PREFERRED_VERSION_xkill ?= "1.0.2"
PREFERRED_VERSION_xload ?= "1.0.2"
-PREFERRED_VERSION_xlogo ?= "1.0.1"
+PREFERRED_VERSION_xlogo ?= "1.0.2"
PREFERRED_VERSION_xlsatoms ?= "1.0.2"
PREFERRED_VERSION_xlsclients ?= "1.0.2"
PREFERRED_VERSION_xlsfonts ?= "1.0.2"
@@ -120,7 +120,7 @@ PREFERRED_VERSION_xf86-input-dmc ?= "1.1.2"
PREFERRED_VERSION_xf86-input-dynapro ?= "1.1.2"
PREFERRED_VERSION_xf86-input-elo2300 ?= "1.1.2"
PREFERRED_VERSION_xf86-input-elographics ?= "1.2.3"
-PREFERRED_VERSION_xf86-input-evdev ?= "2.3.1"
+PREFERRED_VERSION_xf86-input-evdev ?= "2.3.2"
PREFERRED_VERSION_xf86-input-fpit ?= "1.3.0"
PREFERRED_VERSION_xf86-input-hyperpen ?= "1.3.0"
PREFERRED_VERSION_xf86-input-jamstudio ?= "1.2.0"
@@ -135,7 +135,7 @@ PREFERRED_VERSION_xf86-input-palmax ?= "1.2.0"
PREFERRED_VERSION_xf86-input-penmount ?= "1.4.0"
PREFERRED_VERSION_xf86-input-spaceorb ?= "1.1.1"
PREFERRED_VERSION_xf86-input-summa ?= "1.2.0"
-PREFERRED_VERSION_xf86-input-synaptics ?= "1.2.0"
+PREFERRED_VERSION_xf86-input-synaptics ?= "1.2.1"
PREFERRED_VERSION_xf86-input-tek4957 ?= "1.2.0"
PREFERRED_VERSION_xf86-input-ur98 ?= "1.1.0"
PREFERRED_VERSION_xf86-input-vmmouse ?= "12.6.5"
@@ -162,7 +162,7 @@ PREFERRED_VERSION_xf86-video-mga ?= "1.9.100"
PREFERRED_VERSION_xf86-video-neomagic ?= "1.2.4"
PREFERRED_VERSION_xf86-video-newport ?= "0.2.3"
PREFERRED_VERSION_xf86-video-nsc ?= "2.8.3"
-PREFERRED_VERSION_xf86-video-nv ?= "2.1.15"
+PREFERRED_VERSION_xf86-video-nv ?= "2.1.16"
PREFERRED_VERSION_xf86-video-openchrome ?= "0.2.904"
PREFERRED_VERSION_xf86-video-r128 ?= "6.8.1"
PREFERRED_VERSION_xf86-video-radeonhd ?= "1.3.0"
@@ -286,13 +286,13 @@ PREFERRED_VERSION_libxxf86vm ?= "1.1.0"
PREFERRED_VERSION_libdmx ?= "1.1.0"
PREFERRED_VERSION_libfontenc ?= "1.0.5"
PREFERRED_VERSION_libfontenc-native ?= "1.0.5"
-PREFERRED_VERSION_liblbxutil ?= "1.0.1"
+PREFERRED_VERSION_liblbxutil ?= "1.1.0"
PREFERRED_VERSION_liboldx ?= "1.0.1"
-PREFERRED_VERSION_libpciaccess ?= "0.10.9"
+PREFERRED_VERSION_libpciaccess ?= "0.11.0"
PREFERRED_VERSION_libxkbfile ?= "1.0.6"
PREFERRED_VERSION_libxkbfile-native ?= "1.0.6"
PREFERRED_VERSION_libxkbui ?= "1.0.2"
-PREFERRED_VERSION_pixman ?= "0.17.2"
+PREFERRED_VERSION_pixman ?= "0.16.2"
PREFERRED_VERSION_xtrans ?= "1.2.5"
PREFERRED_VERSION_xtrans-native ?= "1.2.5"
#proto
@@ -346,8 +346,8 @@ PREFERRED_VERSION_imake ?= "1.0.2"
PREFERRED_VERSION_lndir ?= "1.0.1"
PREFERRED_VERSION_makedepend ?= "1.0.2"
PREFERRED_VERSION_makedepend-native ?= "1.0.2"
-PREFERRED_VERSION_util-macros ?= "1.3.0"
-PREFERRED_VERSION_util-macros-native ?= "1.3.0"
+PREFERRED_VERSION_util-macros ?= "1.4.1"
+PREFERRED_VERSION_util-macros-native ?= "1.4.1"
PREFERRED_VERSION_xorg-cf-files ?= "1.0.3"
#xserver
PREFERRED_VERSION_xserver-xorg ?= "1.7.3"
diff --git a/conf/distro/include/sane-feed-deb.inc b/conf/distro/include/sane-feed-deb.inc
index 4f38b8f936..d953d6ebe0 100644
--- a/conf/distro/include/sane-feed-deb.inc
+++ b/conf/distro/include/sane-feed-deb.inc
@@ -2,5 +2,5 @@
INHERIT += "package_deb"
-PREFERRED_PROVIDER_virtual/update-alternatives-native = "update-alternatives-cworth-native"
-PREFERRED_PROVIDER_virtual/update-alternatives = "update-alternatives-cworth"
+PREFERRED_PROVIDER_virtual/update-alternatives-native ?= "update-alternatives-cworth-native"
+PREFERRED_PROVIDER_virtual/update-alternatives ?= "update-alternatives-cworth"
diff --git a/conf/distro/include/sane-feed-ipk.inc b/conf/distro/include/sane-feed-ipk.inc
index a33a4ad2b4..14206bda2d 100644
--- a/conf/distro/include/sane-feed-ipk.inc
+++ b/conf/distro/include/sane-feed-ipk.inc
@@ -1,5 +1,4 @@
INHERIT += "package_ipk"
-PREFERRED_PROVIDER_virtual/update-alternatives-native = "update-alternatives-cworth-native"
-PREFERRED_PROVIDER_virtual/update-alternatives = "update-alternatives-cworth"
-
+PREFERRED_PROVIDER_virtual/update-alternatives-native ?= "opkg-native"
+PREFERRED_PROVIDER_virtual/update-alternatives ?= ${PREFERRED_PROVIDER_opkg}
diff --git a/conf/distro/include/sane-srcrevs-fso.inc b/conf/distro/include/sane-srcrevs-fso.inc
index f99b44945c..d975ec261a 100644
--- a/conf/distro/include/sane-srcrevs-fso.inc
+++ b/conf/distro/include/sane-srcrevs-fso.inc
@@ -30,7 +30,7 @@ SRCREV_pn-fso-specs ?= "14de522adbea80416df811085b3112cd1d5d5336"
SRCREV_pn-gsmd2 ?= "c16883a079aeff8780e5d461ec4e8348537ab4d8"
SRCREV_pn-libeflvala ?= "d07db4fbd24c9d5dfc9b1fd5024fd651b02f123e"
SRCREV_pn-libfso-glib ?= "9a627aa1c33f5a46ae4316fc274126ca5f37e979"
-SRCREV_pn-libframeworkd-glib ?= "dc5409fbf9d2d22a7fa871199bb66da5ac6f5084"
+SRCREV_pn-libframeworkd-glib ?= "e5cc248f241ea549810051fb95f0250bd1224cf9"
SRCREV_pn-libgsm0710 ?= "cd564c8782f018e0d65fb8716c99a6040b5bd166"
SRCREV_pn-libgsm0710mux ?= "e81ed512ec86e31d0d0119826afa9d1302651693"
SRCREV_pn-libpersistence ?= "26180fd3c0fe4eb6abb7440f10e51d997719b97a"
diff --git a/conf/distro/include/sane-srcrevs.inc b/conf/distro/include/sane-srcrevs.inc
index 8c9638571a..060f2277e3 100644
--- a/conf/distro/include/sane-srcrevs.inc
+++ b/conf/distro/include/sane-srcrevs.inc
@@ -46,7 +46,7 @@ SRCREV_pn-dfu-util-native ?= "4160"
SRCREV_pn-disko ?= "f52597b8d5d584811cbe8f9e0bf25ea372526953"
SRCREV_pn-diversity-daemon ?= "571"
SRCREV_pn-diversity-radar ?= "453"
-SRCREV_pn-e-tasks ?= "14"
+SRCREV_pn-e-tasks ?= "22"
SRCREV_pn-e-wm-config-illume-shr ?= "bbcec18f0ebd47e4f6eea88b9b774edf7400e752"
SRCREV_pn-e-wm-illume-dict-pl ?= "1cc80e26a4558dfc2268b349d9a1f468e515bcfb"
SRCREV_pn-e-wm-menu-shr ?= "1cc80e26a4558dfc2268b349d9a1f468e515bcfb"
@@ -66,7 +66,7 @@ SRCREV_pn-elf2flt ?= "1786"
SRCREV_pn-elmdentica ?= "171"
SRCREV_pn-enlazar ?= "37"
SRCREV_pn-enotes ?= "19"
-SRCREV_pn-epdfview ?= "345"
+SRCREV_pn-epdfview ?= "346"
SRCREV_pn-epiphany ?= "7837"
SRCREV_pn-essential-dialer ?= "194"
SRCREV_pn-etk-theme-neo ?= "1cc80e26a4558dfc2268b349d9a1f468e515bcfb"
@@ -86,7 +86,7 @@ SRCREV_pn-fsoraw ?= "20"
SRCREV_pn-fstests ?= "204"
SRCREV_pn-gabriel ?= "38"
SRCREV_pn-gabriel-native ?= "38"
-GCCREV ?= "145550"
+GCCREV ?= "155234"
SRCREV_pn-gcc ?= ${GCCREV}
SRCREV_pn-gcc-cross ?= ${GCCREV}
SRCREV_pn-gcc-cross-initial ?= ${GCCREV}
@@ -104,25 +104,15 @@ SRCREV_pn-gpe-theme-neo ?= "1cc80e26a4558dfc2268b349d9a1f468e515bcfb"
SRCREV_pn-gridpad ?= "194"
SRCREV_pn-gtk-theme-neo ?= "1cc80e26a4558dfc2268b349d9a1f468e515bcfb"
SRCREV_pn-gtkhtml2 ?= "1158"
+SRCREV_pn-guitartune ?= "11"
SRCREV_pn-gypsy ?= "134"
SRCREV_pn-hildon-1 ?= "14429"
SRCREV_pn-icon-theme-neo ?= "1cc80e26a4558dfc2268b349d9a1f468e515bcfb"
-SRCREV_pn-illume-keyboard-arabic ?= "89e689967d8a9e29d5a3bf84bfa32214f438a323"
-SRCREV_pn-illume-keyboard-browse ?= "89e689967d8a9e29d5a3bf84bfa32214f438a323"
-SRCREV_pn-illume-keyboard-danish ?= "89e689967d8a9e29d5a3bf84bfa32214f438a323"
-SRCREV_pn-illume-keyboard-default-alt ?= "89e689967d8a9e29d5a3bf84bfa32214f438a323"
-SRCREV_pn-illume-keyboard-dutch ?= "89e689967d8a9e29d5a3bf84bfa32214f438a323"
-SRCREV_pn-illume-keyboard-dvorak ?= "89e689967d8a9e29d5a3bf84bfa32214f438a323"
-SRCREV_pn-illume-keyboard-french ?= "89e689967d8a9e29d5a3bf84bfa32214f438a323"
-SRCREV_pn-illume-keyboard-german ?= "89e689967d8a9e29d5a3bf84bfa32214f438a323"
-SRCREV_pn-illume-keyboard-hebrew ?= "89e689967d8a9e29d5a3bf84bfa32214f438a323"
-SRCREV_pn-illume-keyboard-numeric-alt ?= "89e689967d8a9e29d5a3bf84bfa32214f438a323"
-SRCREV_pn-illume-keyboard-russian ?= "89e689967d8a9e29d5a3bf84bfa32214f438a323"
-SRCREV_pn-illume-keyboard-russian-terminal ?= "89e689967d8a9e29d5a3bf84bfa32214f438a323"
+SRCREV_pn-illume-keyboards-shr ?= "c23bde500152c303971b4c2ec5c463d760b7cc14"
SRCREV_pn-illume-theme-asu ?= "4881"
SRCREV_pn-illume-theme-freesmartphone ?= "b1b0f6adc59e6f72a3929771058e3750bf181bc5"
-SRCREV_pn-intone ?= "66"
-SRCREV_pn-intone-video ?= "9"
+SRCREV_pn-intone ?= "75"
+SRCREV_pn-intone-video ?= "12"
SRCREV_pn-intuition ?= "194"
SRCREV_pn-kismet ?= "2285"
SRCREV_pn-kismet-newcore ?= "2285"
@@ -196,7 +186,7 @@ SRCREV_pn-mplayer-maemo ?= "342"
SRCREV_pn-msn-pecan ?= "e795b33b29d792f19fcf699275eb966dc68be257"
SRCREV_pn-multitap-pad ?= "373"
SRCREV_pn-mux ?= "72460e890dbb15edbf7dc193116be0dcf9794a8b"
-SRCREV_pn-navit ?= "2809"
+SRCREV_pn-navit ?= "2846"
SRCREV_pn-navit-icons ?= "2618"
SRCREV_pn-neod ?= "4617"
SRCREV_pn-neomis ?= "6"
@@ -303,10 +293,10 @@ SRCREV_pn-shr-config ?= "37dd7ac950e2bfd438801faf34c29fccfdbbaccf"
SRCREV_pn-shr-contacts ?= "9d7ca1cecb93022e5b890cd87756ac6f072710ca"
SRCREV_pn-shr-dialer ?= "9d7ca1cecb93022e5b890cd87756ac6f072710ca"
SRCREV_pn-shr-installer ?= "f17fa104639113fb0d3212b6bba366c092854cde"
-SRCREV_pn-shr-launcher ?= "92"
+SRCREV_pn-shr-launcher ?= "99"
SRCREV_pn-shr-messages ?= "9d7ca1cecb93022e5b890cd87756ac6f072710ca"
SRCREV_pn-shr-settings ?= "ef06fe86c49958673889671c46682c0b2f1d74d7"
-SRCREV_pn-shr-specs ?= "ed8452c3153b6961f2d264129edcd349296d49c3"
+SRCREV_pn-shr-specs ?= "63dd65685a5ab8a304e6c9e12320f07ac58a0aca"
SRCREV_pn-shr-splash ?= "9d7ca1cecb93022e5b890cd87756ac6f072710ca"
SRCREV_pn-shr-splash-theme-dontpanic ?= "e994275bbfdca33a6776d9edbddc711c10aba40d"
SRCREV_pn-shr-splash-theme-handy ?= "e994275bbfdca33a6776d9edbddc711c10aba40d"
@@ -418,6 +408,9 @@ SRCREV_pn-illume ?= "${EFL_SRCREV}"
SRCREV_pn-illume-theme-illume ?= "${EFL_SRCREV}"
SRCREV_pn-waker ?= "${EFL_SRCREV}"
+#illume default keyboards
+SRCREV_pn-illume-keyboard-default ?= "${EFL_SRCREV}"
+
#exalt
SRCREV_pn-exalt ?= "${EFL_SRCREV}"
SRCREV_pn-exalt-client ?= "${EFL_SRCREV}"
diff --git a/conf/distro/include/slugos.inc b/conf/distro/include/slugos.inc
index 8a331ae7f2..10a2bc4a02 100644
--- a/conf/distro/include/slugos.inc
+++ b/conf/distro/include/slugos.inc
@@ -166,6 +166,12 @@ PREFERRED_PROVIDER_avahi ?= "avahi"
PREFERRED_PROVIDER_gconf ?= "gconf"
PREFERRED_PROVIDER_virtual/libusb0 ?= "libusb-compat"
+# we use bluez4 instead of the older bluez3
+DISTRO_BLUETOOTH_MANAGER = "bluez4"
+PREFERRED_PROVIDER_bluez-utils-dbus = "bluez-utils"
+PREFERRED_PROVIDER_bluez-libs = "bluez4"
+PREFERRED_PROVIDER_bluez-utils = "bluez4"
+
# Include any package preferred versions and srcrevs:
require conf/distro/include/preferred-slugos-versions.inc
diff --git a/conf/distro/micro.conf b/conf/distro/micro.conf
index 25880dff9d..d9fc595303 100644
--- a/conf/distro/micro.conf
+++ b/conf/distro/micro.conf
@@ -72,12 +72,6 @@ OVERRIDES = "local:${MACHINE}:${MACHINE_CLASS}:${DISTRO}:${TARGET_OS}:\
${TARGET_ARCH}:build-${BUILD_OS}:fail-fast:pn-${PN}"
#############################################################################
-# PREFERRED PROVIDERS
-#############################################################################
-PREFERRED_PROVIDER_task-bootstrap = "task-bootstrap"
-PREFERRED_PROVIDER_virtual/libx11 = "libx11"
-PREFERRED_PROVIDER_virtual/gail ?= "gtk+"
-#############################################################################
# PREFERRED VERSIONS
#############################################################################
require conf/distro/include/sane-srcdates.inc
diff --git a/conf/distro/minimal.conf b/conf/distro/minimal.conf
index 33eceab456..1e9eec20f4 100644
--- a/conf/distro/minimal.conf
+++ b/conf/distro/minimal.conf
@@ -84,20 +84,6 @@ LIBC ?= "eglibc"
require conf/distro/include/sane-toolchain.inc
#############################################################################
-# PREFERRED PROVIDERS
-#############################################################################
-PREFERRED_PROVIDER_task-bootstrap = "task-bootstrap"
-PREFERRED_PROVIDER_avahi = "avahi"
-PREFERRED_PROVIDER_gconf = "gconf-dbus"
-PREFERRED_PROVIDER_gtk+ = "gtk+"
-PREFERRED_PROVIDER_libgpewidget = "libgpewidget"
-PREFERRED_PROVIDER_virtual/db = "db3"
-PREFERRED_PROVIDER_virtual/db-native = "db3-native"
-PREFERRED_PROVIDER_virtual/libsdl = "libsdl-x11"
-PREFERRED_PROVIDER_virtual/libx11 ?= "libx11"
-PREFERRED_PROVIDER_virtual/libusb0 ?= "libusb"
-
-#############################################################################
# PREFERRED VERSIONS
#############################################################################
require conf/distro/include/sane-srcdates.inc
diff --git a/conf/distro/shr.conf b/conf/distro/shr.conf
index a1f2089d1b..64d45e41d1 100644
--- a/conf/distro/shr.conf
+++ b/conf/distro/shr.conf
@@ -157,34 +157,11 @@ require conf/distro/include/sane-toolchain.inc
#############################################################################
# PREFERRED PROVIDERS
#############################################################################
-PREFERRED_PROVIDER_qemu-native = "qemu-native"
-PREFERRED_PROVIDER_gconf = "gconf"
-PREFERRED_PROVIDER_virtual/shr-splash-theme = "shr-splash-theme-logo"
-PREFERRED_PROVIDER_frameworkd-config = "frameworkd-config-shr"
PREFERRED_PROVIDER_gpsd = "fso-gpsd"
-PREFERRED_PROVIDER_e-wm-menu = "e-wm-menu-shr"
-PREFERRED_PROVIDER_openmoko-alsa-scenarios = "alsa-scenarii-shr"
-PREFERRED_PROVIDER_virtual/alsa-scenarios = "alsa-scenarii-shr"
-PREFERRED_PROVIDER_libfribidi = "fribidi"
-PREFERRED_PROVIDER_bluez-libs = "bluez4"
-PREFERRED_PROVIDER_bluez-utils = "bluez4"
-PREFERRED_PROVIDER_classpath = "classpath"
-PREFERRED_PROVIDER_virtual/javac-native = "ecj-bootstrap-native"
-PREFERRED_PROVIDER_virtual/java-native = "jamvm-native"
-PREFERRED_PROVIDER_virtual/gail = "gtk+"
-PREFERRED_PROVIDER_opkg = "opkg"
-PREFERRED_PROVIDER_virtual/java-initial = "jamvm-initial"
PREFERRED_PROVIDER_atd = "atd-over-fso"
-PREFERRED_PROVIDER_qt4x11 = "qt4-x11-free"
-PREFERRED_PROVIDER_task-bootstrap = "task-bootstrap"
-PREFERRED_PROVIDER_avahi = "avahi"
-PREFERRED_PROVIDER_gtk+ = "gtk+"
-PREFERRED_PROVIDER_libgpewidget = "libgpewidget"
-PREFERRED_PROVIDER_virtual/db = "db3"
-PREFERRED_PROVIDER_virtual/db-native = "db3-native"
-PREFERRED_PROVIDER_virtual/libsdl = "libsdl-x11"
-PREFERRED_PROVIDER_virtual/libx11 ?= "libx11"
+PREFERRED_PROVIDER_opkg = "opkg"
PREFERRED_PROVIDER_virtual/libusb0 ?= "libusb"
+PREFERRED_PROVIDER_frameworkd-config = "frameworkd-config-shr"
#############################################################################
# PREFERRED VERSIONS
diff --git a/conf/distro/slugos.conf b/conf/distro/slugos.conf
index d82be5d2b5..d9b00f41a8 100644
--- a/conf/distro/slugos.conf
+++ b/conf/distro/slugos.conf
@@ -12,7 +12,8 @@ DISTRO_TYPE = "alpha"
TARGET_ARCH ?= "armeb"
ARM_INSTRUCTION_SET = "arm"
TARGET_OS = "linux-gnueabi"
-IPKG_VARIANT ?= "opkg-nogpg-nocurl"
+IPKG_VARIANT ?= "opkg-nogpg-nocurl-slugos"
+PREFERRED_PROVIDER_opkg ?= "opkg-nogpg-nocurl-slugos"
IMAGE_INITSCRIPTS ?= "initscripts-slugos"
require conf/distro/include/slugos.inc
diff --git a/conf/machine/cm-t35.conf b/conf/machine/cm-t35.conf
new file mode 100644
index 0000000000..ccb9f95773
--- /dev/null
+++ b/conf/machine/cm-t35.conf
@@ -0,0 +1,46 @@
+#@TYPE: Machine
+#@NAME: CM-T35 machine
+#@DESCRIPTION: Machine configuration for the CompuLab CM-T35 board (http://www.compulab.co.il/t3530/html/t3530-cm-datasheet.htm)
+
+TARGET_ARCH = "arm"
+
+PREFERRED_PROVIDER_virtual/xserver = "xserver-xorg"
+XSERVER = "xserver-xorg \
+ xf86-input-evdev \
+ xf86-input-mouse \
+ xf86-input-evtouch \
+ xf86-input-tslib \
+ xf86-video-omapfb \
+ xf86-input-keyboard"
+
+GUI_MACHINE_CLASS = "bigscreen"
+
+require conf/machine/include/omap3.inc
+
+IMAGE_FSTYPES += "tar.bz2 ubi"
+EXTRA_IMAGECMD_jffs2 = "-lnp "
+
+# Guesswork
+SERIAL_CONSOLE = "115200 ttyS2"
+
+UBOOT_MACHINE = "cm_t35_config"
+PREFERRED_VERSION_u-boot = "git"
+
+# do ubiattach /dev/ubi_ctrl -m 4
+# From dmesg:
+# UBI: smallest flash I/O unit: 2048
+# UBI: logical eraseblock size: 126976 bytes
+# from ubiattach stdout:
+# UBI device number 0, total 4039 LEBs
+MKUBIFS_ARGS = "-m 2048 -e 126976 -c 4039"
+
+# do ubiattach /dev/ubi_ctrl -m 4
+# from dmesg:
+# UBI: smallest flash I/O unit: 2048
+# UBI: physical eraseblock size: 131072 bytes (128 KiB)
+# UBI: sub-page size: 512
+UBINIZE_ARGS = "-O 2048 -m 2048 -p 128KiB"
+
+MACHINE_EXTRA_RRECOMMENDS = "marvell-sdio-fw"
+MACHINE_FEATURES = "kernel26 screen apm usbgadget usbhost vfat alsa wifi ext2"
+
diff --git a/conf/machine/da830-omapl137-evm.conf b/conf/machine/da830-omapl137-evm.conf
index 4df4d63cca..0164e1c27d 100644
--- a/conf/machine/da830-omapl137-evm.conf
+++ b/conf/machine/da830-omapl137-evm.conf
@@ -3,6 +3,7 @@
#@DESCRIPTION: Machine configuration for the TI DA830/OMAPL137 EVM board
require conf/machine/include/davinci.inc
+require conf/machine/include/omapl137.inc
UBOOT_MACHINE = "da830_omapl137_evm_config"
UBOOT_ENTRYPOINT = "0xc0008000"
diff --git a/conf/machine/da850-omapl138-evm.conf b/conf/machine/da850-omapl138-evm.conf
index bbcb45002e..aaf7583e5d 100644
--- a/conf/machine/da850-omapl138-evm.conf
+++ b/conf/machine/da850-omapl138-evm.conf
@@ -3,6 +3,7 @@
#@DESCRIPTION: Machine configuration for the TI DA850/OMAPL138 EVM board
require conf/machine/include/davinci.inc
+require conf/machine/include/omapl138.conf
UBOOT_MACHINE = "da850_omapl138_evm_config"
UBOOT_ENTRYPOINT = "0xc0008000"
diff --git a/conf/machine/davinci-sffsdr.conf b/conf/machine/davinci-sffsdr.conf
index e3c0554f71..63fc2cacc4 100644
--- a/conf/machine/davinci-sffsdr.conf
+++ b/conf/machine/davinci-sffsdr.conf
@@ -28,4 +28,5 @@ MACHINE_FEATURES = "kernel26 serial"
#MACHINE_EXTRA_RRECOMMENDS = "dsplink-module"
require conf/machine/include/tune-arm926ejs.inc
+require conf/machine/include/dm6446.inc
diff --git a/conf/machine/dm355-evm.conf b/conf/machine/dm355-evm.conf
index 73c9f1e017..a352b5e926 100644
--- a/conf/machine/dm355-evm.conf
+++ b/conf/machine/dm355-evm.conf
@@ -5,4 +5,4 @@
require conf/machine/include/davinci.inc
require conf/machine/include/dm355.inc
-UBOOT_MACHINE = "davinci_dm355evm_config"
+UBOOT_MACHINE = "davinci_dm355_evm_config"
diff --git a/conf/machine/dm365-evm.conf b/conf/machine/dm365-evm.conf
index 7cea5dc727..1fd51234e2 100644
--- a/conf/machine/dm365-evm.conf
+++ b/conf/machine/dm365-evm.conf
@@ -3,5 +3,6 @@
#@DESCRIPTION: Machine configuration for the TI Davinci DM365 EVM board
require conf/machine/include/davinci.inc
+require conf/machine/include/dm365.inc
UBOOT_MACHINE = "davinci_dm365evm_config"
diff --git a/conf/machine/dm6446-evm.conf b/conf/machine/dm6446-evm.conf
index 8b048a5474..aaa7492991 100644
--- a/conf/machine/dm6446-evm.conf
+++ b/conf/machine/dm6446-evm.conf
@@ -3,5 +3,6 @@
#@DESCRIPTION: Machine configuration for the TI Davinci DM6446 EVM board
require conf/machine/include/davinci.inc
+require conf/machine/include/dm6446.inc
UBOOT_MACHINE = "davinci_dvevm_config"
diff --git a/conf/machine/hawkboard.conf b/conf/machine/hawkboard.conf
index 5a9df79ade..ccf571ef9f 100644
--- a/conf/machine/hawkboard.conf
+++ b/conf/machine/hawkboard.conf
@@ -3,6 +3,7 @@
#@DESCRIPTION: Machine configuration for the TI Hawkboard
require conf/machine/include/davinci.inc
+require conf/machine/include/omapl138.conf
UBOOT_MACHINE = "da850_omapl138_evm_config"
UBOOT_ENTRYPOINT = "0xc0008000"
diff --git a/conf/machine/include/davinci.inc b/conf/machine/include/davinci.inc
index ceafa800b2..3f8254aff4 100644
--- a/conf/machine/include/davinci.inc
+++ b/conf/machine/include/davinci.inc
@@ -1,7 +1,7 @@
require conf/machine/include/tune-arm926ejs.inc
# Increase this everytime you change something in the kernel
-MACHINE_KERNEL_PR = "r12"
+MACHINE_KERNEL_PR = "r28"
TARGET_ARCH = "arm"
diff --git a/conf/machine/include/dm355.inc b/conf/machine/include/dm355.inc
index dffafe4460..d666d5e030 100644
--- a/conf/machine/include/dm355.inc
+++ b/conf/machine/include/dm355.inc
@@ -1,9 +1,2 @@
-
-DEVICES = "DM355"
-GPPOS = "LINUX_GCC"
-PLATFORM = "dm355"
-PROGRAMS = "APP_LOCAL"
-TARGET = "dm355_al"
-XDC_PLATFORM = ti.platforms.evmDM355
-
+SOC_FAMILY = "dm355"
diff --git a/conf/machine/include/dm365.inc b/conf/machine/include/dm365.inc
new file mode 100644
index 0000000000..c53680ea63
--- /dev/null
+++ b/conf/machine/include/dm365.inc
@@ -0,0 +1,12 @@
+SOC_FAMILY = "dm365"
+
+
+# DMAI
+PLATFORM = "dm365"
+XDC_PLATFORM = ti.platforms.evmDM365
+
+# Obsoleted (CE examples rebuild)
+#GPPOS = "LINUX_GCC"
+
+# DMAI recipe
+#TARGET = "dm365_al"
diff --git a/conf/machine/include/dm6446.inc b/conf/machine/include/dm6446.inc
new file mode 100644
index 0000000000..c14e573c74
--- /dev/null
+++ b/conf/machine/include/dm6446.inc
@@ -0,0 +1,13 @@
+SOC_FAMILY = "dm6446"
+
+# TI DVSDK stuff:
+DSPCFG ?= "DM6446GEMSHMEM"
+DSPLINKDSPCFG ?= "DM6446GEMSHMEM"
+DSPLINKGPPOS ?= "MVL5G"
+DSPLINKPLATFORM ?= "DAVINCI"
+DSPLINKSOC ?= "DM6446"
+DSPPOWERSOC ?= "DM6446"
+GPPOS ?= "LINUX_GCC"
+PLATFORM ?= "dm6446"
+XDC_PLATFORM ?= "ti.platforms.evmDM6446"
+
diff --git a/conf/machine/include/omap3.inc b/conf/machine/include/omap3.inc
index 2f242a4b38..9ff7b91ad9 100644
--- a/conf/machine/include/omap3.inc
+++ b/conf/machine/include/omap3.inc
@@ -1,3 +1,5 @@
+SOC_FAMILY = "omap3"
+
require conf/machine/include/tune-cortexa8.inc
PREFERRED_PROVIDER_virtual/kernel = "linux-omap"
# Increase this everytime you change something in the kernel
@@ -12,17 +14,10 @@ UBOOT_LOADADDRESS = "0x80008000"
EXTRA_IMAGEDEPENDS += "u-boot"
# TI DVSDK stuff:
-CODEC_INSTALL_DIR ?= "${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/ti-codec-combo"
-CODEC ?= "${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/ti-codec-combo"
-DEVICES ?= "OMAP3530"
-DSPCFG ?= "OMAP3530SHMEM"
+# DSPLink rebuild
DSPLINKDSPCFG ?= "OMAP3530SHMEM"
DSPLINKGPPOS ?= "OMAPLSP"
DSPLINKPLATFORM ?= "OMAP3530"
DSPLINKSOC ?= "3530"
-DSPPOWERSOC ?= "omap3530"
-GPPOS ?= "LINUX_GCC"
-LPMDSPPOWERSOC ?= "omap3530"
-PLATFORM ?= "omap3530"
-XDC_PLATFORM ?= "ti.platforms.evm3530"
+
diff --git a/conf/machine/include/omapl137.conf b/conf/machine/include/omapl137.conf
new file mode 100644
index 0000000000..34d0e9a754
--- /dev/null
+++ b/conf/machine/include/omapl137.conf
@@ -0,0 +1,2 @@
+SOC_FAMILY = "omapl137"
+
diff --git a/conf/machine/include/omapl138.conf b/conf/machine/include/omapl138.conf
new file mode 100644
index 0000000000..4c222753df
--- /dev/null
+++ b/conf/machine/include/omapl138.conf
@@ -0,0 +1 @@
+SOC_FAMILY = "omapl138"
diff --git a/conf/machine/include/tune-atom.inc b/conf/machine/include/tune-atom.inc
index a7dd04f596..44058c12be 100644
--- a/conf/machine/include/tune-atom.inc
+++ b/conf/machine/include/tune-atom.inc
@@ -1,8 +1,9 @@
# GCC 4.3.0- (see Poky)
# TARGET_CC_ARCH = "-march=i586"
-#
# GCC 4.3.1+ (see Gentoo)
TARGET_CC_ARCH = "-march=core2"
-
# GCC 4.4.2+ (see Fedora 12)
#TARGET_CC_ARCH = "-march=i686 -mtune=atom"
+BASE_PACKAGE_ARCH = "i686"
+FEED_ARCH = "i686"
+PACKAGE_EXTRA_ARCHS += "x86 i386 i486 i586" \ No newline at end of file
diff --git a/conf/machine/include/zaurus-kernel.inc b/conf/machine/include/zaurus-kernel.inc
index d9f1c1ba85..1ba4a3422d 100644
--- a/conf/machine/include/zaurus-kernel.inc
+++ b/conf/machine/include/zaurus-kernel.inc
@@ -3,6 +3,9 @@
MACHINE_KERNEL_VERSION = "2.6"
PREFERRED_PROVIDER_virtual/kernel = "linux-rp"
+
+# Starting with 2.6.32 linux-rp is deprecated
+#PREFERRED_PROVIDER_virtual/kernel = "linux"
PREFERRED_PROVIDER_virtual/kernel_collie = "linux"
PREFERRED_PROVIDER_virtual/kernel_tosa = "linux"
diff --git a/conf/machine/ion.conf b/conf/machine/ion.conf
index f58219bd1a..23b3cf7c37 100644
--- a/conf/machine/ion.conf
+++ b/conf/machine/ion.conf
@@ -8,8 +8,6 @@ TARGET_ARCH = "i686"
#MACHINE_ARCH = "core2"
-PACKAGE_EXTRA_ARCHS = "x86"
-
include conf/machine/include/tune-atom.inc
MACHINE_FEATURES = "kernel26 screen keyboard pci usbhost ext2 ext3 x86 wifi \
diff --git a/conf/machine/neuros-osd2.conf b/conf/machine/neuros-osd2.conf
index b751cbcac2..9b552a462a 100644
--- a/conf/machine/neuros-osd2.conf
+++ b/conf/machine/neuros-osd2.conf
@@ -26,4 +26,5 @@ MACHINE_FEATURES = "kernel26 pcmcia usbhost screen"
require conf/machine/include/tune-arm926ejs.inc
require conf/machine/include/neuros.inc
+require conf/machine/include/dm6446.inc
diff --git a/conf/machine/om-gta01.conf b/conf/machine/om-gta01.conf
index 5bdeba01f3..e1c5127072 100644
--- a/conf/machine/om-gta01.conf
+++ b/conf/machine/om-gta01.conf
@@ -12,7 +12,7 @@ PREFERRED_PROVIDER_virtual/kernel ?= "linux-openmoko-2.6.24"
PREFERRED_PROVIDER_virtual/kernel_shr = "linux-openmoko-shr-devel"
PREFERRED_PROVIDER_virtual/xserver_shr = "xserver-xorg"
PREFERRED_PROVIDER_xf86-video-fbdev_shr = "xf86-video-fbdev"
-PREFERRED_PROVIDER_mesa_shr = "mesa"
+PREFERRED_PROVIDER_virtual/libgl = "mesa"
XSERVER_shr = "xserver-xorg xf86-video-fbdev xf86-input-evdev xf86-input-keyboard"
UBOOT_ENTRYPOINT = "30008000"
diff --git a/conf/machine/om-gta02.conf b/conf/machine/om-gta02.conf
index 5fc96ec4ed..8e8355ba6f 100644
--- a/conf/machine/om-gta02.conf
+++ b/conf/machine/om-gta02.conf
@@ -15,8 +15,8 @@ PREFERRED_PROVIDER_virtual/kernel_shr = "linux-openmoko-shr-devel"
#PREFERRED_PROVIDER_virtual/kernel_shr = "linux-openmoko-2.6.31"
PREFERRED_PROVIDER_virtual/xserver_shr = "xserver-xorg"
-PREFERRED_PROVIDER_virtual/libgl_shr = "mesa-dri"
-MACHINE_DRI_MODULES_shr = "glamo"
+PREFERRED_PROVIDER_virtual/libgl = "mesa-dri"
+MACHINE_DRI_MODULES = "glamo"
XSERVER_shr = "xserver-xorg xf86-video-glamo xf86-input-evdev xf86-input-keyboard xf86-input-mouse"
diff --git a/conf/machine/sgh-i900.conf b/conf/machine/sgh-i900.conf
index 2080bf8e1a..4d3cd5fcee 100644
--- a/conf/machine/sgh-i900.conf
+++ b/conf/machine/sgh-i900.conf
@@ -11,6 +11,7 @@ TARGET_ARCH = "arm"
require conf/machine/include/tune-xscale.inc
MACHINE_FEATURES = "alsa apm bluetooth camera gps kernel26 phone screen touchscreen vfat wifi"
+MACHINE_EXTRA_RRECOMMENDS = " kernel-modules"
# Software/packages selection
#
diff --git a/contrib/angstrom/build-feeds.sh b/contrib/angstrom/build-feeds.sh
index 10c9d45f99..5e805aa60c 100755
--- a/contrib/angstrom/build-feeds.sh
+++ b/contrib/angstrom/build-feeds.sh
@@ -238,6 +238,7 @@ do
mplayer \
mtd-utils \
mutt \
+ mysql5 \
mythtv \
nautilus \
nbench-byte \
@@ -267,6 +268,7 @@ do
pciutils \
pdamaze \
perl \
+ php \
pidgin \
pine \
pingus \
diff --git a/contrib/angstrom/omap3-mkcard.sh b/contrib/angstrom/omap3-mkcard.sh
new file mode 100755
index 0000000000..dc4359c38c
--- /dev/null
+++ b/contrib/angstrom/omap3-mkcard.sh
@@ -0,0 +1,52 @@
+#! /bin/sh
+# mkcard.sh v0.4
+# (c) Copyright 2009 Graeme Gregory <dp@xora.org.uk>
+# Licensed under terms of GPLv2
+#
+# Parts of the procudure base on the work of Denys Dmytriyenko
+# http://wiki.omap.com/index.php/MMC_Boot_Format
+
+LC_ALL=C
+
+if [ $# -ne 1 ]; then
+ echo "Usage: $0 <drive>"
+ exit 1;
+fi
+
+DRIVE=$1
+
+dd if=/dev/zero of=$DRIVE bs=1024 count=1024
+
+SIZE=`fdisk -l $DRIVE | grep Disk | awk '{print $5}'`
+
+echo DISK SIZE - $SIZE bytes
+
+CYLINDERS=`echo $SIZE/255/63/512 | bc`
+
+echo CYLINDERS - $CYLINDERS
+
+{
+echo ,9,0x0C,*
+echo ,,,-
+} | sfdisk -D -H 255 -S 63 -C $CYLINDERS $DRIVE
+
+if [ -b ${DRIVE}1 ]; then
+ mkfs.vfat -F 32 -n "boot" ${DRIVE}1
+else
+ if [ -b ${DRIVE}p1 ]; then
+ mkfs.vfat -F 32 -n "boot" ${DRIVE}p1
+ else
+ echo "Cant find boot partition in /dev"
+ fi
+fi
+
+if [ -b ${DRIVE}2 ]; then
+ mke2fs -j -L "rootfs" ${DRIVE}2
+else
+ if [ -b ${DRIVE}p2 ]; then
+ mke2fs -j -L "rootfs" ${DRIVE}p2
+ else
+ echo "Cant find rootfs partition in /dev"
+ fi
+fi
+
diff --git a/recipes/aceofpenguins/aceofpenguins-launcher_0.3.bb b/recipes/aceofpenguins/aceofpenguins-launcher_0.4.bb
index 265b8c6651..265b8c6651 100644
--- a/recipes/aceofpenguins/aceofpenguins-launcher_0.3.bb
+++ b/recipes/aceofpenguins/aceofpenguins-launcher_0.4.bb
diff --git a/recipes/angstrom/angstrom-led-config.bb b/recipes/angstrom/angstrom-led-config.bb
index 2dbfd01952..a0373edae3 100644
--- a/recipes/angstrom/angstrom-led-config.bb
+++ b/recipes/angstrom/angstrom-led-config.bb
@@ -1,7 +1,7 @@
DESCRIPTION = "Configuration files for runtime LED configuration"
#PV = "${DISTRO_VERSION}"
-PR = "r6"
+PR = "r7"
PACKAGE_ARCH = "${MACHINE_ARCH}"
inherit update-rc.d
diff --git a/recipes/angstrom/angstrom-led-config/cm-t35/leds b/recipes/angstrom/angstrom-led-config/cm-t35/leds
new file mode 100644
index 0000000000..4d243964fc
--- /dev/null
+++ b/recipes/angstrom/angstrom-led-config/cm-t35/leds
@@ -0,0 +1,2 @@
+#file format: name trigger
+cm-t35:green heartbeat
diff --git a/recipes/apache2/apache2-native_2.2.14.bb b/recipes/apache2/apache2-native_2.2.14.bb
index 460c3fdf9d..371bb49a88 100644
--- a/recipes/apache2/apache2-native_2.2.14.bb
+++ b/recipes/apache2/apache2-native_2.2.14.bb
@@ -3,7 +3,7 @@ DEPENDS = "expat pcre"
inherit native
-PR ="r0"
+PR ="r1"
SRC_URI = "http://www.apache.org/dist/httpd/httpd-${PV}.tar.bz2"
S = "${WORKDIR}/httpd-${PV}"
@@ -14,7 +14,6 @@ do_configure () {
do_stage () {
install -d ${STAGING_BINDIR_NATIVE}
- cp srclib/pcre/dftables ${STAGING_BINDIR_NATIVE}
cp server/gen_test_char ${STAGING_BINDIR_NATIVE}
cp srclib/apr/apr-1-config ${STAGING_BINDIR_NATIVE}
cp srclib/apr-util/apu-1-config ${STAGING_BINDIR_NATIVE}
diff --git a/recipes/apache2/apache2_2.2.14.bb b/recipes/apache2/apache2_2.2.14.bb
index 8990d53050..4ad77438ef 100644
--- a/recipes/apache2/apache2_2.2.14.bb
+++ b/recipes/apache2/apache2_2.2.14.bb
@@ -3,10 +3,9 @@ DESCRIPTION = "The apache v2 web server"
DEPENDS = "apache2-native openssl expat pcre"
RDEPENDS += "openssl"
-PR = "r0"
+PR = "r1"
SRC_URI = "http://apache.mirrors.tds.net/httpd/httpd-${PV}.tar.bz2 \
- file://dftables-makefile-patch;patch=1 \
file://apr-sockets-patch;patch=1 \
file://configure-patch;patch=1 \
file://server-makefile-patch;patch=1 \
@@ -74,6 +73,7 @@ CFLAGS_prepend = "-I${STAGING_INCDIR}/openssl "
EXTRA_OECONF = "--enable-ssl \
--with-ssl=${STAGING_LIBDIR}/.. \
--with-expat=${STAGING_LIBDIR}/.. \
+ --with-pcre=${STAGING_LIBDIR}/.. \
--enable-info \
--enable-rewrite \
--with-dbm=sdbm \
diff --git a/recipes/asio/asio.inc b/recipes/asio/asio.inc
new file mode 100644
index 0000000000..a8b283683b
--- /dev/null
+++ b/recipes/asio/asio.inc
@@ -0,0 +1,14 @@
+DESCRIPTION = "Asio"
+HOMEPAGE = "http://asio.sf.net/"
+SECTION = "libs"
+PRIORITY = "optional"
+LICENSE = "Boost Software License"
+
+INC_PR = "r1"
+
+DEPENDS = "boost"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/asio/${PN}-${PV}.tar.bz2"
+
+inherit autotools
+
diff --git a/recipes/asio/asio_1.1.1.bb b/recipes/asio/asio_1.1.1.bb
index e0b610d8c9..1a4dad6932 100644
--- a/recipes/asio/asio_1.1.1.bb
+++ b/recipes/asio/asio_1.1.1.bb
@@ -1,18 +1,3 @@
-DESCRIPTION = "Asio"
-HOMEPAGE = "http://asio.sf.net/"
-SECTION = "libs"
-PRIORITY = "optional"
-LICENSE = "Boost Software License"
-
-PR = "r1"
-
-DEPENDS = "boost"
-
-SRC_URI = "${SOURCEFORGE_MIRROR}/asio/${PN}-${PV}.tar.bz2"
-
-inherit autotools pkgconfig
-
-do_stage() {
- autotools_stage_all
-}
+require asio.inc
+PR = "${INC_PR}.0"
diff --git a/recipes/asio/asio_1.4.1.bb b/recipes/asio/asio_1.4.1.bb
new file mode 100644
index 0000000000..1a4dad6932
--- /dev/null
+++ b/recipes/asio/asio_1.4.1.bb
@@ -0,0 +1,3 @@
+require asio.inc
+
+PR = "${INC_PR}.0"
diff --git a/recipes/binutils/binutils-2.20/binutils-2.16.91.0.6-objcopy-rename-errorcode.patch b/recipes/binutils/binutils-2.20/binutils-2.16.91.0.6-objcopy-rename-errorcode.patch
deleted file mode 100644
index 8df5b1fea0..0000000000
--- a/recipes/binutils/binutils-2.20/binutils-2.16.91.0.6-objcopy-rename-errorcode.patch
+++ /dev/null
@@ -1,39 +0,0 @@
-# strip (and objcopy) fail to set the error code if there is no
-# output file name and the rename of the stripped (or copied) file
-# fails, yet the command fails to do anything. This fixes both
-# objcopy and strip.
-#
-# modification by bero: Ported to 2.16.91.0.6
-#
-#Signed-off-by: John Bowler <jbowler@acm.org>
-#Signed-off-by: Bernhard Rosenkraenzer <bero@arklinux.org>
----
-# binutils/objcopy.c | 8 +++++---
-# 1 file changed, 5 insertions(+), 3 deletions(-)
-#
-Index: src/binutils/objcopy.c
-===================================================================
---- src.orig/binutils/objcopy.c 2007-08-09 13:26:03.000000000 +0100
-+++ src/binutils/objcopy.c 2007-08-09 16:36:12.000000000 +0100
-@@ -2787,8 +2787,9 @@ strip_main (int argc, char *argv[])
- if (preserve_dates)
- set_times (tmpname, &statbuf);
- if (output_file != tmpname)
-- smart_rename (tmpname, output_file ? output_file : argv[i],
-- preserve_dates);
-+ if (smart_rename (tmpname, output_file ? output_file : argv[i],
-+ preserve_dates))
-+ hold_status = 1;
- status = hold_status;
- }
- else
-@@ -3411,7 +3412,8 @@ copy_main (int argc, char *argv[])
- if (preserve_dates)
- set_times (tmpname, &statbuf);
- if (tmpname != output_filename)
-- smart_rename (tmpname, input_filename, preserve_dates);
-+ if (smart_rename (tmpname, input_filename, preserve_dates))
-+ status = 1;
- }
- else
- unlink_if_ordinary (tmpname);
diff --git a/recipes/binutils/binutils-2.20/binutils-arm-pr7093.patch b/recipes/binutils/binutils-2.20/binutils-arm-pr7093.patch
deleted file mode 100644
index ad4a556e0f..0000000000
--- a/recipes/binutils/binutils-2.20/binutils-arm-pr7093.patch
+++ /dev/null
@@ -1,19 +0,0 @@
-Index: binutils/bfd/elf32-arm.c
-===================================================================
-RCS file: /cvs/src/src/bfd/elf32-arm.c,v
-retrieving revision 1.162
-retrieving revision 1.163
-diff -u -r1.162 -r1.163
---- binutils/bfd/elf32-arm.c 23 Dec 2008 09:01:45 -0000 1.162
-+++ binutils/bfd/elf32-arm.c 23 Dec 2008 11:46:17 -0000 1.163
-@@ -4608,6 +4608,10 @@
- Elf_Internal_Shdr *hdr;
- unsigned int i, localsyms;
-
-+ /* PR 7093: Make sure that we are dealing with an arm elf binary. */
-+ if (! is_arm_elf (abfd))
-+ return;
-+
- if ((abfd->flags & DYNAMIC) != 0)
- return;
-
diff --git a/recipes/binutils/binutils-2.20/uclibc-segfault.patch b/recipes/binutils/binutils-2.20/uclibc-segfault.patch
deleted file mode 100644
index 16a875f8eb..0000000000
--- a/recipes/binutils/binutils-2.20/uclibc-segfault.patch
+++ /dev/null
@@ -1,23 +0,0 @@
-upstream: already committed
-
---- clean/binutils-2.19.51/bfd/elf32-arm.c 2009-05-22 12:58:44.000000000 +0100
-+++ binutils-2.19.51/bfd/elf32-arm.c 2009-06-08 21:29:49.000000000 +0100
-@@ -8960,7 +8964,7 @@ elf32_arm_fix_exidx_coverage (asection *
- struct bfd_elf_section_data *elf_sec = elf_section_data (sec);
- Elf_Internal_Shdr *hdr = &elf_sec->this_hdr;
-
-- if (hdr->sh_type != SHT_ARM_EXIDX)
-+ if (!hdr || hdr->sh_type != SHT_ARM_EXIDX)
- continue;
-
- if (elf_sec->linked_to)
---- clean/binutils-2.19.51/ld/emultempl/armelf.em 2009-05-22 12:58:45.000000000 +0100
-+++ binutils-2.19.51/ld/emultempl/armelf.em 2009-06-08 21:26:34.000000000 +0100
-@@ -309,6 +309,7 @@ gld${EMULATION_NAME}_finish (void)
- asection *out_sec = sec->output_section;
-
- if (out_sec
-+ && elf_section_data (sec)
- && elf_section_type (sec) == SHT_PROGBITS
- && (elf_section_flags (sec) & SHF_EXECINSTR) != 0
- && (sec->flags & SEC_EXCLUDE) == 0
diff --git a/recipes/binutils/binutils_2.20.bb b/recipes/binutils/binutils_2.20.bb
index 62f40f231a..5398688cfb 100644
--- a/recipes/binutils/binutils_2.20.bb
+++ b/recipes/binutils/binutils_2.20.bb
@@ -2,7 +2,7 @@ require binutils.inc
LICENSE = "GPLv3"
INC_PR = "r1"
-PR = "${INC_PR}.1"
+PR = "${INC_PR}.2"
SRC_URI = "\
${GNU_MIRROR}/binutils/binutils-${PV}.tar.bz2 \
@@ -12,7 +12,6 @@ SRC_URI = "\
file://binutils-uclibc-300-006_better_file_error.patch;patch=1 \
file://binutils-uclibc-300-012_check_ldrunpath_length.patch;patch=1 \
file://binutils-uclibc-gas-needs-libm.patch;patch=1 \
- file://binutils-arm-pr7093.patch;patch=1 \
file://ld-stub-crash.patch;patch=1;pnum=0 \
file://binutils-arm-non-empty-know.patch;patch=1 \
"
diff --git a/recipes/boost/boost-14x.inc b/recipes/boost/boost-14x.inc
index b1a5f6bb65..0a530013e2 100644
--- a/recipes/boost/boost-14x.inc
+++ b/recipes/boost/boost-14x.inc
@@ -22,6 +22,8 @@ EXTRA_OECMAKE = "-DBUILD_SHARED=ON \
-DBUILD_MULTI_THREADED=ON \
-DBUILD_RELEASE=ON \
-DBUILD_DEBUG=OFF \
+ -DWITH_MPI:BOOL=OFF \
+ -DINSTALL_VERSIONED:BOOL=OFF \
"
BOOST_LIBS = "\
@@ -64,7 +66,6 @@ python __anonymous () {
if not bb.data.getVar("FILES_%s" % pkg, d, 1):
bb.data.setVar("FILES_%s" % pkg, "${libdir}/libboost_%s*.so*" % lib, d)
bb.data.setVar("BOOST_PACKAGES", " ".join(packages), d)
- bb.data.setVar("BJAM_EXTRA", " ".join(extras), d)
}
# Override the contents of specific packages
diff --git a/recipes/boost/boost_1.41.0.bb b/recipes/boost/boost_1.41.0.bb
new file mode 100644
index 0000000000..a4c9287f79
--- /dev/null
+++ b/recipes/boost/boost_1.41.0.bb
@@ -0,0 +1,16 @@
+require boost-14x.inc
+
+PR = "r0"
+
+SRC_URI = "http://sodium.resophonic.com/boost-cmake/1.41.0.cmake0/boost-1.41.0.cmake0.tar.gz;name=tarball \
+ file://1.41.0_uclibc.patch;patch=1 \
+ "
+S = "${WORKDIR}/boost-1.41.0.cmake0"
+
+SRC_URI[tarball.md5sum] = "351747d991e3e391fea5623d4b5c038a"
+SRC_URI[tarball.sha256sum] = "78b7e72d34b057847ff99b291719d5bf1b76ed080bebfa3122549c231cc8fbed"
+
+DEPENDS += " icu "
+
+DEFAULT_PREFERENCE = "-1"
+
diff --git a/recipes/boost/files/1.41.0_uclibc.patch b/recipes/boost/files/1.41.0_uclibc.patch
new file mode 100644
index 0000000000..21d12da095
--- /dev/null
+++ b/recipes/boost/files/1.41.0_uclibc.patch
@@ -0,0 +1,13 @@
+Index: boost-1.41.0.cmake0/libs/thread/src/pthread/thread.cpp
+===================================================================
+--- boost-1.41.0.cmake0.orig/libs/thread/src/pthread/thread.cpp
++++ boost-1.41.0.cmake0/libs/thread/src/pthread/thread.cpp
+@@ -380,7 +380,7 @@ namespace boost
+ {
+ #if defined(PTW32_VERSION) || defined(__hpux)
+ return pthread_num_processors_np();
+-#elif defined(_GNU_SOURCE)
++#elif defined(_GNU_SOURCE) && !defined(__UCLIBC__)
+ return get_nprocs();
+ #elif defined(__APPLE__) || defined(__FreeBSD__)
+ int count;
diff --git a/recipes/clutter/clutter-0.9_git.bb b/recipes/clutter/clutter-0.9_git.bb
index b7a04ca03a..039417c626 100644
--- a/recipes/clutter/clutter-0.9_git.bb
+++ b/recipes/clutter/clutter-0.9_git.bb
@@ -3,7 +3,7 @@ require clutter.inc
SRCREV = "13e055a351f83c56b895b131566a6e842d24ed2a"
PV = "1.1.0"
-PR = "r0"
+PR = "${INC_PR}.0"
PR_append = "+git${SRCREV}"
SRC_URI = "git://git.clutter-project.org/clutter.git;protocol=git \
diff --git a/recipes/clutter/clutter-glx_svn.bb b/recipes/clutter/clutter-glx_svn.bb
index 8a2a1fa1ed..0590330412 100644
--- a/recipes/clutter/clutter-glx_svn.bb
+++ b/recipes/clutter/clutter-glx_svn.bb
@@ -1,6 +1,7 @@
require clutter.inc
PV = "0.3.1+svn${SRCDATE}"
+PR = "${INC_PR}.0"
SRC_URI = "svn://svn.o-hand.com/repos/clutter/trunk;module=clutter;proto=http"
diff --git a/recipes/clutter/clutter.inc b/recipes/clutter/clutter.inc
index 371544de00..a80d9b6f5a 100644
--- a/recipes/clutter/clutter.inc
+++ b/recipes/clutter/clutter.inc
@@ -37,6 +37,8 @@ EXTRA_OECONF_mx31ads = "${BASE_CONF} --with-flavour=eglnative"
PACKAGE_ARCH_mx31ads = "${MACHINE_ARCH}"
LDFLAGS_append_mx31ads = " -lpvrNULLWSEGL -lstdc++ "
+INC_PR = "r1"
+
inherit autotools pkgconfig gtk-doc
PACKAGES =+ "clutter-examples"
diff --git a/recipes/clutter/clutter_0.4svn.bb b/recipes/clutter/clutter_0.4svn.bb
index faf7a8766f..121b96480f 100644
--- a/recipes/clutter/clutter_0.4svn.bb
+++ b/recipes/clutter/clutter_0.4svn.bb
@@ -1,6 +1,7 @@
require clutter.inc
PV = "0.4.0+svnr${SRCPV}"
+PR = "${INC_PR}.0"
SRC_URI = "svn://svn.o-hand.com/repos/clutter/branches;module=clutter-0-4;proto=http \
file://enable_tests-0.4.patch;patch=1 "
diff --git a/recipes/clutter/clutter_0.6svn.bb b/recipes/clutter/clutter_0.6svn.bb
index 15c87a52a1..21cafef85d 100644
--- a/recipes/clutter/clutter_0.6svn.bb
+++ b/recipes/clutter/clutter_0.6svn.bb
@@ -1,6 +1,7 @@
require clutter.inc
PV = "0.6.0+svnr${SRCPV}"
+PR = "${INC_PR}.0"
SRC_URI = "svn://svn.o-hand.com/repos/clutter/branches;module=clutter-0-6;proto=http \
file://enable_tests-0.6.patch;patch=1 "
diff --git a/recipes/clutter/clutter_0.8+git.bb b/recipes/clutter/clutter_0.8+git.bb
index e31e250431..391e5fea35 100644
--- a/recipes/clutter/clutter_0.8+git.bb
+++ b/recipes/clutter/clutter_0.8+git.bb
@@ -3,6 +3,7 @@ require clutter.inc
CLUTTER_REV = "af16378899699376fe7e84c7c11eb3bb5c4668cd"
PV = "0.8.8"
+PR = "${INC_PR}.0"
PR_append = "+gitr${CLUTTER_REV}"
SRC_URI = "git://git.clutter-project.org/clutter.git;protocol=git;branch=clutter-0-8;rev=${CLUTTER_REV} \
diff --git a/recipes/clutter/clutter_svn.bb b/recipes/clutter/clutter_svn.bb
index 55a434c583..d8d623c2fe 100644
--- a/recipes/clutter/clutter_svn.bb
+++ b/recipes/clutter/clutter_svn.bb
@@ -3,7 +3,7 @@ require clutter.inc
DEFAULT_PREFERENCE = "-1"
PV = "0.8.0+svnr${SRCPV}"
-PR = "r0"
+PR = "${INC_PR}.0"
SRC_URI = "svn://svn.o-hand.com/repos/clutter/trunk;module=clutter;proto=http \
file://enable_tests.patch;patch=1;maxrev=2989 \
diff --git a/recipes/comic-reader/comic-reader_svn.bb b/recipes/comic-reader/comic-reader_svn.bb
index ecea58dc64..372d1d0a64 100644
--- a/recipes/comic-reader/comic-reader_svn.bb
+++ b/recipes/comic-reader/comic-reader_svn.bb
@@ -2,7 +2,7 @@ DESCRIPTION = "A comic reader for Otaku"
HOMEPAGE = "http://code.google.com/p/comic-reader/"
LICENSE = "GPLv3"
DEPENDS = "evas edje ecore etk eet edbus"
-PR = "r2"
+PR = "r3"
SRC_URI = "svn://comic-reader.googlecode.com/svn/;module=trunk;proto=http"
diff --git a/recipes/connman/connman_0.46.bb b/recipes/connman/connman_0.46.bb
index cfcab384ce..814187ded6 100644
--- a/recipes/connman/connman_0.46.bb
+++ b/recipes/connman/connman_0.46.bb
@@ -1,6 +1,6 @@
require connman.inc
-PR = "r2"
+PR = "r3"
EXTRA_OECONF += "\
--disable-gtk-doc \
diff --git a/recipes/dvnixload/dvnixload_0.2.6.bb b/recipes/dvnixload/dvnixload_0.2.6.bb
new file mode 100644
index 0000000000..3c304a0be2
--- /dev/null
+++ b/recipes/dvnixload/dvnixload_0.2.6.bb
@@ -0,0 +1,9 @@
+DESCRIPTION = "UBL and second stage bootloader flasher for davinci"
+HOMEPAGE = "http://www.hugovil.com/en/dvnixload/"
+LICENSE = "GPLv2"
+SRC_URI = "http://www.hugovil.com/repository/dvnixload-0.2.6.tar.gz"
+
+inherit autotools
+
+BBCLASSEXTEND="native"
+
diff --git a/recipes/e17/e-tasks_svn.bb b/recipes/e17/e-tasks_svn.bb
index 4f27744717..5c07a1bd3c 100644
--- a/recipes/e17/e-tasks_svn.bb
+++ b/recipes/e17/e-tasks_svn.bb
@@ -1,15 +1,29 @@
-DESCRIPTION = "tasks app for openmoko phones based on elementary"
+DESCRIPTION = "e-tasks is a todo program for Openmoko phones"
HOMEPAGE = "http://code.google.com/p/e-tasks/"
AUTHOR = "cchandel"
LICENSE = "GPLv2"
SECTION = "e/apps"
-#DEPENDS = "elementary eina edbus"
+DEPENDS = "elementary eina edbus sqlite3"
+
+inherit autotools
PV = "0.0.1+svnr${SRCPV}"
-PR = "r0"
+PR = "r1"
-SRC_URI = "svn://e-tasks.googlecode.com/svn/trunk;module=.;proto=http"
-S = "${WORKDIR}"
+SRC_URI = "svn://e-tasks.googlecode.com/svn;module=trunk;proto=http"
+S = "${WORKDIR}/trunk"
-inherit autotools
+do_install_append() {
+ install -d "${D}/${datadir}/pixmaps"
+ install -m 0644 "${S}/resources/e-tasks.png" "${D}/${datadir}/pixmaps"
+ install -d "${D}/${datadir}/applications"
+ install -m 0644 "${S}/resources/e-tasks.desktop" "${D}/${datadir}/applications"
+ install -d "${D}/${datadir}/e-tasks"
+ for ico in "${S}/resources/"*.png; do
+ if [ "$(basename $ico)" != "e-tasks.png" ]; then
+ install -m 0644 $ico "${D}/${datadir}/e-tasks"
+ fi
+ done
+}
+FILES_${PN} += "/usr/share/e-tasks/* /usr/share/applications/* /usr/share/pixmaps/*"
diff --git a/recipes/e17/e-wm/drop-illume-keyboards.patch b/recipes/e17/e-wm/drop-illume-keyboards.patch
new file mode 100644
index 0000000000..0abe6f2a21
--- /dev/null
+++ b/recipes/e17/e-wm/drop-illume-keyboards.patch
@@ -0,0 +1,17 @@
+Index: e/src/modules/illume/keyboards/Makefile.am
+===================================================================
+--- e/src/modules/illume/keyboards/Makefile.am (revision 43437)
++++ e/src/modules/illume/keyboards/Makefile.am (working copy)
+@@ -4,12 +4,6 @@
+ filesdir = $(libdir)/enlightenment/modules/$(MODULE)/keyboards
+ files_DATA = \
+ ignore_built_in_keyboards \
+- Default.kbd \
+- alpha.png \
+- Numbers.kbd \
+- numeric.png \
+- Terminal.kbd \
+- qwerty.png \
+ up.png \
+ down.png \
+ left.png \
diff --git a/recipes/e17/e-wm_svn.bb b/recipes/e17/e-wm_svn.bb
index f31253be9e..0d86575550 100644
--- a/recipes/e17/e-wm_svn.bb
+++ b/recipes/e17/e-wm_svn.bb
@@ -3,7 +3,7 @@ DEPENDS = "eet evas ecore edje efreet edbus"
LICENSE = "MIT BSD"
SRCNAME = "e"
PV = "0.16.999.060+svnr${SRCPV}"
-PR = "r8"
+PR = "r9"
inherit e update-alternatives
@@ -13,6 +13,7 @@ SRC_URI += "\
file://gsm-segfault-fix.patch;patch=1;maxrev=37617 \
file://fix-profiles.diff;patch=1;maxrev=39889 \
file://illume-flow.patch;patch=0;maxrev=43852 \
+ file://drop-illume-keyboards.patch;patch=1 \
"
SRC_URI_append_openmoko = " file://illume-disable-screensaver.patch;patch=1"
@@ -147,7 +148,13 @@ FILES_${PN}-utils = "${libdir}/enlightenment/utils/*"
FILES_${PN}-menu = "${sysconfdir}/xdg/menus/applications.menu"
RRECOMMENDS_${PN}-config-default = "${PN}-theme-default"
-RRECOMMENDS_${PN}-config-illume = "${PN}-theme-illume"
+RRECOMMENDS_${PN}-config-illume = "\
+ ${PN}-theme-illume \
+ illume-keyboard-default-alpha \
+ illume-keyboard-default-numeric \
+ illume-keyboard-default-terminal \
+"
+
RRECOMMENDS_${PN}-config-minimalist = "\
${PN}-background-light-gradient \
${PN}-theme-default \
diff --git a/recipes/e17/elmdentica_svn.bb b/recipes/e17/elmdentica_svn.bb
index 5988d904ed..8549b009f0 100644
--- a/recipes/e17/elmdentica_svn.bb
+++ b/recipes/e17/elmdentica_svn.bb
@@ -5,7 +5,7 @@ SECTION = "e/apps"
HOMEPAGE = "http://elmdentica.googlecode.com"
AUTHOR = "seabra"
PV = "0.7.0+svnr${SRCPV}"
-PR = "r0"
+PR = "r1"
SRC_URI = "svn://elmdentica.googlecode.com/svn;module=trunk;proto=http"
diff --git a/recipes/e17/eve_svn.bb b/recipes/e17/eve_svn.bb
index d1a0e4775a..baa4a6cece 100644
--- a/recipes/e17/eve_svn.bb
+++ b/recipes/e17/eve_svn.bb
@@ -2,7 +2,7 @@ DESCRIPTION = " Enlightenment webbrowser"
LICENSE = "GPL"
DEPENDS = "webkit-efl evas ecore edje"
PV = "0.0.1+svnr${SRCPV}"
-PR = "r3"
+PR = "r4"
LDFLAGS += "-lstdc++"
diff --git a/recipes/e17/illume-keyboard-default_svn.bb b/recipes/e17/illume-keyboard-default_svn.bb
new file mode 100644
index 0000000000..8b8dbd4a41
--- /dev/null
+++ b/recipes/e17/illume-keyboard-default_svn.bb
@@ -0,0 +1,43 @@
+DESCRIPTION = "The illume default keyboards"
+SECTION = "x11/data"
+SRCNAME = "e/src/modules/illume/keyboards"
+PV = "0.16.999.060+svnr${SRCPV}"
+PR = "r0"
+
+SRC_URI = "svn://svn.enlightenment.org/svn/e/trunk;module=${SRCNAME};proto=http"
+S = "${WORKDIR}/${SRCNAME}"
+
+PACKAGE_ARCH = "all"
+
+INSTPATH = "/enlightenment/modules/illume/keyboards"
+INSTFILES = "\
+Default.kbd \
+alpha.png \
+Numbers.kbd \
+numeric.png \
+Terminal.kbd \
+qwerty.png \
+"
+
+PACKAGES = "${PN}-alpha ${PN}-numeric ${PN}-terminal"
+
+FILES_${PN}-alpha = "\
+ ${libdir}${INSTPATH}/Default.kbd \
+ ${libdir}${INSTPATH}/alpha.png \
+"
+FILES_${PN}-numeric = "\
+ ${libdir}${INSTPATH}/Numeric.kbd \
+ ${libdir}${INSTPATH}/numeric.png \
+"
+FILES_${PN}-terminal = "\
+ ${libdir}${INSTPATH}/Terminal.kbd \
+ ${libdir}${INSTPATH}/qwerty.png \
+"
+
+do_install() {
+ install -d ${D}${libdir}${INSTPATH}
+ for f in ${INSTFILES}; do
+ install -m 0644 ${S}/${f} ${D}${libdir}${INSTPATH}
+ done
+}
+
diff --git a/recipes/e17/illume-keyboards-shr_git.bb b/recipes/e17/illume-keyboards-shr_git.bb
new file mode 100644
index 0000000000..109dc51a54
--- /dev/null
+++ b/recipes/e17/illume-keyboards-shr_git.bb
@@ -0,0 +1,78 @@
+SECTION = "x11/data"
+
+SRC_URI = "git://git.shr-project.org/repo/illume-keyboards.git;protocol=http;branch=master"
+S = "${WORKDIR}/git"
+
+PV = "0.0+gitr${SRCPV}"
+PE = "1"
+PR = "r1"
+
+
+PACKAGES = "\
+illume-keyboard-arabic \
+illume-keyboard-browse \
+illume-keyboard-danish \
+illume-keyboard-default-alt \
+illume-keyboard-dutch \
+illume-keyboard-dvorak \
+illume-keyboard-french \
+illume-keyboard-german \
+illume-keyboard-hebrew \
+illume-keyboard-numeric-alt \
+illume-keyboard-russian \
+illume-keyboard-russian-terminal \
+"
+
+PACKAGE_ARCH = "all"
+
+AUTHOR_illume-keyboard-arabic = "Mohammad Fahmi / Tom Hacohen"
+DESCRIPTION_illume-keyboard-arabic = "Illume keyboard with arabic layout"
+FILES_illume-keyboard-arabic = "${libdir}/enlightenment/modules/illume/keyboards/arabic"
+
+AUTHOR_illume-keyboard-browse = "Pander"
+DESCRIPTION_illume-keyboard-browse = "Illume keyboard with a layout optimized for browsing"
+FILES_illume-keyboard-browse = "${libdir}/enlightenment/modules/illume/keyboards/browse"
+
+AUTHOR_illume-keyboard-danish = "Esben Damgaard"
+DESCRIPTION_illume-keyboard-danish = "Illume keyboard with danish layout"
+FILES_illume-keyboard-danish = "${libdir}/enlightenment/modules/illume/keyboards/danish"
+
+AUTHOR_illume-keyboard-default-alt = "Pander"
+DESCRIPTION_illume-keyboard-default-alt = "Illume keyboard with an alternative default layout"
+FILES_illume-keyboard-default-alt = "${libdir}/enlightenment/modules/illume/keyboards/default-alt"
+
+AUTHOR_illume-keyboard-dutch = "Pander"
+DESCRIPTION_illume-keyboard-dutch = "Illume keyboard with dutch layout"
+FILES_illume-keyboard-dutch = "${libdir}/enlightenment/modules/illume/keyboards/dutch"
+
+AUTHOR_illume-keyboard-dvorak = "Gabor Adam TOTH"
+DESCRIPTION_illume-keyboard-dvorak = "Illume keyboard with dvorak layout"
+FILES_illume-keyboard-dvorak = "${libdir}/enlightenment/modules/illume/keyboards/dvorak"
+
+DESCRIPTION_illume-keyboard-french = "Illume keyboard with french layout"
+FILES_illume-keyboard-french = "${libdir}/enlightenment/modules/illume/keyboards/french"
+
+AUTHOR_illume-keyboard-german = "Florian Hackenberger"
+DESCRIPTION_illume-keyboard-german = "Illume keyboard with german layout"
+FILES_illume-keyboard-german = "${libdir}/enlightenment/modules/illume/keyboards/german"
+
+AUTHOR_illume-keyboard-hebrew = "Tom Hacohen"
+DESCRIPTION_illume-keyboard-hebrew = "Illume keyboard with hebrew layout"
+FILES_illume-keyboard-hebrew = "${libdir}/enlightenment/modules/illume/keyboards/hebrew"
+
+AUTHOR_illume-keyboard-numeric-alt = "Pander"
+DESCRIPTION_illume-keyboard-numeric-alt = "Illume keyboard with an alternative numeric layout"
+FILES_illume-keyboard-numeric-alt = "${libdir}/enlightenment/modules/illume/keyboards/numeric-alt"
+
+AUTHOR_illume-keyboard-russian = "lucky"
+DESCRIPTION_illume-keyboard-russian = "Illume keyboard with russian layout"
+FILES_illume-keyboard-russian = "${libdir}/enlightenment/modules/illume/keyboards/russian"
+
+AUTHOR_illume-keyboard-russian-terminal = "lucky"
+DESCRIPTION_illume-keyboard-russian-terminal = "Illume keyboard with russian layout for the Terminal"
+FILES_illume-keyboard-russian-terminal = "${libdir}/enlightenment/modules/illume/keyboards/russian-terminal"
+
+do_install() {
+ make DESTDIR=${D} install
+}
+
diff --git a/recipes/efl1/illume-keyboard-arabic_git.bb b/recipes/efl1/illume-keyboard-arabic_git.bb
deleted file mode 100644
index 900c745fe5..0000000000
--- a/recipes/efl1/illume-keyboard-arabic_git.bb
+++ /dev/null
@@ -1,12 +0,0 @@
-AUTHOR = "Mohammad Fahmi / Tom Hacohen"
-DESCRIPTION = "Illume keyboard with arabic layout"
-PV = "0.0+gitr${SRCPV}"
-PE = "1"
-PR = "r0"
-
-BASEDIR = "arabic"
-INSTFILES = "Arabic.kbd Arabic.png"
-
-require illume-keyboard.inc
-
-
diff --git a/recipes/efl1/illume-keyboard-browse_git.bb b/recipes/efl1/illume-keyboard-browse_git.bb
deleted file mode 100644
index 4eda497c4c..0000000000
--- a/recipes/efl1/illume-keyboard-browse_git.bb
+++ /dev/null
@@ -1,20 +0,0 @@
-AUTHOR = "Pander"
-DESCRIPTION = "Illume keyboard with a layout optimized for browsing"
-PV = "0.0+gitr${SRCPV}"
-PE = "1"
-PR = "r0"
-
-BASEDIR = "browse"
-INSTFILES = "\
-Browse.kbd \
-end-browse.png \
-pagedown-browse.png \
-browse.png \
-home-browse.png \
-pageup-browse.png \
-space-browse.png \
-"
-
-require illume-keyboard.inc
-
-
diff --git a/recipes/efl1/illume-keyboard-danish_git.bb b/recipes/efl1/illume-keyboard-danish_git.bb
deleted file mode 100644
index 5a042d9c6b..0000000000
--- a/recipes/efl1/illume-keyboard-danish_git.bb
+++ /dev/null
@@ -1,12 +0,0 @@
-AUTHOR = "Esben Damgaard"
-DESCRIPTION = "Illume keyboard with danish layout"
-PV = "0.0+gitr${SRCPV}"
-PE = "1"
-PR = "r0"
-
-BASEDIR = "danish"
-INSTFILES = "Danish.kbd danish.png"
-
-require illume-keyboard.inc
-
-
diff --git a/recipes/efl1/illume-keyboard-default-alt_git.bb b/recipes/efl1/illume-keyboard-default-alt_git.bb
deleted file mode 100644
index f367f11f79..0000000000
--- a/recipes/efl1/illume-keyboard-default-alt_git.bb
+++ /dev/null
@@ -1,12 +0,0 @@
-AUTHOR = "Pander"
-DESCRIPTION = "Illume keyboard with an alternative default layout"
-PV = "0.0+gitr${SRCPV}"
-PE = "1"
-PR = "r0"
-
-BASEDIR = "default-alt"
-INSTFILES = "Default-alt.kbd"
-
-require illume-keyboard.inc
-
-
diff --git a/recipes/efl1/illume-keyboard-dutch_git.bb b/recipes/efl1/illume-keyboard-dutch_git.bb
deleted file mode 100644
index 2eb137db85..0000000000
--- a/recipes/efl1/illume-keyboard-dutch_git.bb
+++ /dev/null
@@ -1,22 +0,0 @@
-AUTHOR = "Pander"
-DESCRIPTION = "Illume keyboard with dutch layout"
-PV = "0.0+gitr${SRCPV}"
-PE = "1"
-PR = "r0"
-
-BASEDIR = "dutch"
-INSTFILES = "\
-capslock-negative.png \
-end.png \
-pagedown.png \
-qwerty-dutch-nl.png \
-Terminal-dutch-nl.kbd \
-capslock.png \
-home.png \
-pageup.png \
-space.png \
-"
-
-require illume-keyboard.inc
-
-
diff --git a/recipes/efl1/illume-keyboard-dvorak_git.bb b/recipes/efl1/illume-keyboard-dvorak_git.bb
deleted file mode 100644
index dd6b96c31e..0000000000
--- a/recipes/efl1/illume-keyboard-dvorak_git.bb
+++ /dev/null
@@ -1,12 +0,0 @@
-AUTHOR = "Gabor Adam TOTH"
-DESCRIPTION = "Illume keyboard with dvorak layout"
-PV = "0.0+gitr${SRCPV}"
-PE = "1"
-PR = "r0"
-
-BASEDIR = "dvorak"
-INSTFILES = "Dvorak.kbd dvorak.png"
-
-require illume-keyboard.inc
-
-
diff --git a/recipes/efl1/illume-keyboard-french_git.bb b/recipes/efl1/illume-keyboard-french_git.bb
deleted file mode 100644
index 8c8041a9b1..0000000000
--- a/recipes/efl1/illume-keyboard-french_git.bb
+++ /dev/null
@@ -1,11 +0,0 @@
-DESCRIPTION = "Illume keyboard with french layout"
-PV = "0.0+gitr${SRCPV}"
-PE = "1"
-PR = "r0"
-
-BASEDIR = "french"
-INSTFILES = "Azerty.kbd Azerty.png"
-
-require illume-keyboard.inc
-
-
diff --git a/recipes/efl1/illume-keyboard-german_git.bb b/recipes/efl1/illume-keyboard-german_git.bb
deleted file mode 100644
index a1ad5481df..0000000000
--- a/recipes/efl1/illume-keyboard-german_git.bb
+++ /dev/null
@@ -1,12 +0,0 @@
-AUTHOR = "Florian Hackenberger"
-DESCRIPTION = "Illume keyboard with german layout"
-PV = "0.0+gitr${SRCPV}"
-PE = "1"
-PR = "r0"
-
-BASEDIR = "german"
-INSTFILES = "German.kbd German.png"
-
-require illume-keyboard.inc
-
-
diff --git a/recipes/efl1/illume-keyboard-hebrew_git.bb b/recipes/efl1/illume-keyboard-hebrew_git.bb
deleted file mode 100644
index e7cda399f2..0000000000
--- a/recipes/efl1/illume-keyboard-hebrew_git.bb
+++ /dev/null
@@ -1,12 +0,0 @@
-AUTHOR = "Tom Hacohen"
-DESCRIPTION = "Illume keyboard with hebrew layout"
-PV = "0.0+gitr${SRCPV}"
-PE = "1"
-PR = "r0"
-
-BASEDIR = "hebrew"
-INSTFILES = "Hebrew.kbd Alpha-hebrew-il.png"
-
-require illume-keyboard.inc
-
-
diff --git a/recipes/efl1/illume-keyboard-numeric-alt_git.bb b/recipes/efl1/illume-keyboard-numeric-alt_git.bb
deleted file mode 100644
index 92090d925d..0000000000
--- a/recipes/efl1/illume-keyboard-numeric-alt_git.bb
+++ /dev/null
@@ -1,19 +0,0 @@
-AUTHOR = "Pander"
-DESCRIPTION = "Illume keyboard with an alternative numeric layout"
-PV = "0.0+gitr${SRCPV}"
-PE = "1"
-PR = "r0"
-
-BASEDIR = "numeric-alt"
-INSTFILES = "\
-end-alt.png \
-home-alt.png \
-Numbers-alt.kbd \
-numeric-alt.png \
-pagedown-alt.png \
-pageup-alt.png \
-"
-
-require illume-keyboard.inc
-
-
diff --git a/recipes/efl1/illume-keyboard-russian-terminal_git.bb b/recipes/efl1/illume-keyboard-russian-terminal_git.bb
deleted file mode 100644
index 7b126bbf09..0000000000
--- a/recipes/efl1/illume-keyboard-russian-terminal_git.bb
+++ /dev/null
@@ -1,10 +0,0 @@
-AUTHOR = "lucky"
-DESCRIPTION = "Illume keyboard with russian layout for the Terminal"
-PV = "0.0+gitr${SRCPV}"
-PE = "1"
-PR = "r0"
-
-BASEDIR = "russian-terminal"
-INSTFILES = "Terminal_Russian.kbd Terminal-russian-ru.png"
-
-require illume-keyboard.inc
diff --git a/recipes/efl1/illume-keyboard-russian_git.bb b/recipes/efl1/illume-keyboard-russian_git.bb
deleted file mode 100644
index c067871848..0000000000
--- a/recipes/efl1/illume-keyboard-russian_git.bb
+++ /dev/null
@@ -1,12 +0,0 @@
-AUTHOR = "lucky"
-DESCRIPTION = "Illume keyboard with russian layout"
-PV = "0.0+gitr${SRCPV}"
-PE = "1"
-PR = "r0"
-
-BASEDIR = "russian"
-INSTFILES = "X8_Russian.kbd X8-russian-ru.png"
-
-require illume-keyboard.inc
-
-
diff --git a/recipes/efl1/illume-keyboard.inc b/recipes/efl1/illume-keyboard.inc
deleted file mode 100644
index 4003352cc1..0000000000
--- a/recipes/efl1/illume-keyboard.inc
+++ /dev/null
@@ -1,14 +0,0 @@
-SECTION = "x11/data"
-
-SRC_URI = "git://git.shr-project.org/repo/illume-keyboards.git;protocol=http;branch=master"
-S = "${WORKDIR}/git"
-
-FILES_${PN} = "${libdir}/enlightenment/modules/illume/keyboards/*"
-PACKAGE_ARCH = "all"
-
-do_install() {
- install -d ${D}${libdir}/enlightenment/modules/illume/keyboards
- for f in ${INSTFILES}; do
- install -m 0644 ${S}/${BASEDIR}/${f} ${D}${libdir}/enlightenment/modules/illume/keyboards/
- done
-}
diff --git a/recipes/eglibc/eglibc_2.10.bb b/recipes/eglibc/eglibc_2.10.bb
index 38faaf81b6..3907b095ff 100644
--- a/recipes/eglibc/eglibc_2.10.bb
+++ b/recipes/eglibc/eglibc_2.10.bb
@@ -3,8 +3,8 @@ require eglibc.inc
DEPENDS += "gperf-native"
FILESPATHPKG =. "eglibc-svn:"
PV = "2.10"
-PR = "${INC_PR}.5"
-SVN_REV="9124"
+PR = "${INC_PR}.6"
+SVN_REV="9381"
EGLIBC_BRANCH="eglibc-2_10"
SRC_URI = "svn://svn.eglibc.org/branches;module=${EGLIBC_BRANCH};rev=${SVN_REV};proto=svn \
file://eglibc-svn-arm-lowlevellock-include-tls.patch;patch=1 \
diff --git a/recipes/eglibc/eglibc_2.11.bb b/recipes/eglibc/eglibc_2.11.bb
index 8c7901c3e2..a03cf3806e 100644
--- a/recipes/eglibc/eglibc_2.11.bb
+++ b/recipes/eglibc/eglibc_2.11.bb
@@ -4,8 +4,8 @@ DEFAULT_PREFERENCE = "-1"
DEPENDS += "gperf-native"
FILESPATHPKG =. "eglibc-svn:"
PV = "2.11"
-PR = "${INC_PR}.0"
-SVN_REV="9235"
+PR = "${INC_PR}.1"
+SVN_REV="9425"
EGLIBC_BRANCH="eglibc-2_11"
SRC_URI = "svn://svn.eglibc.org/branches;module=${EGLIBC_BRANCH};rev=${SVN_REV};proto=svn \
file://eglibc-svn-arm-lowlevellock-include-tls.patch;patch=1 \
diff --git a/recipes/eglibc/eglibc_svn.bb b/recipes/eglibc/eglibc_svn.bb
index 67f13abc95..7a07f420b4 100644
--- a/recipes/eglibc/eglibc_svn.bb
+++ b/recipes/eglibc/eglibc_svn.bb
@@ -1,7 +1,7 @@
require eglibc.inc
DEPENDS += "gperf-native"
-SRCREV = "9241"
+SRCREV = "9424"
DEFAULT_PREFERENCE = "-1"
FILESPATHPKG =. "eglibc-svn:"
PV = "2.11+svnr${SRCPV}"
diff --git a/recipes/enotes/enotes_svn.bb b/recipes/enotes/enotes_svn.bb
index 161c971a88..4748c758dc 100644
--- a/recipes/enotes/enotes_svn.bb
+++ b/recipes/enotes/enotes_svn.bb
@@ -6,7 +6,7 @@ SECTION = "e/apps"
DEPENDS = "elementary evas sqlite3"
PV = "0.2.2+svnr${SRCPV}"
-PR = "r1.1"
+PR = "r2"
SRC_URI = "svn://enotes.googlecode.com/svn/trunk;module=.;proto=http"
S = "${WORKDIR}"
diff --git a/recipes/epdfview/epdfview_0.1.7.bb b/recipes/epdfview/epdfview_0.1.7.bb
index 1cd59f7394..fd1b61f7f5 100644
--- a/recipes/epdfview/epdfview_0.1.7.bb
+++ b/recipes/epdfview/epdfview_0.1.7.bb
@@ -5,7 +5,10 @@ SECTION = "x11/applications"
DEPENDS = "poppler gtk+ cups"
SRC_URI = "http://www.emma-soft.com/projects/epdfview/chrome/site/releases/epdfview-${PV}.tar.bz2 \
- "
+ "
+
+SRC_URI_append_shr = "file://acroread.png \
+ "
inherit autotools
@@ -13,3 +16,13 @@ do_compile_append () {
sed -i 's|\$.*prefix./|/usr/|' data/epdfview.desktop
}
+do_compile_append_shr () {
+ sed -i 's/Icon=.*/Icon=acroread/' data/epdfview.desktop
+}
+
+do_install_append_shr () {
+ install -d ${D}${datadir}/pixmaps/
+ install -m 0644 ${WORKDIR}/acroread.png ${D}${datadir}/pixmaps/
+}
+
+FILES_${PN}_append_shr = "${datadir}/pixmaps/acroread.png" \ No newline at end of file
diff --git a/recipes/epdfview/files/poppler8.diff b/recipes/epdfview/files/poppler8.diff
deleted file mode 100644
index e4c4790c6d..0000000000
--- a/recipes/epdfview/files/poppler8.diff
+++ /dev/null
@@ -1,10395 +0,0 @@
-diff -Nurd epdfview-0.1.6-svn/configure.ac epdfview/configure.ac
---- epdfview-0.1.6-svn/configure.ac 2008-07-13 12:57:47.593198000 +0200
-+++ epdfview/configure.ac 2008-07-13 12:55:55.143198000 +0200
-@@ -27,7 +27,7 @@
-
- dnl Check for libraries
- POPPLER_REQUIRED=0.5.0
--GLIB_REQUIRED=2.6.0
-+GLIB_REQUIRED=2.8.0
- GTK2_REQUIRED=2.6.0
-
- PKG_CHECK_MODULES([GLIB], [gthread-2.0 >= $GLIB_REQUIRED])
-@@ -44,6 +44,14 @@
- if test "x$have_poppler_052" = "xyes"; then
- AC_DEFINE([HAVE_POPPLER_0_5_2], [1], [Define to 1 if you have Poppler version 0.5.2 or higher.])
- fi
-+PKG_CHECK_EXISTS([poppler-glib >= 0.6], [have_poppler_060=yes])
-+if test "x$have_poppler_060" = "xyes"; then
-+ AC_DEFINE([HAVE_POPPLER_0_6_0], [1], [Define to 1 if you have Poppler version 0.6.0 or higher.])
-+fi
-+PKG_CHECK_EXISTS([poppler-glib >= 0.8], [have_poppler_080=yes])
-+if test "x$have_poppler_080" = "xyes"; then
-+ AC_DEFINE([HAVE_POPPLER_0_8_0], [1], [Define to 1 if you have Poppler version 0.8.0 or higher.])
-+fi
-
- EPDFVIEW_PATH_CUPS([CUPS], [have_cups=yes])
- AM_CONDITIONAL(cups_printing, test "x$have_cups" = "xyes")
-diff -Nurd epdfview-0.1.6-svn/data/epdfview-ui.xml epdfview/data/epdfview-ui.xml
---- epdfview-0.1.6-svn/data/epdfview-ui.xml 2008-07-13 12:57:47.093198000 +0200
-+++ epdfview/data/epdfview-ui.xml 2008-07-13 12:55:54.263198000 +0200
-@@ -11,6 +11,9 @@
- <menu action="EditMenu">
- <menuitem name="Find" action="Find"/>
- <separator />
-+ <menuitem name="PageModeScroll" action="PageModeScroll"/>
-+ <menuitem name="PageModeText" action="PageModeText"/>
-+ <separator />
- <menuitem name="Preferences" action="Preferences"/>
- </menu>
- <menu action="ViewMenu">
-@@ -38,7 +41,7 @@
- <menuitem name="About" action="About"/>
- </menu>
- </menubar>
--
-+
- <toolbar name="ToolBar">
- <toolitem name="OpenFile" action="OpenFile"/>
- <separator/>
-@@ -49,7 +52,12 @@
- <toolitem name="ZoomOut" action="ZoomOut"/>
- <toolitem name="ZoomFit" action="ZoomFit"/>
- <toolitem name="ZoomWidth" action="ZoomWidth"/>
-+ <separator/>
-+ <toolitem name="PageModeScroll" action="PageModeScroll"/>
-+ <toolitem name="PageModeText" action="PageModeText"/>
- </toolbar>
-
- <accelerator name="SlashAccelerator" action="Slash"/>
-+ <accelerator name="KPAddAccelerator" action="KPAdd"/>
-+ <accelerator name="KPSubtractAccelerator" action="KPSubtract"/>
- </ui>
-diff -Nurd epdfview-0.1.6-svn/m4/Makefile.am epdfview/m4/Makefile.am
---- epdfview-0.1.6-svn/m4/Makefile.am 2008-07-13 12:57:43.883198000 +0200
-+++ epdfview/m4/Makefile.am 2008-07-13 12:55:50.603198000 +0200
-@@ -1,2 +1,2 @@
- # Process this file with automake to produce a Makefile.in file.
--EXTRA_DIST = codeset.m4 gettext.m4 glibc2.m4 glibc21.m4 iconv.m4 intdiv0.m4 intmax.m4 inttypes.m4 inttypes_h.m4 inttypes-pri.m4 isc-posix.m4 lcmessage.m4 lib-ld.m4 lib-link.m4 lib-prefix.m4 longdouble.m4 longlong.m4 nls.m4 po.m4 printf-posix.m4 progtest.m4 signed.m4 size_max.m4 stdint_h.m4 uintmax_t.m4 ulonglong.m4 wchar_t.m4 wint_t.m4 xsize.m4 cppunit.m4 cups.m4
-+EXTRA_DIST = codeset.m4 gettext.m4 glibc2.m4 glibc21.m4 iconv.m4 intdiv0.m4 intmax.m4 inttypes.m4 inttypes_h.m4 inttypes-pri.m4 isc-posix.m4 lcmessage.m4 lib-ld.m4 lib-link.m4 lib-prefix.m4 longdouble.m4 longlong.m4 nls.m4 pkg.m4 po.m4 printf-posix.m4 progtest.m4 signed.m4 size_max.m4 stdint_h.m4 uintmax_t.m4 ulonglong.m4 wchar_t.m4 wint_t.m4 xsize.m4 cppunit.m4 cups.m4
-diff -Nurd epdfview-0.1.6-svn/m4/pkg.m4 epdfview/m4/pkg.m4
---- epdfview-0.1.6-svn/m4/pkg.m4 1970-01-01 01:00:00.000000000 +0100
-+++ epdfview/m4/pkg.m4 2008-07-13 12:55:50.593198000 +0200
-@@ -0,0 +1,157 @@
-+# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*-
-+#
-+# Copyright © 2004 Scott James Remnant <scott@netsplit.com>.
-+#
-+# This program is free software; you can redistribute it and/or modify
-+# it under the terms of the GNU General Public License as published by
-+# the Free Software Foundation; either version 2 of the License, or
-+# (at your option) any later version.
-+#
-+# This program is distributed in the hope that it will be useful, but
-+# WITHOUT ANY WARRANTY; without even the implied warranty of
-+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-+# General Public License for more details.
-+#
-+# You should have received a copy of the GNU General Public License
-+# along with this program; if not, write to the Free Software
-+# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-+#
-+# As a special exception to the GNU General Public License, if you
-+# distribute this file as part of a program that contains a
-+# configuration script generated by Autoconf, you may include it under
-+# the same distribution terms that you use for the rest of that program.
-+
-+# PKG_PROG_PKG_CONFIG([MIN-VERSION])
-+# ----------------------------------
-+AC_DEFUN([PKG_PROG_PKG_CONFIG],
-+[m4_pattern_forbid([^_?PKG_[A-Z_]+$])
-+m4_pattern_allow([^PKG_CONFIG(_PATH)?$])
-+AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])dnl
-+if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
-+ AC_PATH_TOOL([PKG_CONFIG], [pkg-config])
-+fi
-+if test -n "$PKG_CONFIG"; then
-+ _pkg_min_version=m4_default([$1], [0.9.0])
-+ AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version])
-+ if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
-+ AC_MSG_RESULT([yes])
-+ else
-+ AC_MSG_RESULT([no])
-+ PKG_CONFIG=""
-+ fi
-+
-+fi[]dnl
-+])# PKG_PROG_PKG_CONFIG
-+
-+# PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
-+#
-+# Check to see whether a particular set of modules exists. Similar
-+# to PKG_CHECK_MODULES(), but does not set variables or print errors.
-+#
-+#
-+# Similar to PKG_CHECK_MODULES, make sure that the first instance of
-+# this or PKG_CHECK_MODULES is called, or make sure to call
-+# PKG_CHECK_EXISTS manually
-+# --------------------------------------------------------------
-+AC_DEFUN([PKG_CHECK_EXISTS],
-+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
-+if test -n "$PKG_CONFIG" && \
-+ AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then
-+ m4_ifval([$2], [$2], [:])
-+m4_ifvaln([$3], [else
-+ $3])dnl
-+fi])
-+
-+
-+# _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES])
-+# ---------------------------------------------
-+m4_define([_PKG_CONFIG],
-+[if test -n "$PKG_CONFIG"; then
-+ if test -n "$$1"; then
-+ pkg_cv_[]$1="$$1"
-+ else
-+ PKG_CHECK_EXISTS([$3],
-+ [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`],
-+ [pkg_failed=yes])
-+ fi
-+else
-+ pkg_failed=untried
-+fi[]dnl
-+])# _PKG_CONFIG
-+
-+# _PKG_SHORT_ERRORS_SUPPORTED
-+# -----------------------------
-+AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED],
-+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])
-+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
-+ _pkg_short_errors_supported=yes
-+else
-+ _pkg_short_errors_supported=no
-+fi[]dnl
-+])# _PKG_SHORT_ERRORS_SUPPORTED
-+
-+
-+# PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
-+# [ACTION-IF-NOT-FOUND])
-+#
-+#
-+# Note that if there is a possibility the first call to
-+# PKG_CHECK_MODULES might not happen, you should be sure to include an
-+# explicit call to PKG_PROG_PKG_CONFIG in your configure.ac
-+#
-+#
-+# --------------------------------------------------------------
-+AC_DEFUN([PKG_CHECK_MODULES],
-+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
-+AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl
-+AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl
-+
-+pkg_failed=no
-+AC_MSG_CHECKING([for $1])
-+
-+_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2])
-+_PKG_CONFIG([$1][_LIBS], [libs], [$2])
-+
-+m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS
-+and $1[]_LIBS to avoid the need to call pkg-config.
-+See the pkg-config man page for more details.])
-+
-+if test $pkg_failed = yes; then
-+ _PKG_SHORT_ERRORS_SUPPORTED
-+ if test $_pkg_short_errors_supported = yes; then
-+ $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$2"`
-+ else
-+ $1[]_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"`
-+ fi
-+ # Put the nasty error message in config.log where it belongs
-+ echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD
-+
-+ ifelse([$4], , [AC_MSG_ERROR(dnl
-+[Package requirements ($2) were not met:
-+
-+$$1_PKG_ERRORS
-+
-+Consider adjusting the PKG_CONFIG_PATH environment variable if you
-+installed software in a non-standard prefix.
-+
-+_PKG_TEXT
-+])],
-+ [AC_MSG_RESULT([no])
-+ $4])
-+elif test $pkg_failed = untried; then
-+ ifelse([$4], , [AC_MSG_FAILURE(dnl
-+[The pkg-config script could not be found or is too old. Make sure it
-+is in your PATH or set the PKG_CONFIG environment variable to the full
-+path to pkg-config.
-+
-+_PKG_TEXT
-+
-+To get pkg-config, see <http://www.freedesktop.org/software/pkgconfig>.])],
-+ [$4])
-+else
-+ $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS
-+ $1[]_LIBS=$pkg_cv_[]$1[]_LIBS
-+ AC_MSG_RESULT([yes])
-+ ifelse([$3], , :, [$3])
-+fi[]dnl
-+])# PKG_CHECK_MODULES
-diff -Nurd epdfview-0.1.6-svn/po/ca.po epdfview/po/ca.po
---- epdfview-0.1.6-svn/po/ca.po 2008-07-13 12:57:47.543198000 +0200
-+++ epdfview/po/ca.po 2008-07-13 12:55:55.073198000 +0200
-@@ -8,7 +8,7 @@
- msgstr ""
- "Project-Id-Version: ePDFView 0.1.4\n"
- "Report-Msgid-Bugs-To: jordi@emma-soft.com\n"
--"POT-Creation-Date: 2007-02-26 17:47+0100\n"
-+"POT-Creation-Date: 2008-04-14 13:27+0200\n"
- "PO-Revision-Date: 2006-04-12 21:17+0200\n"
- "Last-Translator: Jordi Fita <jordi@emma-soft.com>\n"
- "Language-Team: Catalan <ca@dodds.net>\n"
-@@ -76,11 +76,11 @@
- msgid "Unknown error (%d)."
- msgstr "Error desconegut (%d)."
-
--#: src/main.cxx:38
-+#: src/main.cxx:59
- msgid "[FILE] - view PDF documents"
- msgstr "[FITXER] - mostra documents PDF"
-
--#: src/main.cxx:51 src/MainPter.cxx:153
-+#: src/main.cxx:72 src/MainPter.cxx:153
- msgid "PDF Viewer"
- msgstr "Viso de PDF"
-
-@@ -94,7 +94,7 @@
- msgid "Loading file %s..."
- msgstr "Obrint fitxer %s..."
-
--#: src/MainPter.cxx:413 src/MainPter.cxx:886
-+#: src/MainPter.cxx:413 src/MainPter.cxx:892
- #, c-format
- msgid "of %d"
- msgstr "de %d"
-@@ -104,39 +104,47 @@
- msgid "Saving document to %s..."
- msgstr "Desant el document a %s..."
-
--#: src/MainPter.cxx:826 src/MainPter.cxx:865
-+#: src/MainPter.cxx:832 src/MainPter.cxx:871
- msgid "Error Loading File"
- msgstr "Error carregant fitxer"
-
--#: src/MainPter.cxx:866
-+#: src/MainPter.cxx:872
- msgid "The password you have supplied is not a valid password for this file."
- msgstr "La contrsenya que heu donat no és vàlida per aquest fitxer."
-
--#: src/MainPter.cxx:947
-+#: src/MainPter.cxx:953
- msgid "Error Saving File"
- msgstr "Error desant fitxer"
-
--#: src/PagePter.cxx:292
-+#: src/PagePter.cxx:338
- msgid "Loading..."
- msgstr "Carregant..."
-
--#: src/PrintPter.cxx:295
-+#: src/PrintPter.cxx:252
-+msgid "A4"
-+msgstr ""
-+
-+#: src/PrintPter.cxx:280
-+msgid "300 DPI"
-+msgstr ""
-+
-+#: src/PrintPter.cxx:308
- msgid "Grayscale"
- msgstr "Escala de gris"
-
--#: src/PrintPter.cxx:395
-+#: src/PrintPter.cxx:409
- msgid "Idle"
- msgstr "Desocupada"
-
--#: src/PrintPter.cxx:398
-+#: src/PrintPter.cxx:412
- msgid "Stopped"
- msgstr "Parada"
-
--#: src/PrintPter.cxx:401
-+#: src/PrintPter.cxx:415
- msgid "Processing"
- msgstr "Processada"
-
--#: src/PrintPter.cxx:404
-+#: src/PrintPter.cxx:418
- msgid "Unknown"
- msgstr "Desconegut"
-
-@@ -153,246 +161,262 @@
- msgid "Find:"
- msgstr "Cercar:"
-
--#: src/gtk/MainView.cxx:87
-+#: src/gtk/MainView.cxx:89
- msgid "_File"
- msgstr "_Fitxer"
-
--#: src/gtk/MainView.cxx:88
-+#: src/gtk/MainView.cxx:90
- msgid "_Edit"
- msgstr "_Edita"
-
--#: src/gtk/MainView.cxx:89
-+#: src/gtk/MainView.cxx:91
- msgid "_View"
- msgstr "_Visualitza"
-
--#: src/gtk/MainView.cxx:90
-+#: src/gtk/MainView.cxx:92
- msgid "_Go"
- msgstr "Vé_s"
-
--#: src/gtk/MainView.cxx:91
-+#: src/gtk/MainView.cxx:93
- msgid "_Help"
- msgstr "A_juda"
-
--#: src/gtk/MainView.cxx:93
-+#: src/gtk/MainView.cxx:95
- msgid "_Open"
- msgstr "_Obre"
-
--#: src/gtk/MainView.cxx:94
-+#: src/gtk/MainView.cxx:96
- msgid "Open a PDF document"
- msgstr "Obre un document PDF"
-
--#: src/gtk/MainView.cxx:97
-+#: src/gtk/MainView.cxx:99
- msgid "_Reload"
- msgstr "_Actualitza"
-
--#: src/gtk/MainView.cxx:98
-+#: src/gtk/MainView.cxx:100
- msgid "Reload the current document"
- msgstr "Torna a obrir el document actual"
-
--#: src/gtk/MainView.cxx:101
-+#: src/gtk/MainView.cxx:103
- msgid "_Save a Copy..."
- msgstr "_Desa una còpia..."
-
--#: src/gtk/MainView.cxx:102
-+#: src/gtk/MainView.cxx:104
- msgid "Save a copy of the current document"
- msgstr "Desa una còpia del document actual"
-
--#: src/gtk/MainView.cxx:106
-+#: src/gtk/MainView.cxx:108
- msgid "_Print..."
- msgstr "_Imprimeix"
-
--#: src/gtk/MainView.cxx:107
-+#: src/gtk/MainView.cxx:109
- msgid "Print the current document"
- msgstr "Imprimeix el document actual"
-
--#: src/gtk/MainView.cxx:111
-+#: src/gtk/MainView.cxx:113
- msgid "_Close"
- msgstr "_Tanca"
-
--#: src/gtk/MainView.cxx:112
-+#: src/gtk/MainView.cxx:114
- msgid "Close this window"
- msgstr "Tanca aquesta finestra"
-
--#: src/gtk/MainView.cxx:115
-+#: src/gtk/MainView.cxx:117
- msgid "_Find"
- msgstr "_Cerca"
-
--#: src/gtk/MainView.cxx:116
-+#: src/gtk/MainView.cxx:118
- msgid "Find a word in the document"
- msgstr "Cerca una paraula en el document"
-
--#: src/gtk/MainView.cxx:119
-+#: src/gtk/MainView.cxx:121
- msgid "Preferences..."
- msgstr "Preferències"
-
--#: src/gtk/MainView.cxx:120
-+#: src/gtk/MainView.cxx:122
- msgid "Change the application's preferences"
- msgstr "Canvia les preferències de l'aplicació"
-
--#: src/gtk/MainView.cxx:123
-+#: src/gtk/MainView.cxx:125
- msgid "Zoom _In"
- msgstr "_Amplia"
-
--#: src/gtk/MainView.cxx:124
-+#: src/gtk/MainView.cxx:126
- msgid "Enlarge the document"
- msgstr "Amplia el document"
-
--#: src/gtk/MainView.cxx:127
-+#: src/gtk/MainView.cxx:129
- msgid "Zoom _Out"
- msgstr "_Redueix"
-
--#: src/gtk/MainView.cxx:128
-+#: src/gtk/MainView.cxx:130
- msgid "Shrink the document"
- msgstr "Redueix el document"
-
--#: src/gtk/MainView.cxx:131 src/gtk/StockIcons.cxx:43
-+#: src/gtk/MainView.cxx:133 src/gtk/StockIcons.cxx:43
- msgid "Rotate _Right"
- msgstr "Gira a la _dreta"
-
--#: src/gtk/MainView.cxx:132
-+#: src/gtk/MainView.cxx:134
- msgid "Rotate the document 90 degrees clockwise"
- msgstr "Gira el document 90 graus en el sentit de les agulles del rellotge"
-
--#: src/gtk/MainView.cxx:135 src/gtk/StockIcons.cxx:42
-+#: src/gtk/MainView.cxx:137 src/gtk/StockIcons.cxx:42
- msgid "Rotate _Left"
- msgstr "Gira a l'es_querra"
-
--#: src/gtk/MainView.cxx:136
-+#: src/gtk/MainView.cxx:138
- msgid "Rotate the document 90 degrees counter-clockwise"
- msgstr ""
- "Gira el document 90 grays en el sentit contrari al de les agulles del "
- "rellotge"
-
--#: src/gtk/MainView.cxx:139
-+#: src/gtk/MainView.cxx:141
- msgid "_First Page"
- msgstr "_Primera pàgina"
-
--#: src/gtk/MainView.cxx:140
-+#: src/gtk/MainView.cxx:142
- msgid "Go to the first page"
- msgstr "Va a la primera pàgina"
-
--#: src/gtk/MainView.cxx:143
-+#: src/gtk/MainView.cxx:145
- msgid "_Next Page"
- msgstr "_Següent pàgina"
-
--#: src/gtk/MainView.cxx:144
-+#: src/gtk/MainView.cxx:146
- msgid "Go to the next page"
- msgstr "Va a la següent pàgina"
-
--#: src/gtk/MainView.cxx:147
-+#: src/gtk/MainView.cxx:149
- msgid "_Previous Page"
- msgstr "Pàgina _anterior"
-
--#: src/gtk/MainView.cxx:148
-+#: src/gtk/MainView.cxx:150
- msgid "Go to the previous page"
- msgstr "Va a la pàgina anterior"
-
--#: src/gtk/MainView.cxx:151
-+#: src/gtk/MainView.cxx:153
- msgid "_Last Page"
- msgstr "_Darreta pàgina"
-
--#: src/gtk/MainView.cxx:152
-+#: src/gtk/MainView.cxx:154
- msgid "Go to the last page"
- msgstr "Va a la darrera pàgina"
-
--#: src/gtk/MainView.cxx:155
-+#: src/gtk/MainView.cxx:157
- msgid "_About"
- msgstr "_Quant a"
-
--#: src/gtk/MainView.cxx:156
-+#: src/gtk/MainView.cxx:158
- msgid "Display application's credits"
- msgstr "Mostra els crèdits de l'aplicació"
-
--#: src/gtk/MainView.cxx:166
-+#: src/gtk/MainView.cxx:175
- msgid "F_ull screen"
- msgstr ""
-
--#: src/gtk/MainView.cxx:167
-+#: src/gtk/MainView.cxx:176
- msgid "Toggle full screen window"
- msgstr ""
-
--#: src/gtk/MainView.cxx:170
-+#: src/gtk/MainView.cxx:179
- msgid "Show _Toolbar"
- msgstr "Mostra la barra d'_eines"
-
--#: src/gtk/MainView.cxx:171
-+#: src/gtk/MainView.cxx:180
- msgid "Show or hide the toolbar"
- msgstr "Mostra o amaga la barra d'eines"
-
--#: src/gtk/MainView.cxx:174
-+#: src/gtk/MainView.cxx:183
- msgid "Show _Statusbar"
- msgstr "Mostra la barra d'e_stat"
-
--#: src/gtk/MainView.cxx:175
-+#: src/gtk/MainView.cxx:184
- msgid "Show or hide the statusbar"
- msgstr "Mostra o amaga la barra d'estat"
-
--#: src/gtk/MainView.cxx:178
-+#: src/gtk/MainView.cxx:187
- msgid "Show I_ndex"
- msgstr "Mostra l'í_ndex"
-
--#: src/gtk/MainView.cxx:179
-+#: src/gtk/MainView.cxx:188
- msgid "Show or hide the document's outline"
- msgstr "Mostra o amaga l'índex del document"
-
--#: src/gtk/MainView.cxx:182
-+#: src/gtk/MainView.cxx:191
- msgid "Zoom to _Fit"
- msgstr "En_caixa"
-
--#: src/gtk/MainView.cxx:183
-+#: src/gtk/MainView.cxx:192
- msgid "Make the current document fill the window"
- msgstr "Fa que el document ompli la finestra"
-
--#: src/gtk/MainView.cxx:186 src/gtk/StockIcons.cxx:44
-+#: src/gtk/MainView.cxx:195 src/gtk/StockIcons.cxx:44
- msgid "Zoom to _Width"
- msgstr "Encaixa l'a_mplada"
-
--#: src/gtk/MainView.cxx:187
-+#: src/gtk/MainView.cxx:196
- msgid "Make the current document fill the window width"
- msgstr "Fa que el document ompli l'amplada de la finestra"
-
--#: src/gtk/MainView.cxx:278
-+#: src/gtk/MainView.cxx:202
-+msgid "Scroll"
-+msgstr ""
-+
-+#: src/gtk/MainView.cxx:203
-+msgid "Mouse scroll page"
-+msgstr ""
-+
-+#: src/gtk/MainView.cxx:205
-+msgid "Select Text"
-+msgstr ""
-+
-+#: src/gtk/MainView.cxx:206
-+msgid " Mouse select text"
-+msgstr ""
-+
-+#: src/gtk/MainView.cxx:320
- msgid "Open PDF File"
- msgstr "Obre un fitxer PDF"
-
--#: src/gtk/MainView.cxx:298 src/gtk/MainView.cxx:412
-+#: src/gtk/MainView.cxx:340 src/gtk/MainView.cxx:454
- msgid "Portable Document Format (PDF) Files"
- msgstr "Fitxers en Format de Document Portable (PDF)"
-
--#: src/gtk/MainView.cxx:310 src/gtk/MainView.cxx:424
-+#: src/gtk/MainView.cxx:352 src/gtk/MainView.cxx:466
- msgid "All Files"
- msgstr "Tots els fitxers"
-
--#: src/gtk/MainView.cxx:362
-+#: src/gtk/MainView.cxx:404
- msgid "Password"
- msgstr "Contrasenya"
-
--#: src/gtk/MainView.cxx:386
-+#: src/gtk/MainView.cxx:428
- msgid "Save PDF File"
- msgstr "Desa un fitxer PDF"
-
--#: src/gtk/MainView.cxx:816
-+#: src/gtk/MainView.cxx:858
- msgid "Page"
- msgstr "Pàgina"
-
--#: src/gtk/MainView.cxx:826
-+#: src/gtk/MainView.cxx:868
- msgid "of 0"
- msgstr "de 0"
-
--#: src/gtk/MainView.cxx:879
-+#: src/gtk/MainView.cxx:921
- msgid "Index"
- msgstr "Ãndex"
-
--#: src/gtk/MainView.cxx:946 src/gtk/MainView.cxx:956
-+#: src/gtk/MainView.cxx:991 src/gtk/MainView.cxx:1001
- #, c-format
- msgid "Error building UI manager: %s\n"
- msgstr "Error construïnt l'administrado de UI: %s\n"
-
--#: src/gtk/MainView.cxx:1056
-+#: src/gtk/MainView.cxx:1108
- msgid "A lightweight PDF viewer"
- msgstr "Un visor de PDF lleuger"
-
--#: src/gtk/MainView.cxx:1059
-+#: src/gtk/MainView.cxx:1111
- msgid ""
- "ePDFView is free software; you can redistribute it and/or modify\n"
- "it under the terms of the GNU General Public License as published by\n"
-@@ -404,7 +428,7 @@
- "publicada per la Free Software Foundation; ja sigui la versió 2 de la\n"
- "Llicència o bé (si ho preferiu) qualsevol altra versió posterior.\n"
-
--#: src/gtk/MainView.cxx:1063
-+#: src/gtk/MainView.cxx:1115
- msgid ""
- "ePDFView is distributes in the hope that it will be useful,\n"
- "but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
-@@ -416,7 +440,7 @@
- "COMERCIABILITAT o ADEQUACIÓ PER UN PROPÒSIT PARTICULAR. Vegeu la\n"
- "Llicència Pública General GNU per obtenir-ne més detalls.\n"
-
--#: src/gtk/MainView.cxx:1067
-+#: src/gtk/MainView.cxx:1119
- msgid ""
- "You should have received a copy of the GNU General Public License\n"
- "along with ePDFView; if not, write to the Free Software Foundation,Inc.,\n"
-@@ -426,11 +450,11 @@
- "juntament amb ePDFView; en cas contrari, escriviu a la Free Software\n"
- "Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n"
-
--#: src/gtk/MainView.cxx:1076
-+#: src/gtk/MainView.cxx:1128
- msgid "ePDFView"
- msgstr "ePDFView"
-
--#: src/gtk/MainView.cxx:1083
-+#: src/gtk/MainView.cxx:1135
- msgid "translator-credits"
- msgstr "Jordi Fita <jordi@emma-soft.com>"
-
-diff -Nurd epdfview-0.1.6-svn/po/cs.po epdfview/po/cs.po
---- epdfview-0.1.6-svn/po/cs.po 1970-01-01 01:00:00.000000000 +0100
-+++ epdfview/po/cs.po 2008-07-13 12:55:55.043198000 +0200
-@@ -0,0 +1,604 @@
-+# SOME DESCRIPTIVE TITLE.
-+# Copyright (C) YEAR Emma's Software
-+# This file is distributed under the same license as the PACKAGE package.
-+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
-+#
-+msgid ""
-+msgstr ""
-+"Project-Id-Version: ePDFView 0.1.6\n"
-+"Report-Msgid-Bugs-To: jordi@emma-soft.com\n"
-+"POT-Creation-Date: 2008-04-14 13:27+0200\n"
-+"PO-Revision-Date: 2008-04-09 14:06+0100\n"
-+"Last-Translator: Dragonlord <dragonlord@seznam.cz>\n"
-+"Language-Team: Czech <none@none.org>\n"
-+"MIME-Version: 1.0\n"
-+"Content-Type: text/plain; charset=utf-8\n"
-+"Content-Transfer-Encoding: 8bit\n"
-+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-+
-+#: src/FindPter.cxx:187
-+msgid "No Results Found!"
-+msgstr "Nebyly nalezeny žádné výsledky!"
-+
-+#: src/FindPter.cxx:195
-+#, fuzzy, c-format
-+msgid "Searching in page %d of %d..."
-+msgstr "Hledám na straně od %d do %d..."
-+
-+#: src/IDocument.cxx:82
-+msgid "No error."
-+msgstr "Žádná chyba."
-+
-+#: src/IDocument.cxx:85
-+msgid "File not found."
-+msgstr "Soubor nenalezen."
-+
-+#: src/IDocument.cxx:88
-+msgid "Couldn't read the page catalog."
-+msgstr "Nelze naÄíst katalog stran."
-+
-+#: src/IDocument.cxx:91
-+msgid "The PDF file is damaged and can't be repaired."
-+msgstr "PDF soubor je poškozen a nelze jej opravit."
-+
-+#: src/IDocument.cxx:94
-+msgid "The file is encrypted and the password was incorrect or not supplied."
-+msgstr "Soubor je zakódovaný a heslo nebylo správně nebo vůbec vloženo."
-+
-+#: src/IDocument.cxx:97
-+#, fuzzy
-+msgid "Nonexistent or invalid highlight file."
-+msgstr "Soubor zvýraznění neexistuje nebo je neplatný."
-+
-+#: src/IDocument.cxx:100
-+msgid "Invalid printer."
-+msgstr "Neplatná tiskárna."
-+
-+#: src/IDocument.cxx:103
-+msgid "Error during printing."
-+msgstr "Chyba během tisku."
-+
-+#: src/IDocument.cxx:106
-+msgid "The PDF file doesn't allow that operation."
-+msgstr "PDF soubor nedovoluje tuto operaci."
-+
-+#: src/IDocument.cxx:109
-+msgid "Invalid page number."
-+msgstr "Chybný poÄet stran."
-+
-+#: src/IDocument.cxx:112
-+#, fuzzy
-+msgid "File I/O error."
-+msgstr "I/O chyba souboru."
-+
-+#: src/IDocument.cxx:115
-+#, c-format
-+msgid "Unknown error (%d)."
-+msgstr "Neznámá chyba (%d)."
-+
-+#: src/main.cxx:59
-+msgid "[FILE] - view PDF documents"
-+msgstr "[SOUBOR] - prohlížet PDF dokumenty"
-+
-+#: src/main.cxx:72 src/MainPter.cxx:153
-+msgid "PDF Viewer"
-+msgstr "ProhlížeÄ PDF souborů"
-+
-+#: src/MainPter.cxx:233
-+#, c-format
-+msgid "Reloading file %s..."
-+msgstr "Nahrávám znovu soubor %s..."
-+
-+#: src/MainPter.cxx:237
-+#, c-format
-+msgid "Loading file %s..."
-+msgstr "NaÄítám soubor %s..."
-+
-+#: src/MainPter.cxx:413 src/MainPter.cxx:892
-+#, fuzzy, c-format
-+msgid "of %d"
-+msgstr "z %d"
-+
-+#: src/MainPter.cxx:588
-+#, c-format
-+msgid "Saving document to %s..."
-+msgstr "Ukládám soubor do %s..."
-+
-+#: src/MainPter.cxx:832 src/MainPter.cxx:871
-+msgid "Error Loading File"
-+msgstr "Chyba naÄítání souboru"
-+
-+#: src/MainPter.cxx:872
-+msgid "The password you have supplied is not a valid password for this file."
-+msgstr "Vložené heslo není platné pro tento soubor."
-+
-+#: src/MainPter.cxx:953
-+msgid "Error Saving File"
-+msgstr "Chyba ukládání souboru"
-+
-+#: src/PagePter.cxx:338
-+msgid "Loading..."
-+msgstr "NaÄítám..."
-+
-+#: src/PrintPter.cxx:252
-+msgid "A4"
-+msgstr ""
-+
-+#: src/PrintPter.cxx:280
-+msgid "300 DPI"
-+msgstr ""
-+
-+#: src/PrintPter.cxx:308
-+msgid "Grayscale"
-+msgstr "Odstíny šedi"
-+
-+#: src/PrintPter.cxx:409
-+msgid "Idle"
-+msgstr "Zahálející"
-+
-+#: src/PrintPter.cxx:412
-+msgid "Stopped"
-+msgstr "Zastavený"
-+
-+#: src/PrintPter.cxx:415
-+msgid "Processing"
-+msgstr "Zpracovávám"
-+
-+#: src/PrintPter.cxx:418
-+msgid "Unknown"
-+msgstr "Neznámý"
-+
-+#: src/PDFDocument.cxx:272
-+#, c-format
-+msgid ""
-+"Failed to load document '%s'.\n"
-+"%s\n"
-+msgstr ""
-+"Chyba naÄítání dokumentu '%s'.\n"
-+"%s\n"
-+
-+#: src/gtk/FindView.cxx:51
-+msgid "Find:"
-+msgstr "Hledat:"
-+
-+#: src/gtk/MainView.cxx:89
-+msgid "_File"
-+msgstr "_Soubor"
-+
-+#: src/gtk/MainView.cxx:90
-+msgid "_Edit"
-+msgstr "_Editovat"
-+
-+#: src/gtk/MainView.cxx:91
-+msgid "_View"
-+msgstr "_Pohled"
-+
-+#: src/gtk/MainView.cxx:92
-+msgid "_Go"
-+msgstr "_Jít na"
-+
-+#: src/gtk/MainView.cxx:93
-+msgid "_Help"
-+msgstr "_Nápověda"
-+
-+#: src/gtk/MainView.cxx:95
-+msgid "_Open"
-+msgstr "_Otevřít"
-+
-+#: src/gtk/MainView.cxx:96
-+msgid "Open a PDF document"
-+msgstr "Otevřít PDF dokument"
-+
-+#: src/gtk/MainView.cxx:99
-+#, fuzzy
-+msgid "_Reload"
-+msgstr "_Aktualizovat"
-+
-+#: src/gtk/MainView.cxx:100
-+msgid "Reload the current document"
-+msgstr "Aktualizuje souÄasný dokument"
-+
-+#: src/gtk/MainView.cxx:103
-+msgid "_Save a Copy..."
-+msgstr "_Uložit jako..."
-+
-+#: src/gtk/MainView.cxx:104
-+msgid "Save a copy of the current document"
-+msgstr "Uloží kopii souÄasného dokumentu"
-+
-+#: src/gtk/MainView.cxx:108
-+msgid "_Print..."
-+msgstr "_Tisk..."
-+
-+#: src/gtk/MainView.cxx:109
-+msgid "Print the current document"
-+msgstr "Vytiskne souÄasný dokument"
-+
-+#: src/gtk/MainView.cxx:113
-+msgid "_Close"
-+msgstr "_Zavřít"
-+
-+#: src/gtk/MainView.cxx:114
-+msgid "Close this window"
-+msgstr "Zavře toto okno"
-+
-+#: src/gtk/MainView.cxx:117
-+msgid "_Find"
-+msgstr "_Hledat"
-+
-+#: src/gtk/MainView.cxx:118
-+msgid "Find a word in the document"
-+msgstr "Hledání zadaných výrazů v dokumentu"
-+
-+#: src/gtk/MainView.cxx:121
-+msgid "Preferences..."
-+msgstr "Nastavení..."
-+
-+#: src/gtk/MainView.cxx:122
-+msgid "Change the application's preferences"
-+msgstr "Změny v nastavení aplikace"
-+
-+#: src/gtk/MainView.cxx:125
-+msgid "Zoom _In"
-+msgstr "Z_většit"
-+
-+#: src/gtk/MainView.cxx:126
-+msgid "Enlarge the document"
-+msgstr "Zvětší náhled dokumentu"
-+
-+#: src/gtk/MainView.cxx:129
-+msgid "Zoom _Out"
-+msgstr "Z_menšit"
-+
-+#: src/gtk/MainView.cxx:130
-+msgid "Shrink the document"
-+msgstr "Zmenší náhled dokumentu"
-+
-+#: src/gtk/MainView.cxx:133 src/gtk/StockIcons.cxx:43
-+msgid "Rotate _Right"
-+msgstr "OtoÄit vp_ravo"
-+
-+#: src/gtk/MainView.cxx:134
-+msgid "Rotate the document 90 degrees clockwise"
-+msgstr "OtoÄí dokument o 90 stupňů po smÄ›ru hodinových ruÄiÄek"
-+
-+#: src/gtk/MainView.cxx:137 src/gtk/StockIcons.cxx:42
-+msgid "Rotate _Left"
-+msgstr "OtoÄit v_levo"
-+
-+#: src/gtk/MainView.cxx:138
-+msgid "Rotate the document 90 degrees counter-clockwise"
-+msgstr "OtoÄí dokument o 90 stupňů proti smÄ›ru hodinových ruÄiÄek"
-+
-+#: src/gtk/MainView.cxx:141
-+msgid "_First Page"
-+msgstr "_První stranu"
-+
-+#: src/gtk/MainView.cxx:142
-+msgid "Go to the first page"
-+msgstr "PÅ™eskoÄit na první stranu"
-+
-+#: src/gtk/MainView.cxx:145
-+msgid "_Next Page"
-+msgstr "_Další stranu"
-+
-+#: src/gtk/MainView.cxx:146
-+msgid "Go to the next page"
-+msgstr "Přejde na další stranu"
-+
-+#: src/gtk/MainView.cxx:149
-+msgid "_Previous Page"
-+msgstr "Př_edchozí stranu"
-+
-+#: src/gtk/MainView.cxx:150
-+msgid "Go to the previous page"
-+msgstr "Přejde na předchozí stranu"
-+
-+#: src/gtk/MainView.cxx:153
-+msgid "_Last Page"
-+msgstr "Po_slední stranu"
-+
-+#: src/gtk/MainView.cxx:154
-+msgid "Go to the last page"
-+msgstr "PÅ™eskoÄí na poslední stranu"
-+
-+#: src/gtk/MainView.cxx:157
-+msgid "_About"
-+msgstr "_O programu"
-+
-+#: src/gtk/MainView.cxx:158
-+msgid "Display application's credits"
-+msgstr "Zobrazí informace o aplikaci"
-+
-+#: src/gtk/MainView.cxx:175
-+msgid "F_ull screen"
-+msgstr "Na celou obrazovku"
-+
-+#: src/gtk/MainView.cxx:176
-+msgid "Toggle full screen window"
-+msgstr "Přepne použití celé obrazovky"
-+
-+#: src/gtk/MainView.cxx:179
-+msgid "Show _Toolbar"
-+msgstr "Zobrazit panel i_kon"
-+
-+#: src/gtk/MainView.cxx:180
-+msgid "Show or hide the toolbar"
-+msgstr "Zobrazí nebo skryje panel s ikonami"
-+
-+#: src/gtk/MainView.cxx:183
-+msgid "Show _Statusbar"
-+msgstr "Zobrazit _informaÄní panel"
-+
-+#: src/gtk/MainView.cxx:184
-+msgid "Show or hide the statusbar"
-+msgstr "Zobrazí nebo skryje spodní informaÄní panel"
-+
-+#: src/gtk/MainView.cxx:187
-+msgid "Show I_ndex"
-+msgstr "Zobrazit os_novu"
-+
-+#: src/gtk/MainView.cxx:188
-+msgid "Show or hide the document's outline"
-+msgstr "Zobrazí nebo skryje osnovu dokumentu"
-+
-+#: src/gtk/MainView.cxx:191
-+msgid "Zoom to _Fit"
-+msgstr "Přizpůsobit _do okna"
-+
-+#: src/gtk/MainView.cxx:192
-+msgid "Make the current document fill the window"
-+msgstr "Přizpůsobí zvětšení dokumentu velikosti okna"
-+
-+#: src/gtk/MainView.cxx:195 src/gtk/StockIcons.cxx:44
-+msgid "Zoom to _Width"
-+msgstr "Přizpůsobit šíř_ce okna"
-+
-+#: src/gtk/MainView.cxx:196
-+msgid "Make the current document fill the window width"
-+msgstr "Přizpůsobí zvětšení dokumentu šířce okna"
-+
-+#: src/gtk/MainView.cxx:202
-+msgid "Scroll"
-+msgstr ""
-+
-+#: src/gtk/MainView.cxx:203
-+msgid "Mouse scroll page"
-+msgstr ""
-+
-+#: src/gtk/MainView.cxx:205
-+msgid "Select Text"
-+msgstr ""
-+
-+#: src/gtk/MainView.cxx:206
-+msgid " Mouse select text"
-+msgstr ""
-+
-+#: src/gtk/MainView.cxx:320
-+msgid "Open PDF File"
-+msgstr "Otevřít PDF soubor"
-+
-+#: src/gtk/MainView.cxx:340 src/gtk/MainView.cxx:454
-+msgid "Portable Document Format (PDF) Files"
-+msgstr "Soubory PDF (Portable Document Format)"
-+
-+#: src/gtk/MainView.cxx:352 src/gtk/MainView.cxx:466
-+msgid "All Files"
-+msgstr "VÅ¡echny soubory"
-+
-+#: src/gtk/MainView.cxx:404
-+msgid "Password"
-+msgstr "Heslo"
-+
-+#: src/gtk/MainView.cxx:428
-+msgid "Save PDF File"
-+msgstr "Uložit PDF soubor"
-+
-+#: src/gtk/MainView.cxx:858
-+msgid "Page"
-+msgstr "Strana"
-+
-+#: src/gtk/MainView.cxx:868
-+#, fuzzy
-+msgid "of 0"
-+msgstr "z 0"
-+
-+#: src/gtk/MainView.cxx:921
-+#, fuzzy
-+msgid "Index"
-+msgstr "Osnova"
-+
-+#: src/gtk/MainView.cxx:991 src/gtk/MainView.cxx:1001
-+#, fuzzy, c-format
-+msgid "Error building UI manager: %s\n"
-+msgstr "Chyba sestavení UI manažera: %s\n"
-+
-+#: src/gtk/MainView.cxx:1108
-+msgid "A lightweight PDF viewer"
-+msgstr "NenároÄný prohlížeÄ PDF souborů"
-+
-+#: src/gtk/MainView.cxx:1111
-+msgid ""
-+"ePDFView is free software; you can redistribute it and/or modify\n"
-+"it under the terms of the GNU General Public License as published by\n"
-+"the Free Software Foundation; either version 2 of the License, or\n"
-+"(at your option) any later version.\n"
-+msgstr ""
-+"ePDFView je svobodný software; může být distribuován a/nebo modifikován\n"
-+"za podmínek GNU všeobecné veřejné licence podle znění publikovaného\n"
-+"Free Software Foundation; buÄ ve verzi 2 této licence, nebo\n"
-+"(podle vlastního uvážení) jakékoliv novější verze.\n"
-+
-+#: src/gtk/MainView.cxx:1115
-+msgid ""
-+"ePDFView is distributes in the hope that it will be useful,\n"
-+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
-+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
-+"GNU General Public License for more details.\n"
-+msgstr ""
-+"ePDFView je distribuován s úmyslem být užiteÄný,\n"
-+"ovÅ¡em BEZ JAKÉKOLI ZÃRUKY; stejnÄ› tak bez zahrnuté záruky\n"
-+"PRODEJNOSTI nebo VHODNOSTI NA URČITà ÚKOL. Podrobnosti\n"
-+"lze nalézt v GNU všeobecné veřejné licenci.\n"
-+
-+#: src/gtk/MainView.cxx:1119
-+msgid ""
-+"You should have received a copy of the GNU General Public License\n"
-+"along with ePDFView; if not, write to the Free Software Foundation,Inc.,\n"
-+"59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n"
-+msgstr ""
-+"S ePDFView musí být dodávána kopie GNU všeobecné veřejné licence;\n"
-+"pokud tomu tak není, obraťte se na Free Software Foundation,Inc.,\n"
-+"59 temple Place, Suite 330, Boston, MA 02111-1307 USA\n"
-+
-+#: src/gtk/MainView.cxx:1128
-+msgid "ePDFView"
-+msgstr "ePDFView"
-+
-+#: src/gtk/MainView.cxx:1135
-+#, fuzzy
-+msgid "translator-credits"
-+msgstr "Dragonlord <dragonlord@seznam.cz>"
-+
-+#: src/gtk/PreferencesView.cxx:32
-+msgid "Preferences"
-+msgstr "Konfigurace"
-+
-+#: src/gtk/PreferencesView.cxx:46
-+msgid "External Commands"
-+msgstr "Externí příkazy"
-+
-+#: src/gtk/PreferencesView.cxx:105
-+msgid "Web _Browser:"
-+msgstr "We_bový prohlížeÄ:"
-+
-+#: src/gtk/PreferencesView.cxx:118
-+#, c-format
-+msgid "Note: <i>%s</i> will be replaced by the URI."
-+msgstr "Poznámka: <i>%s</i> bude nahrazeno URI."
-+
-+#: src/gtk/PrintView.cxx:51
-+msgid "Print"
-+msgstr "Tisk"
-+
-+#: src/gtk/PrintView.cxx:69 src/gtk/PrintView.cxx:659
-+msgid "Printer"
-+msgstr "Tiskárna"
-+
-+#: src/gtk/PrintView.cxx:74
-+#, fuzzy
-+msgid "Job"
-+msgstr "Úkol"
-+
-+#: src/gtk/PrintView.cxx:79
-+msgid "Paper"
-+msgstr "Papír"
-+
-+#: src/gtk/PrintView.cxx:359
-+msgid "<b>Print Range</b>"
-+msgstr "<b>Tisk oblasti<b>"
-+
-+#: src/gtk/PrintView.cxx:377
-+msgid "_All pages"
-+msgstr "VÅ¡_e"
-+
-+#: src/gtk/PrintView.cxx:380
-+msgid "_Range:"
-+msgstr "Výbě_r:"
-+
-+#: src/gtk/PrintView.cxx:392
-+msgid "<b>Page Set</b>"
-+msgstr "<b>Sada stran<b>"
-+
-+#: src/gtk/PrintView.cxx:408
-+msgid "A_ll pages"
-+msgstr "VÅ¡ech_ny"
-+
-+#: src/gtk/PrintView.cxx:412
-+msgid "O_dd pages"
-+msgstr "L_iché strany"
-+
-+#: src/gtk/PrintView.cxx:416
-+msgid "_Even pages"
-+msgstr "S_udé strany"
-+
-+#: src/gtk/PrintView.cxx:420
-+msgid "<b>Copies</b>"
-+msgstr "<b>Kopie<b>"
-+
-+#: src/gtk/PrintView.cxx:437
-+msgid "N_umber of copies:"
-+msgstr "_PoÄet kopií:"
-+
-+#: src/gtk/PrintView.cxx:444
-+msgid "C_ollate"
-+msgstr "Seřadi_t"
-+
-+#: src/gtk/PrintView.cxx:465
-+msgid "<b>Paper and Layout</b>"
-+msgstr "<b>Papír a rozmístění<b>"
-+
-+#: src/gtk/PrintView.cxx:482
-+msgid "Paper _Size:"
-+msgstr "_Velikost papíru:"
-+
-+#: src/gtk/PrintView.cxx:508
-+msgid "Page _orientation:"
-+msgstr "_Orientace strany:"
-+
-+#: src/gtk/PrintView.cxx:539
-+msgid "_Layout:"
-+msgstr "Ro_zmístění:"
-+
-+#: src/gtk/PrintView.cxx:568
-+msgid "<b>Output</b>"
-+msgstr "<b>Výstup<b>"
-+
-+#: src/gtk/PrintView.cxx:585
-+msgid "_Mode:"
-+msgstr "_Mód:"
-+
-+#: src/gtk/PrintView.cxx:613
-+msgid "_Resolution:"
-+msgstr "_Rozlišení:"
-+
-+#: src/gtk/PrintView.cxx:668
-+msgid "State"
-+msgstr "Stav"
-+
-+#: src/gtk/PrintView.cxx:677
-+#, fuzzy
-+msgid "Jobs"
-+msgstr "Úkoly"
-+
-+#: src/gtk/PrintView.cxx:686
-+msgid "Location"
-+msgstr "Umístění"
-+
-+#: src/gtk/PrintView.cxx:717
-+msgid "Plain"
-+msgstr "Jednoduché"
-+
-+#: src/gtk/PrintView.cxx:723
-+msgid "2 pages in 1"
-+msgstr "2 strany na list"
-+
-+#: src/gtk/PrintView.cxx:729
-+msgid "4 pages in 1"
-+msgstr "4 strany na list"
-+
-+#: src/gtk/PrintView.cxx:744
-+msgid "Portrait"
-+msgstr ""
-+
-+#: src/gtk/PrintView.cxx:750
-+msgid "Landscape"
-+msgstr ""
-+
-+#: src/gtk/StockIcons.cxx:40
-+msgid "Find _Next"
-+msgstr "Najít _další"
-+
-+#: src/gtk/StockIcons.cxx:41
-+msgid "Find _Previous"
-+msgstr "Najít _předchozí"
-diff -Nurd epdfview-0.1.6-svn/po/de.po epdfview/po/de.po
---- epdfview-0.1.6-svn/po/de.po 2008-07-13 12:57:47.543198000 +0200
-+++ epdfview/po/de.po 2008-07-13 12:55:55.083198000 +0200
-@@ -2,15 +2,16 @@
- # Copyright (C) 2006 Emma's Software
- # This file is distributed under the same license as the epdfview package.
- # Moritz Heiber <moe@xfce.org>, 2006.
-+# Enrico Tröger <enrico.troeger@uvena.de>, 2007.
- #
- msgid ""
- msgstr ""
--"Project-Id-Version: ePDFView 0.1.4\n"
-+"Project-Id-Version: ePDFView 0.1.6\n"
- "Report-Msgid-Bugs-To: jordi@emma-soft.com\n"
--"POT-Creation-Date: 2007-02-26 17:47+0100\n"
--"PO-Revision-Date: 2006-05-13 00:40+0100\n"
--"Last-Translator: Moritz Heiber <moe@xfce.org>\n"
--"Language-Team: German <none@none.org>\n"
-+"POT-Creation-Date: 2008-04-14 13:27+0200\n"
-+"PO-Revision-Date: 2007-04-16 15:33+0100\n"
-+"Last-Translator: Enrico Tröger <enrico.troeger@uvena.de>\n"
-+"Language-Team: German\n"
- "MIME-Version: 1.0\n"
- "Content-Type: text/plain; charset=UTF-8\n"
- "Content-Transfer-Encoding: 8bit\n"
-@@ -75,11 +76,11 @@
- msgid "Unknown error (%d)."
- msgstr "Unbekannter Fehler (%d)."
-
--#: src/main.cxx:38
-+#: src/main.cxx:59
- msgid "[FILE] - view PDF documents"
- msgstr "[DATEI] - PDF Dateien anschauen"
-
--#: src/main.cxx:51 src/MainPter.cxx:153
-+#: src/main.cxx:72 src/MainPter.cxx:153
- msgid "PDF Viewer"
- msgstr "PDF Betrachter"
-
-@@ -93,53 +94,59 @@
- msgid "Loading file %s..."
- msgstr "Lade Datei %s..."
-
--#: src/MainPter.cxx:413 src/MainPter.cxx:886
--#, fuzzy, c-format
-+#: src/MainPter.cxx:413 src/MainPter.cxx:892
-+#, c-format
- msgid "of %d"
--msgstr "%d von %d"
-+msgstr "von %d"
-
- #: src/MainPter.cxx:588
- #, c-format
- msgid "Saving document to %s..."
--msgstr ""
-+msgstr "Speiche Dokument als %s..."
-
--#: src/MainPter.cxx:826 src/MainPter.cxx:865
-+#: src/MainPter.cxx:832 src/MainPter.cxx:871
- msgid "Error Loading File"
- msgstr "Fehler beim Laden der Datei"
-
--#: src/MainPter.cxx:866
-+#: src/MainPter.cxx:872
- msgid "The password you have supplied is not a valid password for this file."
- msgstr "Das angegebene Passwort ist ungültig für dieses Dokument."
-
--#: src/MainPter.cxx:947
--#, fuzzy
-+#: src/MainPter.cxx:953
- msgid "Error Saving File"
--msgstr "Fehler beim Laden der Datei"
-+msgstr "Fehler beim Speichern der Datei."
-
--#: src/PagePter.cxx:292
-+#: src/PagePter.cxx:338
- msgid "Loading..."
- msgstr "Lade..."
-
--#: src/PrintPter.cxx:295
--msgid "Grayscale"
-+#: src/PrintPter.cxx:252
-+msgid "A4"
- msgstr ""
-
--#: src/PrintPter.cxx:395
--#, fuzzy
-+#: src/PrintPter.cxx:280
-+msgid "300 DPI"
-+msgstr ""
-+
-+#: src/PrintPter.cxx:308
-+msgid "Grayscale"
-+msgstr "Graustufen"
-+
-+#: src/PrintPter.cxx:409
- msgid "Idle"
--msgstr "Inhalt"
-+msgstr "Untätig"
-
--#: src/PrintPter.cxx:398
-+#: src/PrintPter.cxx:412
- msgid "Stopped"
--msgstr ""
-+msgstr "Angehalten"
-
--#: src/PrintPter.cxx:401
-+#: src/PrintPter.cxx:415
- msgid "Processing"
--msgstr ""
-+msgstr "Drucke"
-
--#: src/PrintPter.cxx:404
-+#: src/PrintPter.cxx:418
- msgid "Unknown"
--msgstr ""
-+msgstr "Unbekannt"
-
- #: src/PDFDocument.cxx:272
- #, c-format
-@@ -154,248 +161,260 @@
- msgid "Find:"
- msgstr "Suche:"
-
--#: src/gtk/MainView.cxx:87
-+#: src/gtk/MainView.cxx:89
- msgid "_File"
- msgstr "_Datei"
-
--#: src/gtk/MainView.cxx:88
-+#: src/gtk/MainView.cxx:90
- msgid "_Edit"
- msgstr "_Bearbeiten"
-
--#: src/gtk/MainView.cxx:89
-+#: src/gtk/MainView.cxx:91
- msgid "_View"
- msgstr "_Ansicht"
-
--#: src/gtk/MainView.cxx:90
-+#: src/gtk/MainView.cxx:92
- msgid "_Go"
- msgstr "_Gehe zu"
-
--#: src/gtk/MainView.cxx:91
-+#: src/gtk/MainView.cxx:93
- msgid "_Help"
- msgstr "_Hilfe"
-
--#: src/gtk/MainView.cxx:93
-+#: src/gtk/MainView.cxx:95
- msgid "_Open"
- msgstr "_Öffnen"
-
--#: src/gtk/MainView.cxx:94
-+#: src/gtk/MainView.cxx:96
- msgid "Open a PDF document"
- msgstr "Öffne ein PDF Dokument"
-
--#: src/gtk/MainView.cxx:97
-+#: src/gtk/MainView.cxx:99
- msgid "_Reload"
- msgstr "_Neu laden"
-
--#: src/gtk/MainView.cxx:98
-+#: src/gtk/MainView.cxx:100
- msgid "Reload the current document"
- msgstr "Lade das Dokument neu"
-
--#: src/gtk/MainView.cxx:101
-+#: src/gtk/MainView.cxx:103
- msgid "_Save a Copy..."
--msgstr ""
-+msgstr "_Kopie speichern unter"
-
--#: src/gtk/MainView.cxx:102
--#, fuzzy
-+#: src/gtk/MainView.cxx:104
- msgid "Save a copy of the current document"
--msgstr "Lade das Dokument neu"
-+msgstr "Speichert eine Kopie des Dokuments"
-
--#: src/gtk/MainView.cxx:106
-+#: src/gtk/MainView.cxx:108
- msgid "_Print..."
--msgstr ""
-+msgstr "_Drucken..."
-
--#: src/gtk/MainView.cxx:107
--#, fuzzy
-+#: src/gtk/MainView.cxx:109
- msgid "Print the current document"
--msgstr "Lade das Dokument neu"
-+msgstr "Druckt das Dokument"
-
--#: src/gtk/MainView.cxx:111
-+#: src/gtk/MainView.cxx:113
- msgid "_Close"
- msgstr "_Schließen"
-
--#: src/gtk/MainView.cxx:112
-+#: src/gtk/MainView.cxx:114
- msgid "Close this window"
- msgstr "Schließe dieses Fenster"
-
--#: src/gtk/MainView.cxx:115
-+#: src/gtk/MainView.cxx:117
- msgid "_Find"
- msgstr "_Suche"
-
--#: src/gtk/MainView.cxx:116
-+#: src/gtk/MainView.cxx:118
- msgid "Find a word in the document"
- msgstr "Sucht im Dokument nach einem Wort"
-
--#: src/gtk/MainView.cxx:119
-+#: src/gtk/MainView.cxx:121
- msgid "Preferences..."
--msgstr ""
-+msgstr "Einstellungen..."
-
--#: src/gtk/MainView.cxx:120
-+#: src/gtk/MainView.cxx:122
- msgid "Change the application's preferences"
--msgstr ""
-+msgstr "Ändert die Programmeinstellungen"
-
--#: src/gtk/MainView.cxx:123
-+#: src/gtk/MainView.cxx:125
- msgid "Zoom _In"
--msgstr "Heranzoomen"
-+msgstr "Hera_nzoomen"
-
--#: src/gtk/MainView.cxx:124
-+#: src/gtk/MainView.cxx:126
- msgid "Enlarge the document"
- msgstr "Dokument vergrößern"
-
--#: src/gtk/MainView.cxx:127
-+#: src/gtk/MainView.cxx:129
- msgid "Zoom _Out"
--msgstr "Herauszoomen"
-+msgstr "Hera_uszoomen"
-
--#: src/gtk/MainView.cxx:128
-+#: src/gtk/MainView.cxx:130
- msgid "Shrink the document"
- msgstr "Dokument verkleinern"
-
--#: src/gtk/MainView.cxx:131 src/gtk/StockIcons.cxx:43
-+#: src/gtk/MainView.cxx:133 src/gtk/StockIcons.cxx:43
- msgid "Rotate _Right"
--msgstr "Nach rechts rotieren"
-+msgstr "Nach _rechts rotieren"
-
--#: src/gtk/MainView.cxx:132
-+#: src/gtk/MainView.cxx:134
- msgid "Rotate the document 90 degrees clockwise"
- msgstr "Das Dokument um 90 Grad im Uhrzeigersinn drehen"
-
--#: src/gtk/MainView.cxx:135 src/gtk/StockIcons.cxx:42
-+#: src/gtk/MainView.cxx:137 src/gtk/StockIcons.cxx:42
- msgid "Rotate _Left"
--msgstr "Nach links rotieren"
-+msgstr "Nach _links rotieren"
-
--#: src/gtk/MainView.cxx:136
-+#: src/gtk/MainView.cxx:138
- msgid "Rotate the document 90 degrees counter-clockwise"
- msgstr "Das Dokument um 90 Grad gegen den Uhrzeigersinn drehen"
-
--#: src/gtk/MainView.cxx:139
-+#: src/gtk/MainView.cxx:141
- msgid "_First Page"
- msgstr "_Erste Seite"
-
--#: src/gtk/MainView.cxx:140
-+#: src/gtk/MainView.cxx:142
- msgid "Go to the first page"
- msgstr "Gehe zur ersten Seite"
-
--#: src/gtk/MainView.cxx:143
-+#: src/gtk/MainView.cxx:145
- msgid "_Next Page"
- msgstr "_Nächste Seite"
-
--#: src/gtk/MainView.cxx:144
-+#: src/gtk/MainView.cxx:146
- msgid "Go to the next page"
- msgstr "Gehe zur ersten Seite"
-
--#: src/gtk/MainView.cxx:147
-+#: src/gtk/MainView.cxx:149
- msgid "_Previous Page"
- msgstr "_Vorherige Seite"
-
--#: src/gtk/MainView.cxx:148
-+#: src/gtk/MainView.cxx:150
- msgid "Go to the previous page"
- msgstr "Gehe zur vorherigen Seite"
-
--#: src/gtk/MainView.cxx:151
-+#: src/gtk/MainView.cxx:153
- msgid "_Last Page"
- msgstr "_Letzte Seite"
-
--#: src/gtk/MainView.cxx:152
-+#: src/gtk/MainView.cxx:154
- msgid "Go to the last page"
- msgstr "Gehe zur letzten Seite"
-
--#: src/gtk/MainView.cxx:155
-+#: src/gtk/MainView.cxx:157
- msgid "_About"
- msgstr "_Ãœber"
-
--#: src/gtk/MainView.cxx:156
-+#: src/gtk/MainView.cxx:158
- msgid "Display application's credits"
- msgstr "Credits anzeigen"
-
--#: src/gtk/MainView.cxx:166
-+#: src/gtk/MainView.cxx:175
- msgid "F_ull screen"
--msgstr ""
-+msgstr "_Vollbild"
-
--#: src/gtk/MainView.cxx:167
-+#: src/gtk/MainView.cxx:176
- msgid "Toggle full screen window"
--msgstr ""
-+msgstr "In Vollbildmodus umschalten"
-
--#: src/gtk/MainView.cxx:170
-+#: src/gtk/MainView.cxx:179
- msgid "Show _Toolbar"
--msgstr "Werkzeugleiste anzeigen"
-+msgstr "_Werkzeugleiste anzeigen"
-
--#: src/gtk/MainView.cxx:171
-+#: src/gtk/MainView.cxx:180
- msgid "Show or hide the toolbar"
- msgstr "Werkzeugleiste anzeigen oder verstecken"
-
--#: src/gtk/MainView.cxx:174
-+#: src/gtk/MainView.cxx:183
- msgid "Show _Statusbar"
--msgstr "Statusleiste anzeigen"
-+msgstr "_Statusleiste anzeigen"
-
--#: src/gtk/MainView.cxx:175
-+#: src/gtk/MainView.cxx:184
- msgid "Show or hide the statusbar"
- msgstr "Statusleiste anzeigen oder verstecken"
-
--#: src/gtk/MainView.cxx:178
-+#: src/gtk/MainView.cxx:187
- msgid "Show I_ndex"
--msgstr "Ãœbersicht anzeigen"
-+msgstr "Ü_bersicht anzeigen"
-
--#: src/gtk/MainView.cxx:179
-+#: src/gtk/MainView.cxx:188
- msgid "Show or hide the document's outline"
- msgstr "Ãœbersicht des Dokuments anzeigen oder verstecken"
-
--#: src/gtk/MainView.cxx:182
-+#: src/gtk/MainView.cxx:191
- msgid "Zoom to _Fit"
--msgstr "Zoom zur Fenstergröße"
-+msgstr "Zoom zur _Fenstergröße"
-
--#: src/gtk/MainView.cxx:183
-+#: src/gtk/MainView.cxx:192
- msgid "Make the current document fill the window"
- msgstr "Zoome das Dokument bis zur Größe des Fensters heran"
-
--#: src/gtk/MainView.cxx:186 src/gtk/StockIcons.cxx:44
-+#: src/gtk/MainView.cxx:195 src/gtk/StockIcons.cxx:44
- msgid "Zoom to _Width"
--msgstr "Zoom zur Fensterweite"
-+msgstr "Zoom zur F_ensterweite"
-
--#: src/gtk/MainView.cxx:187
-+#: src/gtk/MainView.cxx:196
- msgid "Make the current document fill the window width"
- msgstr "Zoome das Dokument heran, bis es die Fensterbreite füllt"
-
--#: src/gtk/MainView.cxx:278
-+#: src/gtk/MainView.cxx:202
-+msgid "Scroll"
-+msgstr ""
-+
-+#: src/gtk/MainView.cxx:203
-+msgid "Mouse scroll page"
-+msgstr ""
-+
-+#: src/gtk/MainView.cxx:205
-+msgid "Select Text"
-+msgstr ""
-+
-+#: src/gtk/MainView.cxx:206
-+msgid " Mouse select text"
-+msgstr ""
-+
-+#: src/gtk/MainView.cxx:320
- msgid "Open PDF File"
- msgstr "PDF Datei öffnen"
-
--#: src/gtk/MainView.cxx:298 src/gtk/MainView.cxx:412
-+#: src/gtk/MainView.cxx:340 src/gtk/MainView.cxx:454
- msgid "Portable Document Format (PDF) Files"
--msgstr ""
-+msgstr "Portable Document Format (PDF) Dateien"
-
--#: src/gtk/MainView.cxx:310 src/gtk/MainView.cxx:424
-+#: src/gtk/MainView.cxx:352 src/gtk/MainView.cxx:466
- msgid "All Files"
--msgstr ""
-+msgstr "Alle Dateien"
-
--#: src/gtk/MainView.cxx:362
-+#: src/gtk/MainView.cxx:404
- msgid "Password"
- msgstr "Passwort"
-
--#: src/gtk/MainView.cxx:386
--#, fuzzy
-+#: src/gtk/MainView.cxx:428
- msgid "Save PDF File"
--msgstr "PDF Datei öffnen"
-+msgstr "PDF Datei speichern"
-
--#: src/gtk/MainView.cxx:816
-+#: src/gtk/MainView.cxx:858
- msgid "Page"
- msgstr "Seite"
-
--#: src/gtk/MainView.cxx:826
--#, fuzzy
-+#: src/gtk/MainView.cxx:868
- msgid "of 0"
--msgstr "0 von 0"
-+msgstr "von 0"
-
--#: src/gtk/MainView.cxx:879
-+#: src/gtk/MainView.cxx:921
- msgid "Index"
- msgstr "Inhalt"
-
--#: src/gtk/MainView.cxx:946 src/gtk/MainView.cxx:956
-+#: src/gtk/MainView.cxx:991 src/gtk/MainView.cxx:1001
- #, c-format
- msgid "Error building UI manager: %s\n"
- msgstr "Fehler beim Erstellen des UI Managers: %s\n"
-
--#: src/gtk/MainView.cxx:1056
-+#: src/gtk/MainView.cxx:1108
- msgid "A lightweight PDF viewer"
- msgstr "Ein kleiner, schneller PDF Betrachter"
-
--#: src/gtk/MainView.cxx:1059
-+#: src/gtk/MainView.cxx:1111
- msgid ""
- "ePDFView is free software; you can redistribute it and/or modify\n"
- "it under the terms of the GNU General Public License as published by\n"
-@@ -407,7 +426,7 @@
- "Lizenz, wie von der Free Software Foundation herausgegeben,\n"
- "beachten; Entweder Version 2 oder jede nächsthöhere Version.\n"
-
--#: src/gtk/MainView.cxx:1063
-+#: src/gtk/MainView.cxx:1115
- msgid ""
- "ePDFView is distributes in the hope that it will be useful,\n"
- "but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
-@@ -420,7 +439,7 @@
- "FUNKTION mit ein. Für Details wird auf die GNU General Public Lizenz\n"
- "verwiesen.\n"
-
--#: src/gtk/MainView.cxx:1067
-+#: src/gtk/MainView.cxx:1119
- msgid ""
- "You should have received a copy of the GNU General Public License\n"
- "along with ePDFView; if not, write to the Free Software Foundation,Inc.,\n"
-@@ -434,152 +453,153 @@
- "Boston, MA 02111-1307\n"
- "USA\n"
-
--#: src/gtk/MainView.cxx:1076
-+#: src/gtk/MainView.cxx:1128
- msgid "ePDFView"
- msgstr "ePDFView"
-
--#: src/gtk/MainView.cxx:1083
-+#: src/gtk/MainView.cxx:1135
- msgid "translator-credits"
--msgstr "Moritz Heiber <moe@xfce.org>"
-+msgstr ""
-+"Moritz Heiber <moe@xfce.org>,\n"
-+"Enrico Tröger <enrico.troeger@uvena.de>"
-
- #: src/gtk/PreferencesView.cxx:32
- msgid "Preferences"
--msgstr ""
-+msgstr "Einstellungen"
-
- #: src/gtk/PreferencesView.cxx:46
- msgid "External Commands"
--msgstr ""
-+msgstr "Externe Befehle"
-
- #: src/gtk/PreferencesView.cxx:105
- msgid "Web _Browser:"
--msgstr ""
-+msgstr "_Webbrowser:"
-
- #: src/gtk/PreferencesView.cxx:118
- #, c-format
- msgid "Note: <i>%s</i> will be replaced by the URI."
--msgstr ""
-+msgstr "Hinweis: <i>%s</i> wird durch die URL ersetzt."
-
- #: src/gtk/PrintView.cxx:51
- msgid "Print"
--msgstr ""
-+msgstr "Drucken"
-
- #: src/gtk/PrintView.cxx:69 src/gtk/PrintView.cxx:659
- msgid "Printer"
--msgstr ""
-+msgstr "Drucker"
-
- #: src/gtk/PrintView.cxx:74
- msgid "Job"
--msgstr ""
-+msgstr "Auftrag"
-
- #: src/gtk/PrintView.cxx:79
--#, fuzzy
- msgid "Paper"
--msgstr "Seite"
-+msgstr "Papier"
-
- #: src/gtk/PrintView.cxx:359
- msgid "<b>Print Range</b>"
--msgstr ""
-+msgstr "<b>Druckbereich</b>"
-
- #: src/gtk/PrintView.cxx:377
- msgid "_All pages"
--msgstr ""
-+msgstr "_Alle Seiten"
-
- #: src/gtk/PrintView.cxx:380
- msgid "_Range:"
--msgstr ""
-+msgstr "_Bereich:"
-
- #: src/gtk/PrintView.cxx:392
- msgid "<b>Page Set</b>"
--msgstr ""
-+msgstr "<b>Seiteneinstellungen</b>"
-
- #: src/gtk/PrintView.cxx:408
- msgid "A_ll pages"
--msgstr ""
-+msgstr "A_lle Seiten"
-
- #: src/gtk/PrintView.cxx:412
- msgid "O_dd pages"
--msgstr ""
-+msgstr "_Ungerade Seiten"
-
- #: src/gtk/PrintView.cxx:416
- msgid "_Even pages"
--msgstr ""
-+msgstr "_Gerade Seiten"
-
- #: src/gtk/PrintView.cxx:420
- msgid "<b>Copies</b>"
--msgstr ""
-+msgstr "<b>Kopien</b>"
-
- #: src/gtk/PrintView.cxx:437
- msgid "N_umber of copies:"
--msgstr ""
-+msgstr "An_zahl der Kopien:"
-
- #: src/gtk/PrintView.cxx:444
- msgid "C_ollate"
--msgstr ""
-+msgstr "Kopien _sortieren"
-
- #: src/gtk/PrintView.cxx:465
- msgid "<b>Paper and Layout</b>"
--msgstr ""
-+msgstr "<b>Papier und Anordnung</b>"
-
- #: src/gtk/PrintView.cxx:482
- msgid "Paper _Size:"
--msgstr ""
-+msgstr "_Papiergröße:"
-
- #: src/gtk/PrintView.cxx:508
- msgid "Page _orientation:"
--msgstr ""
-+msgstr "_Seitenausrichtung:"
-
- #: src/gtk/PrintView.cxx:539
- msgid "_Layout:"
--msgstr ""
-+msgstr "A_nordnung:"
-
- #: src/gtk/PrintView.cxx:568
- msgid "<b>Output</b>"
--msgstr ""
-+msgstr "<b>Ausgabe</b>"
-
- #: src/gtk/PrintView.cxx:585
- msgid "_Mode:"
--msgstr ""
-+msgstr "_Modus: "
-
- #: src/gtk/PrintView.cxx:613
- msgid "_Resolution:"
--msgstr ""
-+msgstr "A_uflösung:"
-
- #: src/gtk/PrintView.cxx:668
- msgid "State"
--msgstr ""
-+msgstr "Status"
-
- #: src/gtk/PrintView.cxx:677
- msgid "Jobs"
--msgstr ""
-+msgstr "Aufträge"
-
- #: src/gtk/PrintView.cxx:686
- msgid "Location"
--msgstr ""
-+msgstr "Standort"
-
- #: src/gtk/PrintView.cxx:717
- msgid "Plain"
--msgstr ""
-+msgstr "Einfach"
-
- #: src/gtk/PrintView.cxx:723
- msgid "2 pages in 1"
--msgstr ""
-+msgstr "2 Seiten auf Eine"
-
- #: src/gtk/PrintView.cxx:729
- msgid "4 pages in 1"
--msgstr ""
-+msgstr "4 Seiten auf Eine"
-
- #: src/gtk/PrintView.cxx:744
- msgid "Portrait"
--msgstr ""
-+msgstr "Hochformat"
-
- #: src/gtk/PrintView.cxx:750
- msgid "Landscape"
--msgstr ""
-+msgstr "Querformat"
-
- #: src/gtk/StockIcons.cxx:40
- msgid "Find _Next"
--msgstr "Suche vorwärts"
-+msgstr "Suche _vorwärts"
-
- #: src/gtk/StockIcons.cxx:41
- msgid "Find _Previous"
--msgstr "Suche rückwärts"
-+msgstr "Suche _rückwärts"
-diff -Nurd epdfview-0.1.6-svn/po/el.po epdfview/po/el.po
---- epdfview-0.1.6-svn/po/el.po 2008-07-13 12:57:47.543198000 +0200
-+++ epdfview/po/el.po 2008-07-13 12:55:55.083198000 +0200
-@@ -7,7 +7,7 @@
- msgstr ""
- "Project-Id-Version: ePDFView 0.1.6\n"
- "Report-Msgid-Bugs-To: jordi@emma-soft.com\n"
--"POT-Creation-Date: 2007-02-26 17:47+0100\n"
-+"POT-Creation-Date: 2008-04-14 13:27+0200\n"
- "PO-Revision-Date: 2006-11-10 16:55+0200\n"
- "Last-Translator: Stavros Giannouris <stavrosg2002@freemail.gr>\n"
- "Language-Team: Greek <nls@tux.hellug.gr>\n"
-@@ -77,11 +77,11 @@
- msgid "Unknown error (%d)."
- msgstr "Άγνωστο σφάλμα (%d)."
-
--#: src/main.cxx:38
-+#: src/main.cxx:59
- msgid "[FILE] - view PDF documents"
- msgstr "[ΑΡΧΕΙΟ] - Ï€Ïοβολή εγγÏάφου PDF"
-
--#: src/main.cxx:51 src/MainPter.cxx:153
-+#: src/main.cxx:72 src/MainPter.cxx:153
- msgid "PDF Viewer"
- msgstr "ΕφαÏμογή ΠÏοβολής PDF"
-
-@@ -95,7 +95,7 @@
- msgid "Loading file %s..."
- msgstr "ΦόÏτωση αÏχείου %s..."
-
--#: src/MainPter.cxx:413 src/MainPter.cxx:886
-+#: src/MainPter.cxx:413 src/MainPter.cxx:892
- #, c-format
- msgid "of %d"
- msgstr "από %d"
-@@ -105,39 +105,47 @@
- msgid "Saving document to %s..."
- msgstr "Αποθήκευση εγγÏάφου στο %s..."
-
--#: src/MainPter.cxx:826 src/MainPter.cxx:865
-+#: src/MainPter.cxx:832 src/MainPter.cxx:871
- msgid "Error Loading File"
- msgstr "Σφάλμα φόÏτωσης αÏχείου"
-
--#: src/MainPter.cxx:866
-+#: src/MainPter.cxx:872
- msgid "The password you have supplied is not a valid password for this file."
- msgstr "Ο κωδικός Ï€Ïόσβασης που εισάγατε δεν είναι έγκυÏος γι' αυτό το αÏχείο."
-
--#: src/MainPter.cxx:947
-+#: src/MainPter.cxx:953
- msgid "Error Saving File"
- msgstr "Σφάλμα αποθήκευσης αÏχείου"
-
--#: src/PagePter.cxx:292
-+#: src/PagePter.cxx:338
- msgid "Loading..."
- msgstr "Γίνεται φόÏτωση..."
-
--#: src/PrintPter.cxx:295
-+#: src/PrintPter.cxx:252
-+msgid "A4"
-+msgstr ""
-+
-+#: src/PrintPter.cxx:280
-+msgid "300 DPI"
-+msgstr ""
-+
-+#: src/PrintPter.cxx:308
- msgid "Grayscale"
- msgstr "Κλίμακα του γκÏι"
-
--#: src/PrintPter.cxx:395
-+#: src/PrintPter.cxx:409
- msgid "Idle"
- msgstr "ΑδÏανής"
-
--#: src/PrintPter.cxx:398
-+#: src/PrintPter.cxx:412
- msgid "Stopped"
- msgstr "Διακόπηκε"
-
--#: src/PrintPter.cxx:401
-+#: src/PrintPter.cxx:415
- msgid "Processing"
- msgstr "ΕπεξεÏγασία"
-
--#: src/PrintPter.cxx:404
-+#: src/PrintPter.cxx:418
- msgid "Unknown"
- msgstr "Άγνωστο"
-
-@@ -154,244 +162,260 @@
- msgid "Find:"
- msgstr "ΕÏÏεση:"
-
--#: src/gtk/MainView.cxx:87
-+#: src/gtk/MainView.cxx:89
- msgid "_File"
- msgstr "_ΑÏχείο"
-
--#: src/gtk/MainView.cxx:88
-+#: src/gtk/MainView.cxx:90
- msgid "_Edit"
- msgstr "_ΕπεξεÏγασία"
-
--#: src/gtk/MainView.cxx:89
-+#: src/gtk/MainView.cxx:91
- msgid "_View"
- msgstr "_ΠÏοβολή"
-
--#: src/gtk/MainView.cxx:90
-+#: src/gtk/MainView.cxx:92
- msgid "_Go"
- msgstr "_Μετάβαση"
-
--#: src/gtk/MainView.cxx:91
-+#: src/gtk/MainView.cxx:93
- msgid "_Help"
- msgstr "_Βοήθεια"
-
--#: src/gtk/MainView.cxx:93
-+#: src/gtk/MainView.cxx:95
- msgid "_Open"
- msgstr "Άν_οιγμα"
-
--#: src/gtk/MainView.cxx:94
-+#: src/gtk/MainView.cxx:96
- msgid "Open a PDF document"
- msgstr "Άνοιγμα εγγÏάφου PDF"
-
--#: src/gtk/MainView.cxx:97
-+#: src/gtk/MainView.cxx:99
- msgid "_Reload"
- msgstr "Α_νανέωση"
-
--#: src/gtk/MainView.cxx:98
-+#: src/gtk/MainView.cxx:100
- msgid "Reload the current document"
- msgstr "Ανανέωση Ï„Ïέχοντος εγγÏάφου"
-
--#: src/gtk/MainView.cxx:101
-+#: src/gtk/MainView.cxx:103
- msgid "_Save a Copy..."
- msgstr "Απο_θήκευση ενός αντιγÏάφου..."
-
--#: src/gtk/MainView.cxx:102
-+#: src/gtk/MainView.cxx:104
- msgid "Save a copy of the current document"
- msgstr "Αποθήκευση ενός αντιγÏάφου για το Ï„Ïέχον έγγÏαφο"
-
--#: src/gtk/MainView.cxx:106
-+#: src/gtk/MainView.cxx:108
- msgid "_Print..."
- msgstr "_ΕκτÏπωση..."
-
--#: src/gtk/MainView.cxx:107
-+#: src/gtk/MainView.cxx:109
- msgid "Print the current document"
- msgstr "ΕκτÏπωση Ï„Ïέχοντος εγγÏάφου"
-
--#: src/gtk/MainView.cxx:111
-+#: src/gtk/MainView.cxx:113
- msgid "_Close"
- msgstr "_Κλείσιμο"
-
--#: src/gtk/MainView.cxx:112
-+#: src/gtk/MainView.cxx:114
- msgid "Close this window"
- msgstr "Κλείσιμο Î±Ï…Ï„Î¿Ï Ï„Î¿Ï… παÏαθÏÏου"
-
--#: src/gtk/MainView.cxx:115
-+#: src/gtk/MainView.cxx:117
- msgid "_Find"
- msgstr "_ΕÏÏεση"
-
--#: src/gtk/MainView.cxx:116
-+#: src/gtk/MainView.cxx:118
- msgid "Find a word in the document"
- msgstr "ΕÏÏεση μια λέξης στο έγγÏαφο"
-
--#: src/gtk/MainView.cxx:119
-+#: src/gtk/MainView.cxx:121
- msgid "Preferences..."
- msgstr "ΠÏοτιμήσεις..."
-
--#: src/gtk/MainView.cxx:120
-+#: src/gtk/MainView.cxx:122
- msgid "Change the application's preferences"
- msgstr "Αλλαγή Ï€Ïοτιμήσεων της εφαÏμογής"
-
--#: src/gtk/MainView.cxx:123
-+#: src/gtk/MainView.cxx:125
- msgid "Zoom _In"
- msgstr "_Μεγέθυνση"
-
--#: src/gtk/MainView.cxx:124
-+#: src/gtk/MainView.cxx:126
- msgid "Enlarge the document"
- msgstr "Μεγέθυνση εγγÏάφου"
-
--#: src/gtk/MainView.cxx:127
-+#: src/gtk/MainView.cxx:129
- msgid "Zoom _Out"
- msgstr "Σ_μίκÏυνση"
-
--#: src/gtk/MainView.cxx:128
-+#: src/gtk/MainView.cxx:130
- msgid "Shrink the document"
- msgstr "ΣμίκÏυνση εγγÏάφου"
-
--#: src/gtk/MainView.cxx:131 src/gtk/StockIcons.cxx:43
-+#: src/gtk/MainView.cxx:133 src/gtk/StockIcons.cxx:43
- msgid "Rotate _Right"
- msgstr "ΠεÏιστÏοφή _δεξιά"
-
--#: src/gtk/MainView.cxx:132
-+#: src/gtk/MainView.cxx:134
- msgid "Rotate the document 90 degrees clockwise"
- msgstr "ΠεÏιστÏοφή του εγγÏάφου 90 μοίÏες δεξιόστÏοφα"
-
--#: src/gtk/MainView.cxx:135 src/gtk/StockIcons.cxx:42
-+#: src/gtk/MainView.cxx:137 src/gtk/StockIcons.cxx:42
- msgid "Rotate _Left"
- msgstr "ΠεÏιστÏοφή _αÏιστεÏά"
-
--#: src/gtk/MainView.cxx:136
-+#: src/gtk/MainView.cxx:138
- msgid "Rotate the document 90 degrees counter-clockwise"
- msgstr "ΠεÏιστÏοφή του εγγÏάφου 90 μοίÏες αÏιστεÏόστÏοφα"
-
--#: src/gtk/MainView.cxx:139
-+#: src/gtk/MainView.cxx:141
- msgid "_First Page"
- msgstr "Π_Ïώτη σελίδα"
-
--#: src/gtk/MainView.cxx:140
-+#: src/gtk/MainView.cxx:142
- msgid "Go to the first page"
- msgstr "Μετάβαση στην Ï€Ïώτη σελίδα"
-
--#: src/gtk/MainView.cxx:143
-+#: src/gtk/MainView.cxx:145
- msgid "_Next Page"
- msgstr "_Επόμενη Σελίδα"
-
--#: src/gtk/MainView.cxx:144
-+#: src/gtk/MainView.cxx:146
- msgid "Go to the next page"
- msgstr "Μετάβαση στην επόμενη σελίδα"
-
--#: src/gtk/MainView.cxx:147
-+#: src/gtk/MainView.cxx:149
- msgid "_Previous Page"
- msgstr "ΠÏοη_γοÏμενη Σελίδα"
-
--#: src/gtk/MainView.cxx:148
-+#: src/gtk/MainView.cxx:150
- msgid "Go to the previous page"
- msgstr "Μετάβαση στην Ï€ÏοηγοÏμενη σελίδα"
-
--#: src/gtk/MainView.cxx:151
-+#: src/gtk/MainView.cxx:153
- msgid "_Last Page"
- msgstr "Τε_λευταία Σελίδα"
-
--#: src/gtk/MainView.cxx:152
-+#: src/gtk/MainView.cxx:154
- msgid "Go to the last page"
- msgstr "Μετάβαση στην τελευταία σελίδα"
-
--#: src/gtk/MainView.cxx:155
-+#: src/gtk/MainView.cxx:157
- msgid "_About"
- msgstr "_ΠεÏί"
-
--#: src/gtk/MainView.cxx:156
-+#: src/gtk/MainView.cxx:158
- msgid "Display application's credits"
- msgstr "Εμφάνιση μνείας των δημιουÏγών της εφαÏμογής"
-
--#: src/gtk/MainView.cxx:166
-+#: src/gtk/MainView.cxx:175
- msgid "F_ull screen"
- msgstr "_ΠλήÏης Οθόνη"
-
--#: src/gtk/MainView.cxx:167
-+#: src/gtk/MainView.cxx:176
- msgid "Toggle full screen window"
- msgstr "Εναλλαγή της λειτουÏγία πλήÏους οθόνης"
-
--#: src/gtk/MainView.cxx:170
-+#: src/gtk/MainView.cxx:179
- msgid "Show _Toolbar"
- msgstr "Εμφάνιση _εÏγαλειοθήκης"
-
--#: src/gtk/MainView.cxx:171
-+#: src/gtk/MainView.cxx:180
- msgid "Show or hide the toolbar"
- msgstr "Εμφάνιση ή απόκÏυψη της εÏγαλειοθήκης"
-
--#: src/gtk/MainView.cxx:174
-+#: src/gtk/MainView.cxx:183
- msgid "Show _Statusbar"
- msgstr "Εμφάνιση _γÏαμμής κατάστασης"
-
--#: src/gtk/MainView.cxx:175
-+#: src/gtk/MainView.cxx:184
- msgid "Show or hide the statusbar"
- msgstr "Εμφάνιση ή απόκÏυψη της γÏαμμής κατάστασης"
-
--#: src/gtk/MainView.cxx:178
-+#: src/gtk/MainView.cxx:187
- msgid "Show I_ndex"
- msgstr "Εμφάνιση _πεÏιεχομένων"
-
--#: src/gtk/MainView.cxx:179
-+#: src/gtk/MainView.cxx:188
- msgid "Show or hide the document's outline"
- msgstr "ΠÏοβολή ή απόκÏυψη του πεÏιγÏάμματος του εγγÏάφου"
-
--#: src/gtk/MainView.cxx:182
-+#: src/gtk/MainView.cxx:191
- msgid "Zoom to _Fit"
- msgstr "ΣμίκÏυνση στην _σελίδα"
-
--#: src/gtk/MainView.cxx:183
-+#: src/gtk/MainView.cxx:192
- msgid "Make the current document fill the window"
- msgstr "ΠÏοσαÏμογή του Ï„Ïέχοντος εγγÏάφου στο παÏάθυÏο"
-
--#: src/gtk/MainView.cxx:186 src/gtk/StockIcons.cxx:44
-+#: src/gtk/MainView.cxx:195 src/gtk/StockIcons.cxx:44
- msgid "Zoom to _Width"
- msgstr "ΠÏοσαÏμογή στο _πλάτος της σελίδας"
-
--#: src/gtk/MainView.cxx:187
-+#: src/gtk/MainView.cxx:196
- msgid "Make the current document fill the window width"
- msgstr "ΤαίÏιασμα του Ï„Ïέχοντος εγγÏάφου στο πλάτος του παÏαθÏÏου"
-
--#: src/gtk/MainView.cxx:278
-+#: src/gtk/MainView.cxx:202
-+msgid "Scroll"
-+msgstr ""
-+
-+#: src/gtk/MainView.cxx:203
-+msgid "Mouse scroll page"
-+msgstr ""
-+
-+#: src/gtk/MainView.cxx:205
-+msgid "Select Text"
-+msgstr ""
-+
-+#: src/gtk/MainView.cxx:206
-+msgid " Mouse select text"
-+msgstr ""
-+
-+#: src/gtk/MainView.cxx:320
- msgid "Open PDF File"
- msgstr "Άνοιγμα αÏχείου PDF"
-
--#: src/gtk/MainView.cxx:298 src/gtk/MainView.cxx:412
-+#: src/gtk/MainView.cxx:340 src/gtk/MainView.cxx:454
- msgid "Portable Document Format (PDF) Files"
- msgstr "ΑÏχεία PDF"
-
--#: src/gtk/MainView.cxx:310 src/gtk/MainView.cxx:424
-+#: src/gtk/MainView.cxx:352 src/gtk/MainView.cxx:466
- msgid "All Files"
- msgstr "Όλα τα αÏχεία"
-
--#: src/gtk/MainView.cxx:362
-+#: src/gtk/MainView.cxx:404
- msgid "Password"
- msgstr "Κωδικός Ï€Ïόσβασης"
-
--#: src/gtk/MainView.cxx:386
-+#: src/gtk/MainView.cxx:428
- msgid "Save PDF File"
- msgstr "Αποθήκευση αÏχείου PDF"
-
--#: src/gtk/MainView.cxx:816
-+#: src/gtk/MainView.cxx:858
- msgid "Page"
- msgstr "Σελίδα"
-
--#: src/gtk/MainView.cxx:826
-+#: src/gtk/MainView.cxx:868
- msgid "of 0"
- msgstr "από 0"
-
--#: src/gtk/MainView.cxx:879
-+#: src/gtk/MainView.cxx:921
- msgid "Index"
- msgstr "Κατάλογος"
-
--#: src/gtk/MainView.cxx:946 src/gtk/MainView.cxx:956
-+#: src/gtk/MainView.cxx:991 src/gtk/MainView.cxx:1001
- #, c-format
- msgid "Error building UI manager: %s\n"
- msgstr "Σφάλμα δημιουÏγίας διαχειÏιστή UI: %s\n"
-
--#: src/gtk/MainView.cxx:1056
-+#: src/gtk/MainView.cxx:1108
- msgid "A lightweight PDF viewer"
- msgstr "ΕλαφÏιά εφαÏμογή Ï€Ïοβολής PDF"
-
--#: src/gtk/MainView.cxx:1059
-+#: src/gtk/MainView.cxx:1111
- msgid ""
- "ePDFView is free software; you can redistribute it and/or modify\n"
- "it under the terms of the GNU General Public License as published by\n"
-@@ -404,7 +428,7 @@
- " Free Software Foundation, έκδοση 2 , ή \n"
- "(Ï€ÏοαιÏετικά) οποιαδήποτε νεότεÏη 'έκδοση.\n"
-
--#: src/gtk/MainView.cxx:1063
-+#: src/gtk/MainView.cxx:1115
- msgid ""
- "ePDFView is distributes in the hope that it will be useful,\n"
- "but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
-@@ -415,7 +439,7 @@
- "αλλά ΧΩΡΙΣ ΚΑΜΜΙΑ ΑΠΟΛΥΤΩΣ ΕΓΓΥΗΣΗ για συγκεκÏιμένο σκοπό.\n"
- "Δείτε για πεÏισσότεÏες λεπτομέÏειες την GNU General Public License .\n"
-
--#: src/gtk/MainView.cxx:1067
-+#: src/gtk/MainView.cxx:1119
- msgid ""
- "You should have received a copy of the GNU General Public License\n"
- "along with ePDFView; if not, write to the Free Software Foundation,Inc.,\n"
-@@ -425,11 +449,11 @@
- "μαζί με το Îαυτίλο. Αν όχι γÏάψτε στο Free Software Foundation, Inc., \n"
- "59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n"
-
--#: src/gtk/MainView.cxx:1076
-+#: src/gtk/MainView.cxx:1128
- msgid "ePDFView"
- msgstr "ePDFView"
-
--#: src/gtk/MainView.cxx:1083
-+#: src/gtk/MainView.cxx:1135
- msgid "translator-credits"
- msgstr "ΣταÏÏος ΓιαννοÏÏης <stavrosg2002@freemail.gr>"
-
-diff -Nurd epdfview-0.1.6-svn/po/es.po epdfview/po/es.po
---- epdfview-0.1.6-svn/po/es.po 2008-07-13 12:57:47.523198000 +0200
-+++ epdfview/po/es.po 2008-07-13 12:55:55.043198000 +0200
-@@ -8,7 +8,7 @@
- msgstr ""
- "Project-Id-Version: ePDFView 0.1.4\n"
- "Report-Msgid-Bugs-To: jordi@emma-soft.com\n"
--"POT-Creation-Date: 2007-02-26 17:47+0100\n"
-+"POT-Creation-Date: 2008-04-14 13:27+0200\n"
- "PO-Revision-Date: 2006-04-12 21:17+0200\n"
- "Last-Translator: Jordi Fita <jordi@emma-soft.com>\n"
- "Language-Team: Spanish <es@li.org>\n"
-@@ -76,11 +76,11 @@
- msgid "Unknown error (%d)."
- msgstr "Error desconocido (%d)."
-
--#: src/main.cxx:38
-+#: src/main.cxx:59
- msgid "[FILE] - view PDF documents"
- msgstr "[ARCHIVO] - muestra documentos PDF"
-
--#: src/main.cxx:51 src/MainPter.cxx:153
-+#: src/main.cxx:72 src/MainPter.cxx:153
- msgid "PDF Viewer"
- msgstr "Visor de PDF"
-
-@@ -94,7 +94,7 @@
- msgid "Loading file %s..."
- msgstr "Abriendo archivo %s..."
-
--#: src/MainPter.cxx:413 src/MainPter.cxx:886
-+#: src/MainPter.cxx:413 src/MainPter.cxx:892
- #, c-format
- msgid "of %d"
- msgstr "de %d"
-@@ -104,41 +104,49 @@
- msgid "Saving document to %s..."
- msgstr "Guardando el documento en %s..."
-
--#: src/MainPter.cxx:826 src/MainPter.cxx:865
-+#: src/MainPter.cxx:832 src/MainPter.cxx:871
- msgid "Error Loading File"
- msgstr "Error Cargando el Archivo"
-
--#: src/MainPter.cxx:866
-+#: src/MainPter.cxx:872
- msgid "The password you have supplied is not a valid password for this file."
- msgstr ""
- "La contraseña que has proporcionado no es una contraseña válida para este "
- "archivo."
-
--#: src/MainPter.cxx:947
-+#: src/MainPter.cxx:953
- msgid "Error Saving File"
- msgstr "Error Guardando el Archivo"
-
--#: src/PagePter.cxx:292
-+#: src/PagePter.cxx:338
- msgid "Loading..."
- msgstr "Cargando..."
-
--#: src/PrintPter.cxx:295
-+#: src/PrintPter.cxx:252
-+msgid "A4"
-+msgstr ""
-+
-+#: src/PrintPter.cxx:280
-+msgid "300 DPI"
-+msgstr ""
-+
-+#: src/PrintPter.cxx:308
- msgid "Grayscale"
- msgstr "Escala de grises"
-
--#: src/PrintPter.cxx:395
-+#: src/PrintPter.cxx:409
- msgid "Idle"
- msgstr "Desocupada"
-
--#: src/PrintPter.cxx:398
-+#: src/PrintPter.cxx:412
- msgid "Stopped"
- msgstr "Parada"
-
--#: src/PrintPter.cxx:401
-+#: src/PrintPter.cxx:415
- msgid "Processing"
- msgstr "Procesando"
-
--#: src/PrintPter.cxx:404
-+#: src/PrintPter.cxx:418
- msgid "Unknown"
- msgstr "Desconocido"
-
-@@ -155,245 +163,261 @@
- msgid "Find:"
- msgstr "Buscar:"
-
--#: src/gtk/MainView.cxx:87
-+#: src/gtk/MainView.cxx:89
- msgid "_File"
- msgstr "_Archivo"
-
--#: src/gtk/MainView.cxx:88
-+#: src/gtk/MainView.cxx:90
- msgid "_Edit"
- msgstr "_Edición"
-
--#: src/gtk/MainView.cxx:89
-+#: src/gtk/MainView.cxx:91
- msgid "_View"
- msgstr "_Ver"
-
--#: src/gtk/MainView.cxx:90
-+#: src/gtk/MainView.cxx:92
- msgid "_Go"
- msgstr "_Ir"
-
--#: src/gtk/MainView.cxx:91
-+#: src/gtk/MainView.cxx:93
- msgid "_Help"
- msgstr "A_yuda"
-
--#: src/gtk/MainView.cxx:93
-+#: src/gtk/MainView.cxx:95
- msgid "_Open"
- msgstr "_Abrir"
-
--#: src/gtk/MainView.cxx:94
-+#: src/gtk/MainView.cxx:96
- msgid "Open a PDF document"
- msgstr "Abre un documento PDF"
-
--#: src/gtk/MainView.cxx:97
-+#: src/gtk/MainView.cxx:99
- msgid "_Reload"
- msgstr "_Recargar"
-
--#: src/gtk/MainView.cxx:98
-+#: src/gtk/MainView.cxx:100
- msgid "Reload the current document"
- msgstr "Abre de nuevo el documento actual"
-
--#: src/gtk/MainView.cxx:101
-+#: src/gtk/MainView.cxx:103
- msgid "_Save a Copy..."
- msgstr "_Guardar una copia..."
-
--#: src/gtk/MainView.cxx:102
-+#: src/gtk/MainView.cxx:104
- msgid "Save a copy of the current document"
- msgstr "Guarda una copia de el documento actual"
-
--#: src/gtk/MainView.cxx:106
-+#: src/gtk/MainView.cxx:108
- msgid "_Print..."
- msgstr "_Imprimir"
-
--#: src/gtk/MainView.cxx:107
-+#: src/gtk/MainView.cxx:109
- msgid "Print the current document"
- msgstr "Imprime el documento actual"
-
--#: src/gtk/MainView.cxx:111
-+#: src/gtk/MainView.cxx:113
- msgid "_Close"
- msgstr "_Cerrar"
-
--#: src/gtk/MainView.cxx:112
-+#: src/gtk/MainView.cxx:114
- msgid "Close this window"
- msgstr "Cierra esta ventana"
-
--#: src/gtk/MainView.cxx:115
-+#: src/gtk/MainView.cxx:117
- msgid "_Find"
- msgstr "_Buscar"
-
--#: src/gtk/MainView.cxx:116
-+#: src/gtk/MainView.cxx:118
- msgid "Find a word in the document"
- msgstr "Busca una palabra en el documento"
-
--#: src/gtk/MainView.cxx:119
-+#: src/gtk/MainView.cxx:121
- msgid "Preferences..."
- msgstr "Preferencias..."
-
--#: src/gtk/MainView.cxx:120
-+#: src/gtk/MainView.cxx:122
- msgid "Change the application's preferences"
- msgstr "Cambia las preferencia de la applicación"
-
--#: src/gtk/MainView.cxx:123
-+#: src/gtk/MainView.cxx:125
- msgid "Zoom _In"
- msgstr "A_mpliar"
-
--#: src/gtk/MainView.cxx:124
-+#: src/gtk/MainView.cxx:126
- msgid "Enlarge the document"
- msgstr "Amplia el documento"
-
--#: src/gtk/MainView.cxx:127
-+#: src/gtk/MainView.cxx:129
- msgid "Zoom _Out"
- msgstr "_Reducir"
-
--#: src/gtk/MainView.cxx:128
-+#: src/gtk/MainView.cxx:130
- msgid "Shrink the document"
- msgstr "Reduce el documento"
-
--#: src/gtk/MainView.cxx:131 src/gtk/StockIcons.cxx:43
-+#: src/gtk/MainView.cxx:133 src/gtk/StockIcons.cxx:43
- msgid "Rotate _Right"
- msgstr "Girar a la _derecha"
-
--#: src/gtk/MainView.cxx:132
-+#: src/gtk/MainView.cxx:134
- msgid "Rotate the document 90 degrees clockwise"
- msgstr "Gira el document 90 grados en la dirección de las agujas del reloj"
-
--#: src/gtk/MainView.cxx:135 src/gtk/StockIcons.cxx:42
-+#: src/gtk/MainView.cxx:137 src/gtk/StockIcons.cxx:42
- msgid "Rotate _Left"
- msgstr "Gira a la _izquierda"
-
--#: src/gtk/MainView.cxx:136
-+#: src/gtk/MainView.cxx:138
- msgid "Rotate the document 90 degrees counter-clockwise"
- msgstr ""
- "Gira el documento 90 grados en la dirección contraria a las agujas del reloj"
-
--#: src/gtk/MainView.cxx:139
-+#: src/gtk/MainView.cxx:141
- msgid "_First Page"
- msgstr "_Primera página"
-
--#: src/gtk/MainView.cxx:140
-+#: src/gtk/MainView.cxx:142
- msgid "Go to the first page"
- msgstr "Va hacia la primera página"
-
--#: src/gtk/MainView.cxx:143
-+#: src/gtk/MainView.cxx:145
- msgid "_Next Page"
- msgstr "_Siguiente página"
-
--#: src/gtk/MainView.cxx:144
-+#: src/gtk/MainView.cxx:146
- msgid "Go to the next page"
- msgstr "Va hacia la siguiente página"
-
--#: src/gtk/MainView.cxx:147
-+#: src/gtk/MainView.cxx:149
- msgid "_Previous Page"
- msgstr "Página _anterior"
-
--#: src/gtk/MainView.cxx:148
-+#: src/gtk/MainView.cxx:150
- msgid "Go to the previous page"
- msgstr "Va hacia la página anterior"
-
--#: src/gtk/MainView.cxx:151
-+#: src/gtk/MainView.cxx:153
- msgid "_Last Page"
- msgstr "Ú_ltima página"
-
--#: src/gtk/MainView.cxx:152
-+#: src/gtk/MainView.cxx:154
- msgid "Go to the last page"
- msgstr "Va hacia la última página"
-
--#: src/gtk/MainView.cxx:155
-+#: src/gtk/MainView.cxx:157
- msgid "_About"
- msgstr "_Acerca de"
-
--#: src/gtk/MainView.cxx:156
-+#: src/gtk/MainView.cxx:158
- msgid "Display application's credits"
- msgstr "Muestra los créditos de la aplicación"
-
--#: src/gtk/MainView.cxx:166
-+#: src/gtk/MainView.cxx:175
- msgid "F_ull screen"
- msgstr ""
-
--#: src/gtk/MainView.cxx:167
-+#: src/gtk/MainView.cxx:176
- msgid "Toggle full screen window"
- msgstr ""
-
--#: src/gtk/MainView.cxx:170
-+#: src/gtk/MainView.cxx:179
- msgid "Show _Toolbar"
- msgstr "Muestr al barra de _herramientas"
-
--#: src/gtk/MainView.cxx:171
-+#: src/gtk/MainView.cxx:180
- msgid "Show or hide the toolbar"
- msgstr "Muestra o esconda la barra de herramientas"
-
--#: src/gtk/MainView.cxx:174
-+#: src/gtk/MainView.cxx:183
- msgid "Show _Statusbar"
- msgstr "Muestra la barra de _estado"
-
--#: src/gtk/MainView.cxx:175
-+#: src/gtk/MainView.cxx:184
- msgid "Show or hide the statusbar"
- msgstr "Muestra o esconde la barra de estado"
-
--#: src/gtk/MainView.cxx:178
-+#: src/gtk/MainView.cxx:187
- msgid "Show I_ndex"
- msgstr "Muestra el í_ndice"
-
--#: src/gtk/MainView.cxx:179
-+#: src/gtk/MainView.cxx:188
- msgid "Show or hide the document's outline"
- msgstr "Muestra o esconde el índice del documento"
-
--#: src/gtk/MainView.cxx:182
-+#: src/gtk/MainView.cxx:191
- msgid "Zoom to _Fit"
- msgstr "Ajuste ó_ptimo"
-
--#: src/gtk/MainView.cxx:183
-+#: src/gtk/MainView.cxx:192
- msgid "Make the current document fill the window"
- msgstr "Hace que el documento llene la ventana"
-
--#: src/gtk/MainView.cxx:186 src/gtk/StockIcons.cxx:44
-+#: src/gtk/MainView.cxx:195 src/gtk/StockIcons.cxx:44
- msgid "Zoom to _Width"
- msgstr "Ajustar al _ancho de página"
-
--#: src/gtk/MainView.cxx:187
-+#: src/gtk/MainView.cxx:196
- msgid "Make the current document fill the window width"
- msgstr "Hace que el documento llene el ancho de la ventana"
-
--#: src/gtk/MainView.cxx:278
-+#: src/gtk/MainView.cxx:202
-+msgid "Scroll"
-+msgstr ""
-+
-+#: src/gtk/MainView.cxx:203
-+msgid "Mouse scroll page"
-+msgstr ""
-+
-+#: src/gtk/MainView.cxx:205
-+msgid "Select Text"
-+msgstr ""
-+
-+#: src/gtk/MainView.cxx:206
-+msgid " Mouse select text"
-+msgstr ""
-+
-+#: src/gtk/MainView.cxx:320
- msgid "Open PDF File"
- msgstr "Abre un archivo PDF"
-
--#: src/gtk/MainView.cxx:298 src/gtk/MainView.cxx:412
-+#: src/gtk/MainView.cxx:340 src/gtk/MainView.cxx:454
- msgid "Portable Document Format (PDF) Files"
- msgstr "Archivos en Formato de Documento Transportable (PDF)"
-
--#: src/gtk/MainView.cxx:310 src/gtk/MainView.cxx:424
-+#: src/gtk/MainView.cxx:352 src/gtk/MainView.cxx:466
- msgid "All Files"
- msgstr "Todos los archivos"
-
--#: src/gtk/MainView.cxx:362
-+#: src/gtk/MainView.cxx:404
- msgid "Password"
- msgstr "Contraseña"
-
--#: src/gtk/MainView.cxx:386
-+#: src/gtk/MainView.cxx:428
- msgid "Save PDF File"
- msgstr "Guarda un archivo PDF"
-
--#: src/gtk/MainView.cxx:816
-+#: src/gtk/MainView.cxx:858
- msgid "Page"
- msgstr "Página"
-
--#: src/gtk/MainView.cxx:826
-+#: src/gtk/MainView.cxx:868
- msgid "of 0"
- msgstr "de 0"
-
--#: src/gtk/MainView.cxx:879
-+#: src/gtk/MainView.cxx:921
- msgid "Index"
- msgstr "Ãndice"
-
--#: src/gtk/MainView.cxx:946 src/gtk/MainView.cxx:956
-+#: src/gtk/MainView.cxx:991 src/gtk/MainView.cxx:1001
- #, c-format
- msgid "Error building UI manager: %s\n"
- msgstr "Error construiendo el administrador de IU: %s\n"
-
--#: src/gtk/MainView.cxx:1056
-+#: src/gtk/MainView.cxx:1108
- msgid "A lightweight PDF viewer"
- msgstr "Un visor de PDF ligero"
-
--#: src/gtk/MainView.cxx:1059
-+#: src/gtk/MainView.cxx:1111
- msgid ""
- "ePDFView is free software; you can redistribute it and/or modify\n"
- "it under the terms of the GNU General Public License as published by\n"
-@@ -405,7 +429,7 @@
- "la Free Software Foundation; ya sea en su versión 2 ó (a su criterio)\n"
- "en una versión posterior.\n"
-
--#: src/gtk/MainView.cxx:1063
-+#: src/gtk/MainView.cxx:1115
- msgid ""
- "ePDFView is distributes in the hope that it will be useful,\n"
- "but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
-@@ -417,7 +441,7 @@
- "COMERCIALIDAD o IDONEIDAD PARA UN FIN DETERMINADO. Mire la \n"
- "Licencia General GNU para más detalles.\n"
-
--#: src/gtk/MainView.cxx:1067
-+#: src/gtk/MainView.cxx:1119
- msgid ""
- "You should have received a copy of the GNU General Public License\n"
- "along with ePDFView; if not, write to the Free Software Foundation,Inc.,\n"
-@@ -428,11 +452,11 @@
- "Inc.,\n"
- "59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n"
-
--#: src/gtk/MainView.cxx:1076
-+#: src/gtk/MainView.cxx:1128
- msgid "ePDFView"
- msgstr "ePDFView"
-
--#: src/gtk/MainView.cxx:1083
-+#: src/gtk/MainView.cxx:1135
- msgid "translator-credits"
- msgstr "Jordi Fita <jordi@emma-soft.com>"
-
-diff -Nurd epdfview-0.1.6-svn/po/fr.po epdfview/po/fr.po
---- epdfview-0.1.6-svn/po/fr.po 2008-07-13 12:57:47.523198000 +0200
-+++ epdfview/po/fr.po 2008-07-13 12:55:55.043198000 +0200
-@@ -8,7 +8,7 @@
- msgstr ""
- "Project-Id-Version: ePDFView 0.1.4\n"
- "Report-Msgid-Bugs-To: jordi@emma-soft.com\n"
--"POT-Creation-Date: 2007-02-26 17:47+0100\n"
-+"POT-Creation-Date: 2008-04-14 13:27+0200\n"
- "PO-Revision-Date: 2006-04-19 02:00+0200\n"
- "Last-Translator: <mr.moustache@laposte.net>\n"
- "Language-Team: French <@>\n"
-@@ -74,11 +74,11 @@
- msgid "Unknown error (%d)."
- msgstr "Erreur inconnue (%d)."
-
--#: src/main.cxx:38
-+#: src/main.cxx:59
- msgid "[FILE] - view PDF documents"
- msgstr "[FICHIER] - Visualiser des documents PDF"
-
--#: src/main.cxx:51 src/MainPter.cxx:153
-+#: src/main.cxx:72 src/MainPter.cxx:153
- msgid "PDF Viewer"
- msgstr "Visualisateur de PDF"
-
-@@ -92,7 +92,7 @@
- msgid "Loading file %s..."
- msgstr "Chargement du fichier %s..."
-
--#: src/MainPter.cxx:413 src/MainPter.cxx:886
-+#: src/MainPter.cxx:413 src/MainPter.cxx:892
- #, c-format
- msgid "of %d"
- msgstr "sur %d"
-@@ -102,39 +102,47 @@
- msgid "Saving document to %s..."
- msgstr "Enregistrement du document sous %s..."
-
--#: src/MainPter.cxx:826 src/MainPter.cxx:865
-+#: src/MainPter.cxx:832 src/MainPter.cxx:871
- msgid "Error Loading File"
- msgstr "Erreur au chargement du fichier"
-
--#: src/MainPter.cxx:866
-+#: src/MainPter.cxx:872
- msgid "The password you have supplied is not a valid password for this file."
- msgstr "Le mot de passe que vous avez fourni est incorrect pour ce fichier."
-
--#: src/MainPter.cxx:947
-+#: src/MainPter.cxx:953
- msgid "Error Saving File"
--msgstr "Erreur au chargement du fichier"
-+msgstr "Erreur pendant la sauvegarde du fichier"
-
--#: src/PagePter.cxx:292
-+#: src/PagePter.cxx:338
- msgid "Loading..."
- msgstr "Chargement..."
-
--#: src/PrintPter.cxx:295
-+#: src/PrintPter.cxx:252
-+msgid "A4"
-+msgstr ""
-+
-+#: src/PrintPter.cxx:280
-+msgid "300 DPI"
-+msgstr ""
-+
-+#: src/PrintPter.cxx:308
- msgid "Grayscale"
- msgstr "Niveau de gris"
-
--#: src/PrintPter.cxx:395
-+#: src/PrintPter.cxx:409
- msgid "Idle"
- msgstr "En attente"
-
--#: src/PrintPter.cxx:398
-+#: src/PrintPter.cxx:412
- msgid "Stopped"
- msgstr "Arrêté"
-
--#: src/PrintPter.cxx:401
-+#: src/PrintPter.cxx:415
- msgid "Processing"
- msgstr "Traitement en cours"
-
--#: src/PrintPter.cxx:404
-+#: src/PrintPter.cxx:418
- msgid "Unknown"
- msgstr "Inconnu"
-
-@@ -151,244 +159,260 @@
- msgid "Find:"
- msgstr "Rechercher :"
-
--#: src/gtk/MainView.cxx:87
-+#: src/gtk/MainView.cxx:89
- msgid "_File"
- msgstr "_Fichier"
-
--#: src/gtk/MainView.cxx:88
-+#: src/gtk/MainView.cxx:90
- msgid "_Edit"
- msgstr "_Edition"
-
--#: src/gtk/MainView.cxx:89
-+#: src/gtk/MainView.cxx:91
- msgid "_View"
- msgstr "_Afficher"
-
--#: src/gtk/MainView.cxx:90
-+#: src/gtk/MainView.cxx:92
- msgid "_Go"
- msgstr "A_ller à"
-
--#: src/gtk/MainView.cxx:91
-+#: src/gtk/MainView.cxx:93
- msgid "_Help"
- msgstr "Ai_de"
-
--#: src/gtk/MainView.cxx:93
-+#: src/gtk/MainView.cxx:95
- msgid "_Open"
- msgstr "_Ouvrir"
-
--#: src/gtk/MainView.cxx:94
-+#: src/gtk/MainView.cxx:96
- msgid "Open a PDF document"
- msgstr "Ouvrir un document PDF"
-
--#: src/gtk/MainView.cxx:97
-+#: src/gtk/MainView.cxx:99
- msgid "_Reload"
- msgstr "_Recharger"
-
--#: src/gtk/MainView.cxx:98
-+#: src/gtk/MainView.cxx:100
- msgid "Reload the current document"
- msgstr "Recharger le document courant"
-
--#: src/gtk/MainView.cxx:101
-+#: src/gtk/MainView.cxx:103
- msgid "_Save a Copy..."
- msgstr "_Enregistrer sous..."
-
--#: src/gtk/MainView.cxx:102
-+#: src/gtk/MainView.cxx:104
- msgid "Save a copy of the current document"
--msgstr "Recharger le document courant"
-+msgstr "Sauvegarder le document courant"
-
--#: src/gtk/MainView.cxx:106
-+#: src/gtk/MainView.cxx:108
- msgid "_Print..."
- msgstr "_Imprimer"
-
--#: src/gtk/MainView.cxx:107
-+#: src/gtk/MainView.cxx:109
- msgid "Print the current document"
--msgstr "Recharger le document courant"
-+msgstr "Imprimer le document courant"
-
--#: src/gtk/MainView.cxx:111
-+#: src/gtk/MainView.cxx:113
- msgid "_Close"
- msgstr "_Fermer"
-
--#: src/gtk/MainView.cxx:112
-+#: src/gtk/MainView.cxx:114
- msgid "Close this window"
- msgstr "Fermer cette fenêtre"
-
--#: src/gtk/MainView.cxx:115
-+#: src/gtk/MainView.cxx:117
- msgid "_Find"
- msgstr "_Rechercher"
-
--#: src/gtk/MainView.cxx:116
-+#: src/gtk/MainView.cxx:118
- msgid "Find a word in the document"
- msgstr "Rechercher un mot dans le document"
-
--#: src/gtk/MainView.cxx:119
-+#: src/gtk/MainView.cxx:121
- msgid "Preferences..."
- msgstr "Préférences"
-
--#: src/gtk/MainView.cxx:120
-+#: src/gtk/MainView.cxx:122
- msgid "Change the application's preferences"
- msgstr "Changer les préférences de l'application"
-
--#: src/gtk/MainView.cxx:123
-+#: src/gtk/MainView.cxx:125
- msgid "Zoom _In"
- msgstr "_Agrandir"
-
--#: src/gtk/MainView.cxx:124
-+#: src/gtk/MainView.cxx:126
- msgid "Enlarge the document"
- msgstr "Elargir le document"
-
--#: src/gtk/MainView.cxx:127
-+#: src/gtk/MainView.cxx:129
- msgid "Zoom _Out"
- msgstr "_Réduire"
-
--#: src/gtk/MainView.cxx:128
-+#: src/gtk/MainView.cxx:130
- msgid "Shrink the document"
- msgstr "Réduire le document"
-
--#: src/gtk/MainView.cxx:131 src/gtk/StockIcons.cxx:43
-+#: src/gtk/MainView.cxx:133 src/gtk/StockIcons.cxx:43
- msgid "Rotate _Right"
- msgstr "Rotation à _droite"
-
--#: src/gtk/MainView.cxx:132
-+#: src/gtk/MainView.cxx:134
- msgid "Rotate the document 90 degrees clockwise"
- msgstr "Rotation de 90 degrés dans le sens horaire"
-
--#: src/gtk/MainView.cxx:135 src/gtk/StockIcons.cxx:42
-+#: src/gtk/MainView.cxx:137 src/gtk/StockIcons.cxx:42
- msgid "Rotate _Left"
- msgstr "Rotation à _gauche"
-
--#: src/gtk/MainView.cxx:136
-+#: src/gtk/MainView.cxx:138
- msgid "Rotate the document 90 degrees counter-clockwise"
- msgstr "Rotation de 90 degrés dans le anti-horaire"
-
--#: src/gtk/MainView.cxx:139
-+#: src/gtk/MainView.cxx:141
- msgid "_First Page"
- msgstr "_Première page"
-
--#: src/gtk/MainView.cxx:140
-+#: src/gtk/MainView.cxx:142
- msgid "Go to the first page"
- msgstr "Aller à la première page"
-
--#: src/gtk/MainView.cxx:143
-+#: src/gtk/MainView.cxx:145
- msgid "_Next Page"
- msgstr "Page _suivante"
-
--#: src/gtk/MainView.cxx:144
-+#: src/gtk/MainView.cxx:146
- msgid "Go to the next page"
- msgstr "Aller à la page suivante"
-
--#: src/gtk/MainView.cxx:147
-+#: src/gtk/MainView.cxx:149
- msgid "_Previous Page"
- msgstr "Page p_récédente"
-
--#: src/gtk/MainView.cxx:148
-+#: src/gtk/MainView.cxx:150
- msgid "Go to the previous page"
- msgstr "Aller à la page précédente"
-
--#: src/gtk/MainView.cxx:151
-+#: src/gtk/MainView.cxx:153
- msgid "_Last Page"
- msgstr "_Dernière page"
-
--#: src/gtk/MainView.cxx:152
-+#: src/gtk/MainView.cxx:154
- msgid "Go to the last page"
- msgstr "Aller à la dernière page"
-
--#: src/gtk/MainView.cxx:155
-+#: src/gtk/MainView.cxx:157
- msgid "_About"
- msgstr "_A propos"
-
--#: src/gtk/MainView.cxx:156
-+#: src/gtk/MainView.cxx:158
- msgid "Display application's credits"
- msgstr "Afficher les informations sur l'application"
-
--#: src/gtk/MainView.cxx:166
-+#: src/gtk/MainView.cxx:175
- msgid "F_ull screen"
- msgstr ""
-
--#: src/gtk/MainView.cxx:167
-+#: src/gtk/MainView.cxx:176
- msgid "Toggle full screen window"
- msgstr ""
-
--#: src/gtk/MainView.cxx:170
-+#: src/gtk/MainView.cxx:179
- msgid "Show _Toolbar"
- msgstr "Afficher la barre d'_outils"
-
--#: src/gtk/MainView.cxx:171
-+#: src/gtk/MainView.cxx:180
- msgid "Show or hide the toolbar"
- msgstr "Afficher/Cacher la barre d'outils"
-
--#: src/gtk/MainView.cxx:174
-+#: src/gtk/MainView.cxx:183
- msgid "Show _Statusbar"
- msgstr "Afficher la _barre d'état"
-
--#: src/gtk/MainView.cxx:175
-+#: src/gtk/MainView.cxx:184
- msgid "Show or hide the statusbar"
- msgstr "Afficher/Cacher la barre d'état"
-
--#: src/gtk/MainView.cxx:178
-+#: src/gtk/MainView.cxx:187
- msgid "Show I_ndex"
- msgstr "Afficher l'_index"
-
--#: src/gtk/MainView.cxx:179
-+#: src/gtk/MainView.cxx:188
- msgid "Show or hide the document's outline"
- msgstr "Afficher/Cacher l'index du document"
-
--#: src/gtk/MainView.cxx:182
-+#: src/gtk/MainView.cxx:191
- msgid "Zoom to _Fit"
- msgstr "Ajuster le document _dans la fenêtre"
-
--#: src/gtk/MainView.cxx:183
-+#: src/gtk/MainView.cxx:192
- msgid "Make the current document fill the window"
- msgstr "Ajuster le document dans la fenêtre"
-
--#: src/gtk/MainView.cxx:186 src/gtk/StockIcons.cxx:44
-+#: src/gtk/MainView.cxx:195 src/gtk/StockIcons.cxx:44
- msgid "Zoom to _Width"
- msgstr "Ajuster à la largeur de la _fenêtre"
-
--#: src/gtk/MainView.cxx:187
-+#: src/gtk/MainView.cxx:196
- msgid "Make the current document fill the window width"
- msgstr "Ajuster à la largeur de la fenêtre"
-
--#: src/gtk/MainView.cxx:278
-+#: src/gtk/MainView.cxx:202
-+msgid "Scroll"
-+msgstr ""
-+
-+#: src/gtk/MainView.cxx:203
-+msgid "Mouse scroll page"
-+msgstr ""
-+
-+#: src/gtk/MainView.cxx:205
-+msgid "Select Text"
-+msgstr ""
-+
-+#: src/gtk/MainView.cxx:206
-+msgid " Mouse select text"
-+msgstr ""
-+
-+#: src/gtk/MainView.cxx:320
- msgid "Open PDF File"
- msgstr "Ouvrir un fichier PDF"
-
--#: src/gtk/MainView.cxx:298 src/gtk/MainView.cxx:412
-+#: src/gtk/MainView.cxx:340 src/gtk/MainView.cxx:454
- msgid "Portable Document Format (PDF) Files"
- msgstr "Fichiers Portable Document Format (PDF)"
-
--#: src/gtk/MainView.cxx:310 src/gtk/MainView.cxx:424
-+#: src/gtk/MainView.cxx:352 src/gtk/MainView.cxx:466
- msgid "All Files"
- msgstr "Tous les fichiers"
-
--#: src/gtk/MainView.cxx:362
-+#: src/gtk/MainView.cxx:404
- msgid "Password"
- msgstr "Mot de passe"
-
--#: src/gtk/MainView.cxx:386
-+#: src/gtk/MainView.cxx:428
- msgid "Save PDF File"
--msgstr "Ouvrir un fichier PDF"
-+msgstr "Enregistrer un fichier PDF"
-
--#: src/gtk/MainView.cxx:816
-+#: src/gtk/MainView.cxx:858
- msgid "Page"
- msgstr "Page"
-
--#: src/gtk/MainView.cxx:826
-+#: src/gtk/MainView.cxx:868
- msgid "of 0"
- msgstr "sur 0"
-
--#: src/gtk/MainView.cxx:879
-+#: src/gtk/MainView.cxx:921
- msgid "Index"
- msgstr "Index"
-
--#: src/gtk/MainView.cxx:946 src/gtk/MainView.cxx:956
-+#: src/gtk/MainView.cxx:991 src/gtk/MainView.cxx:1001
- #, c-format
- msgid "Error building UI manager: %s\n"
- msgstr "Erreur à la création du gestionnaire d'UI: %s\n"
-
--#: src/gtk/MainView.cxx:1056
-+#: src/gtk/MainView.cxx:1108
- msgid "A lightweight PDF viewer"
- msgstr "Un visualisateur léger de PDF"
-
--#: src/gtk/MainView.cxx:1059
-+#: src/gtk/MainView.cxx:1111
- msgid ""
- "ePDFView is free software; you can redistribute it and/or modify\n"
- "it under the terms of the GNU General Public License as published by\n"
-@@ -401,7 +425,7 @@
- "Free Software Foundation; (version 2 ou bien toute autre version ultérieure\n"
- "choisie par vous).\n"
-
--#: src/gtk/MainView.cxx:1063
-+#: src/gtk/MainView.cxx:1115
- msgid ""
- "ePDFView is distributes in the hope that it will be useful,\n"
- "but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
-@@ -414,7 +438,7 @@
- "spécifique. Reportez-vous à la Licence Publique Générale GNU pour\n"
- "plus de détails.\n"
-
--#: src/gtk/MainView.cxx:1067
-+#: src/gtk/MainView.cxx:1119
- msgid ""
- "You should have received a copy of the GNU General Public License\n"
- "along with ePDFView; if not, write to the Free Software Foundation,Inc.,\n"
-@@ -425,11 +449,11 @@
- "Free Software Foundation, Inc.\n"
- "59 Temple Place, Suite 330, Boston, MA 02111-1307, États-Unis.\n"
-
--#: src/gtk/MainView.cxx:1076
-+#: src/gtk/MainView.cxx:1128
- msgid "ePDFView"
- msgstr "ePDFView"
-
--#: src/gtk/MainView.cxx:1083
-+#: src/gtk/MainView.cxx:1135
- msgid "translator-credits"
- msgstr "Mr_Moustache <mr.moustache@laposte.net>"
-
-diff -Nurd epdfview-0.1.6-svn/po/it.po epdfview/po/it.po
---- epdfview-0.1.6-svn/po/it.po 1970-01-01 01:00:00.000000000 +0100
-+++ epdfview/po/it.po 2008-07-13 12:55:55.073198000 +0200
-@@ -0,0 +1,592 @@
-+msgid ""
-+msgstr ""
-+"Project-Id-Version: ePDFView 0.1.6\n"
-+"Report-Msgid-Bugs-To: jordi@emma-soft.com\n"
-+"POT-Creation-Date: 2008-03-18 20:33+0100\n"
-+"PO-Revision-Date: 2008-03-18 00:00+0100\n"
-+"Last-Translator: Fabio Vergnani <monghitri@aruba.it>\n"
-+"Language-Team: Italian\n"
-+"MIME-Version: 1.0\n"
-+"Content-Type: text/plain; charset=UTF-8\n"
-+"Content-Transfer-Encoding: 8bit\n"
-+
-+#: src/FindPter.cxx:187
-+msgid "No Results Found!"
-+msgstr "Nessuna corrispondenza trovata!"
-+
-+#: src/FindPter.cxx:195
-+#, c-format
-+msgid "Searching in page %d of %d..."
-+msgstr "Ricerca in corso in pagina %d di %d..."
-+
-+#: src/IDocument.cxx:82
-+msgid "No error."
-+msgstr "Nessun errore."
-+
-+#: src/IDocument.cxx:85
-+msgid "File not found."
-+msgstr "File non trovato"
-+
-+#: src/IDocument.cxx:88
-+msgid "Couldn't read the page catalog."
-+msgstr "Non riesco a leggere il catalogo della pagina."
-+
-+#: src/IDocument.cxx:91
-+msgid "The PDF file is damaged and can't be repaired."
-+msgstr "Il file PDF è danneggiato e non può essere recuperato."
-+
-+#: src/IDocument.cxx:94
-+msgid "The file is encrypted and the password was incorrect or not supplied."
-+msgstr ""
-+"Il file è criptato e la password è sbagliata oppure non è stata fornita"
-+
-+#: src/IDocument.cxx:97
-+msgid "Nonexistent or invalid highlight file."
-+msgstr "Il file highlight non esiste oppure non è valido"
-+
-+#: src/IDocument.cxx:100
-+msgid "Invalid printer."
-+msgstr "Stampante non valida."
-+
-+#: src/IDocument.cxx:103
-+msgid "Error during printing."
-+msgstr "Errore durante la stampa"
-+
-+#: src/IDocument.cxx:106
-+msgid "The PDF file doesn't allow that operation."
-+msgstr "Il file PDF non permette questa operazione."
-+
-+#: src/IDocument.cxx:109
-+msgid "Invalid page number."
-+msgstr "Numero di pagina non valido."
-+
-+#: src/IDocument.cxx:112
-+msgid "File I/O error."
-+msgstr "Errore di Input/Output nel file."
-+
-+#: src/IDocument.cxx:115
-+#, c-format
-+msgid "Unknown error (%d)."
-+msgstr "Errore sconosciuto (%d)."
-+
-+#: src/main.cxx:59
-+msgid "[FILE] - view PDF documents"
-+msgstr "[FILE] - visualizza documenti PDF"
-+
-+#: src/main.cxx:72 src/MainPter.cxx:153
-+msgid "PDF Viewer"
-+msgstr "Visualizzatore PDF"
-+
-+#: src/MainPter.cxx:233
-+#, c-format
-+msgid "Reloading file %s..."
-+msgstr "Ricaricamento file %s..."
-+
-+#: src/MainPter.cxx:237
-+#, c-format
-+msgid "Loading file %s..."
-+msgstr "Caricamento file %s..."
-+
-+#: src/MainPter.cxx:413 src/MainPter.cxx:892
-+#, c-format
-+msgid "of %d"
-+msgstr "di %d"
-+
-+#: src/MainPter.cxx:588
-+#, c-format
-+msgid "Saving document to %s..."
-+msgstr "Salvataggio documento in %s..."
-+
-+#: src/MainPter.cxx:832 src/MainPter.cxx:871
-+msgid "Error Loading File"
-+msgstr "Errore nel caricamento del file"
-+
-+#: src/MainPter.cxx:872
-+msgid "The password you have supplied is not a valid password for this file."
-+msgstr "La password fornita non è corretta per questo file."
-+
-+#: src/MainPter.cxx:953
-+msgid "Error Saving File"
-+msgstr "Errore nel salvataggio del file"
-+
-+#: src/PagePter.cxx:338
-+msgid "Loading..."
-+msgstr "Caricamento in corso..."
-+
-+#: src/PrintPter.cxx:252
-+msgid "A4"
-+msgstr ""
-+
-+#: src/PrintPter.cxx:280
-+msgid "300 DPI"
-+msgstr ""
-+
-+#: src/PrintPter.cxx:308
-+msgid "Grayscale"
-+msgstr "Scala di grigi"
-+
-+#: src/PrintPter.cxx:409
-+msgid "Idle"
-+msgstr "In attesa"
-+
-+#: src/PrintPter.cxx:412
-+msgid "Stopped"
-+msgstr "Fermata"
-+
-+#: src/PrintPter.cxx:415
-+msgid "Processing"
-+msgstr "Stampa in corso"
-+
-+#: src/PrintPter.cxx:418
-+msgid "Unknown"
-+msgstr "Sconosciuto"
-+
-+#: src/PDFDocument.cxx:272
-+#, c-format
-+msgid ""
-+"Failed to load document '%s'.\n"
-+"%s\n"
-+msgstr ""
-+"Errore nel caricamento del documento '%s'.\n"
-+"%s\n"
-+
-+#: src/gtk/FindView.cxx:51
-+msgid "Find:"
-+msgstr "Trova:"
-+
-+#: src/gtk/MainView.cxx:89
-+msgid "_File"
-+msgstr "_File"
-+
-+#: src/gtk/MainView.cxx:90
-+msgid "_Edit"
-+msgstr "_Modifica"
-+
-+#: src/gtk/MainView.cxx:91
-+msgid "_View"
-+msgstr "_Visualizza"
-+
-+#: src/gtk/MainView.cxx:92
-+msgid "_Go"
-+msgstr "V_ai"
-+
-+#: src/gtk/MainView.cxx:93
-+msgid "_Help"
-+msgstr "A_iuto"
-+
-+#: src/gtk/MainView.cxx:95
-+msgid "_Open"
-+msgstr "_Apri"
-+
-+#: src/gtk/MainView.cxx:96
-+msgid "Open a PDF document"
-+msgstr "Apre un documento PDF"
-+
-+#: src/gtk/MainView.cxx:99
-+msgid "_Reload"
-+msgstr "_Ricarica"
-+
-+#: src/gtk/MainView.cxx:100
-+msgid "Reload the current document"
-+msgstr "Ricarica il documento corrente"
-+
-+#: src/gtk/MainView.cxx:103
-+msgid "_Save a Copy..."
-+msgstr "_Salva una copia..."
-+
-+#: src/gtk/MainView.cxx:104
-+msgid "Save a copy of the current document"
-+msgstr "Salva una copia del documento corrente"
-+
-+#: src/gtk/MainView.cxx:108
-+msgid "_Print..."
-+msgstr "Stam_pa..."
-+
-+#: src/gtk/MainView.cxx:109
-+msgid "Print the current document"
-+msgstr "Stampa il documento corrente"
-+
-+#: src/gtk/MainView.cxx:113
-+msgid "_Close"
-+msgstr "_Chiudi"
-+
-+#: src/gtk/MainView.cxx:114
-+msgid "Close this window"
-+msgstr "Chiudi questa finestra"
-+
-+#: src/gtk/MainView.cxx:117
-+msgid "_Find"
-+msgstr "_Trova"
-+
-+#: src/gtk/MainView.cxx:118
-+msgid "Find a word in the document"
-+msgstr "Trova una parola nel documento"
-+
-+#: src/gtk/MainView.cxx:121
-+msgid "Preferences..."
-+msgstr "Preferenze..."
-+
-+#: src/gtk/MainView.cxx:122
-+msgid "Change the application's preferences"
-+msgstr "Cambia le preferenze dell'applicazione"
-+
-+#: src/gtk/MainView.cxx:125
-+msgid "Zoom _In"
-+msgstr "_Aumenta"
-+
-+#: src/gtk/MainView.cxx:126
-+msgid "Enlarge the document"
-+msgstr "Ingrandisci il documento"
-+
-+#: src/gtk/MainView.cxx:129
-+msgid "Zoom _Out"
-+msgstr "_Riduci"
-+
-+#: src/gtk/MainView.cxx:130
-+msgid "Shrink the document"
-+msgstr "Rimpicciolisci il documento"
-+
-+#: src/gtk/MainView.cxx:133 src/gtk/StockIcons.cxx:43
-+msgid "Rotate _Right"
-+msgstr "Ruota a _destra"
-+
-+#: src/gtk/MainView.cxx:134
-+msgid "Rotate the document 90 degrees clockwise"
-+msgstr "Ruota il documento di 90 gradi in senso orario"
-+
-+#: src/gtk/MainView.cxx:137 src/gtk/StockIcons.cxx:42
-+msgid "Rotate _Left"
-+msgstr "Ruota a _sinistra"
-+
-+#: src/gtk/MainView.cxx:138
-+msgid "Rotate the document 90 degrees counter-clockwise"
-+msgstr "Ruota il documento di 90 gradi in senso antiorario"
-+
-+#: src/gtk/MainView.cxx:141
-+msgid "_First Page"
-+msgstr "_Prima Pagina"
-+
-+#: src/gtk/MainView.cxx:142
-+msgid "Go to the first page"
-+msgstr "Va alla prima pagina"
-+
-+#: src/gtk/MainView.cxx:145
-+msgid "_Next Page"
-+msgstr "P_rossima Pagina"
-+
-+#: src/gtk/MainView.cxx:146
-+msgid "Go to the next page"
-+msgstr "Va alla prossima pagina"
-+
-+#: src/gtk/MainView.cxx:149
-+msgid "_Previous Page"
-+msgstr "P_agina Precedente"
-+
-+#: src/gtk/MainView.cxx:150
-+msgid "Go to the previous page"
-+msgstr "Va alla pagina precedente"
-+
-+#: src/gtk/MainView.cxx:153
-+msgid "_Last Page"
-+msgstr "_Ultima Pagina"
-+
-+#: src/gtk/MainView.cxx:154
-+msgid "Go to the last page"
-+msgstr "Va all'ultima pagina"
-+
-+#: src/gtk/MainView.cxx:157
-+msgid "_About"
-+msgstr "I_nformazioni"
-+
-+#: src/gtk/MainView.cxx:158
-+msgid "Display application's credits"
-+msgstr "Crediti"
-+
-+#: src/gtk/MainView.cxx:175
-+msgid "F_ull screen"
-+msgstr "S_chermo intero"
-+
-+#: src/gtk/MainView.cxx:176
-+msgid "Toggle full screen window"
-+msgstr "Visualizza a schermo intero"
-+
-+#: src/gtk/MainView.cxx:179
-+msgid "Show _Toolbar"
-+msgstr "Mostra _barra degli strumenti"
-+
-+#: src/gtk/MainView.cxx:180
-+msgid "Show or hide the toolbar"
-+msgstr "Mostra o nasconde la barra degli strumenti"
-+
-+#: src/gtk/MainView.cxx:183
-+msgid "Show _Statusbar"
-+msgstr "_Mostra barra di stato"
-+
-+#: src/gtk/MainView.cxx:184
-+msgid "Show or hide the statusbar"
-+msgstr "Mostra o nasconde la barra di stato"
-+
-+#: src/gtk/MainView.cxx:187
-+msgid "Show I_ndex"
-+msgstr "Mostra _indice"
-+
-+#: src/gtk/MainView.cxx:188
-+msgid "Show or hide the document's outline"
-+msgstr "Mostra o nasconde l'indice del documento"
-+
-+#: src/gtk/MainView.cxx:191
-+msgid "Zoom to _Fit"
-+msgstr "Zoom ada_tta"
-+
-+#: src/gtk/MainView.cxx:192
-+msgid "Make the current document fill the window"
-+msgstr "Adatta il documento alla grandezza della finestra"
-+
-+#: src/gtk/MainView.cxx:195 src/gtk/StockIcons.cxx:44
-+msgid "Zoom to _Width"
-+msgstr "Zoom _larghezza"
-+
-+#: src/gtk/MainView.cxx:196
-+msgid "Make the current document fill the window width"
-+msgstr "Adatta il documento alla larghezza della finestra"
-+
-+#: src/gtk/MainView.cxx:202
-+msgid "Scroll"
-+msgstr "Scorri"
-+
-+#: src/gtk/MainView.cxx:203
-+msgid "Mouse scroll page"
-+msgstr "Mouse scorre la pagina"
-+
-+#: src/gtk/MainView.cxx:205
-+msgid "Select Text"
-+msgstr "Seleziona testo"
-+
-+#: src/gtk/MainView.cxx:206
-+msgid " Mouse select text"
-+msgstr "Mouse seleziona testo"
-+
-+#: src/gtk/MainView.cxx:320
-+msgid "Open PDF File"
-+msgstr "Apri file PDF"
-+
-+#: src/gtk/MainView.cxx:340 src/gtk/MainView.cxx:454
-+msgid "Portable Document Format (PDF) Files"
-+msgstr "Portable Document Format (PDF) Files"
-+
-+#: src/gtk/MainView.cxx:352 src/gtk/MainView.cxx:466
-+msgid "All Files"
-+msgstr "Tutti i file"
-+
-+#: src/gtk/MainView.cxx:404
-+msgid "Password"
-+msgstr "Password"
-+
-+#: src/gtk/MainView.cxx:428
-+msgid "Save PDF File"
-+msgstr "Salva file PDF"
-+
-+#: src/gtk/MainView.cxx:858
-+msgid "Page"
-+msgstr "Pagina"
-+
-+#: src/gtk/MainView.cxx:868
-+msgid "of 0"
-+msgstr "di 0"
-+
-+#: src/gtk/MainView.cxx:921
-+msgid "Index"
-+msgstr "Indice"
-+
-+#: src/gtk/MainView.cxx:991 src/gtk/MainView.cxx:1001
-+#, c-format
-+msgid "Error building UI manager: %s\n"
-+msgstr "Errore nella costruzione del gestore UI: %s\n"
-+
-+#: src/gtk/MainView.cxx:1108
-+msgid "A lightweight PDF viewer"
-+msgstr "Un visualizzatore PDF semplice e leggero"
-+
-+#: src/gtk/MainView.cxx:1111
-+msgid ""
-+"ePDFView is free software; you can redistribute it and/or modify\n"
-+"it under the terms of the GNU General Public License as published by\n"
-+"the Free Software Foundation; either version 2 of the License, or\n"
-+"(at your option) any later version.\n"
-+msgstr ""
-+"ePDFView è software libero; è possibile redistribuirlo e/o modificarlo\n"
-+"entro i termini della licenza GNU General Public License come pubblicata\n"
-+"dalla Free Software Foundation; versione 2 della Licenza, o\n"
-+"(a propria scelta) ogni versione successiva.\n"
-+
-+#: src/gtk/MainView.cxx:1115
-+msgid ""
-+"ePDFView is distributes in the hope that it will be useful,\n"
-+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
-+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
-+"GNU General Public License for more details.\n"
-+msgstr ""
-+"ePDFView è distribuito nella speranza che possa essere utile,\n"
-+"ma SENZA ALCUNA GARANZIA; senza neanche l'implicita garanzia di\n"
-+"COMMERCIABILITÀ o IDONEITÀ AD UNO SCOPO PARTICOLARE. Consultare la\n"
-+"GNU General Public License per maggiori dettagli.\n"
-+
-+#: src/gtk/MainView.cxx:1119
-+msgid ""
-+"You should have received a copy of the GNU General Public License\n"
-+"along with ePDFView; if not, write to the Free Software Foundation,Inc.,\n"
-+"59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n"
-+msgstr ""
-+"Insieme a ePDFView dovreste aver ricevuto una copia della GNU\n"
-+"General Public License; in caso contrario scrivete a: Free Software "
-+"Foundation,Inc.,\n"
-+"59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n"
-+
-+#: src/gtk/MainView.cxx:1128
-+msgid "ePDFView"
-+msgstr "ePDFView"
-+
-+#: src/gtk/MainView.cxx:1135
-+msgid "translator-credits"
-+msgstr "Fabio Vergnani <monghitri@aruba.it>"
-+
-+#: src/gtk/PreferencesView.cxx:32
-+msgid "Preferences"
-+msgstr "Preferenze"
-+
-+#: src/gtk/PreferencesView.cxx:46
-+msgid "External Commands"
-+msgstr "Comandi Esterni"
-+
-+#: src/gtk/PreferencesView.cxx:105
-+msgid "Web _Browser:"
-+msgstr "_Navigatore Web"
-+
-+#: src/gtk/PreferencesView.cxx:118
-+#, c-format
-+msgid "Note: <i>%s</i> will be replaced by the URI."
-+msgstr "Nota: <i>%s</i> sarà rimpiazzato dall'URI"
-+
-+#: src/gtk/PrintView.cxx:51
-+msgid "Print"
-+msgstr "Stampa"
-+
-+#: src/gtk/PrintView.cxx:69 src/gtk/PrintView.cxx:659
-+msgid "Printer"
-+msgstr "Stampante"
-+
-+#: src/gtk/PrintView.cxx:74
-+msgid "Job"
-+msgstr "Lavoro"
-+
-+#: src/gtk/PrintView.cxx:79
-+msgid "Paper"
-+msgstr "Carta"
-+
-+#: src/gtk/PrintView.cxx:359
-+msgid "<b>Print Range</b>"
-+msgstr "<b>Intervallo di stampa</b>"
-+
-+#: src/gtk/PrintView.cxx:377
-+msgid "_All pages"
-+msgstr "_Tutte le pagine"
-+
-+#: src/gtk/PrintView.cxx:380
-+msgid "_Range:"
-+msgstr "_Intervallo:"
-+
-+#: src/gtk/PrintView.cxx:392
-+msgid "<b>Page Set</b>"
-+msgstr "<b>Gruppi di pagine</b>"
-+
-+#: src/gtk/PrintView.cxx:408
-+msgid "A_ll pages"
-+msgstr "T_utte le pagine"
-+
-+#: src/gtk/PrintView.cxx:412
-+msgid "O_dd pages"
-+msgstr "Pagine _dispari"
-+
-+#: src/gtk/PrintView.cxx:416
-+msgid "_Even pages"
-+msgstr "Pagine p_ari"
-+
-+#: src/gtk/PrintView.cxx:420
-+msgid "<b>Copies</b>"
-+msgstr "<b>Copie</b>"
-+
-+#: src/gtk/PrintView.cxx:437
-+msgid "N_umber of copies:"
-+msgstr "Nu_mero di copie:"
-+
-+#: src/gtk/PrintView.cxx:444
-+msgid "C_ollate"
-+msgstr "Ra_gruppa"
-+
-+#: src/gtk/PrintView.cxx:465
-+msgid "<b>Paper and Layout</b>"
-+msgstr "<b>Carta e disposizione</b>"
-+
-+#: src/gtk/PrintView.cxx:482
-+msgid "Paper _Size:"
-+msgstr "_Dimensione carta"
-+
-+#: src/gtk/PrintView.cxx:508
-+msgid "Page _orientation:"
-+msgstr "_Orientamento pagina"
-+
-+#: src/gtk/PrintView.cxx:539
-+msgid "_Layout:"
-+msgstr "D_isposizione_"
-+
-+#: src/gtk/PrintView.cxx:568
-+msgid "<b>Output</b>"
-+msgstr "<b>Uscita</b>"
-+
-+#: src/gtk/PrintView.cxx:585
-+msgid "_Mode:"
-+msgstr "_Metodo"
-+
-+#: src/gtk/PrintView.cxx:613
-+msgid "_Resolution:"
-+msgstr "_Risoluzione"
-+
-+#: src/gtk/PrintView.cxx:668
-+msgid "State"
-+msgstr "Stato"
-+
-+#: src/gtk/PrintView.cxx:677
-+msgid "Jobs"
-+msgstr "Lavori"
-+
-+#: src/gtk/PrintView.cxx:686
-+msgid "Location"
-+msgstr "Posizione"
-+
-+#: src/gtk/PrintView.cxx:717
-+msgid "Plain"
-+msgstr "Normale"
-+
-+#: src/gtk/PrintView.cxx:723
-+msgid "2 pages in 1"
-+msgstr "2 pagine in 1"
-+
-+#: src/gtk/PrintView.cxx:729
-+msgid "4 pages in 1"
-+msgstr "4 pagine in 1"
-+
-+#: src/gtk/PrintView.cxx:744
-+msgid "Portrait"
-+msgstr "Verticale"
-+
-+#: src/gtk/PrintView.cxx:750
-+msgid "Landscape"
-+msgstr "Orizzontale"
-+
-+#: src/gtk/StockIcons.cxx:40
-+msgid "Find _Next"
-+msgstr "Trova _Prossimo"
-+
-+#: src/gtk/StockIcons.cxx:41
-+msgid "Find _Previous"
-+msgstr "Trova P_recedente"
-diff -Nurd epdfview-0.1.6-svn/po/ja.po epdfview/po/ja.po
---- epdfview-0.1.6-svn/po/ja.po 1970-01-01 01:00:00.000000000 +0100
-+++ epdfview/po/ja.po 2008-07-13 12:55:55.083198000 +0200
-@@ -0,0 +1,597 @@
-+# Japanese translations for ePDFView package
-+#
-+# Copyright (C) 2006 Emma's Software
-+# This file is distributed under the same license as the ePDFView package.
-+# <jordi@emma-soft.com>, 2006.
-+#
-+msgid ""
-+msgstr ""
-+"Project-Id-Version: ePDFView 0.1.6\n"
-+"Report-Msgid-Bugs-To: jordi@emma-soft.com\n"
-+"POT-Creation-Date: 2008-04-14 13:27+0200\n"
-+"PO-Revision-Date: 2006-04-12 21:17+0200\n"
-+"Last-Translator: Jonny <jonny@csc.jp>\n"
-+"Language-Team: nyu <nyu_8804@yahoo.co.jp>\n"
-+"MIME-Version: 1.0\n"
-+"Content-Type: text/plain; charset=UTF-8\n"
-+"Content-Transfer-Encoding: 8bit\n"
-+
-+#: src/FindPter.cxx:187
-+msgid "No Results Found!"
-+msgstr "見ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸ!"
-+
-+#: src/FindPter.cxx:195
-+#, c-format
-+msgid "Searching in page %d of %d..."
-+msgstr "%d/%d を検索中..."
-+
-+#: src/IDocument.cxx:82
-+msgid "No error."
-+msgstr "エラーã¯ã‚ã‚Šã¾ã›ã‚“。"
-+
-+#: src/IDocument.cxx:85
-+msgid "File not found."
-+msgstr "ファイルãŒè¦‹ã¤ã‹ã‚Šã¾ã›ã‚“ã§ã—ãŸã€‚"
-+
-+#: src/IDocument.cxx:88
-+msgid "Couldn't read the page catalog."
-+msgstr "ページカタログを読ã‚ã¾ã›ã‚“ã§ã—ãŸã€‚"
-+
-+#: src/IDocument.cxx:91
-+msgid "The PDF file is damaged and can't be repaired."
-+msgstr "PDF ファイルãŒå£Šã‚Œã¦ã„ã¦ä¿®æ­£ã§ãã¾ã›ã‚“ã§ã—ãŸã€‚"
-+
-+#: src/IDocument.cxx:94
-+msgid "The file is encrypted and the password was incorrect or not supplied."
-+msgstr "ファイルã¯æš—å·åŒ–ã•ã‚Œã¦ã„ã¾ã™ãŒã€æ­£ã—ã„パスワードãŒå…¥åŠ›ã•ã‚Œã¦ã„ã¾ã›ã‚“。"
-+
-+#: src/IDocument.cxx:97
-+msgid "Nonexistent or invalid highlight file."
-+msgstr "ãƒã‚¤ãƒ©ã‚¤ãƒˆã•ã‚ŒãŸãƒ•ã‚¡ã‚¤ãƒ«ã¯å­˜åœ¨ã—ã¦ã„ãªã„ã‹ä¸é©å½“ã§ã™ã€‚"
-+
-+#: src/IDocument.cxx:100
-+msgid "Invalid printer."
-+msgstr "プリンタãŒä¸é©å½“ã§ã™ã€‚"
-+
-+#: src/IDocument.cxx:103
-+msgid "Error during printing."
-+msgstr "å°åˆ·ä¸­ã«ã‚¨ãƒ©ãƒ¼ãŒç™ºç”Ÿã—ã¾ã—ãŸã€‚"
-+
-+#: src/IDocument.cxx:106
-+msgid "The PDF file doesn't allow that operation."
-+msgstr "PDF ファイルã¯ã“ã®æ“作を許å¯ã—ã¦ã„ã¾ã›ã‚“。"
-+
-+#: src/IDocument.cxx:109
-+msgid "Invalid page number."
-+msgstr "ページ番å·ãŒä¸é©å½“ã§ã™ã€‚"
-+
-+#: src/IDocument.cxx:112
-+msgid "File I/O error."
-+msgstr "ファイル I/O エラー。"
-+
-+#: src/IDocument.cxx:115
-+#, c-format
-+msgid "Unknown error (%d)."
-+msgstr "ä¸æ˜Žãªã‚¨ãƒ©ãƒ¼ (%d)."
-+
-+#: src/main.cxx:59
-+msgid "[FILE] - view PDF documents"
-+msgstr "[ファイル] - PDF ドキュメントを表示ã™ã‚‹"
-+
-+#: src/main.cxx:72 src/MainPter.cxx:153
-+msgid "PDF Viewer"
-+msgstr "PDF ビューア"
-+
-+#: src/MainPter.cxx:233
-+#, c-format
-+msgid "Reloading file %s..."
-+msgstr "ファイル %s ã‚’æ›´æ–°ã—ã¦ã„ã¾ã™..."
-+
-+#: src/MainPter.cxx:237
-+#, c-format
-+msgid "Loading file %s..."
-+msgstr "ファイル %s を読ã¿è¾¼ã‚“ã§ã„ã¾ã™..."
-+
-+#: src/MainPter.cxx:413 src/MainPter.cxx:892
-+#, c-format
-+msgid "of %d"
-+msgstr "/%d"
-+
-+#: src/MainPter.cxx:588
-+#, c-format
-+msgid "Saving document to %s..."
-+msgstr "ドキュメントを %s ã«ä¿å­˜ã—ã¦ã„ã¾ã™..."
-+
-+#: src/MainPter.cxx:832 src/MainPter.cxx:871
-+msgid "Error Loading File"
-+msgstr "ファイル読ã¿è¾¼ã¿ä¸­ã«ã‚¨ãƒ©ãƒ¼ç™ºç”Ÿ"
-+
-+#: src/MainPter.cxx:872
-+msgid "The password you have supplied is not a valid password for this file."
-+msgstr "入力ã—ãŸãƒ‘スワードã¯ã“ã®ãƒ•ã‚¡ã‚¤ãƒ«ç”¨ã®ãƒ‘スワードã§ã¯ãªã„よã†ã§ã™ã€‚"
-+
-+#: src/MainPter.cxx:953
-+msgid "Error Saving File"
-+msgstr "ファイルä¿å­˜ä¸­ã«ã‚¨ãƒ©ãƒ¼ç™ºç”Ÿ"
-+
-+#: src/PagePter.cxx:338
-+msgid "Loading..."
-+msgstr "読ã¿è¾¼ã¿ä¸­..."
-+
-+#: src/PrintPter.cxx:252
-+msgid "A4"
-+msgstr "A4"
-+
-+#: src/PrintPter.cxx:280
-+msgid "300 DPI"
-+msgstr "300 DPI"
-+
-+#: src/PrintPter.cxx:308
-+msgid "Grayscale"
-+msgstr "グレースケール"
-+
-+#: src/PrintPter.cxx:409
-+msgid "Idle"
-+msgstr "アイドリング"
-+
-+#: src/PrintPter.cxx:412
-+msgid "Stopped"
-+msgstr "中止"
-+
-+#: src/PrintPter.cxx:415
-+msgid "Processing"
-+msgstr "処ç†ä¸­"
-+
-+#: src/PrintPter.cxx:418
-+msgid "Unknown"
-+msgstr "ä¸æ˜Ž"
-+
-+#: src/PDFDocument.cxx:272
-+#, c-format
-+msgid ""
-+"Failed to load document '%s'.\n"
-+"%s\n"
-+msgstr ""
-+"ドキュメント '%s' ã®èª­ã¿è¾¼ã¿ã«å¤±æ•—ã—ã¾ã—ãŸã€‚\n"
-+"%s\n"
-+
-+#: src/gtk/FindView.cxx:51
-+msgid "Find:"
-+msgstr "検索:"
-+
-+#: src/gtk/MainView.cxx:89
-+msgid "_File"
-+msgstr "ファイル(_F)"
-+
-+#: src/gtk/MainView.cxx:90
-+msgid "_Edit"
-+msgstr "編集(_E)"
-+
-+#: src/gtk/MainView.cxx:91
-+msgid "_View"
-+msgstr "表示(_V)"
-+
-+#: src/gtk/MainView.cxx:92
-+msgid "_Go"
-+msgstr "移動(_G)"
-+
-+#: src/gtk/MainView.cxx:93
-+msgid "_Help"
-+msgstr "ヘルプ(_H)"
-+
-+#: src/gtk/MainView.cxx:95
-+msgid "_Open"
-+msgstr "é–‹ã(_O)"
-+
-+#: src/gtk/MainView.cxx:96
-+msgid "Open a PDF document"
-+msgstr "PDF ドキュメントを開ã"
-+
-+#: src/gtk/MainView.cxx:99
-+msgid "_Reload"
-+msgstr "æ›´æ–°(_R)"
-+
-+#: src/gtk/MainView.cxx:100
-+msgid "Reload the current document"
-+msgstr "ドキュメントを更新ã™ã‚‹"
-+
-+#: src/gtk/MainView.cxx:103
-+msgid "_Save a Copy..."
-+msgstr "別åã§ä¿å­˜(_S)..."
-+
-+#: src/gtk/MainView.cxx:104
-+msgid "Save a copy of the current document"
-+msgstr "ドキュメントã®ã‚³ãƒ”ーをä¿å­˜ã™ã‚‹"
-+
-+#: src/gtk/MainView.cxx:108
-+msgid "_Print..."
-+msgstr "å°åˆ·(_P)..."
-+
-+#: src/gtk/MainView.cxx:109
-+msgid "Print the current document"
-+msgstr "ドキュメントをå°åˆ·ã™ã‚‹"
-+
-+#: src/gtk/MainView.cxx:113
-+msgid "_Close"
-+msgstr "é–‰ã˜ã‚‹(_C)"
-+
-+#: src/gtk/MainView.cxx:114
-+msgid "Close this window"
-+msgstr "ウィンドウを閉ã˜ã‚‹"
-+
-+#: src/gtk/MainView.cxx:117
-+msgid "_Find"
-+msgstr "検索(_F)"
-+
-+#: src/gtk/MainView.cxx:118
-+msgid "Find a word in the document"
-+msgstr "ドキュメント中ã®å˜èªžã‚’検索ã™ã‚‹"
-+
-+#: src/gtk/MainView.cxx:121
-+msgid "Preferences..."
-+msgstr "設定..."
-+
-+#: src/gtk/MainView.cxx:122
-+msgid "Change the application's preferences"
-+msgstr "アプリケーションã®è¨­å®šã‚’変更ã™ã‚‹"
-+
-+#: src/gtk/MainView.cxx:125
-+msgid "Zoom _In"
-+msgstr "拡大(_I)"
-+
-+#: src/gtk/MainView.cxx:126
-+msgid "Enlarge the document"
-+msgstr "ドキュメントã®è¡¨ç¤ºã‚’拡大ã™ã‚‹"
-+
-+#: src/gtk/MainView.cxx:129
-+msgid "Zoom _Out"
-+msgstr "縮å°(_O)"
-+
-+#: src/gtk/MainView.cxx:130
-+msgid "Shrink the document"
-+msgstr "ドキュメントã®è¡¨ç¤ºã‚’縮å°ã™ã‚‹"
-+
-+#: src/gtk/MainView.cxx:133 src/gtk/StockIcons.cxx:43
-+msgid "Rotate _Right"
-+msgstr "å³ã«å›žè»¢(_R)"
-+
-+#: src/gtk/MainView.cxx:134
-+msgid "Rotate the document 90 degrees clockwise"
-+msgstr "ドキュメントã®è¡¨ç¤ºã‚’時計回り㫠90°回転ã™ã‚‹"
-+
-+#: src/gtk/MainView.cxx:137 src/gtk/StockIcons.cxx:42
-+msgid "Rotate _Left"
-+msgstr "å·¦ã«å›žè»¢(_L)"
-+
-+#: src/gtk/MainView.cxx:138
-+msgid "Rotate the document 90 degrees counter-clockwise"
-+msgstr "ドキュメントã®è¡¨ç¤ºã‚’å時計回り㫠90°回転ã™ã‚‹"
-+
-+#: src/gtk/MainView.cxx:141
-+msgid "_First Page"
-+msgstr "最åˆã®ãƒšãƒ¼ã‚¸(_F)"
-+
-+#: src/gtk/MainView.cxx:142
-+msgid "Go to the first page"
-+msgstr "最åˆã®ãƒšãƒ¼ã‚¸ã¸ç§»å‹•"
-+
-+#: src/gtk/MainView.cxx:145
-+msgid "_Next Page"
-+msgstr "次ã®ãƒšãƒ¼ã‚¸(_N)"
-+
-+#: src/gtk/MainView.cxx:146
-+msgid "Go to the next page"
-+msgstr "次ã®ãƒšãƒ¼ã‚¸ã¸ç§»å‹•"
-+
-+#: src/gtk/MainView.cxx:149
-+msgid "_Previous Page"
-+msgstr "å‰ã®ãƒšãƒ¼ã‚¸(_P)"
-+
-+#: src/gtk/MainView.cxx:150
-+msgid "Go to the previous page"
-+msgstr "å‰ã®ãƒšãƒ¼ã‚¸ã¸ç§»å‹•"
-+
-+#: src/gtk/MainView.cxx:153
-+msgid "_Last Page"
-+msgstr "最後ã®ãƒšãƒ¼ã‚¸(_L)"
-+
-+#: src/gtk/MainView.cxx:154
-+msgid "Go to the last page"
-+msgstr "最後ã®ãƒšãƒ¼ã‚¸ã¸ç§»å‹•"
-+
-+#: src/gtk/MainView.cxx:157
-+msgid "_About"
-+msgstr "情報(_A)"
-+
-+#: src/gtk/MainView.cxx:158
-+msgid "Display application's credits"
-+msgstr "アプリケーションã®ã‚¯ãƒ¬ã‚¸ãƒƒãƒˆã‚’表示ã™ã‚‹"
-+
-+#: src/gtk/MainView.cxx:175
-+msgid "F_ull screen"
-+msgstr "全画é¢è¡¨ç¤º(_U)"
-+
-+#: src/gtk/MainView.cxx:176
-+msgid "Toggle full screen window"
-+msgstr "全画é¢è¡¨ç¤ºã‚’切り替ãˆã‚‹"
-+
-+#: src/gtk/MainView.cxx:179
-+msgid "Show _Toolbar"
-+msgstr "ツールãƒãƒ¼ã‚’表示(_T)"
-+
-+#: src/gtk/MainView.cxx:180
-+msgid "Show or hide the toolbar"
-+msgstr "ツールãƒãƒ¼ã®è¡¨ç¤ºã‚’切り替ãˆã‚‹"
-+
-+#: src/gtk/MainView.cxx:183
-+msgid "Show _Statusbar"
-+msgstr "ステータスãƒãƒ¼ã‚’表示(_S)"
-+
-+#: src/gtk/MainView.cxx:184
-+msgid "Show or hide the statusbar"
-+msgstr "ステータスãƒãƒ¼ã®è¡¨ç¤ºã‚’切り替ãˆã‚‹"
-+
-+#: src/gtk/MainView.cxx:187
-+msgid "Show I_ndex"
-+msgstr "インデックスを表示(_N)"
-+
-+#: src/gtk/MainView.cxx:188
-+msgid "Show or hide the document's outline"
-+msgstr "ドキュメントアウトラインã®è¡¨ç¤ºã‚’切り替ãˆã‚‹"
-+
-+#: src/gtk/MainView.cxx:191
-+msgid "Zoom to _Fit"
-+msgstr "フィット(_F)"
-+
-+#: src/gtk/MainView.cxx:192
-+msgid "Make the current document fill the window"
-+msgstr "ドキュメントã®è¡¨ç¤ºã‚’ウィンドウ全体ã«åˆã‚ã›ã‚‹"
-+
-+#: src/gtk/MainView.cxx:195 src/gtk/StockIcons.cxx:44
-+msgid "Zoom to _Width"
-+msgstr "å¹…ã«åˆã‚ã›ã‚‹(_W)"
-+
-+#: src/gtk/MainView.cxx:196
-+msgid "Make the current document fill the window width"
-+msgstr "ドキュメントã®è¡¨ç¤ºã‚’ウィンドウ幅ã«åˆã‚ã›ã‚‹"
-+
-+#: src/gtk/MainView.cxx:202
-+msgid "Scroll"
-+msgstr "スクロール"
-+
-+#: src/gtk/MainView.cxx:203
-+msgid "Mouse scroll page"
-+msgstr "マウスã§ãƒšãƒ¼ã‚¸ã‚’スクロール"
-+
-+#: src/gtk/MainView.cxx:205
-+msgid "Select Text"
-+msgstr "文字列é¸æŠž"
-+
-+#: src/gtk/MainView.cxx:206
-+msgid " Mouse select text"
-+msgstr " マウスã§æ–‡å­—列をé¸æŠž"
-+
-+#: src/gtk/MainView.cxx:320
-+msgid "Open PDF File"
-+msgstr "PDF ファイルを開ã"
-+
-+#: src/gtk/MainView.cxx:340 src/gtk/MainView.cxx:454
-+msgid "Portable Document Format (PDF) Files"
-+msgstr "ãƒãƒ¼ã‚¿ãƒ–ルドキュメントフォーマット(PDF) ファイル"
-+
-+#: src/gtk/MainView.cxx:352 src/gtk/MainView.cxx:466
-+msgid "All Files"
-+msgstr "ã™ã¹ã¦ã®ãƒ•ã‚¡ã‚¤ãƒ«"
-+
-+#: src/gtk/MainView.cxx:404
-+msgid "Password"
-+msgstr "パスワード"
-+
-+#: src/gtk/MainView.cxx:428
-+msgid "Save PDF File"
-+msgstr "PDF ファイルをä¿å­˜"
-+
-+#: src/gtk/MainView.cxx:858
-+msgid "Page"
-+msgstr "ページ"
-+
-+#: src/gtk/MainView.cxx:868
-+msgid "of 0"
-+msgstr "/0"
-+
-+#: src/gtk/MainView.cxx:921
-+msgid "Index"
-+msgstr "インデックス"
-+
-+#: src/gtk/MainView.cxx:991 src/gtk/MainView.cxx:1001
-+#, c-format
-+msgid "Error building UI manager: %s\n"
-+msgstr "UI 生æˆãƒžãƒãƒ¼ã‚¸ãƒ£ã®ã‚¨ãƒ©ãƒ¼: %s\n"
-+
-+#: src/gtk/MainView.cxx:1108
-+msgid "A lightweight PDF viewer"
-+msgstr "è»½é‡ PDF ビューア"
-+
-+#: src/gtk/MainView.cxx:1111
-+msgid ""
-+"ePDFView is free software; you can redistribute it and/or modify\n"
-+"it under the terms of the GNU General Public License as published by\n"
-+"the Free Software Foundation; either version 2 of the License, or\n"
-+"(at your option) any later version.\n"
-+msgstr ""
-+"ePDFView ã¯ãƒ•ãƒªãƒ¼ã‚½ãƒ•ãƒˆã‚¦ã‚§ã‚¢ã§ã™ã€‚ã‚ãªãŸã¯ã“れをã€Free Software Foundation\n"
-+"ã«ã‚ˆã£ã¦ç™ºè¡Œã•ã‚ŒãŸ GNU 一般公衆利用許諾契約書 (ãƒãƒ¼ã‚¸ãƒ§ãƒ³ 2 ã‹ã€å¸Œæœ›\n"
-+"ã«ã‚ˆã£ã¦ã¯ãれ以é™ã®ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®ã†ã¡ã©ã‚Œã‹) ã®å®šã‚ã‚‹æ¡ä»¶ã®ä¸‹ã§å†é ’布\n"
-+"ã¾ãŸã¯æ”¹å¤‰ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚\n"
-+
-+#: src/gtk/MainView.cxx:1115
-+msgid ""
-+"ePDFView is distributes in the hope that it will be useful,\n"
-+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
-+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
-+"GNU General Public License for more details.\n"
-+msgstr ""
-+"ePDFView ã¯æœ‰ç”¨ã§ã‚ã‚‹ã“ã¨ã‚’願ã£ã¦é ’布ã•ã‚Œã¾ã™ãŒã€å…¨ãã®ç„¡ä¿è¨¼\n"
-+"ã§ã™ã€‚商業å¯èƒ½æ€§ã®ä¿è¨¼ã‚„特定ã®ç›®çš„ã¸ã®é©åˆæ€§ã¯ã€è¨€å¤–ã«ç¤ºã•ã‚ŒãŸ\n"
-+"ã‚‚ã®ã‚‚å«ã‚å…¨ã存在ã—ã¾ã›ã‚“。詳ã—ã㯠GNU 一般公衆利用許諾契約書\n"
-+"ã‚’ã”覧ãã ã•ã„。\n"
-+
-+#: src/gtk/MainView.cxx:1119
-+msgid ""
-+"You should have received a copy of the GNU General Public License\n"
-+"along with ePDFView; if not, write to the Free Software Foundation,Inc.,\n"
-+"59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n"
-+msgstr ""
-+"ã‚ãªãŸã¯ ePDFView ã¨å…±ã«ã€GNU 一般公衆利用許諾契約書ã®è¤‡è£½ç‰©ã‚’一部å—ã‘å–ã£"
-+"ãŸ\n"
-+"ã¯ãšã§ã™ã€‚ã‚‚ã—å—ã‘å–ã£ã¦ã„ãªã‘ã‚Œã°ã€the Free Software Foundation,Inc., 59\n"
-+"Temple Place, Suite 330, Boston, MA 02111-1307 USA ã¾ã§è«‹æ±‚ã—ã¦ãã ã•ã„。\n"
-+
-+#: src/gtk/MainView.cxx:1128
-+msgid "ePDFView"
-+msgstr "ePDFView"
-+
-+#: src/gtk/MainView.cxx:1135
-+msgid "translator-credits"
-+msgstr "nyu <nyu_8804 at yahoo dot co dot jp>"
-+
-+#: src/gtk/PreferencesView.cxx:32
-+msgid "Preferences"
-+msgstr "設定"
-+
-+#: src/gtk/PreferencesView.cxx:46
-+msgid "External Commands"
-+msgstr "外部コマンド"
-+
-+#: src/gtk/PreferencesView.cxx:105
-+msgid "Web _Browser:"
-+msgstr "ウェブブラウザ(_B)"
-+
-+#: src/gtk/PreferencesView.cxx:118
-+#, c-format
-+msgid "Note: <i>%s</i> will be replaced by the URI."
-+msgstr "Note: <i>%s</i> 㯠URI ã§ç½®ãæ›ãˆã‚‰ã‚Œã¾ã™ã€‚"
-+
-+#: src/gtk/PrintView.cxx:51
-+msgid "Print"
-+msgstr "å°åˆ·"
-+
-+#: src/gtk/PrintView.cxx:69 src/gtk/PrintView.cxx:659
-+msgid "Printer"
-+msgstr "プリンタ"
-+
-+#: src/gtk/PrintView.cxx:74
-+msgid "Job"
-+msgstr "ジョブ"
-+
-+#: src/gtk/PrintView.cxx:79
-+msgid "Paper"
-+msgstr "用紙"
-+
-+#: src/gtk/PrintView.cxx:359
-+msgid "<b>Print Range</b>"
-+msgstr "<b>å°åˆ·ã™ã‚‹ç¯„囲</b>"
-+
-+#: src/gtk/PrintView.cxx:377
-+msgid "_All pages"
-+msgstr "全ページ(_A)"
-+
-+#: src/gtk/PrintView.cxx:380
-+msgid "_Range:"
-+msgstr "範囲(_R):"
-+
-+#: src/gtk/PrintView.cxx:392
-+msgid "<b>Page Set</b>"
-+msgstr "<b>ページセット</b>"
-+
-+#: src/gtk/PrintView.cxx:408
-+msgid "A_ll pages"
-+msgstr "全ページ(_L)"
-+
-+#: src/gtk/PrintView.cxx:412
-+msgid "O_dd pages"
-+msgstr "奇数ページ(_D)"
-+
-+#: src/gtk/PrintView.cxx:416
-+msgid "_Even pages"
-+msgstr "å¶æ•°ãƒšãƒ¼ã‚¸(_E)"
-+
-+#: src/gtk/PrintView.cxx:420
-+msgid "<b>Copies</b>"
-+msgstr "<b>コピー</b>"
-+
-+#: src/gtk/PrintView.cxx:437
-+msgid "N_umber of copies:"
-+msgstr "コピーã®æ•°(_U):"
-+
-+#: src/gtk/PrintView.cxx:444
-+msgid "C_ollate"
-+msgstr "ページをæƒãˆã‚‹(_O)"
-+
-+#: src/gtk/PrintView.cxx:465
-+msgid "<b>Paper and Layout</b>"
-+msgstr "<b>用紙ã¨ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆ</b>"
-+
-+#: src/gtk/PrintView.cxx:482
-+msgid "Paper _Size:"
-+msgstr "用紙サイズ(_S):"
-+
-+#: src/gtk/PrintView.cxx:508
-+msgid "Page _orientation:"
-+msgstr "用紙ã®å‘ã(_O):"
-+
-+#: src/gtk/PrintView.cxx:539
-+msgid "_Layout:"
-+msgstr "レイアウト(_L):"
-+
-+#: src/gtk/PrintView.cxx:568
-+msgid "<b>Output</b>"
-+msgstr "<b>出力</b>"
-+
-+#: src/gtk/PrintView.cxx:585
-+msgid "_Mode:"
-+msgstr "モード(_M):"
-+
-+#: src/gtk/PrintView.cxx:613
-+msgid "_Resolution:"
-+msgstr "解åƒåº¦(_R):"
-+
-+#: src/gtk/PrintView.cxx:668
-+msgid "State"
-+msgstr "状態"
-+
-+#: src/gtk/PrintView.cxx:677
-+msgid "Jobs"
-+msgstr "ジョブ"
-+
-+#: src/gtk/PrintView.cxx:686
-+msgid "Location"
-+msgstr "場所"
-+
-+#: src/gtk/PrintView.cxx:717
-+msgid "Plain"
-+msgstr "通常"
-+
-+#: src/gtk/PrintView.cxx:723
-+msgid "2 pages in 1"
-+msgstr "1 ç”»é¢ã« 2 ページ"
-+
-+#: src/gtk/PrintView.cxx:729
-+msgid "4 pages in 1"
-+msgstr "1 ç”»é¢ã« 4 ページ"
-+
-+#: src/gtk/PrintView.cxx:744
-+msgid "Portrait"
-+msgstr "縦置ã"
-+
-+#: src/gtk/PrintView.cxx:750
-+msgid "Landscape"
-+msgstr "横置ã"
-+
-+#: src/gtk/StockIcons.cxx:40
-+msgid "Find _Next"
-+msgstr "次を検索(_N)"
-+
-+#: src/gtk/StockIcons.cxx:41
-+msgid "Find _Previous"
-+msgstr "å‰ã‚’検索(_P)"
-diff -Nurd epdfview-0.1.6-svn/po/LINGUAS epdfview/po/LINGUAS
---- epdfview-0.1.6-svn/po/LINGUAS 2008-07-13 12:57:47.543198000 +0200
-+++ epdfview/po/LINGUAS 2008-07-13 12:55:55.073198000 +0200
-@@ -1,2 +1,2 @@
- # Set of available languages.
--ca de el es fr pl ru vi zh_TW
-+ca cs de el es fr ja it pl pt_BR pt_PT ru sv vi zh_CN zh_TW
-diff -Nurd epdfview-0.1.6-svn/po/pl.po epdfview/po/pl.po
---- epdfview-0.1.6-svn/po/pl.po 2008-07-13 12:57:47.523198000 +0200
-+++ epdfview/po/pl.po 2008-07-13 12:55:55.073198000 +0200
-@@ -1,19 +1,22 @@
-+# translation of pl.po to
- # epdfview Polish translation
- # Copyright (C) 2006 Emma's Software
- # This file is distributed under the same license as the epdfview package.
- # Wojciech Myrda <vojcek@tlen.pl>, 2006.
-+# Piotr Pacholak <obi.gts@o2.pl>, 2007.
- #
- msgid ""
- msgstr ""
--"Project-Id-Version: ePDFView 0.1.5\n"
-+"Project-Id-Version: pl\n"
- "Report-Msgid-Bugs-To: jordi@emma-soft.com\n"
--"POT-Creation-Date: 2007-02-26 17:47+0100\n"
--"PO-Revision-Date: 2006-05-13 00:40+0100\n"
--"Last-Translator: Wojciech Myrda <vojcek@tlen.pl>\n"
--"Language-Team: Polish <none@none.org>\n"
-+"POT-Creation-Date: 2008-04-14 13:27+0200\n"
-+"PO-Revision-Date: 2007-06-25 16:05+0200\n"
-+"Last-Translator: Piotr Pacholak <obi.gts@gmail.com>\n"
-+"Language-Team: <pl@li.org>\n"
- "MIME-Version: 1.0\n"
- "Content-Type: text/plain; charset=UTF-8\n"
- "Content-Transfer-Encoding: 8bit\n"
-+"X-Generator: KBabel 1.11.4\n"
-
- #: src/FindPter.cxx:187
- msgid "No Results Found!"
-@@ -38,7 +41,7 @@
-
- #: src/IDocument.cxx:91
- msgid "The PDF file is damaged and can't be repaired."
--msgstr "Plik PDF jest uszkodzony i niemoże zostać naprawiony.."
-+msgstr "Plik PDF jest uszkodzony i nie może zostać naprawiony.."
-
- #: src/IDocument.cxx:94
- msgid "The file is encrypted and the password was incorrect or not supplied."
-@@ -47,7 +50,7 @@
-
- #: src/IDocument.cxx:97
- msgid "Nonexistent or invalid highlight file."
--msgstr "Zaznaczony plik niestnieje lub jest nieprawidłowy."
-+msgstr "Zaznaczony plik nie istnieje lub jest nieprawidłowy."
-
- #: src/IDocument.cxx:100
- msgid "Invalid printer."
-@@ -74,11 +77,11 @@
- msgid "Unknown error (%d)."
- msgstr "Nieznany błąd (%d)."
-
--#: src/main.cxx:38
-+#: src/main.cxx:59
- msgid "[FILE] - view PDF documents"
- msgstr "[PLIK] - przeglÄ…dnij pliki PDF"
-
--#: src/main.cxx:51 src/MainPter.cxx:153
-+#: src/main.cxx:72 src/MainPter.cxx:153
- msgid "PDF Viewer"
- msgstr "PrzeglÄ…darka PDF"
-
-@@ -92,7 +95,7 @@
- msgid "Loading file %s..."
- msgstr "Wczytywanie pliku %s..."
-
--#: src/MainPter.cxx:413 src/MainPter.cxx:886
-+#: src/MainPter.cxx:413 src/MainPter.cxx:892
- #, c-format
- msgid "of %d"
- msgstr "z %d"
-@@ -102,39 +105,47 @@
- msgid "Saving document to %s..."
- msgstr "Zapisywanie dokumentu do %s..."
-
--#: src/MainPter.cxx:826 src/MainPter.cxx:865
-+#: src/MainPter.cxx:832 src/MainPter.cxx:871
- msgid "Error Loading File"
- msgstr "BÅ‚Ä…d w wczytywaniu pliku"
-
--#: src/MainPter.cxx:866
-+#: src/MainPter.cxx:872
- msgid "The password you have supplied is not a valid password for this file."
- msgstr "Podane przez ciebie hasło do tego pliku jest nieprawidłowe."
-
--#: src/MainPter.cxx:947
-+#: src/MainPter.cxx:953
- msgid "Error Saving File"
- msgstr "BÅ‚Ä…d w zapisywaniu pliku"
-
--#: src/PagePter.cxx:292
-+#: src/PagePter.cxx:338
- msgid "Loading..."
- msgstr "Wczytywanie..."
-
--#: src/PrintPter.cxx:295
-+#: src/PrintPter.cxx:252
-+msgid "A4"
-+msgstr ""
-+
-+#: src/PrintPter.cxx:280
-+msgid "300 DPI"
-+msgstr ""
-+
-+#: src/PrintPter.cxx:308
- msgid "Grayscale"
- msgstr "Skala szarości"
-
--#: src/PrintPter.cxx:395
-+#: src/PrintPter.cxx:409
- msgid "Idle"
- msgstr "Bezczynny"
-
--#: src/PrintPter.cxx:398
-+#: src/PrintPter.cxx:412
- msgid "Stopped"
- msgstr "Zatrzymany"
-
--#: src/PrintPter.cxx:401
-+#: src/PrintPter.cxx:415
- msgid "Processing"
- msgstr "Przetwarzanie"
-
--#: src/PrintPter.cxx:404
-+#: src/PrintPter.cxx:418
- msgid "Unknown"
- msgstr "Nieznany"
-
-@@ -144,251 +155,267 @@
- "Failed to load document '%s'.\n"
- "%s\n"
- msgstr ""
--"Niemożna wczytać dokumentu '%s'.\n"
-+"Nie można wczytać dokumentu '%s'.\n"
- "%s\n"
-
- #: src/gtk/FindView.cxx:51
- msgid "Find:"
- msgstr "Znajdź:"
-
--#: src/gtk/MainView.cxx:87
-+#: src/gtk/MainView.cxx:89
- msgid "_File"
- msgstr "_Plik"
-
--#: src/gtk/MainView.cxx:88
-+#: src/gtk/MainView.cxx:90
- msgid "_Edit"
- msgstr "_Edytuj"
-
--#: src/gtk/MainView.cxx:89
-+#: src/gtk/MainView.cxx:91
- msgid "_View"
- msgstr "_Widok"
-
--#: src/gtk/MainView.cxx:90
-+#: src/gtk/MainView.cxx:92
- msgid "_Go"
--msgstr "_Przejdź"
-+msgstr "P_rzejdź"
-
--#: src/gtk/MainView.cxx:91
-+#: src/gtk/MainView.cxx:93
- msgid "_Help"
--msgstr "_Pomoc"
-+msgstr "Pomo_c"
-
--#: src/gtk/MainView.cxx:93
-+#: src/gtk/MainView.cxx:95
- msgid "_Open"
- msgstr "_Otwórz"
-
--#: src/gtk/MainView.cxx:94
-+#: src/gtk/MainView.cxx:96
- msgid "Open a PDF document"
- msgstr "Otwórz dokument PDF"
-
--#: src/gtk/MainView.cxx:97
-+#: src/gtk/MainView.cxx:99
- msgid "_Reload"
- msgstr "_Przeładuj"
-
--#: src/gtk/MainView.cxx:98
-+#: src/gtk/MainView.cxx:100
- msgid "Reload the current document"
- msgstr "Przeładuj obecny dokument"
-
--#: src/gtk/MainView.cxx:101
-+#: src/gtk/MainView.cxx:103
- msgid "_Save a Copy..."
- msgstr "_Zapisz KopiÄ™..."
-
--#: src/gtk/MainView.cxx:102
-+#: src/gtk/MainView.cxx:104
- msgid "Save a copy of the current document"
- msgstr "Zapisz kopiÄ™ obecnego dokumentu"
-
--#: src/gtk/MainView.cxx:106
-+#: src/gtk/MainView.cxx:108
- msgid "_Print..."
- msgstr "_Drukuj..."
-
--#: src/gtk/MainView.cxx:107
-+#: src/gtk/MainView.cxx:109
- msgid "Print the current document"
- msgstr "Wydrukuj obecny dokument"
-
--#: src/gtk/MainView.cxx:111
-+#: src/gtk/MainView.cxx:113
- msgid "_Close"
--msgstr "_Zamknij"
-+msgstr "Za_mknij"
-
--#: src/gtk/MainView.cxx:112
-+#: src/gtk/MainView.cxx:114
- msgid "Close this window"
- msgstr "Zamknij to okno"
-
--#: src/gtk/MainView.cxx:115
-+#: src/gtk/MainView.cxx:117
- msgid "_Find"
- msgstr "_Znajdź"
-
--#: src/gtk/MainView.cxx:116
-+#: src/gtk/MainView.cxx:118
- msgid "Find a word in the document"
- msgstr "Znajdź słowo w tym dokumencie"
-
--#: src/gtk/MainView.cxx:119
-+#: src/gtk/MainView.cxx:121
- msgid "Preferences..."
- msgstr "Ustawienia"
-
--#: src/gtk/MainView.cxx:120
-+#: src/gtk/MainView.cxx:122
- msgid "Change the application's preferences"
- msgstr "Zmień ustawienia aplikacji"
-
--#: src/gtk/MainView.cxx:123
-+#: src/gtk/MainView.cxx:125
- msgid "Zoom _In"
--msgstr "_Zbliż"
-+msgstr "Po_większ"
-
--#: src/gtk/MainView.cxx:124
-+#: src/gtk/MainView.cxx:126
- msgid "Enlarge the document"
- msgstr "Powiększ dokument"
-
--#: src/gtk/MainView.cxx:127
-+#: src/gtk/MainView.cxx:129
- msgid "Zoom _Out"
--msgstr "_Oddal"
-+msgstr "Po_mniejsz"
-
--#: src/gtk/MainView.cxx:128
-+#: src/gtk/MainView.cxx:130
- msgid "Shrink the document"
- msgstr "Zmniejsz dokument"
-
--#: src/gtk/MainView.cxx:131 src/gtk/StockIcons.cxx:43
-+#: src/gtk/MainView.cxx:133 src/gtk/StockIcons.cxx:43
- msgid "Rotate _Right"
--msgstr "Obruć w _prawo"
-+msgstr "Obróć w _prawo"
-
--#: src/gtk/MainView.cxx:132
-+#: src/gtk/MainView.cxx:134
- msgid "Rotate the document 90 degrees clockwise"
--msgstr "Obruć dokument o 90 stopni zgodnie z wskazówkami zegara"
-+msgstr "Obróć dokument o 90 stopni zgodnie z wskazówkami zegara"
-
--#: src/gtk/MainView.cxx:135 src/gtk/StockIcons.cxx:42
-+#: src/gtk/MainView.cxx:137 src/gtk/StockIcons.cxx:42
- msgid "Rotate _Left"
--msgstr "Obruć w _lewo"
-+msgstr "Obróć w _lewo"
-
--#: src/gtk/MainView.cxx:136
-+#: src/gtk/MainView.cxx:138
- msgid "Rotate the document 90 degrees counter-clockwise"
--msgstr "Obruć dokument o 90 stopni przeciwnie do wskazówek zegara"
-+msgstr "Obróć dokument o 90 stopni przeciwnie do wskazówek zegara"
-
--#: src/gtk/MainView.cxx:139
-+#: src/gtk/MainView.cxx:141
- msgid "_First Page"
--msgstr "_Pierwsza Strona"
-+msgstr "Pie_rwsza Strona"
-
--#: src/gtk/MainView.cxx:140
-+#: src/gtk/MainView.cxx:142
- msgid "Go to the first page"
- msgstr "Przejdź do strony pierwszej"
-
--#: src/gtk/MainView.cxx:143
-+#: src/gtk/MainView.cxx:145
- msgid "_Next Page"
- msgstr "_Następna Strona"
-
--#: src/gtk/MainView.cxx:144
-+#: src/gtk/MainView.cxx:146
- msgid "Go to the next page"
- msgstr "Przejdź do strony następnej"
-
--#: src/gtk/MainView.cxx:147
-+#: src/gtk/MainView.cxx:149
- msgid "_Previous Page"
- msgstr "_Poprzednia Strona"
-
--#: src/gtk/MainView.cxx:148
-+#: src/gtk/MainView.cxx:150
- msgid "Go to the previous page"
- msgstr "Przejdź do strony poprzedniej"
-
--#: src/gtk/MainView.cxx:151
-+#: src/gtk/MainView.cxx:153
- msgid "_Last Page"
- msgstr "_Ostatnia Strona"
-
--#: src/gtk/MainView.cxx:152
-+#: src/gtk/MainView.cxx:154
- msgid "Go to the last page"
- msgstr "Przejdź do strony ostatniej"
-
--#: src/gtk/MainView.cxx:155
-+#: src/gtk/MainView.cxx:157
- msgid "_About"
- msgstr "_O programie"
-
--#: src/gtk/MainView.cxx:156
-+#: src/gtk/MainView.cxx:158
- msgid "Display application's credits"
- msgstr "Pokaż informację o programie"
-
--#: src/gtk/MainView.cxx:166
-+#: src/gtk/MainView.cxx:175
- msgid "F_ull screen"
--msgstr "_Pełny ekran"
-+msgstr "Pełny _ekran"
-
--#: src/gtk/MainView.cxx:167
-+#: src/gtk/MainView.cxx:176
- msgid "Toggle full screen window"
- msgstr "Pełny ekran"
-
--#: src/gtk/MainView.cxx:170
-+#: src/gtk/MainView.cxx:179
- msgid "Show _Toolbar"
- msgstr "Pokaż pasek _narzędzi"
-
--#: src/gtk/MainView.cxx:171
-+#: src/gtk/MainView.cxx:180
- msgid "Show or hide the toolbar"
- msgstr "Pokaż lub ukryj pasek narzędzi"
-
--#: src/gtk/MainView.cxx:174
-+#: src/gtk/MainView.cxx:183
- msgid "Show _Statusbar"
--msgstr "Pokaż pasek stanu"
-+msgstr "Pokaż pasek s_tanu"
-
--#: src/gtk/MainView.cxx:175
-+#: src/gtk/MainView.cxx:184
- msgid "Show or hide the statusbar"
- msgstr "Pokaż lub ukryj pasek stanu"
-
--#: src/gtk/MainView.cxx:178
-+#: src/gtk/MainView.cxx:187
- msgid "Show I_ndex"
- msgstr "Pokaż I_ndex"
-
--#: src/gtk/MainView.cxx:179
-+#: src/gtk/MainView.cxx:188
- msgid "Show or hide the document's outline"
- msgstr "Pokaż lub ukryj Index dokumentu"
-
--#: src/gtk/MainView.cxx:182
-+#: src/gtk/MainView.cxx:191
- msgid "Zoom to _Fit"
- msgstr "_Dopasuj do okna"
-
--#: src/gtk/MainView.cxx:183
-+#: src/gtk/MainView.cxx:192
- msgid "Make the current document fill the window"
- msgstr "Powiększa obecny dokument do rozmiaru okna"
-
--#: src/gtk/MainView.cxx:186 src/gtk/StockIcons.cxx:44
-+#: src/gtk/MainView.cxx:195 src/gtk/StockIcons.cxx:44
- msgid "Zoom to _Width"
- msgstr "Dopasuj do _szerokości"
-
--#: src/gtk/MainView.cxx:187
-+#: src/gtk/MainView.cxx:196
- msgid "Make the current document fill the window width"
- msgstr "Powiększa obecny dokument do szerokości okna"
-
--#: src/gtk/MainView.cxx:278
-+#: src/gtk/MainView.cxx:202
-+msgid "Scroll"
-+msgstr ""
-+
-+#: src/gtk/MainView.cxx:203
-+msgid "Mouse scroll page"
-+msgstr ""
-+
-+#: src/gtk/MainView.cxx:205
-+msgid "Select Text"
-+msgstr ""
-+
-+#: src/gtk/MainView.cxx:206
-+msgid " Mouse select text"
-+msgstr ""
-+
-+#: src/gtk/MainView.cxx:320
- msgid "Open PDF File"
- msgstr "Otwórz plik PDF"
-
--#: src/gtk/MainView.cxx:298 src/gtk/MainView.cxx:412
-+#: src/gtk/MainView.cxx:340 src/gtk/MainView.cxx:454
- msgid "Portable Document Format (PDF) Files"
- msgstr "Pliki (PDF)"
-
--#: src/gtk/MainView.cxx:310 src/gtk/MainView.cxx:424
-+#: src/gtk/MainView.cxx:352 src/gtk/MainView.cxx:466
- msgid "All Files"
- msgstr "Wszystkie Pliki"
-
--#: src/gtk/MainView.cxx:362
-+#: src/gtk/MainView.cxx:404
- msgid "Password"
- msgstr "Hasło"
-
--#: src/gtk/MainView.cxx:386
-+#: src/gtk/MainView.cxx:428
- msgid "Save PDF File"
- msgstr "Zapisz Plik PDF"
-
--#: src/gtk/MainView.cxx:816
-+#: src/gtk/MainView.cxx:858
- msgid "Page"
- msgstr "Strona"
-
--#: src/gtk/MainView.cxx:826
-+#: src/gtk/MainView.cxx:868
- msgid "of 0"
- msgstr "z 0"
-
--#: src/gtk/MainView.cxx:879
-+#: src/gtk/MainView.cxx:921
- msgid "Index"
- msgstr "Index"
-
--#: src/gtk/MainView.cxx:946 src/gtk/MainView.cxx:956
-+#: src/gtk/MainView.cxx:991 src/gtk/MainView.cxx:1001
- #, c-format
- msgid "Error building UI manager: %s\n"
- msgstr "Błąd podczas wczytywania menadżera UI: %s\n"
-
--#: src/gtk/MainView.cxx:1056
-+#: src/gtk/MainView.cxx:1108
- msgid "A lightweight PDF viewer"
- msgstr "Lekka przeglądarka plików PDF"
-
--#: src/gtk/MainView.cxx:1059
-+#: src/gtk/MainView.cxx:1111
- msgid ""
- "ePDFView is free software; you can redistribute it and/or modify\n"
- "it under the terms of the GNU General Public License as published by\n"
-@@ -400,7 +427,7 @@
- "opublikowanymi poprzez Free Software Foundation; zarówno wesją drugą "
- "Licencji,lub (wedle własnego uznania) wersjami późniejszymi.\n"
-
--#: src/gtk/MainView.cxx:1063
-+#: src/gtk/MainView.cxx:1115
- msgid ""
- "ePDFView is distributes in the hope that it will be useful,\n"
- "but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
-@@ -412,7 +439,7 @@
- "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.PrzeglÄ…dnij GNU General "
- "Public License by dowiedzieć się więcej.\n"
-
--#: src/gtk/MainView.cxx:1067
-+#: src/gtk/MainView.cxx:1119
- msgid ""
- "You should have received a copy of the GNU General Public License\n"
- "along with ePDFView; if not, write to the Free Software Foundation,Inc.,\n"
-@@ -424,11 +451,11 @@
- "Boston, MA 02111-1307\n"
- "USA\n"
-
--#: src/gtk/MainView.cxx:1076
-+#: src/gtk/MainView.cxx:1128
- msgid "ePDFView"
- msgstr "ePDFView"
-
--#: src/gtk/MainView.cxx:1083
-+#: src/gtk/MainView.cxx:1135
- msgid "translator-credits"
- msgstr ""
-
-@@ -451,7 +478,7 @@
-
- #: src/gtk/PrintView.cxx:51
- msgid "Print"
--msgstr "Drukuj"
-+msgstr "Wydrukuj"
-
- #: src/gtk/PrintView.cxx:69 src/gtk/PrintView.cxx:659
- msgid "Printer"
-@@ -479,19 +506,19 @@
-
- #: src/gtk/PrintView.cxx:392
- msgid "<b>Page Set</b>"
--msgstr "<b>Wybrane Strony</b>"
-+msgstr "<b>Wybrane strony</b>"
-
- #: src/gtk/PrintView.cxx:408
- msgid "A_ll pages"
--msgstr "_Wszystkie strony"
-+msgstr "W_szystkie strony"
-
- #: src/gtk/PrintView.cxx:412
- msgid "O_dd pages"
--msgstr "Strony _Nieparzyste"
-+msgstr "Strony _nieparzyste"
-
- #: src/gtk/PrintView.cxx:416
- msgid "_Even pages"
--msgstr "Strony parzyste"
-+msgstr "Strony pa_rzyste"
-
- #: src/gtk/PrintView.cxx:420
- msgid "<b>Copies</b>"
-@@ -503,7 +530,7 @@
-
- #: src/gtk/PrintView.cxx:444
- msgid "C_ollate"
--msgstr ""
-+msgstr "_Posegregowane"
-
- #: src/gtk/PrintView.cxx:465
- msgid "<b>Paper and Layout</b>"
-diff -Nurd epdfview-0.1.6-svn/po/pt_BR.po epdfview/po/pt_BR.po
---- epdfview-0.1.6-svn/po/pt_BR.po 1970-01-01 01:00:00.000000000 +0100
-+++ epdfview/po/pt_BR.po 2008-07-13 12:55:55.043198000 +0200
-@@ -0,0 +1,597 @@
-+# Spanish translations for ePDFView package
-+# Traducciones al español para el paquete ePDFView.
-+# Copyright (C) 2006 Emma's Software
-+# This file is distributed under the same license as the ePDFView package.
-+# <jordi@emma-soft.com>, 2006.
-+#
-+msgid ""
-+msgstr ""
-+"Project-Id-Version: ePDFView 0.1.4\n"
-+"Report-Msgid-Bugs-To: jordi@emma-soft.com\n"
-+"POT-Creation-Date: 2008-04-14 13:27+0200\n"
-+"PO-Revision-Date: 2008-05-28 12:13-0300\n"
-+"Last-Translator: \n"
-+"Language-Team: Spanish <es@li.org>\n"
-+"MIME-Version: 1.0\n"
-+"Content-Type: text/plain; charset=UTF-8\n"
-+"Content-Transfer-Encoding: 8bit\n"
-+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-+
-+#: src/FindPter.cxx:187
-+msgid "No Results Found!"
-+msgstr "Não foram encontrados resultados!"
-+
-+#: src/FindPter.cxx:195
-+#, c-format
-+msgid "Searching in page %d of %d..."
-+msgstr "Localizando na página %d de %d..."
-+
-+#: src/IDocument.cxx:82
-+msgid "No error."
-+msgstr "Nenhum erro."
-+
-+#: src/IDocument.cxx:85
-+msgid "File not found."
-+msgstr "Arquivo não encontrado."
-+
-+#: src/IDocument.cxx:88
-+msgid "Couldn't read the page catalog."
-+msgstr "Catálogo de página não pode ser lido."
-+
-+#: src/IDocument.cxx:91
-+msgid "The PDF file is damaged and can't be repaired."
-+msgstr "O arquivo PDF está corrompido e não pode ser recuperado."
-+
-+#: src/IDocument.cxx:94
-+msgid "The file is encrypted and the password was incorrect or not supplied."
-+msgstr "O arquivo está encriptado e a senha incorreta"
-+
-+#: src/IDocument.cxx:97
-+msgid "Nonexistent or invalid highlight file."
-+msgstr "O arquivo não existe ou é inválido."
-+
-+#: src/IDocument.cxx:100
-+msgid "Invalid printer."
-+msgstr "Impressora inválida."
-+
-+#: src/IDocument.cxx:103
-+msgid "Error during printing."
-+msgstr "Erro durante a impressão."
-+
-+#: src/IDocument.cxx:106
-+msgid "The PDF file doesn't allow that operation."
-+msgstr "O arquivo PDF não permite esta operação."
-+
-+#: src/IDocument.cxx:109
-+msgid "Invalid page number."
-+msgstr "Número de página inválido."
-+
-+#: src/IDocument.cxx:112
-+msgid "File I/O error."
-+msgstr "Erro I/O do arquivo."
-+
-+#: src/IDocument.cxx:115
-+#, c-format
-+msgid "Unknown error (%d)."
-+msgstr "Erro desconhecido (%d)."
-+
-+#: src/main.cxx:59
-+msgid "[FILE] - view PDF documents"
-+msgstr "[ARQUIVO] - mostra documentos PDF"
-+
-+#: src/main.cxx:72
-+#: src/MainPter.cxx:153
-+msgid "PDF Viewer"
-+msgstr "Visualizador de PDF"
-+
-+#: src/MainPter.cxx:233
-+#, c-format
-+msgid "Reloading file %s..."
-+msgstr "Recarregando arquivo %s..."
-+
-+#: src/MainPter.cxx:237
-+#, c-format
-+msgid "Loading file %s..."
-+msgstr "Carregando arquivo %s..."
-+
-+#: src/MainPter.cxx:413
-+#: src/MainPter.cxx:892
-+#, c-format
-+msgid "of %d"
-+msgstr "de %d"
-+
-+#: src/MainPter.cxx:588
-+#, c-format
-+msgid "Saving document to %s..."
-+msgstr "Salvando documento em %s..."
-+
-+#: src/MainPter.cxx:832
-+#: src/MainPter.cxx:871
-+msgid "Error Loading File"
-+msgstr "Erro ao carregar"
-+
-+#: src/MainPter.cxx:872
-+msgid "The password you have supplied is not a valid password for this file."
-+msgstr "Senha incorreta para este arquivo."
-+
-+#: src/MainPter.cxx:953
-+msgid "Error Saving File"
-+msgstr "Erro ao Salvar Arquivo"
-+
-+#: src/PagePter.cxx:338
-+msgid "Loading..."
-+msgstr "Carregando..."
-+
-+#: src/PrintPter.cxx:252
-+msgid "A4"
-+msgstr "A4"
-+
-+#: src/PrintPter.cxx:280
-+msgid "300 DPI"
-+msgstr "300 DPI"
-+
-+#: src/PrintPter.cxx:308
-+msgid "Grayscale"
-+msgstr "Escala de cinza"
-+
-+#: src/PrintPter.cxx:409
-+msgid "Idle"
-+msgstr "Escondido"
-+
-+#: src/PrintPter.cxx:412
-+msgid "Stopped"
-+msgstr "Parado"
-+
-+#: src/PrintPter.cxx:415
-+msgid "Processing"
-+msgstr "Processando"
-+
-+#: src/PrintPter.cxx:418
-+msgid "Unknown"
-+msgstr "Desconhecido"
-+
-+#: src/PDFDocument.cxx:272
-+#, c-format
-+msgid ""
-+"Failed to load document '%s'.\n"
-+"%s\n"
-+msgstr ""
-+"Falha ao abrir o documento '%s'.\n"
-+"%s\n"
-+
-+#: src/gtk/FindView.cxx:51
-+msgid "Find:"
-+msgstr "Localizar:"
-+
-+#: src/gtk/MainView.cxx:89
-+msgid "_File"
-+msgstr "_Arquivo"
-+
-+#: src/gtk/MainView.cxx:90
-+msgid "_Edit"
-+msgstr "_Editar"
-+
-+#: src/gtk/MainView.cxx:91
-+msgid "_View"
-+msgstr "_Ver"
-+
-+#: src/gtk/MainView.cxx:92
-+msgid "_Go"
-+msgstr "_Ir"
-+
-+#: src/gtk/MainView.cxx:93
-+msgid "_Help"
-+msgstr "A_juda"
-+
-+#: src/gtk/MainView.cxx:95
-+msgid "_Open"
-+msgstr "_Abrir"
-+
-+#: src/gtk/MainView.cxx:96
-+msgid "Open a PDF document"
-+msgstr "Abrir documento PDF"
-+
-+#: src/gtk/MainView.cxx:99
-+msgid "_Reload"
-+msgstr "_Recarregar"
-+
-+#: src/gtk/MainView.cxx:100
-+msgid "Reload the current document"
-+msgstr "Recarregar arquivo PDF atual"
-+
-+#: src/gtk/MainView.cxx:103
-+msgid "_Save a Copy..."
-+msgstr "_Salvar cópia..."
-+
-+#: src/gtk/MainView.cxx:104
-+msgid "Save a copy of the current document"
-+msgstr "Salvar cópia do documento atual"
-+
-+#: src/gtk/MainView.cxx:108
-+msgid "_Print..."
-+msgstr "_Imprimir"
-+
-+#: src/gtk/MainView.cxx:109
-+msgid "Print the current document"
-+msgstr "Imprimir documento atual"
-+
-+#: src/gtk/MainView.cxx:113
-+msgid "_Close"
-+msgstr "_Fechar"
-+
-+#: src/gtk/MainView.cxx:114
-+msgid "Close this window"
-+msgstr "Fechar esta janela"
-+
-+#: src/gtk/MainView.cxx:117
-+msgid "_Find"
-+msgstr "Locali_zar"
-+
-+#: src/gtk/MainView.cxx:118
-+msgid "Find a word in the document"
-+msgstr "Localizar uma palavra no documento"
-+
-+#: src/gtk/MainView.cxx:121
-+msgid "Preferences..."
-+msgstr "Preferências..."
-+
-+#: src/gtk/MainView.cxx:122
-+msgid "Change the application's preferences"
-+msgstr "Alterar preferências do aplicativo"
-+
-+#: src/gtk/MainView.cxx:125
-+msgid "Zoom _In"
-+msgstr "Au_mentar"
-+
-+#: src/gtk/MainView.cxx:126
-+msgid "Enlarge the document"
-+msgstr "Aumentar o documento"
-+
-+#: src/gtk/MainView.cxx:129
-+msgid "Zoom _Out"
-+msgstr "Diminui_r"
-+
-+#: src/gtk/MainView.cxx:130
-+msgid "Shrink the document"
-+msgstr "Diminuir o documento"
-+
-+#: src/gtk/MainView.cxx:133
-+#: src/gtk/StockIcons.cxx:43
-+msgid "Rotate _Right"
-+msgstr "Girar para a _direita"
-+
-+#: src/gtk/MainView.cxx:134
-+msgid "Rotate the document 90 degrees clockwise"
-+msgstr "Girar o documento 90 graus em sentido horário"
-+
-+#: src/gtk/MainView.cxx:137
-+#: src/gtk/StockIcons.cxx:42
-+msgid "Rotate _Left"
-+msgstr "Girar para a _esquerda"
-+
-+#: src/gtk/MainView.cxx:138
-+msgid "Rotate the document 90 degrees counter-clockwise"
-+msgstr "Girar o documento 90 graus em sentido anti-horário"
-+
-+#: src/gtk/MainView.cxx:141
-+msgid "_First Page"
-+msgstr "_Primeira página"
-+
-+#: src/gtk/MainView.cxx:142
-+msgid "Go to the first page"
-+msgstr "Ir para a primeira página"
-+
-+#: src/gtk/MainView.cxx:145
-+msgid "_Next Page"
-+msgstr "_Próxima página"
-+
-+#: src/gtk/MainView.cxx:146
-+msgid "Go to the next page"
-+msgstr "Ir para a próxima página"
-+
-+#: src/gtk/MainView.cxx:149
-+msgid "_Previous Page"
-+msgstr "Página _anterior"
-+
-+#: src/gtk/MainView.cxx:150
-+msgid "Go to the previous page"
-+msgstr "Ir para a página anterior"
-+
-+#: src/gtk/MainView.cxx:153
-+msgid "_Last Page"
-+msgstr "Ú_ltima página"
-+
-+#: src/gtk/MainView.cxx:154
-+msgid "Go to the last page"
-+msgstr "Ir para a última página"
-+
-+#: src/gtk/MainView.cxx:157
-+msgid "_About"
-+msgstr "_Sobre"
-+
-+#: src/gtk/MainView.cxx:158
-+msgid "Display application's credits"
-+msgstr "Mostrar créditos do aplicativo"
-+
-+#: src/gtk/MainView.cxx:175
-+msgid "F_ull screen"
-+msgstr "T_ela cheia"
-+
-+#: src/gtk/MainView.cxx:176
-+msgid "Toggle full screen window"
-+msgstr "Mudar para janela cheia"
-+
-+#: src/gtk/MainView.cxx:179
-+msgid "Show _Toolbar"
-+msgstr "Mostrar barras de _ferramentas"
-+
-+#: src/gtk/MainView.cxx:180
-+msgid "Show or hide the toolbar"
-+msgstr "Mostrar ou esconder a barra de ferramentas"
-+
-+#: src/gtk/MainView.cxx:183
-+msgid "Show _Statusbar"
-+msgstr "Mostrar barra de _status"
-+
-+#: src/gtk/MainView.cxx:184
-+msgid "Show or hide the statusbar"
-+msgstr "Mostrar ou esconder a barra de status"
-+
-+#: src/gtk/MainView.cxx:187
-+msgid "Show I_ndex"
-+msgstr "Mostrar í_ndice"
-+
-+#: src/gtk/MainView.cxx:188
-+msgid "Show or hide the document's outline"
-+msgstr "Mostrar ou esconder o índice do documento"
-+
-+#: src/gtk/MainView.cxx:191
-+msgid "Zoom to _Fit"
-+msgstr "Aj_ustar à janela"
-+
-+#: src/gtk/MainView.cxx:192
-+msgid "Make the current document fill the window"
-+msgstr "Ajustar documento à janela"
-+
-+#: src/gtk/MainView.cxx:195
-+#: src/gtk/StockIcons.cxx:44
-+msgid "Zoom to _Width"
-+msgstr "Ajustar à _largura da página"
-+
-+#: src/gtk/MainView.cxx:196
-+msgid "Make the current document fill the window width"
-+msgstr "Ajustar documento à largura da página"
-+
-+#: src/gtk/MainView.cxx:202
-+msgid "Scroll"
-+msgstr "Rolar"
-+
-+#: src/gtk/MainView.cxx:203
-+msgid "Mouse scroll page"
-+msgstr "Mouse rolar página"
-+
-+#: src/gtk/MainView.cxx:205
-+msgid "Select Text"
-+msgstr "Selecionar Texto"
-+
-+#: src/gtk/MainView.cxx:206
-+msgid " Mouse select text"
-+msgstr " Mouse selecionar texto"
-+
-+#: src/gtk/MainView.cxx:320
-+msgid "Open PDF File"
-+msgstr "Abrir arquivo PDF"
-+
-+#: src/gtk/MainView.cxx:340
-+#: src/gtk/MainView.cxx:454
-+msgid "Portable Document Format (PDF) Files"
-+msgstr "Arquivos em Portable Document Format (PDF)"
-+
-+#: src/gtk/MainView.cxx:352
-+#: src/gtk/MainView.cxx:466
-+msgid "All Files"
-+msgstr "Todos os arquivos"
-+
-+#: src/gtk/MainView.cxx:404
-+msgid "Password"
-+msgstr "Senha"
-+
-+#: src/gtk/MainView.cxx:428
-+msgid "Save PDF File"
-+msgstr "Salvar arquivo PDF"
-+
-+#: src/gtk/MainView.cxx:858
-+msgid "Page"
-+msgstr "Página"
-+
-+#: src/gtk/MainView.cxx:868
-+msgid "of 0"
-+msgstr "de 0"
-+
-+#: src/gtk/MainView.cxx:921
-+msgid "Index"
-+msgstr "Ãndice"
-+
-+#: src/gtk/MainView.cxx:991
-+#: src/gtk/MainView.cxx:1001
-+#, c-format
-+msgid "Error building UI manager: %s\n"
-+msgstr "Erro ao construir o administrador de IU: %s\n"
-+
-+#: src/gtk/MainView.cxx:1108
-+msgid "A lightweight PDF viewer"
-+msgstr "Visualizador leve de PDF"
-+
-+#: src/gtk/MainView.cxx:1111
-+msgid ""
-+"ePDFView is free software; you can redistribute it and/or modify\n"
-+"it under the terms of the GNU General Public License as published by\n"
-+"the Free Software Foundation; either version 2 of the License, or\n"
-+"(at your option) any later version.\n"
-+msgstr "O ePDFView é um software livre; você pode redistribuí-lo e/ou modificá-lo sob os termos da Licença Pública Geral GNU (GPL) como publicada pela Fundação do Software Livre; seja a versão 2 da Licença ou (se preferir) qualquer versão mais recente.\n"
-+
-+#: src/gtk/MainView.cxx:1115
-+msgid ""
-+"ePDFView is distributes in the hope that it will be useful,\n"
-+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
-+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
-+"GNU General Public License for more details.\n"
-+msgstr "O ePDFView é distribuído na esperança de que seja útil, mas SEM NENHUMA GARANTIA; até mesmo sem a garantia implicada de COMERCIALIZAÇÃO ou de ADAPTAÇÃO A UM PROPÓSITO EM PARTICULAR. Veja a Licença Pública Geral GNU (GPL) para mais detalhes.\n"
-+
-+#: src/gtk/MainView.cxx:1119
-+msgid ""
-+"You should have received a copy of the GNU General Public License\n"
-+"along with ePDFView; if not, write to the Free Software Foundation,Inc.,\n"
-+"59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n"
-+msgstr "Você deve ter recebido uma cópia da Licença Pública Geral GNU (GPL) junto com o ePDFView; se não, escreva para a Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n"
-+
-+#: src/gtk/MainView.cxx:1128
-+msgid "ePDFView"
-+msgstr "ePDFView"
-+
-+#: src/gtk/MainView.cxx:1135
-+msgid "translator-credits"
-+msgstr "Fábio Antunes"
-+
-+#: src/gtk/PreferencesView.cxx:32
-+msgid "Preferences"
-+msgstr "Preferências"
-+
-+#: src/gtk/PreferencesView.cxx:46
-+msgid "External Commands"
-+msgstr "Comandos Externos"
-+
-+#: src/gtk/PreferencesView.cxx:105
-+msgid "Web _Browser:"
-+msgstr "Navegador da _Web:"
-+
-+#: src/gtk/PreferencesView.cxx:118
-+#, c-format
-+msgid "Note: <i>%s</i> will be replaced by the URI."
-+msgstr "Nota: O parámetro <i>%s</i> deve ser substituído pela URL."
-+
-+#: src/gtk/PrintView.cxx:51
-+msgid "Print"
-+msgstr "Imprimir"
-+
-+#: src/gtk/PrintView.cxx:69
-+#: src/gtk/PrintView.cxx:659
-+msgid "Printer"
-+msgstr "Impressora"
-+
-+#: src/gtk/PrintView.cxx:74
-+msgid "Job"
-+msgstr "Trabalho"
-+
-+#: src/gtk/PrintView.cxx:79
-+msgid "Paper"
-+msgstr "Página"
-+
-+#: src/gtk/PrintView.cxx:359
-+msgid "<b>Print Range</b>"
-+msgstr "<b>Escala de impressão</b>"
-+
-+#: src/gtk/PrintView.cxx:377
-+msgid "_All pages"
-+msgstr "Tod_as as páginas"
-+
-+#: src/gtk/PrintView.cxx:380
-+msgid "_Range:"
-+msgstr "_Escala:"
-+
-+#: src/gtk/PrintView.cxx:392
-+msgid "<b>Page Set</b>"
-+msgstr "<b>Conjunto de páginas</b>"
-+
-+#: src/gtk/PrintView.cxx:408
-+msgid "A_ll pages"
-+msgstr "_Todas as páginas"
-+
-+#: src/gtk/PrintView.cxx:412
-+msgid "O_dd pages"
-+msgstr "Páginas _ímpares"
-+
-+#: src/gtk/PrintView.cxx:416
-+msgid "_Even pages"
-+msgstr "Páginas pare_s"
-+
-+#: src/gtk/PrintView.cxx:420
-+msgid "<b>Copies</b>"
-+msgstr "<b>Cópias</b>"
-+
-+#: src/gtk/PrintView.cxx:437
-+msgid "N_umber of copies:"
-+msgstr "_Número de cópias:"
-+
-+#: src/gtk/PrintView.cxx:444
-+msgid "C_ollate"
-+msgstr "O_rganizar"
-+
-+#: src/gtk/PrintView.cxx:465
-+msgid "<b>Paper and Layout</b>"
-+msgstr "<b>Página e disposição</b>"
-+
-+#: src/gtk/PrintView.cxx:482
-+msgid "Paper _Size:"
-+msgstr "_Tamanho da página:"
-+
-+#: src/gtk/PrintView.cxx:508
-+msgid "Page _orientation:"
-+msgstr "_Orientação:"
-+
-+#: src/gtk/PrintView.cxx:539
-+msgid "_Layout:"
-+msgstr "_Disposição:"
-+
-+#: src/gtk/PrintView.cxx:568
-+msgid "<b>Output</b>"
-+msgstr "<b>Saída</b>"
-+
-+#: src/gtk/PrintView.cxx:585
-+msgid "_Mode:"
-+msgstr "_Modo:"
-+
-+#: src/gtk/PrintView.cxx:613
-+msgid "_Resolution:"
-+msgstr "_Resolução:"
-+
-+#: src/gtk/PrintView.cxx:668
-+msgid "State"
-+msgstr "Estado"
-+
-+#: src/gtk/PrintView.cxx:677
-+msgid "Jobs"
-+msgstr "Trabalhos"
-+
-+#: src/gtk/PrintView.cxx:686
-+msgid "Location"
-+msgstr "Local"
-+
-+#: src/gtk/PrintView.cxx:717
-+msgid "Plain"
-+msgstr "Plano"
-+
-+#: src/gtk/PrintView.cxx:723
-+msgid "2 pages in 1"
-+msgstr "2 páginas em 1"
-+
-+#: src/gtk/PrintView.cxx:729
-+msgid "4 pages in 1"
-+msgstr "4 páginas em 1"
-+
-+#: src/gtk/PrintView.cxx:744
-+msgid "Portrait"
-+msgstr "Retrato"
-+
-+#: src/gtk/PrintView.cxx:750
-+msgid "Landscape"
-+msgstr "Paisagem"
-+
-+#: src/gtk/StockIcons.cxx:40
-+msgid "Find _Next"
-+msgstr "Localizar _Próxima"
-+
-+#: src/gtk/StockIcons.cxx:41
-+msgid "Find _Previous"
-+msgstr "Localizar _Anterior"
-+
-diff -Nurd epdfview-0.1.6-svn/po/pt_PT.po epdfview/po/pt_PT.po
---- epdfview-0.1.6-svn/po/pt_PT.po 1970-01-01 01:00:00.000000000 +0100
-+++ epdfview/po/pt_PT.po 2008-07-13 12:55:55.083198000 +0200
-@@ -0,0 +1,597 @@
-+# Portuguese translation for ePDFView package
-+# Copyright (C) 2006 Emma's Software
-+# This file is distributed under the same license as the ePDFView package.
-+# <jordi@emma-soft.com>, 2006.
-+#
-+msgid ""
-+msgstr ""
-+"Project-Id-Version: ePDFView 0.1.6\n"
-+"Report-Msgid-Bugs-To: jordi@emma-soft.com\n"
-+"POT-Creation-Date: 2008-04-14 13:27+0200\n"
-+"PO-Revision-Date: 2008-01-06 18:48+0100\n"
-+"Last-Translator: Nuno Miguel <nunis@netcabo.pt>\n"
-+"Language-Team: \n"
-+"MIME-Version: 1.0\n"
-+"Content-Type: text/plain; charset=UTF-8\n"
-+"Content-Transfer-Encoding: 8bit\n"
-+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-+
-+#: src/FindPter.cxx:187
-+msgid "No Results Found!"
-+msgstr "Nenhum Resultado Encontrado!"
-+
-+#: src/FindPter.cxx:195
-+#, c-format
-+msgid "Searching in page %d of %d..."
-+msgstr "Procurando na página %d de %d..."
-+
-+#: src/IDocument.cxx:82
-+msgid "No error."
-+msgstr "Nenhum erro."
-+
-+#: src/IDocument.cxx:85
-+msgid "File not found."
-+msgstr "Ficheiro não encontrado."
-+
-+#: src/IDocument.cxx:88
-+msgid "Couldn't read the page catalog."
-+msgstr "Catálogo de página não pode ser lido."
-+
-+#: src/IDocument.cxx:91
-+msgid "The PDF file is damaged and can't be repaired."
-+msgstr "O ficheiro PDF está corrompido e não pode ser reparado."
-+
-+#: src/IDocument.cxx:94
-+msgid "The file is encrypted and the password was incorrect or not supplied."
-+msgstr ""
-+"O ficheiro está encriptado e a senha está incorrecta ou não foi fornecida."
-+
-+#: src/IDocument.cxx:97
-+msgid "Nonexistent or invalid highlight file."
-+msgstr "O ficheiro não existe ou é inválido."
-+
-+#: src/IDocument.cxx:100
-+msgid "Invalid printer."
-+msgstr "Impressora inválida."
-+
-+#: src/IDocument.cxx:103
-+msgid "Error during printing."
-+msgstr "Erro durante a impressão."
-+
-+#: src/IDocument.cxx:106
-+msgid "The PDF file doesn't allow that operation."
-+msgstr "O ficheiro PDF não permite esta operação."
-+
-+#: src/IDocument.cxx:109
-+msgid "Invalid page number."
-+msgstr "Número de página inválido."
-+
-+#: src/IDocument.cxx:112
-+msgid "File I/O error."
-+msgstr "Erro E/S do ficheiro."
-+
-+#: src/IDocument.cxx:115
-+#, c-format
-+msgid "Unknown error (%d)."
-+msgstr "Erro desconhecido (%d)."
-+
-+#: src/main.cxx:59
-+msgid "[FILE] - view PDF documents"
-+msgstr "[FICHEIRO] - mostra documentos PDF"
-+
-+#: src/main.cxx:72 src/MainPter.cxx:153
-+msgid "PDF Viewer"
-+msgstr "Visualizador de PDF"
-+
-+#: src/MainPter.cxx:233
-+#, c-format
-+msgid "Reloading file %s..."
-+msgstr "Recarregando ficheiro %s..."
-+
-+#: src/MainPter.cxx:237
-+#, c-format
-+msgid "Loading file %s..."
-+msgstr "Carregando ficheiro %s..."
-+
-+#: src/MainPter.cxx:413 src/MainPter.cxx:892
-+#, c-format
-+msgid "of %d"
-+msgstr "de %d"
-+
-+#: src/MainPter.cxx:588
-+#, c-format
-+msgid "Saving document to %s..."
-+msgstr "Gravando documento em %s..."
-+
-+#: src/MainPter.cxx:832 src/MainPter.cxx:871
-+msgid "Error Loading File"
-+msgstr "Erro ao Carregar Ficheiro"
-+
-+#: src/MainPter.cxx:872
-+msgid "The password you have supplied is not a valid password for this file."
-+msgstr "A senha que indicou não é inválida para este ficheiro."
-+
-+#: src/MainPter.cxx:953
-+msgid "Error Saving File"
-+msgstr "Erro ao Gravar Ficheiro"
-+
-+#: src/PagePter.cxx:338
-+msgid "Loading..."
-+msgstr "Carregando..."
-+
-+#: src/PrintPter.cxx:252
-+msgid "A4"
-+msgstr "A4"
-+
-+#: src/PrintPter.cxx:280
-+msgid "300 DPI"
-+msgstr "300 DPI"
-+
-+#: src/PrintPter.cxx:308
-+msgid "Grayscale"
-+msgstr "Escala de cinza"
-+
-+#: src/PrintPter.cxx:409
-+msgid "Idle"
-+msgstr "Ocioso"
-+
-+#: src/PrintPter.cxx:412
-+msgid "Stopped"
-+msgstr "Parado"
-+
-+#: src/PrintPter.cxx:415
-+msgid "Processing"
-+msgstr "Processando"
-+
-+#: src/PrintPter.cxx:418
-+msgid "Unknown"
-+msgstr "Desconhecido"
-+
-+#: src/PDFDocument.cxx:272
-+#, c-format
-+msgid ""
-+"Failed to load document '%s'.\n"
-+"%s\n"
-+msgstr ""
-+"Falha ao abrir o documento '%s'.\n"
-+"%s\n"
-+
-+#: src/gtk/FindView.cxx:51
-+msgid "Find:"
-+msgstr "Procurar:"
-+
-+#: src/gtk/MainView.cxx:89
-+msgid "_File"
-+msgstr "_Ficheiro"
-+
-+#: src/gtk/MainView.cxx:90
-+msgid "_Edit"
-+msgstr "_Editar"
-+
-+#: src/gtk/MainView.cxx:91
-+msgid "_View"
-+msgstr "_Ver"
-+
-+#: src/gtk/MainView.cxx:92
-+msgid "_Go"
-+msgstr "_Ir"
-+
-+#: src/gtk/MainView.cxx:93
-+msgid "_Help"
-+msgstr "_Ajuda"
-+
-+#: src/gtk/MainView.cxx:95
-+msgid "_Open"
-+msgstr "_Abrir"
-+
-+#: src/gtk/MainView.cxx:96
-+msgid "Open a PDF document"
-+msgstr "Abrir um documento PDF"
-+
-+#: src/gtk/MainView.cxx:99
-+msgid "_Reload"
-+msgstr "_Recarregar"
-+
-+#: src/gtk/MainView.cxx:100
-+msgid "Reload the current document"
-+msgstr "Recarregar documento actual"
-+
-+#: src/gtk/MainView.cxx:103
-+msgid "_Save a Copy..."
-+msgstr "_Gravar uma Cópia..."
-+
-+#: src/gtk/MainView.cxx:104
-+msgid "Save a copy of the current document"
-+msgstr "Gravar uma cópia do documento actual"
-+
-+#: src/gtk/MainView.cxx:108
-+msgid "_Print..."
-+msgstr "_Imprimir..."
-+
-+#: src/gtk/MainView.cxx:109
-+msgid "Print the current document"
-+msgstr "Imprimir o documento actual"
-+
-+#: src/gtk/MainView.cxx:113
-+msgid "_Close"
-+msgstr "_Fechar"
-+
-+#: src/gtk/MainView.cxx:114
-+msgid "Close this window"
-+msgstr "Fechar esta janela"
-+
-+#: src/gtk/MainView.cxx:117
-+msgid "_Find"
-+msgstr "_Procurar"
-+
-+#: src/gtk/MainView.cxx:118
-+msgid "Find a word in the document"
-+msgstr "Localizar uma palavra no documento"
-+
-+#: src/gtk/MainView.cxx:121
-+msgid "Preferences..."
-+msgstr "Preferências..."
-+
-+#: src/gtk/MainView.cxx:122
-+msgid "Change the application's preferences"
-+msgstr "Alterar preferências da aplicação"
-+
-+#: src/gtk/MainView.cxx:125
-+msgid "Zoom _In"
-+msgstr "A_mpliar"
-+
-+#: src/gtk/MainView.cxx:126
-+msgid "Enlarge the document"
-+msgstr "Amplia o documento"
-+
-+#: src/gtk/MainView.cxx:129
-+msgid "Zoom _Out"
-+msgstr "_Reduzir"
-+
-+#: src/gtk/MainView.cxx:130
-+msgid "Shrink the document"
-+msgstr "Reduz o documento"
-+
-+#: src/gtk/MainView.cxx:133 src/gtk/StockIcons.cxx:43
-+msgid "Rotate _Right"
-+msgstr "Girar para a _direita"
-+
-+#: src/gtk/MainView.cxx:134
-+msgid "Rotate the document 90 degrees clockwise"
-+msgstr "Girar o documento 90 graus em sentido horário"
-+
-+#: src/gtk/MainView.cxx:137 src/gtk/StockIcons.cxx:42
-+msgid "Rotate _Left"
-+msgstr "Girar para a _esquerda"
-+
-+#: src/gtk/MainView.cxx:138
-+msgid "Rotate the document 90 degrees counter-clockwise"
-+msgstr "Girar o documento 90 graus em sentido anti-horário"
-+
-+#: src/gtk/MainView.cxx:141
-+msgid "_First Page"
-+msgstr "_Primeira Página"
-+
-+#: src/gtk/MainView.cxx:142
-+msgid "Go to the first page"
-+msgstr "Ir para a primeira página"
-+
-+#: src/gtk/MainView.cxx:145
-+msgid "_Next Page"
-+msgstr "_Próxima Página"
-+
-+#: src/gtk/MainView.cxx:146
-+msgid "Go to the next page"
-+msgstr "Ir para a próxima página"
-+
-+#: src/gtk/MainView.cxx:149
-+msgid "_Previous Page"
-+msgstr "Página _Anterior"
-+
-+#: src/gtk/MainView.cxx:150
-+msgid "Go to the previous page"
-+msgstr "Ir para a página anterior"
-+
-+#: src/gtk/MainView.cxx:153
-+msgid "_Last Page"
-+msgstr "Ú_ltima Página"
-+
-+#: src/gtk/MainView.cxx:154
-+msgid "Go to the last page"
-+msgstr "Ir para a última página"
-+
-+#: src/gtk/MainView.cxx:157
-+msgid "_About"
-+msgstr "_Sobre"
-+
-+#: src/gtk/MainView.cxx:158
-+msgid "Display application's credits"
-+msgstr "Mostrar créditos da aplicação"
-+
-+#: src/gtk/MainView.cxx:175
-+msgid "F_ull screen"
-+msgstr "Ecrã inteiro"
-+
-+#: src/gtk/MainView.cxx:176
-+msgid "Toggle full screen window"
-+msgstr "Mudar para ecrã completo"
-+
-+#: src/gtk/MainView.cxx:179
-+msgid "Show _Toolbar"
-+msgstr "Mostrar barras de _ferramentas"
-+
-+#: src/gtk/MainView.cxx:180
-+msgid "Show or hide the toolbar"
-+msgstr "Mostra ou esconde a barra de ferramentas"
-+
-+#: src/gtk/MainView.cxx:183
-+msgid "Show _Statusbar"
-+msgstr "Mostrar barra de _estado"
-+
-+#: src/gtk/MainView.cxx:184
-+msgid "Show or hide the statusbar"
-+msgstr "Mostra ou esconde a barra de estado"
-+
-+#: src/gtk/MainView.cxx:187
-+msgid "Show I_ndex"
-+msgstr "Mostrar Ã_ndice"
-+
-+#: src/gtk/MainView.cxx:188
-+msgid "Show or hide the document's outline"
-+msgstr "Mostra ou esconde o índice do documento"
-+
-+#: src/gtk/MainView.cxx:191
-+msgid "Zoom to _Fit"
-+msgstr "Aj_ustar à janela"
-+
-+#: src/gtk/MainView.cxx:192
-+msgid "Make the current document fill the window"
-+msgstr "Ajusta documento à janela"
-+
-+#: src/gtk/MainView.cxx:195 src/gtk/StockIcons.cxx:44
-+msgid "Zoom to _Width"
-+msgstr "Ajustar à _largura da página"
-+
-+#: src/gtk/MainView.cxx:196
-+msgid "Make the current document fill the window width"
-+msgstr "Ajusta documento à largura da página"
-+
-+#: src/gtk/MainView.cxx:202
-+msgid "Scroll"
-+msgstr "Deslocamento"
-+
-+#: src/gtk/MainView.cxx:203
-+msgid "Mouse scroll page"
-+msgstr "Deslocamento de página com rato"
-+
-+#: src/gtk/MainView.cxx:205
-+msgid "Select Text"
-+msgstr "Seleccionar Texto"
-+
-+#: src/gtk/MainView.cxx:206
-+msgid " Mouse select text"
-+msgstr " Seleccionar texto com rato"
-+
-+#: src/gtk/MainView.cxx:320
-+msgid "Open PDF File"
-+msgstr "Abrir Ficheiro PDF"
-+
-+#: src/gtk/MainView.cxx:340 src/gtk/MainView.cxx:454
-+msgid "Portable Document Format (PDF) Files"
-+msgstr "Ficheiros em Portable Document Format (PDF)"
-+
-+#: src/gtk/MainView.cxx:352 src/gtk/MainView.cxx:466
-+msgid "All Files"
-+msgstr "Todos os Ficheiros"
-+
-+#: src/gtk/MainView.cxx:404
-+msgid "Password"
-+msgstr "Senha"
-+
-+#: src/gtk/MainView.cxx:428
-+msgid "Save PDF File"
-+msgstr "Gravar ficheiro PDF"
-+
-+#: src/gtk/MainView.cxx:858
-+msgid "Page"
-+msgstr "Página"
-+
-+#: src/gtk/MainView.cxx:868
-+msgid "of 0"
-+msgstr "de 0"
-+
-+#: src/gtk/MainView.cxx:921
-+msgid "Index"
-+msgstr "Ãndice"
-+
-+#: src/gtk/MainView.cxx:991 src/gtk/MainView.cxx:1001
-+#, c-format
-+msgid "Error building UI manager: %s\n"
-+msgstr "Erro ao construir o gestor de IU: %s\n"
-+
-+#: src/gtk/MainView.cxx:1108
-+msgid "A lightweight PDF viewer"
-+msgstr "Um visualizador leve de PDF"
-+
-+#: src/gtk/MainView.cxx:1111
-+msgid ""
-+"ePDFView is free software; you can redistribute it and/or modify\n"
-+"it under the terms of the GNU General Public License as published by\n"
-+"the Free Software Foundation; either version 2 of the License, or\n"
-+"(at your option) any later version.\n"
-+msgstr ""
-+"O ePDFView é software livre; pode redistribuí-lo e/ou modificá-lo\n"
-+"sob os termos da Licença Pública Geral GNU (GPL) como publicada\n"
-+"pela Free Software Foundation; seja a versão 2 da Licença ou\n"
-+"(se preferir) qualquer versão mais recente.\n"
-+
-+#: src/gtk/MainView.cxx:1115
-+msgid ""
-+"ePDFView is distributes in the hope that it will be useful,\n"
-+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
-+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
-+"GNU General Public License for more details.\n"
-+msgstr ""
-+"O ePDFView é distribuído na esperança de que seja útil,\n"
-+"mas SEM NENHUMA GARANTIA; até mesmo sem a garantia implicada de\n"
-+"COMERCIALIZAÇÃO ou de ADAPTAÇÃO A UM PROPÓSITO EM PARTICULAR. Veja a\n"
-+"Licença Pública Geral GNU (GPL) para mais detalhes.\n"
-+
-+#: src/gtk/MainView.cxx:1119
-+msgid ""
-+"You should have received a copy of the GNU General Public License\n"
-+"along with ePDFView; if not, write to the Free Software Foundation,Inc.,\n"
-+"59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n"
-+msgstr ""
-+"Deve ter recebido uma cópia da Licença Pública Geral GNU (GPL)\n"
-+"junto com o ePDFView; se não, escreva para a Free Software Foundation, Inc.\n"
-+"59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n"
-+
-+#: src/gtk/MainView.cxx:1128
-+msgid "ePDFView"
-+msgstr "ePDFView"
-+
-+#: src/gtk/MainView.cxx:1135
-+msgid "translator-credits"
-+msgstr "Nuno Miguel <nunis@netcabo.pt>"
-+
-+#: src/gtk/PreferencesView.cxx:32
-+msgid "Preferences"
-+msgstr "Preferências"
-+
-+#: src/gtk/PreferencesView.cxx:46
-+msgid "External Commands"
-+msgstr "Comandos Externos"
-+
-+#: src/gtk/PreferencesView.cxx:105
-+msgid "Web _Browser:"
-+msgstr "Navegador _Web:"
-+
-+#: src/gtk/PreferencesView.cxx:118
-+#, c-format
-+msgid "Note: <i>%s</i> will be replaced by the URI."
-+msgstr "Nota: O parâmetro <i>%s</i> deve ser substituído pelo URI."
-+
-+#: src/gtk/PrintView.cxx:51
-+msgid "Print"
-+msgstr "Imprimir"
-+
-+#: src/gtk/PrintView.cxx:69 src/gtk/PrintView.cxx:659
-+msgid "Printer"
-+msgstr "Impressora"
-+
-+#: src/gtk/PrintView.cxx:74
-+msgid "Job"
-+msgstr "Trabalho"
-+
-+#: src/gtk/PrintView.cxx:79
-+msgid "Paper"
-+msgstr "Página"
-+
-+#: src/gtk/PrintView.cxx:359
-+msgid "<b>Print Range</b>"
-+msgstr "<b>Intervalo de impressão</b>"
-+
-+#: src/gtk/PrintView.cxx:377
-+msgid "_All pages"
-+msgstr "_Todas as páginas"
-+
-+#: src/gtk/PrintView.cxx:380
-+msgid "_Range:"
-+msgstr "_Intervalo:"
-+
-+#: src/gtk/PrintView.cxx:392
-+msgid "<b>Page Set</b>"
-+msgstr "<b>Conjunto de páginas</b>"
-+
-+#: src/gtk/PrintView.cxx:408
-+msgid "A_ll pages"
-+msgstr "_Todas as páginas"
-+
-+#: src/gtk/PrintView.cxx:412
-+msgid "O_dd pages"
-+msgstr "Páginas í_mpares"
-+
-+#: src/gtk/PrintView.cxx:416
-+msgid "_Even pages"
-+msgstr "Páginas _pares"
-+
-+#: src/gtk/PrintView.cxx:420
-+msgid "<b>Copies</b>"
-+msgstr "<b>Cópias</b>"
-+
-+#: src/gtk/PrintView.cxx:437
-+msgid "N_umber of copies:"
-+msgstr "_Número de cópias:"
-+
-+#: src/gtk/PrintView.cxx:444
-+msgid "C_ollate"
-+msgstr "O_rganizar"
-+
-+#: src/gtk/PrintView.cxx:465
-+msgid "<b>Paper and Layout</b>"
-+msgstr "<b>Página e Disposição</b>"
-+
-+#: src/gtk/PrintView.cxx:482
-+msgid "Paper _Size:"
-+msgstr "_Tamanho do Papel:"
-+
-+#: src/gtk/PrintView.cxx:508
-+msgid "Page _orientation:"
-+msgstr "_Orientação de Página:"
-+
-+#: src/gtk/PrintView.cxx:539
-+msgid "_Layout:"
-+msgstr "_Disposição:"
-+
-+#: src/gtk/PrintView.cxx:568
-+msgid "<b>Output</b>"
-+msgstr "<b>Saída</b>"
-+
-+#: src/gtk/PrintView.cxx:585
-+msgid "_Mode:"
-+msgstr "_Modo:"
-+
-+#: src/gtk/PrintView.cxx:613
-+msgid "_Resolution:"
-+msgstr "_Resolução:"
-+
-+#: src/gtk/PrintView.cxx:668
-+msgid "State"
-+msgstr "Estado"
-+
-+#: src/gtk/PrintView.cxx:677
-+msgid "Jobs"
-+msgstr "Trabalhos"
-+
-+#: src/gtk/PrintView.cxx:686
-+msgid "Location"
-+msgstr "Local"
-+
-+#: src/gtk/PrintView.cxx:717
-+msgid "Plain"
-+msgstr "Plano"
-+
-+#: src/gtk/PrintView.cxx:723
-+msgid "2 pages in 1"
-+msgstr "2 páginas em 1"
-+
-+#: src/gtk/PrintView.cxx:729
-+msgid "4 pages in 1"
-+msgstr "4 páginas em 1"
-+
-+#: src/gtk/PrintView.cxx:744
-+msgid "Portrait"
-+msgstr "Retrato"
-+
-+#: src/gtk/PrintView.cxx:750
-+msgid "Landscape"
-+msgstr "Paisagem"
-+
-+#: src/gtk/StockIcons.cxx:40
-+msgid "Find _Next"
-+msgstr "Procurar _Próxima"
-+
-+#: src/gtk/StockIcons.cxx:41
-+msgid "Find _Previous"
-+msgstr "Localizar _Anterior"
-diff -Nurd epdfview-0.1.6-svn/po/ru.po epdfview/po/ru.po
---- epdfview-0.1.6-svn/po/ru.po 2008-07-13 12:57:47.543198000 +0200
-+++ epdfview/po/ru.po 2008-07-13 12:55:55.083198000 +0200
-@@ -1,144 +1,152 @@
- # Russian translations for ePDFView package
--# áÎÇÌÉÊÓËÉÅ ÐÅÒÅ×ÏÄÙ ÄÌÑ ÐÁËÅÔÁ ePDFView.
-+# ÐнглийÑкие переводы Ð´Ð»Ñ Ð¿Ð°ÐºÐµÑ‚Ð° ePDFView.
- # Copyright (C) 2006 Emma's Software
- # This file is distributed under the same license as the ePDFView package.
- # <igor_vagulin@mail.ru>, 2006.
- #
- msgid ""
- msgstr ""
--"Project-Id-Version: ePDFView 0.1.5\n"
-+"Project-Id-Version: ePDFView 0.1.6\n"
- "Report-Msgid-Bugs-To: jordi@emma-soft.com\n"
--"POT-Creation-Date: 2007-02-26 17:47+0100\n"
--"PO-Revision-Date: 2006-07-08 13:31+0400\n"
--"Last-Translator: <igor_vagulin@mail.ru>\n"
-+"POT-Creation-Date: 2008-04-14 13:27+0200\n"
-+"PO-Revision-Date: 2007-04-23 15:56+0300\n"
-+"Last-Translator: Sergey Starosek <sergey.starosek@gmail.com>\n"
- "Language-Team: Russian <ru@li.org>\n"
- "MIME-Version: 1.0\n"
--"Content-Type: text/plain; charset=KOI8-R\n"
-+"Content-Type: text/plain; charset=utf-8\n"
- "Content-Transfer-Encoding: 8bit\n"
- "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%"
- "10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
-
- #: src/FindPter.cxx:187
- msgid "No Results Found!"
--msgstr "òÅÚÕÌØÔÁÔÙ ÎÅ ÎÁÊÄÅÎÙ!"
-+msgstr "Результаты не найдены!"
-
- #: src/FindPter.cxx:195
- #, c-format
- msgid "Searching in page %d of %d..."
--msgstr "ðÏÉÓË ÎÁ ÓÔÒÁÎÉÃÅ %d ÉÚ %d..."
-+msgstr "ПоиÑк на Ñтранице %d из %d..."
-
- #: src/IDocument.cxx:82
- msgid "No error."
--msgstr "âÅÚ ÏÛÉÂÏË."
-+msgstr "Без ошибок."
-
- #: src/IDocument.cxx:85
- msgid "File not found."
--msgstr "æÁÊÌ ÎÅ ÎÁÊÄÅÎ."
-+msgstr "Файл не найден."
-
- #: src/IDocument.cxx:88
- msgid "Couldn't read the page catalog."
--msgstr "ïÛÉÂËÁ ÐÒÉ ÞÔÅÎÉÉ ÉÎÆÏÒÍÁÃÉÉ Ï ÓÔÒÁÎÉÃÁÈ."
-+msgstr "Ошибка при чтении информации о Ñтраницах."
-
- #: src/IDocument.cxx:91
- msgid "The PDF file is damaged and can't be repaired."
--msgstr "PDF ÆÁÊÌ ÐÏ×ÒÅÖÄ£Î É ÎÅ ÍÏÖÅÔ ÂÙÔØ ×ÏÓÓÔÁÎÏ×ÌÅÎ."
-+msgstr "PDF файл повреждён и не может быть воÑÑтановлен."
-
- #: src/IDocument.cxx:94
- msgid "The file is encrypted and the password was incorrect or not supplied."
--msgstr "æÁÊÌ ÚÁÛÉÆÒÏ×ÁÎ. ðÁÒÏÌØ ÎÅ×ÅÒÅÎ ÉÌÉ ÎÅ ××ÅÄ£Î."
-+msgstr "Файл зашифрован. Пароль неверен или не введён."
-
- #: src/IDocument.cxx:97
- msgid "Nonexistent or invalid highlight file."
--msgstr "æÁÊÌ ÐÏÄÓ×ÅÔËÉ(highlight file) ÎÅ ÓÕÝÅÓÔ×ÕÅÔ ÉÌÉ × Î£Í ÏÛÉÂËÉ."
-+msgstr "Файл подÑветки(highlight file) не ÑущеÑтвует или в нём ошибки."
-
- #: src/IDocument.cxx:100
- msgid "Invalid printer."
--msgstr "ðÒÉÎÔÅÒ ÎÅ ÎÁÊÄÅÎ"
-+msgstr "Принтер не найден"
-
- #: src/IDocument.cxx:103
- msgid "Error during printing."
--msgstr "ïÛÉÂËÁ ÐÅÞÁÔÉ."
-+msgstr "Ошибка печати."
-
- #: src/IDocument.cxx:106
- msgid "The PDF file doesn't allow that operation."
--msgstr "ïÐÅÒÁÃÉÑ ÎÅ ÍÏÖÅÔ ÂÙÔØ ÏÓÕÝÅÓÔ×ÌÅÎÁ ÄÌÑ ÜÔÏÇÏ PDF ÆÁÊÌÁ."
-+msgstr "ÐžÐ¿ÐµÑ€Ð°Ñ†Ð¸Ñ Ð½Ðµ может быть оÑущеÑтвлена Ð´Ð»Ñ Ñтого PDF файла."
-
- #: src/IDocument.cxx:109
- msgid "Invalid page number."
--msgstr "îÅ×ÅÒÎÙÊ ÎÏÍÅÒ ÓÔÒÁÎÉÃÙ."
-+msgstr "Ðеверный номер Ñтраницы."
-
- #: src/IDocument.cxx:112
- msgid "File I/O error."
--msgstr "ïÛÉÂËÁ ××ÏÄÁ/×Ù×ÏÄÁ"
-+msgstr "Ошибка ввода/вывода."
-
- #: src/IDocument.cxx:115
- #, c-format
- msgid "Unknown error (%d)."
--msgstr "îÅÉÚ×ÅÓÔÎÁÑ ÏÛÉÂËÁ (%d)."
-+msgstr "ÐеизвеÑÑ‚Ð½Ð°Ñ Ð¾ÑˆÐ¸Ð±ÐºÐ° (%d)."
-
--#: src/main.cxx:38
-+#: src/main.cxx:59
- msgid "[FILE] - view PDF documents"
--msgstr "[æáêì] - ÐÒÏÓÍÏÔÒ PDF ÄÏËÕÍÅÎÔÁ"
-+msgstr "[ФÐЙЛ] - проÑмотр PDF документа"
-
--#: src/main.cxx:51 src/MainPter.cxx:153
-+#: src/main.cxx:72 src/MainPter.cxx:153
- msgid "PDF Viewer"
--msgstr "ðÒÏÓÍÏÔÒ PDF"
-+msgstr "ПроÑмотр PDF"
-
- #: src/MainPter.cxx:233
- #, c-format
- msgid "Reloading file %s..."
--msgstr "ðÅÒÅÚÁÇÒÕÚËÁ ÆÁÊÌÁ %s..."
-+msgstr "Перезагрузка файла %s..."
-
- #: src/MainPter.cxx:237
- #, c-format
- msgid "Loading file %s..."
--msgstr "úÁÇÒÕÚËÁ ÆÁÌÁ %s..."
-+msgstr "Загрузка фала %s..."
-
--#: src/MainPter.cxx:413 src/MainPter.cxx:886
-+#: src/MainPter.cxx:413 src/MainPter.cxx:892
- #, c-format
- msgid "of %d"
--msgstr "ÉÚ %d"
-+msgstr "из %d"
-
- #: src/MainPter.cxx:588
- #, c-format
- msgid "Saving document to %s..."
--msgstr "äÏËÕÍÅÎÔ ÓÏÈÒÁÎÑÅÔØÓÑ × %s..."
-+msgstr "Документ ÑохранÑетÑÑ Ð² %s..."
-
--#: src/MainPter.cxx:826 src/MainPter.cxx:865
-+#: src/MainPter.cxx:832 src/MainPter.cxx:871
- msgid "Error Loading File"
--msgstr "ïÛÉÂËÁ ðÒÉ úÁÇÒÕÚËÅ æÁÊÌÁ"
-+msgstr "Ошибка При Загрузке Файла"
-
--#: src/MainPter.cxx:866
-+#: src/MainPter.cxx:872
- msgid "The password you have supplied is not a valid password for this file."
--msgstr "÷×ÅÄ£ÎÙÊ ×ÁÍÉ ÐÁÒÏÌØ ÎÅ×ÅÒÅÎ ÄÌÑ ÜÔÏÇÏ ÆÁÊÌÁ"
-+msgstr "Введёный вами пароль неверен Ð´Ð»Ñ Ñтого файла"
-
--#: src/MainPter.cxx:947
-+#: src/MainPter.cxx:953
- msgid "Error Saving File"
--msgstr "ïÛÉÂËÁ ðÒÉ óÏÈÒÁÎÅÎÉÉ æÁÊÌÁ"
-+msgstr "Ошибка При Сохранении Файла"
-
--#: src/PagePter.cxx:292
-+#: src/PagePter.cxx:338
- msgid "Loading..."
--msgstr "úÁÇÒÕÖÁÅÔØÓÑ..."
-+msgstr "ЗагружаетÑÑ..."
-
--#: src/PrintPter.cxx:295
-+#: src/PrintPter.cxx:252
-+msgid "A4"
-+msgstr ""
-+
-+#: src/PrintPter.cxx:280
-+msgid "300 DPI"
-+msgstr ""
-+
-+#: src/PrintPter.cxx:308
- msgid "Grayscale"
--msgstr "ïÔÔÅÎËÉ ÓÅÒÏÇÏ"
-+msgstr "Оттенки Ñерого"
-
--#: src/PrintPter.cxx:395
-+#: src/PrintPter.cxx:409
- msgid "Idle"
--msgstr "ïÖÉÄÁÎÉÅ"
-+msgstr "Ожидание"
-
--#: src/PrintPter.cxx:398
-+#: src/PrintPter.cxx:412
- msgid "Stopped"
--msgstr "ïÓÔÁÎÏ×ÌÅÎ"
-+msgstr "ОÑтановлен"
-
--#: src/PrintPter.cxx:401
-+#: src/PrintPter.cxx:415
- msgid "Processing"
--msgstr "ïÂÒÁÂÏÔËÁ"
-+msgstr "Обработка"
-
--#: src/PrintPter.cxx:404
-+#: src/PrintPter.cxx:418
- msgid "Unknown"
--msgstr "îÅÉÚ×ÅÓÔÎÏ"
-+msgstr "ÐеизвеÑтно"
-
- #: src/PDFDocument.cxx:272
- #, c-format
-@@ -146,435 +154,452 @@
- "Failed to load document '%s'.\n"
- "%s\n"
- msgstr ""
--"ïÛÉÂËÁ ÐÒÉ ÚÁÇÒÕÚËÅ ÄÏËÕÍÅÎÔÁ '%s'.\n"
-+"Ошибка при загрузке документа '%s'.\n"
- "%s\n"
-
- #: src/gtk/FindView.cxx:51
- msgid "Find:"
--msgstr "îÁÊÔÉ:"
-+msgstr "Ðайти:"
-
--#: src/gtk/MainView.cxx:87
-+#: src/gtk/MainView.cxx:89
- msgid "_File"
--msgstr "_æÁÊÌ"
-+msgstr "_Файл"
-
--#: src/gtk/MainView.cxx:88
-+#: src/gtk/MainView.cxx:90
- msgid "_Edit"
--msgstr "_ðÒÁ×ËÁ"
-+msgstr "_Правка"
-
--#: src/gtk/MainView.cxx:89
-+#: src/gtk/MainView.cxx:91
- msgid "_View"
--msgstr "_÷ÉÄ"
-+msgstr "_Вид"
-
--#: src/gtk/MainView.cxx:90
-+#: src/gtk/MainView.cxx:92
- msgid "_Go"
--msgstr "ð_ÅÒÅÊÔÉ"
-+msgstr "П_ерейти"
-
--#: src/gtk/MainView.cxx:91
-+#: src/gtk/MainView.cxx:93
- msgid "_Help"
--msgstr "ð_ÏÍÏÝØ"
-+msgstr "П_омощь"
-
--#: src/gtk/MainView.cxx:93
-+#: src/gtk/MainView.cxx:95
- msgid "_Open"
--msgstr "_ïÔËÒÙÔØ"
-+msgstr "_Открыть"
-
--#: src/gtk/MainView.cxx:94
-+#: src/gtk/MainView.cxx:96
- msgid "Open a PDF document"
--msgstr "ïÔËÒÙÔØ PDF ÄÏËÕÍÅÎÔ"
-+msgstr "Открыть PDF документ"
-
--#: src/gtk/MainView.cxx:97
-+#: src/gtk/MainView.cxx:99
- msgid "_Reload"
--msgstr "_ðÅÒÅÚÁÇÒÕÚÉÔØ"
-+msgstr "_Перезагрузить"
-
--#: src/gtk/MainView.cxx:98
-+#: src/gtk/MainView.cxx:100
- msgid "Reload the current document"
--msgstr "ðÅÒÅÚÁÇÒÕÚÉÔØ ÔÅËÕÝÉÊ ÄÏËÕÍÅÎÔ"
-+msgstr "Перезагрузить текущий документ"
-
--#: src/gtk/MainView.cxx:101
-+#: src/gtk/MainView.cxx:103
- msgid "_Save a Copy..."
--msgstr "_óÏÈÒÁÎÉÔØ ëÏÐÉÀ"
-+msgstr "_Сохранить Копию"
-
--#: src/gtk/MainView.cxx:102
-+#: src/gtk/MainView.cxx:104
- msgid "Save a copy of the current document"
--msgstr "óÏÈÒÁÎÉÔØ ËÏÐÉÀ ÔÅËÕÝÅÇÏ ÄÏËÕÍÅÎÔÁ"
-+msgstr "Сохранить копию текущего документа"
-
--#: src/gtk/MainView.cxx:106
-+#: src/gtk/MainView.cxx:108
- msgid "_Print..."
--msgstr "_ðÅÞÁÔØ"
-+msgstr "_Печать"
-
--#: src/gtk/MainView.cxx:107
-+#: src/gtk/MainView.cxx:109
- msgid "Print the current document"
--msgstr "òÁÓÐÅÞÁÔÁÔØ ÔÅËÕÝÉÊ ÄÏËÕÍÅÎÔ"
-+msgstr "РаÑпечатать текущий документ"
-
--#: src/gtk/MainView.cxx:111
-+#: src/gtk/MainView.cxx:113
- msgid "_Close"
--msgstr "_úÁËÒÙÔØ"
-+msgstr "_Закрыть"
-
--#: src/gtk/MainView.cxx:112
-+#: src/gtk/MainView.cxx:114
- msgid "Close this window"
--msgstr "úÁËÒÙÔØ ÏËÎÏ"
-+msgstr "Закрыть окно"
-
--#: src/gtk/MainView.cxx:115
-+#: src/gtk/MainView.cxx:117
- msgid "_Find"
--msgstr "_îÁÊÔÉ"
-+msgstr "_Ðайти"
-
--#: src/gtk/MainView.cxx:116
-+#: src/gtk/MainView.cxx:118
- msgid "Find a word in the document"
--msgstr "îÁÊÔÉ ÓÌÏ×Ï × ÄÏËÕÍÅÎÔÅ"
-+msgstr "Ðайти Ñлово в документе"
-
--#: src/gtk/MainView.cxx:119
-+#: src/gtk/MainView.cxx:121
- msgid "Preferences..."
--msgstr "îÁÓÔÒÏÊËÉ..."
-+msgstr "ÐаÑтройки..."
-
--#: src/gtk/MainView.cxx:120
-+#: src/gtk/MainView.cxx:122
- msgid "Change the application's preferences"
--msgstr "òÅÄÁËÔÉÒÏ×ÁÔØ ÎÁÓÔÒÏÊËÉ ÐÒÉÌÏÖÅÎÉÑ"
-+msgstr "Редактировать наÑтройки приложениÑ"
-
--#: src/gtk/MainView.cxx:123
-+#: src/gtk/MainView.cxx:125
- msgid "Zoom _In"
--msgstr "õ×ÅÌÉÞÉÔØ ÍÁÓÛÔÁÂ"
-+msgstr "Увеличить"
-
--#: src/gtk/MainView.cxx:124
-+#: src/gtk/MainView.cxx:126
- msgid "Enlarge the document"
--msgstr "õ×ÅÌÉÞÉÔØ ÄÏËÕÍÅÎÔ"
-+msgstr "Увеличить документ"
-
--#: src/gtk/MainView.cxx:127
-+#: src/gtk/MainView.cxx:129
- msgid "Zoom _Out"
--msgstr "õÍÅÎØÛÉÔØ ÍÁÓÛÔÁÂ"
-+msgstr "Уменьшить"
-
--#: src/gtk/MainView.cxx:128
-+#: src/gtk/MainView.cxx:130
- msgid "Shrink the document"
--msgstr "õÍÅÎØÛÉÔØ ÄÏËÕÍÅÎÔ"
-+msgstr "Уменьшить документ"
-
--#: src/gtk/MainView.cxx:131 src/gtk/StockIcons.cxx:43
-+#: src/gtk/MainView.cxx:133 src/gtk/StockIcons.cxx:43
- msgid "Rotate _Right"
--msgstr "ðÏ×ÅÒÎÕÔØ ÎÁÐÒÁ×Ï"
-+msgstr "Повернуть направо"
-
--#: src/gtk/MainView.cxx:132
-+#: src/gtk/MainView.cxx:134
- msgid "Rotate the document 90 degrees clockwise"
--msgstr "ðÏ×ÅÒÎÕÔØ ÄÏËÕÍÅÎÔ ÎÁ 90 ÇÒÁÄÕÓÏ× ÐÏ ÞÁÓÏ×ÏÊ ÓÔÒÅÌËÅ"
-+msgstr "Повернуть документ на 90 градуÑов по чаÑовой Ñтрелке"
-
--#: src/gtk/MainView.cxx:135 src/gtk/StockIcons.cxx:42
-+#: src/gtk/MainView.cxx:137 src/gtk/StockIcons.cxx:42
- msgid "Rotate _Left"
--msgstr "ðÏ×ÅÒÎÕÔØ ÎÁÌÅ×Ï"
-+msgstr "Повернуть налево"
-
--#: src/gtk/MainView.cxx:136
-+#: src/gtk/MainView.cxx:138
- msgid "Rotate the document 90 degrees counter-clockwise"
--msgstr "ðÏ×ÅÒÎÕÔØ ÄÏËÕÍÅÎÔ ÎÁ 90 ÇÒÁÄÕÓÏ× ÐÒÏÔÉ× ÞÁÓÏ×ÏÊ ÓÔÒÅÌËÉ"
-+msgstr "Повернуть документ на 90 градуÑов против чаÑовой Ñтрелки"
-
--#: src/gtk/MainView.cxx:139
-+#: src/gtk/MainView.cxx:141
- msgid "_First Page"
--msgstr "ðÅÒ×ÁÑ ÓÔÒÁÎÉÃÁ"
-+msgstr "ÐŸÐµÑ€Ð²Ð°Ñ Ñтраница"
-
--#: src/gtk/MainView.cxx:140
-+#: src/gtk/MainView.cxx:142
- msgid "Go to the first page"
--msgstr "ðÅÒÅÊÔÉ ÎÁ ÐÅÒ×ÕÀ ÓÔÒÁÎÉÃÕ"
-+msgstr "Перейти на первую Ñтраницу"
-
--#: src/gtk/MainView.cxx:143
-+#: src/gtk/MainView.cxx:145
- msgid "_Next Page"
--msgstr "óÌÅÄÕÀÝÁÑ ÓÔÒÁÎÉÃÁ"
-+msgstr "СледующаÑ"
-
--#: src/gtk/MainView.cxx:144
-+#: src/gtk/MainView.cxx:146
- msgid "Go to the next page"
--msgstr "ðÅÒÅÊÔÉ ÎÁ ÓÌÅÄÕÀÝÕÀ ÓÔÒÁÎÉÃÕ"
-+msgstr "Перейти на Ñледующую Ñтраницу"
-
--#: src/gtk/MainView.cxx:147
-+#: src/gtk/MainView.cxx:149
- msgid "_Previous Page"
--msgstr "ðÒÅÄÙÄÕÝÁÑ ÓÔÒÁÎÉÃÁ"
-+msgstr "ПредыдущаÑ"
-
--#: src/gtk/MainView.cxx:148
-+#: src/gtk/MainView.cxx:150
- msgid "Go to the previous page"
--msgstr "ðÅÒÅÊÔÉ ÎÁ ÐÒÅÄÙÄÕÝÕÀ ÓÔÒÁÎÉÃÕ"
-+msgstr "Перейти на предыдущую Ñтраницу"
-
--#: src/gtk/MainView.cxx:151
-+#: src/gtk/MainView.cxx:153
- msgid "_Last Page"
--msgstr "ðÏÓÌÅÄÎÑÑ ÓÔÒÁÎÉÃÁ"
-+msgstr "ПоÑледнÑÑ Ñтраница"
-
--#: src/gtk/MainView.cxx:152
-+#: src/gtk/MainView.cxx:154
- msgid "Go to the last page"
--msgstr "ðÅÒÅÊÔÉ ÎÁ ÐÏÓÌÅÄΠÓÔÒÁÎÉÃÕ"
-+msgstr "Перейти на поÑледнбб Ñтраницу"
-
--#: src/gtk/MainView.cxx:155
-+#: src/gtk/MainView.cxx:157
- msgid "_About"
--msgstr "ï ÐÒÏÇÒÁÍÍÅ"
-+msgstr "О программе"
-
--#: src/gtk/MainView.cxx:156
-+#: src/gtk/MainView.cxx:158
- msgid "Display application's credits"
--msgstr "ðÏËÁÚÁÔØ ÏÐÉÓÁÎÉÅ ÐÒÏÇÒÁÍÍÙ"
-+msgstr "Показать опиÑание программы"
-
--#: src/gtk/MainView.cxx:166
-+#: src/gtk/MainView.cxx:175
- msgid "F_ull screen"
--msgstr ""
-+msgstr "Полный Ñкран"
-
--#: src/gtk/MainView.cxx:167
-+#: src/gtk/MainView.cxx:176
- msgid "Toggle full screen window"
--msgstr ""
-+msgstr "Переключить полноÑкранный режим"
-
--#: src/gtk/MainView.cxx:170
-+#: src/gtk/MainView.cxx:179
- msgid "Show _Toolbar"
--msgstr "ðÏËÁÚÁÔØ ÐÁÎÅÌØ ÉÎÓÔÒÕÍÅÎÔÏ×"
-+msgstr "Показать панель инÑтрументов"
-
--#: src/gtk/MainView.cxx:171
-+#: src/gtk/MainView.cxx:180
- msgid "Show or hide the toolbar"
--msgstr "ðÏËÁÚÁÔØ ÉÌÉ ÓËÒÙÔØ ÐÁÎÅÌØ ÉÎÓÔÒÕÍÅÎÔÏ×"
-+msgstr "Показать или Ñкрыть панель инÑтрументов"
-
--#: src/gtk/MainView.cxx:174
-+#: src/gtk/MainView.cxx:183
- msgid "Show _Statusbar"
--msgstr "ðÏËÁÚÁÔØ ÓÔÒÏËÕ ÓÏÓÔÏÑÎÉÑ"
-+msgstr "Показать Ñтроку ÑоÑтоÑниÑ"
-
--#: src/gtk/MainView.cxx:175
-+#: src/gtk/MainView.cxx:184
- msgid "Show or hide the statusbar"
--msgstr "ðÏËÁÚÁÔØ ÉÌÉ ÓËÒÙÔØ ÓÔÒÏËÕ ÓÏÓÔÏÑÎÉÑ"
-+msgstr "Показать или Ñкрыть Ñтроку ÑоÑтоÑниÑ"
-
--#: src/gtk/MainView.cxx:178
-+#: src/gtk/MainView.cxx:187
- msgid "Show I_ndex"
--msgstr "ðÏËÁÚÁÔØ ÏÇÌÁ×ÌÅÎÉÅ"
-+msgstr "Показать оглавление"
-
--#: src/gtk/MainView.cxx:179
-+#: src/gtk/MainView.cxx:188
- msgid "Show or hide the document's outline"
--msgstr "ðÏËÁÚÁÔØ ÉÌÉ ÓËÒÙÔØ ÏÇÌÁ×ÌÅÎÉÅ"
-+msgstr "Показать или Ñкрыть оглавление"
-
--#: src/gtk/MainView.cxx:182
-+#: src/gtk/MainView.cxx:191
- msgid "Zoom to _Fit"
--msgstr "ðÏ ÷ÙÓÏÔÅ"
-+msgstr "По Ð’Ñ‹Ñоте"
-
--#: src/gtk/MainView.cxx:183
-+#: src/gtk/MainView.cxx:192
- msgid "Make the current document fill the window"
--msgstr "íÁÓÛÔÁ ÐÏ ÒÁÚÍÅÒÕ ÓÔÒÁÎÉÃÙ"
-+msgstr "МаÑштаб по размеру Ñтраницы"
-
--#: src/gtk/MainView.cxx:186 src/gtk/StockIcons.cxx:44
-+#: src/gtk/MainView.cxx:195 src/gtk/StockIcons.cxx:44
- msgid "Zoom to _Width"
--msgstr "ðÏ ûÉÒÉÎÅ"
-+msgstr "По Ширине"
-
--#: src/gtk/MainView.cxx:187
-+#: src/gtk/MainView.cxx:196
- msgid "Make the current document fill the window width"
--msgstr "íÁÓÛÔÁ ÐÏ ÛÉÒÉÎÅ ÓÔÒÁÎÉÃÙ"
-+msgstr "МаÑштаб по ширине Ñтраницы"
-
--#: src/gtk/MainView.cxx:278
-+#: src/gtk/MainView.cxx:202
-+msgid "Scroll"
-+msgstr ""
-+
-+#: src/gtk/MainView.cxx:203
-+msgid "Mouse scroll page"
-+msgstr ""
-+
-+#: src/gtk/MainView.cxx:205
-+msgid "Select Text"
-+msgstr ""
-+
-+#: src/gtk/MainView.cxx:206
-+msgid " Mouse select text"
-+msgstr ""
-+
-+#: src/gtk/MainView.cxx:320
- msgid "Open PDF File"
--msgstr "ïÔËÒÙÔØ PDF ÆÁÊÌ"
-+msgstr "Открыть PDF файл"
-
--#: src/gtk/MainView.cxx:298 src/gtk/MainView.cxx:412
-+#: src/gtk/MainView.cxx:340 src/gtk/MainView.cxx:454
- msgid "Portable Document Format (PDF) Files"
--msgstr "PDF ÆÁÊÌÙ"
-+msgstr "PDF файлы"
-
--#: src/gtk/MainView.cxx:310 src/gtk/MainView.cxx:424
-+#: src/gtk/MainView.cxx:352 src/gtk/MainView.cxx:466
- msgid "All Files"
--msgstr "÷ÓÅ æÁÊÌÙ"
-+msgstr "Ð’Ñе Файлы"
-
--#: src/gtk/MainView.cxx:362
-+#: src/gtk/MainView.cxx:404
- msgid "Password"
--msgstr "ðÁÒÏÌØ"
-+msgstr "Пароль"
-
--#: src/gtk/MainView.cxx:386
-+#: src/gtk/MainView.cxx:428
- msgid "Save PDF File"
--msgstr "óÏÈÒÁÎÉÔØ PDF æÁÊÌ"
-+msgstr "Сохранить PDF Файл"
-
--#: src/gtk/MainView.cxx:816
-+#: src/gtk/MainView.cxx:858
- msgid "Page"
--msgstr "óÔÒÁÎÉÃÁ"
-+msgstr "Страница"
-
--#: src/gtk/MainView.cxx:826
-+#: src/gtk/MainView.cxx:868
- msgid "of 0"
--msgstr "ÉÚ 0"
-+msgstr "из 0"
-
--#: src/gtk/MainView.cxx:879
-+#: src/gtk/MainView.cxx:921
- msgid "Index"
--msgstr "ïÇÌÁ×ÌÅÎÉÅ"
-+msgstr "Оглавление"
-
--#: src/gtk/MainView.cxx:946 src/gtk/MainView.cxx:956
-+#: src/gtk/MainView.cxx:991 src/gtk/MainView.cxx:1001
- #, c-format
- msgid "Error building UI manager: %s\n"
--msgstr "ïÛÉÂËÁ ÐÒÉ ÉÎÃÉÁÌÉÚÁÃÉÉ: %s\n"
-+msgstr "Ошибка при инциализации: %s\n"
-
--#: src/gtk/MainView.cxx:1056
--#, fuzzy
-+#: src/gtk/MainView.cxx:1108
- msgid "A lightweight PDF viewer"
--msgstr "ì£ÇËÁÑ ÐÒÏÇÒÁÍÍÁ ÄÌÑ ÐÒÏÓÍÏÔÒÁ PDF ÆÁÊÌÏ×"
-+msgstr "БыÑÑ‚Ñ€Ð°Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð¼Ð° Ð´Ð»Ñ Ð¿Ñ€Ð¾Ñмотра PDF файлов"
-
--#: src/gtk/MainView.cxx:1059
-+#: src/gtk/MainView.cxx:1111
- msgid ""
- "ePDFView is free software; you can redistribute it and/or modify\n"
- "it under the terms of the GNU General Public License as published by\n"
- "the Free Software Foundation; either version 2 of the License, or\n"
- "(at your option) any later version.\n"
- msgstr ""
--"ePDFView Ñ×ÌÑÅÔÓÑ Ó×ÏÂÏÄÎÙÍ ÐÒÏÇÒÁÍÍÎÙÍ ÏÂÅÓÐÅÞÅÎÉÅÍ. \n"
--"÷Ù ×ÐÒÁ×Å ÒÁÓÐÒÏÓÔÒÁÎÑÔØ Å£ É/ÉÌÉ ÍÏÄÉÆÉÃÉÒÏ×ÁÔØ × ÓÏÏÔ×ÅÔÓÔ×ÉÉ Ó\n"
--"ÕÓÌÏ×ÉÑÍÉ ×ÅÒÓÉÉ 2 ÌÉÂÏ ÐÏ ×ÁÛÅÍÕ ×ÙÂÏÒÕ Ó ÕÓÌÏ×ÉÑÍÉ ÂÏÌÅÅ ÐÏÚÄÎÅÊ\n"
--"×ÅÒÓÉÉ óÔÁÎÄÁÒÔÎÏÊ ïÂÝÅÓÔ×ÅÎÎÏÊ ìÉÃÅÎÚÉÉ GNU, ÏÐÕÂÌÉËÏ×ÁÎÎÏÊ\n"
-+"ePDFView ÑвлÑетÑÑ Ñвободным программным обеÑпечением. \n"
-+"Ð’Ñ‹ вправе раÑпроÑтранÑÑ‚ÑŒ её и/или модифицировать в ÑоответÑтвии Ñ\n"
-+"уÑловиÑми верÑии 2 либо по вашему выбору Ñ ÑƒÑловиÑми более поздней\n"
-+"верÑии Стандартной ОбщеÑтвенной Лицензии GNU, опубликованной\n"
- "Free Software Foundation. \n"
-
--#: src/gtk/MainView.cxx:1063
-+#: src/gtk/MainView.cxx:1115
- msgid ""
- "ePDFView is distributes in the hope that it will be useful,\n"
- "but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
- "MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
- "GNU General Public License for more details.\n"
- msgstr ""
--"íÙ ÒÁÓÐÒÏÓÔÒÁÎÑÅÍ ÄÁÎÎÕÀ ÐÒÏÇÒÁÍÍÕ × ÎÁÄÅÖÄÅ ÎÁ ÔÏ, ÞÔÏ ÏÎÁ\n"
--"ÂÕÄÅÔ ×ÁÍ ÐÏÌÅÚÎÏÊ, ÏÄÎÁËÏ îå ðòåäïóôá÷ìñåí îá îå³\n"
--"îéëáëéè çáòáîôéê, × ÔÏÍ ÞÉÓÌÅ çáòáîôéé ôï÷áòîïçï\n"
--"óïóôïñîéñ ðòé ðòïäáöå É ðòéçïäîïóôé äìñ\n"
--"éóðïìøúï÷áîéñ ÷ ëïîëòåôîùè ãåìñè. äÌÑ ÐÏÌÕÞÅÎÉÑ ÂÏÌÅÅ\n"
--"ÐÏÄÒÏÂÎÏÊ ÉÎÆÏÒÍÁÃÉÉ ÏÚÎÁËÏÍØÔÅÓØ ÓÏ óÔÁÎÄÁÒÔÎÏÊ\n"
--"ïÂÝÅÓÔ×ÅÎÎÏÊ ìÉÃÅÎÚÉÅÊ GNU.\n"
-+"Мы раÑпроÑтранÑем данную программу в надежде на то, что она\n"
-+"будет вам полезной, однако ÐЕ ПРЕДОСТÐВЛЯЕМ ÐÐ ÐЕÐ\n"
-+"ÐИКÐКИХ ГÐРÐÐТИЙ, в том чиÑле ГÐРÐÐТИИ ТОВÐРÐОГО\n"
-+"СОСТОЯÐИЯ ПРИ ПРОДÐЖЕ и ПРИГОДÐОСТИ ДЛЯ\n"
-+"ИСПОЛЬЗОВÐÐИЯ Ð’ КОÐКРЕТÐЫХ ЦЕЛЯХ. Ð”Ð»Ñ Ð¿Ð¾Ð»ÑƒÑ‡ÐµÐ½Ð¸Ñ Ð±Ð¾Ð»ÐµÐµ\n"
-+"подробной информации ознакомьтеÑÑŒ Ñо Стандартной\n"
-+"ОбщеÑтвенной Лицензией GNU.\n"
-
--#: src/gtk/MainView.cxx:1067
-+#: src/gtk/MainView.cxx:1119
- msgid ""
- "You should have received a copy of the GNU General Public License\n"
- "along with ePDFView; if not, write to the Free Software Foundation,Inc.,\n"
- "59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n"
- msgstr ""
--"÷Ù ÄÏÌÖÎÙ ÂÙÌÉ ÐÏÌÕÞÉÔØ ËÏÐÉÀ óÔÁÎÄÁÒÔÎÏÊ ïÂÝÅÓÔ×ÅÎÎÏÊ ìÉÃÅÎÚÉÉ GNU\n"
--"×ÍÅÓÔÅ Ó ePDFView; ÅÓÌÉ ÎÅÔ, ÎÁÐÉÛÉÔÅ ÐÉÓØÍÏ × Free Software Foundation,"
-+"Ð’Ñ‹ должны были получить копию Стандартной ОбщеÑтвенной Лицензии GNU\n"
-+"вмеÑте Ñ ePDFView; еÑли нет, напишите пиÑьмо в Free Software Foundation,"
- "Inc.,\n"
--"ÎÁ ÁÄÒÅÓ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n"
-+"на Ð°Ð´Ñ€ÐµÑ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n"
-
--#: src/gtk/MainView.cxx:1076
-+#: src/gtk/MainView.cxx:1128
- msgid "ePDFView"
--msgstr ""
-+msgstr "ePDFView"
-
--#: src/gtk/MainView.cxx:1083
-+#: src/gtk/MainView.cxx:1135
- msgid "translator-credits"
--msgstr "Igor Vagulin <igor_vagulin@mail.ru>"
-+msgstr ""
-+"Igor Vagulin <igor_vagulin@mail.ru>\n"
-+"Sergey Starosek <sergey.starosek@gmail.com>"
-
- #: src/gtk/PreferencesView.cxx:32
- msgid "Preferences"
--msgstr "îÁÓÔÒÏÊËÉ"
-+msgstr "ÐаÑтройки"
-
- #: src/gtk/PreferencesView.cxx:46
- msgid "External Commands"
--msgstr "÷ÎÅÛÎÉÅ ðÒÏÇÒÁÍÍÙ"
-+msgstr "Внешние Программы"
-
- #: src/gtk/PreferencesView.cxx:105
- msgid "Web _Browser:"
--msgstr "éÎÔÅÒÎÅÔ âÒÁÕÚÅÒ"
-+msgstr "Интернет Браузер"
-
- #: src/gtk/PreferencesView.cxx:118
- #, c-format
- msgid "Note: <i>%s</i> will be replaced by the URI."
--msgstr "úÁÍÅÔËÁ: <i>%s</i> ÂÕÄÅÔ ÚÁÍÅÎÅÎÏ ÎÁ URI."
-+msgstr "Заметка: <i>%s</i> будет заменено на URI."
-
- #: src/gtk/PrintView.cxx:51
- msgid "Print"
--msgstr "ðÅÞÁÔØ"
-+msgstr "Печать"
-
- #: src/gtk/PrintView.cxx:69 src/gtk/PrintView.cxx:659
- msgid "Printer"
--msgstr "ðÒÉÎÔÅÒ"
-+msgstr "Принтер"
-
- #: src/gtk/PrintView.cxx:74
- msgid "Job"
--msgstr "úÁÄÁÎÉÅ"
-+msgstr "Задание"
-
- #: src/gtk/PrintView.cxx:79
- msgid "Paper"
--msgstr "âÕÍÁÇÁ"
-+msgstr "Бумага"
-
- #: src/gtk/PrintView.cxx:359
- msgid "<b>Print Range</b>"
--msgstr "<b>äÉÁÐÁÚÏÎ ðÅÞÁÔÉ</b>"
-+msgstr "<b>Диапазон Печати</b>"
-
- #: src/gtk/PrintView.cxx:377
- msgid "_All pages"
--msgstr "_÷ÓÅ ÓÔÒÁÎÉÃÙ"
-+msgstr "_Ð’Ñе Ñтраницы"
-
- #: src/gtk/PrintView.cxx:380
- msgid "_Range:"
--msgstr "_äÉÁÐÁÚÏÎ"
-+msgstr "_Диапазон"
-
- #: src/gtk/PrintView.cxx:392
- msgid "<b>Page Set</b>"
--msgstr ""
-+msgstr "<b>Ðабор Ñтраниц</b>"
-
- #: src/gtk/PrintView.cxx:408
- msgid "A_ll pages"
--msgstr ""
-+msgstr "Ð’Ñе Ñтраницы"
-
- #: src/gtk/PrintView.cxx:412
- msgid "O_dd pages"
--msgstr ""
-+msgstr "Ðечетные"
-
- #: src/gtk/PrintView.cxx:416
- msgid "_Even pages"
--msgstr ""
-+msgstr "Четные"
-
- #: src/gtk/PrintView.cxx:420
- msgid "<b>Copies</b>"
--msgstr "<b>ëÏÐÉÉ</b>"
-+msgstr "<b>Копии</b>"
-
- #: src/gtk/PrintView.cxx:437
- msgid "N_umber of copies:"
--msgstr "ëÏÌÉÞÅÓÔ×Ï ËÏÐÉÊ:"
-+msgstr "КоличеÑтво копий:"
-
- #: src/gtk/PrintView.cxx:444
- msgid "C_ollate"
--msgstr ""
-+msgstr "УпорÑдочить"
-
- #: src/gtk/PrintView.cxx:465
- msgid "<b>Paper and Layout</b>"
--msgstr "<b>óÔÒÁÎÉÃÁ É ÒÁÚÍÅÝÅÎÉÅ</b>"
-+msgstr "<b>Страница и макет</b>"
-
- #: src/gtk/PrintView.cxx:482
- msgid "Paper _Size:"
--msgstr "òÁÚÍÅÒ ÂÕÍÁÇÉ"
-+msgstr "Размер бумаги"
-
- #: src/gtk/PrintView.cxx:508
- msgid "Page _orientation:"
--msgstr ""
-+msgstr "ОриентациÑ:"
-
- #: src/gtk/PrintView.cxx:539
- msgid "_Layout:"
--msgstr "òÁÚÍÅÔËÁ:"
-+msgstr "Макет:"
-
- #: src/gtk/PrintView.cxx:568
- msgid "<b>Output</b>"
--msgstr "<b>÷Ù×ÏÄ</b>"
-+msgstr "<b>Вывод</b>"
-
- #: src/gtk/PrintView.cxx:585
- msgid "_Mode:"
--msgstr "òÅÖÉÍ:"
-+msgstr "Режим:"
-
- #: src/gtk/PrintView.cxx:613
- msgid "_Resolution:"
--msgstr "òÁÚÒÅÛÅÎÉÅ"
-+msgstr "Разрешение"
-
- #: src/gtk/PrintView.cxx:668
- msgid "State"
--msgstr "óÏÓÔÏÑÎÉÅ"
-+msgstr "СоÑтоÑние"
-
- #: src/gtk/PrintView.cxx:677
- msgid "Jobs"
--msgstr "úÁÄÁÎÉÑ"
-+msgstr "ЗаданиÑ"
-
- #: src/gtk/PrintView.cxx:686
- msgid "Location"
--msgstr ""
-+msgstr "РаÑположение"
-
- #: src/gtk/PrintView.cxx:717
- msgid "Plain"
--msgstr ""
-+msgstr "Обычный"
-
- #: src/gtk/PrintView.cxx:723
- msgid "2 pages in 1"
--msgstr "2 ÓÔÒÁÎÉÃÙ ÎÁ 1"
-+msgstr "2 Ñтраницы на 1"
-
- #: src/gtk/PrintView.cxx:729
- msgid "4 pages in 1"
--msgstr "2 ÓÔÒÁÎÉÃÙ ÎÁ 1"
-+msgstr "4 Ñтраницы на 1"
-
- #: src/gtk/PrintView.cxx:744
- msgid "Portrait"
--msgstr "ëÎÉÖÎÙÊ"
-+msgstr "Книга"
-
- #: src/gtk/PrintView.cxx:750
- msgid "Landscape"
--msgstr "áÌØÂÏÍÎÙÊ"
-+msgstr "Ðльбом"
-
- #: src/gtk/StockIcons.cxx:40
- msgid "Find _Next"
--msgstr "îÁÊÔÉ _ÓÌÅÄÕÀÝÅÅ"
-+msgstr "Ðайти _Ñледующее"
-
- #: src/gtk/StockIcons.cxx:41
- msgid "Find _Previous"
--msgstr "îÁÊÔÉ _ÐÒÅÄÙÄÕÝÅÅ"
-+msgstr "Ðайти _предыдущее"
-diff -Nurd epdfview-0.1.6-svn/po/sv.po epdfview/po/sv.po
---- epdfview-0.1.6-svn/po/sv.po 1970-01-01 01:00:00.000000000 +0100
-+++ epdfview/po/sv.po 2008-07-13 12:55:55.083198000 +0200
-@@ -0,0 +1,597 @@
-+# Swedish translation for ePDFView.
-+# Copyright (C) 2007 Free Software Foundation, Inc.
-+# This file is distributed under the same license as the epdfview package.
-+# Daniel Nylander <po@danielnylander.se>, 2007.
-+#
-+msgid ""
-+msgstr ""
-+"Project-Id-Version: ePDFviewer\n"
-+"Report-Msgid-Bugs-To: jordi@emma-soft.com\n"
-+"POT-Creation-Date: 2008-04-14 13:27+0200\n"
-+"PO-Revision-Date: 2007-06-10 16:45+0100\n"
-+"Last-Translator: Daniel Nylander <po@danielnylander.se>\n"
-+"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n"
-+"MIME-Version: 1.0\n"
-+"Content-Type: text/plain; charset=utf-8\n"
-+"Content-Transfer-Encoding: 8bit\n"
-+
-+#: src/FindPter.cxx:187
-+msgid "No Results Found!"
-+msgstr "Inga sökträffar hittades!"
-+
-+#: src/FindPter.cxx:195
-+#, c-format
-+msgid "Searching in page %d of %d..."
-+msgstr "Söker på sida %d av %d..."
-+
-+#: src/IDocument.cxx:82
-+msgid "No error."
-+msgstr "Inga fel."
-+
-+#: src/IDocument.cxx:85
-+msgid "File not found."
-+msgstr "Filen hittades inte."
-+
-+#: src/IDocument.cxx:88
-+msgid "Couldn't read the page catalog."
-+msgstr "Kunde inte läsa sidkatalogen."
-+
-+#: src/IDocument.cxx:91
-+msgid "The PDF file is damaged and can't be repaired."
-+msgstr "PDF-filen är skadad och kan inte repareras."
-+
-+#: src/IDocument.cxx:94
-+msgid "The file is encrypted and the password was incorrect or not supplied."
-+msgstr "Filen är krypterad och lösenordet var felaktigt eller angavs inte."
-+
-+#: src/IDocument.cxx:97
-+msgid "Nonexistent or invalid highlight file."
-+msgstr "Icke-existerande eller ogiltig markeringsfil."
-+
-+#: src/IDocument.cxx:100
-+msgid "Invalid printer."
-+msgstr "Ogiltig skrivare."
-+
-+#: src/IDocument.cxx:103
-+msgid "Error during printing."
-+msgstr "Fel vid utskrift."
-+
-+#: src/IDocument.cxx:106
-+msgid "The PDF file doesn't allow that operation."
-+msgstr "PDF-filen tillåter inte den åtgärden."
-+
-+#: src/IDocument.cxx:109
-+msgid "Invalid page number."
-+msgstr "Ogiltigt sidnummer."
-+
-+#: src/IDocument.cxx:112
-+msgid "File I/O error."
-+msgstr "In/ut-fel."
-+
-+#: src/IDocument.cxx:115
-+#, c-format
-+msgid "Unknown error (%d)."
-+msgstr "Okänt fel (%d)."
-+
-+#: src/main.cxx:59
-+msgid "[FILE] - view PDF documents"
-+msgstr "[FIL] - visa PDF-dokument"
-+
-+#: src/main.cxx:72 src/MainPter.cxx:153
-+msgid "PDF Viewer"
-+msgstr "PDF-visare"
-+
-+#: src/MainPter.cxx:233
-+#, c-format
-+msgid "Reloading file %s..."
-+msgstr "Läser om filen %s..."
-+
-+#: src/MainPter.cxx:237
-+#, c-format
-+msgid "Loading file %s..."
-+msgstr "Läs in filen %s..."
-+
-+#: src/MainPter.cxx:413 src/MainPter.cxx:892
-+#, c-format
-+msgid "of %d"
-+msgstr "av %d"
-+
-+#: src/MainPter.cxx:588
-+#, c-format
-+msgid "Saving document to %s..."
-+msgstr "Sparar dokumentet till %s..."
-+
-+#: src/MainPter.cxx:832 src/MainPter.cxx:871
-+msgid "Error Loading File"
-+msgstr "Fel vid inläsning av fil"
-+
-+#: src/MainPter.cxx:872
-+msgid "The password you have supplied is not a valid password for this file."
-+msgstr ""
-+"Lösenordet som du angav är inte ett giltigt lösenord för den här filen."
-+
-+#: src/MainPter.cxx:953
-+msgid "Error Saving File"
-+msgstr "Fel vid sparning av fil"
-+
-+#: src/PagePter.cxx:338
-+msgid "Loading..."
-+msgstr "Läser in..."
-+
-+#: src/PrintPter.cxx:252
-+msgid "A4"
-+msgstr ""
-+
-+#: src/PrintPter.cxx:280
-+msgid "300 DPI"
-+msgstr ""
-+
-+#: src/PrintPter.cxx:308
-+msgid "Grayscale"
-+msgstr "Gråskala"
-+
-+#: src/PrintPter.cxx:409
-+msgid "Idle"
-+msgstr "Inaktiv"
-+
-+#: src/PrintPter.cxx:412
-+msgid "Stopped"
-+msgstr "Stoppad"
-+
-+#: src/PrintPter.cxx:415
-+msgid "Processing"
-+msgstr "Behandlar"
-+
-+#: src/PrintPter.cxx:418
-+msgid "Unknown"
-+msgstr "Okänt"
-+
-+#: src/PDFDocument.cxx:272
-+#, c-format
-+msgid ""
-+"Failed to load document '%s'.\n"
-+"%s\n"
-+msgstr ""
-+"Misslyckades med att läsa in dokumentet \"%s\".\n"
-+"%s\n"
-+
-+#: src/gtk/FindView.cxx:51
-+msgid "Find:"
-+msgstr "Sök:"
-+
-+#: src/gtk/MainView.cxx:89
-+msgid "_File"
-+msgstr "_Arkiv"
-+
-+#: src/gtk/MainView.cxx:90
-+msgid "_Edit"
-+msgstr "R_edigera"
-+
-+#: src/gtk/MainView.cxx:91
-+msgid "_View"
-+msgstr "_Visa"
-+
-+#: src/gtk/MainView.cxx:92
-+msgid "_Go"
-+msgstr "_GÃ¥"
-+
-+#: src/gtk/MainView.cxx:93
-+msgid "_Help"
-+msgstr "_Hjälp"
-+
-+#: src/gtk/MainView.cxx:95
-+msgid "_Open"
-+msgstr "_Öppna"
-+
-+#: src/gtk/MainView.cxx:96
-+msgid "Open a PDF document"
-+msgstr "Öppna ett PDF-dokument"
-+
-+#: src/gtk/MainView.cxx:99
-+msgid "_Reload"
-+msgstr "_Uppdatera"
-+
-+#: src/gtk/MainView.cxx:100
-+msgid "Reload the current document"
-+msgstr "Läs in det aktuella dokumentet igen"
-+
-+#: src/gtk/MainView.cxx:103
-+msgid "_Save a Copy..."
-+msgstr "_Spara en kopia..."
-+
-+#: src/gtk/MainView.cxx:104
-+msgid "Save a copy of the current document"
-+msgstr "Spara en kopia av det aktuella dokumentet"
-+
-+#: src/gtk/MainView.cxx:108
-+msgid "_Print..."
-+msgstr "Skriv _ut..."
-+
-+#: src/gtk/MainView.cxx:109
-+msgid "Print the current document"
-+msgstr "Skriv ut aktuellt dokument"
-+
-+#: src/gtk/MainView.cxx:113
-+msgid "_Close"
-+msgstr "_Stäng"
-+
-+#: src/gtk/MainView.cxx:114
-+msgid "Close this window"
-+msgstr "Stäng det här fönstret"
-+
-+#: src/gtk/MainView.cxx:117
-+msgid "_Find"
-+msgstr "_Sök"
-+
-+#: src/gtk/MainView.cxx:118
-+msgid "Find a word in the document"
-+msgstr "Hitta ett ord i dokumentet"
-+
-+#: src/gtk/MainView.cxx:121
-+msgid "Preferences..."
-+msgstr "Inställningar..."
-+
-+#: src/gtk/MainView.cxx:122
-+msgid "Change the application's preferences"
-+msgstr "Ändra programmets inställningar"
-+
-+#: src/gtk/MainView.cxx:125
-+msgid "Zoom _In"
-+msgstr "Zooma _in"
-+
-+#: src/gtk/MainView.cxx:126
-+msgid "Enlarge the document"
-+msgstr "Förstora dokumentet"
-+
-+#: src/gtk/MainView.cxx:129
-+msgid "Zoom _Out"
-+msgstr "Zooma _ut"
-+
-+#: src/gtk/MainView.cxx:130
-+msgid "Shrink the document"
-+msgstr "Förminska dokumentet"
-+
-+#: src/gtk/MainView.cxx:133 src/gtk/StockIcons.cxx:43
-+msgid "Rotate _Right"
-+msgstr "Rotera åt _höger"
-+
-+#: src/gtk/MainView.cxx:134
-+msgid "Rotate the document 90 degrees clockwise"
-+msgstr "Rotera dokumentet 90 grader medsols"
-+
-+#: src/gtk/MainView.cxx:137 src/gtk/StockIcons.cxx:42
-+msgid "Rotate _Left"
-+msgstr "Rotera åt _vänster"
-+
-+#: src/gtk/MainView.cxx:138
-+msgid "Rotate the document 90 degrees counter-clockwise"
-+msgstr "Rotera dokumentet 90 grader motsols"
-+
-+#: src/gtk/MainView.cxx:141
-+msgid "_First Page"
-+msgstr "_Första sidan"
-+
-+#: src/gtk/MainView.cxx:142
-+msgid "Go to the first page"
-+msgstr "Gå till första sidan"
-+
-+#: src/gtk/MainView.cxx:145
-+msgid "_Next Page"
-+msgstr "_Nästa sida"
-+
-+#: src/gtk/MainView.cxx:146
-+msgid "Go to the next page"
-+msgstr "Gå till nästa sida"
-+
-+#: src/gtk/MainView.cxx:149
-+msgid "_Previous Page"
-+msgstr "_Föregående sida"
-+
-+#: src/gtk/MainView.cxx:150
-+msgid "Go to the previous page"
-+msgstr "Gå till föregående sida"
-+
-+#: src/gtk/MainView.cxx:153
-+msgid "_Last Page"
-+msgstr "_Sista sidan"
-+
-+#: src/gtk/MainView.cxx:154
-+msgid "Go to the last page"
-+msgstr "GÃ¥ till sista sidan"
-+
-+#: src/gtk/MainView.cxx:157
-+msgid "_About"
-+msgstr "_Om"
-+
-+#: src/gtk/MainView.cxx:158
-+msgid "Display application's credits"
-+msgstr "Visa information om programmet"
-+
-+#: src/gtk/MainView.cxx:175
-+msgid "F_ull screen"
-+msgstr "_Helskärm"
-+
-+#: src/gtk/MainView.cxx:176
-+msgid "Toggle full screen window"
-+msgstr "Växla helskärmsläge"
-+
-+#: src/gtk/MainView.cxx:179
-+msgid "Show _Toolbar"
-+msgstr "Visa _verktygsrad"
-+
-+#: src/gtk/MainView.cxx:180
-+msgid "Show or hide the toolbar"
-+msgstr "Visa eller dölj verktygsraden"
-+
-+#: src/gtk/MainView.cxx:183
-+msgid "Show _Statusbar"
-+msgstr "Visa _statusrad"
-+
-+#: src/gtk/MainView.cxx:184
-+msgid "Show or hide the statusbar"
-+msgstr "Visa eller dölj statusraden"
-+
-+#: src/gtk/MainView.cxx:187
-+msgid "Show I_ndex"
-+msgstr "Visa i_ndex"
-+
-+# Kontur?
-+#: src/gtk/MainView.cxx:188
-+msgid "Show or hide the document's outline"
-+msgstr "Visa eller dölj dokumentets sammandrag"
-+
-+#: src/gtk/MainView.cxx:191
-+msgid "Zoom to _Fit"
-+msgstr "Zooma till hela _fönstret"
-+
-+#: src/gtk/MainView.cxx:192
-+msgid "Make the current document fill the window"
-+msgstr "Gör så att det aktuella dokumentet fyller fönstret"
-+
-+#: src/gtk/MainView.cxx:195 src/gtk/StockIcons.cxx:44
-+msgid "Zoom to _Width"
-+msgstr "Zooma till hela fönstrets _bredd"
-+
-+#: src/gtk/MainView.cxx:196
-+msgid "Make the current document fill the window width"
-+msgstr "Gör så att det aktuella dokumentet fyller fönstrets bredd"
-+
-+#: src/gtk/MainView.cxx:202
-+msgid "Scroll"
-+msgstr ""
-+
-+#: src/gtk/MainView.cxx:203
-+msgid "Mouse scroll page"
-+msgstr ""
-+
-+#: src/gtk/MainView.cxx:205
-+msgid "Select Text"
-+msgstr ""
-+
-+#: src/gtk/MainView.cxx:206
-+msgid " Mouse select text"
-+msgstr ""
-+
-+#: src/gtk/MainView.cxx:320
-+msgid "Open PDF File"
-+msgstr "Öppna PDF-fil"
-+
-+#: src/gtk/MainView.cxx:340 src/gtk/MainView.cxx:454
-+msgid "Portable Document Format (PDF) Files"
-+msgstr "Portable Document Format-filer (PDF)"
-+
-+#: src/gtk/MainView.cxx:352 src/gtk/MainView.cxx:466
-+msgid "All Files"
-+msgstr "Alla filer"
-+
-+#: src/gtk/MainView.cxx:404
-+msgid "Password"
-+msgstr "Lösenord"
-+
-+#: src/gtk/MainView.cxx:428
-+msgid "Save PDF File"
-+msgstr "Spara PDF-fil"
-+
-+#: src/gtk/MainView.cxx:858
-+msgid "Page"
-+msgstr "Sida"
-+
-+#: src/gtk/MainView.cxx:868
-+msgid "of 0"
-+msgstr "av 0"
-+
-+#: src/gtk/MainView.cxx:921
-+msgid "Index"
-+msgstr "Index"
-+
-+#: src/gtk/MainView.cxx:991 src/gtk/MainView.cxx:1001
-+#, c-format
-+msgid "Error building UI manager: %s\n"
-+msgstr "Fel vid byggandet av gränssnittshanteraren: %s\n"
-+
-+#: src/gtk/MainView.cxx:1108
-+msgid "A lightweight PDF viewer"
-+msgstr "En resurssnål PDF-visare"
-+
-+#: src/gtk/MainView.cxx:1111
-+msgid ""
-+"ePDFView is free software; you can redistribute it and/or modify\n"
-+"it under the terms of the GNU General Public License as published by\n"
-+"the Free Software Foundation; either version 2 of the License, or\n"
-+"(at your option) any later version.\n"
-+msgstr ""
-+"ePDFView är fri programvara. Du kan distribuera det och/eller\n"
-+"modifiera det under villkoren i GNU General Public License, publicerad\n"
-+"av Free Software Foundation, antingen version 2 eller (om du så vill)\n"
-+"någon senare version.\n"
-+
-+#: src/gtk/MainView.cxx:1115
-+msgid ""
-+"ePDFView is distributes in the hope that it will be useful,\n"
-+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
-+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
-+"GNU General Public License for more details.\n"
-+msgstr ""
-+"ePDFView distribueras i hopp om att det ska vara användbart,\n"
-+"men UTAN NÅGON SOM HELST GARANTI, även utan underförstådd garanti\n"
-+"om SÄLJBARHET eller LÄMPLIGHET FÖR NÅGOT SPECIELLT ÄNDAMÅL. Se GNU\n"
-+"General Public License för ytterligare information.\n"
-+
-+#: src/gtk/MainView.cxx:1119
-+msgid ""
-+"You should have received a copy of the GNU General Public License\n"
-+"along with ePDFView; if not, write to the Free Software Foundation,Inc.,\n"
-+"59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n"
-+msgstr ""
-+"Du bör ha fått en kopia av GNU General Public License tillsammans\n"
-+"med detta program. Om inte, skriv till Free Software Foundation,Inc.,\n"
-+"59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n"
-+
-+#: src/gtk/MainView.cxx:1128
-+msgid "ePDFView"
-+msgstr "ePDFView"
-+
-+#: src/gtk/MainView.cxx:1135
-+msgid "translator-credits"
-+msgstr "Daniel Nylander <po@danielnylander.se>"
-+
-+#: src/gtk/PreferencesView.cxx:32
-+msgid "Preferences"
-+msgstr "Inställningar"
-+
-+#: src/gtk/PreferencesView.cxx:46
-+msgid "External Commands"
-+msgstr "Externa kommandon"
-+
-+#: src/gtk/PreferencesView.cxx:105
-+msgid "Web _Browser:"
-+msgstr "Webb_läsare:"
-+
-+#: src/gtk/PreferencesView.cxx:118
-+#, c-format
-+msgid "Note: <i>%s</i> will be replaced by the URI."
-+msgstr "Observera: <i>%s</i> kommer att ersättas av URI:n."
-+
-+#: src/gtk/PrintView.cxx:51
-+msgid "Print"
-+msgstr "Skriv ut"
-+
-+#: src/gtk/PrintView.cxx:69 src/gtk/PrintView.cxx:659
-+msgid "Printer"
-+msgstr "Skrivare"
-+
-+#: src/gtk/PrintView.cxx:74
-+msgid "Job"
-+msgstr "Jobb"
-+
-+#: src/gtk/PrintView.cxx:79
-+msgid "Paper"
-+msgstr "Papper"
-+
-+#: src/gtk/PrintView.cxx:359
-+msgid "<b>Print Range</b>"
-+msgstr "<b>Utskriftsintervall</b>"
-+
-+#: src/gtk/PrintView.cxx:377
-+msgid "_All pages"
-+msgstr "_Alla sidor"
-+
-+#: src/gtk/PrintView.cxx:380
-+msgid "_Range:"
-+msgstr "_Intervall:"
-+
-+#: src/gtk/PrintView.cxx:392
-+msgid "<b>Page Set</b>"
-+msgstr "<b>Sidinställningar</b>"
-+
-+#: src/gtk/PrintView.cxx:408
-+msgid "A_ll pages"
-+msgstr "A_lla sidor"
-+
-+#: src/gtk/PrintView.cxx:412
-+msgid "O_dd pages"
-+msgstr "U_dda sidnummer"
-+
-+#: src/gtk/PrintView.cxx:416
-+msgid "_Even pages"
-+msgstr "_Jämna sidnummer"
-+
-+#: src/gtk/PrintView.cxx:420
-+msgid "<b>Copies</b>"
-+msgstr "<b>Kopior</b>"
-+
-+#: src/gtk/PrintView.cxx:437
-+msgid "N_umber of copies:"
-+msgstr "An_tal kopior:"
-+
-+#: src/gtk/PrintView.cxx:444
-+msgid "C_ollate"
-+msgstr "S_ortera"
-+
-+#: src/gtk/PrintView.cxx:465
-+msgid "<b>Paper and Layout</b>"
-+msgstr "<b>Papper och layout</b>"
-+
-+#: src/gtk/PrintView.cxx:482
-+msgid "Paper _Size:"
-+msgstr "Pappersto_rlek:"
-+
-+#: src/gtk/PrintView.cxx:508
-+msgid "Page _orientation:"
-+msgstr "Sid_orientering:"
-+
-+#: src/gtk/PrintView.cxx:539
-+msgid "_Layout:"
-+msgstr "_Layout:"
-+
-+#: src/gtk/PrintView.cxx:568
-+msgid "<b>Output</b>"
-+msgstr "<b>Utmatning</b>"
-+
-+#: src/gtk/PrintView.cxx:585
-+msgid "_Mode:"
-+msgstr "_Läge:"
-+
-+#: src/gtk/PrintView.cxx:613
-+msgid "_Resolution:"
-+msgstr "_Upplösning:"
-+
-+#: src/gtk/PrintView.cxx:668
-+msgid "State"
-+msgstr "Tillstånd"
-+
-+#: src/gtk/PrintView.cxx:677
-+msgid "Jobs"
-+msgstr "Jobb"
-+
-+#: src/gtk/PrintView.cxx:686
-+msgid "Location"
-+msgstr "Plats"
-+
-+#: src/gtk/PrintView.cxx:717
-+msgid "Plain"
-+msgstr "Vanligt"
-+
-+#: src/gtk/PrintView.cxx:723
-+msgid "2 pages in 1"
-+msgstr "2 sidor på 1"
-+
-+#: src/gtk/PrintView.cxx:729
-+msgid "4 pages in 1"
-+msgstr "4 sidor på 1"
-+
-+#: src/gtk/PrintView.cxx:744
-+msgid "Portrait"
-+msgstr "Stående"
-+
-+#: src/gtk/PrintView.cxx:750
-+msgid "Landscape"
-+msgstr "Liggande"
-+
-+#: src/gtk/StockIcons.cxx:40
-+msgid "Find _Next"
-+msgstr "Sök _nästa"
-+
-+#: src/gtk/StockIcons.cxx:41
-+msgid "Find _Previous"
-+msgstr "Sök _föregående"
-diff -Nurd epdfview-0.1.6-svn/po/vi.po epdfview/po/vi.po
---- epdfview-0.1.6-svn/po/vi.po 2008-07-13 12:57:47.543198000 +0200
-+++ epdfview/po/vi.po 2008-07-13 12:55:55.073198000 +0200
-@@ -7,7 +7,7 @@
- msgstr ""
- "Project-Id-Version: ePDFView 0.1.5\n"
- "Report-Msgid-Bugs-To: jordi@emma-soft.com\n"
--"POT-Creation-Date: 2007-02-26 17:47+0100\n"
-+"POT-Creation-Date: 2008-04-14 13:27+0200\n"
- "PO-Revision-Date: 2006-06-14 20:11+0100\n"
- "Last-Translator: VnPenguin <vnpenguin@gmail.com>\n"
- "Language-Team: Vietnamese <i18n@vnoss.org>\n"
-@@ -74,11 +74,11 @@
- msgid "Unknown error (%d)."
- msgstr "Lỗi không xác định (%d)."
-
--#: src/main.cxx:38
-+#: src/main.cxx:59
- msgid "[FILE] - view PDF documents"
- msgstr "[FILE] - xem tài liệu PDF"
-
--#: src/main.cxx:51 src/MainPter.cxx:153
-+#: src/main.cxx:72 src/MainPter.cxx:153
- msgid "PDF Viewer"
- msgstr "Trình xem PDF"
-
-@@ -92,7 +92,7 @@
- msgid "Loading file %s..."
- msgstr "Tải file %s..."
-
--#: src/MainPter.cxx:413 src/MainPter.cxx:886
-+#: src/MainPter.cxx:413 src/MainPter.cxx:892
- #, c-format
- msgid "of %d"
- msgstr "của %d"
-@@ -102,39 +102,47 @@
- msgid "Saving document to %s..."
- msgstr "Äang ghi tài liệu vào %s..."
-
--#: src/MainPter.cxx:826 src/MainPter.cxx:865
-+#: src/MainPter.cxx:832 src/MainPter.cxx:871
- msgid "Error Loading File"
- msgstr "Lỗi tải file"
-
--#: src/MainPter.cxx:866
-+#: src/MainPter.cxx:872
- msgid "The password you have supplied is not a valid password for this file."
- msgstr "Mật mã mà bạn cung cấp là không hợp lệ cho file này."
-
--#: src/MainPter.cxx:947
-+#: src/MainPter.cxx:953
- msgid "Error Saving File"
- msgstr "Lá»—i ghi file"
-
--#: src/PagePter.cxx:292
-+#: src/PagePter.cxx:338
- msgid "Loading..."
- msgstr "Äang tải ..."
-
--#: src/PrintPter.cxx:295
-+#: src/PrintPter.cxx:252
-+msgid "A4"
-+msgstr ""
-+
-+#: src/PrintPter.cxx:280
-+msgid "300 DPI"
-+msgstr ""
-+
-+#: src/PrintPter.cxx:308
- msgid "Grayscale"
- msgstr "Kiểu đen trắng"
-
--#: src/PrintPter.cxx:395
-+#: src/PrintPter.cxx:409
- msgid "Idle"
- msgstr "Nghỉ"
-
--#: src/PrintPter.cxx:398
-+#: src/PrintPter.cxx:412
- msgid "Stopped"
- msgstr "Dừng"
-
--#: src/PrintPter.cxx:401
-+#: src/PrintPter.cxx:415
- msgid "Processing"
- msgstr "Äang xá»­ lý"
-
--#: src/PrintPter.cxx:404
-+#: src/PrintPter.cxx:418
- msgid "Unknown"
- msgstr "Không xác định"
-
-@@ -151,244 +159,260 @@
- msgid "Find:"
- msgstr "Tìm kiếm:"
-
--#: src/gtk/MainView.cxx:87
-+#: src/gtk/MainView.cxx:89
- msgid "_File"
- msgstr "_File"
-
--#: src/gtk/MainView.cxx:88
-+#: src/gtk/MainView.cxx:90
- msgid "_Edit"
- msgstr "_Sửa đổi"
-
--#: src/gtk/MainView.cxx:89
-+#: src/gtk/MainView.cxx:91
- msgid "_View"
- msgstr "_Xem"
-
--#: src/gtk/MainView.cxx:90
-+#: src/gtk/MainView.cxx:92
- msgid "_Go"
- msgstr "_Chuyển trang"
-
--#: src/gtk/MainView.cxx:91
-+#: src/gtk/MainView.cxx:93
- msgid "_Help"
- msgstr "_Trợ giúp"
-
--#: src/gtk/MainView.cxx:93
-+#: src/gtk/MainView.cxx:95
- msgid "_Open"
- msgstr "_Mở file"
-
--#: src/gtk/MainView.cxx:94
-+#: src/gtk/MainView.cxx:96
- msgid "Open a PDF document"
- msgstr "Mở một tài liệu PDF"
-
--#: src/gtk/MainView.cxx:97
-+#: src/gtk/MainView.cxx:99
- msgid "_Reload"
- msgstr "_Tải lại"
-
--#: src/gtk/MainView.cxx:98
-+#: src/gtk/MainView.cxx:100
- msgid "Reload the current document"
- msgstr "Tải lại tài liệu hiện tại"
-
--#: src/gtk/MainView.cxx:101
-+#: src/gtk/MainView.cxx:103
- msgid "_Save a Copy..."
- msgstr "_Lưu một bản..."
-
--#: src/gtk/MainView.cxx:102
-+#: src/gtk/MainView.cxx:104
- msgid "Save a copy of the current document"
- msgstr "Lưu một bản của tài liệu hiện tại"
-
--#: src/gtk/MainView.cxx:106
-+#: src/gtk/MainView.cxx:108
- msgid "_Print..."
- msgstr "_In ra..."
-
--#: src/gtk/MainView.cxx:107
-+#: src/gtk/MainView.cxx:109
- msgid "Print the current document"
- msgstr "In tài liệu hiện tại"
-
--#: src/gtk/MainView.cxx:111
-+#: src/gtk/MainView.cxx:113
- msgid "_Close"
- msgstr "_Äóng"
-
--#: src/gtk/MainView.cxx:112
-+#: src/gtk/MainView.cxx:114
- msgid "Close this window"
- msgstr "Äóng cá»­a sổ này"
-
--#: src/gtk/MainView.cxx:115
-+#: src/gtk/MainView.cxx:117
- msgid "_Find"
- msgstr "_Tìm"
-
--#: src/gtk/MainView.cxx:116
-+#: src/gtk/MainView.cxx:118
- msgid "Find a word in the document"
- msgstr "Tìm một từ trong tài liệu"
-
--#: src/gtk/MainView.cxx:119
-+#: src/gtk/MainView.cxx:121
- msgid "Preferences..."
- msgstr "Xác lập..."
-
--#: src/gtk/MainView.cxx:120
-+#: src/gtk/MainView.cxx:122
- msgid "Change the application's preferences"
- msgstr "Thay đổi các xác lập của ứng dụng"
-
--#: src/gtk/MainView.cxx:123
-+#: src/gtk/MainView.cxx:125
- msgid "Zoom _In"
- msgstr "Phóng _to"
-
--#: src/gtk/MainView.cxx:124
-+#: src/gtk/MainView.cxx:126
- msgid "Enlarge the document"
- msgstr "Phóng to tài liệu"
-
--#: src/gtk/MainView.cxx:127
-+#: src/gtk/MainView.cxx:129
- msgid "Zoom _Out"
- msgstr "Thu _nhá»"
-
--#: src/gtk/MainView.cxx:128
-+#: src/gtk/MainView.cxx:130
- msgid "Shrink the document"
- msgstr "Thu nhỠtài liệu"
-
--#: src/gtk/MainView.cxx:131 src/gtk/StockIcons.cxx:43
-+#: src/gtk/MainView.cxx:133 src/gtk/StockIcons.cxx:43
- msgid "Rotate _Right"
- msgstr "Quay _phải"
-
--#: src/gtk/MainView.cxx:132
-+#: src/gtk/MainView.cxx:134
- msgid "Rotate the document 90 degrees clockwise"
- msgstr "Quay tài liệu hiện tại 90 Ä‘á»™ theo chiá»u kim đồng hồ"
-
--#: src/gtk/MainView.cxx:135 src/gtk/StockIcons.cxx:42
-+#: src/gtk/MainView.cxx:137 src/gtk/StockIcons.cxx:42
- msgid "Rotate _Left"
- msgstr "Quay _trái"
-
--#: src/gtk/MainView.cxx:136
-+#: src/gtk/MainView.cxx:138
- msgid "Rotate the document 90 degrees counter-clockwise"
- msgstr "Quay tài liệu hiện tại 90 Ä‘á»™ theo ngược chiá»u kim đồng hồ"
-
--#: src/gtk/MainView.cxx:139
-+#: src/gtk/MainView.cxx:141
- msgid "_First Page"
- msgstr "_Trang đầu tiên"
-
--#: src/gtk/MainView.cxx:140
-+#: src/gtk/MainView.cxx:142
- msgid "Go to the first page"
- msgstr "Äi đến trang đầu tiên"
-
--#: src/gtk/MainView.cxx:143
-+#: src/gtk/MainView.cxx:145
- msgid "_Next Page"
- msgstr "Trang _kế"
-
--#: src/gtk/MainView.cxx:144
-+#: src/gtk/MainView.cxx:146
- msgid "Go to the next page"
- msgstr "Äi đến trang kế tiếp"
-
--#: src/gtk/MainView.cxx:147
-+#: src/gtk/MainView.cxx:149
- msgid "_Previous Page"
- msgstr "Trang trÆ°á»›c"
-
--#: src/gtk/MainView.cxx:148
-+#: src/gtk/MainView.cxx:150
- msgid "Go to the previous page"
- msgstr "Äi đến trang trÆ°á»›c"
-
--#: src/gtk/MainView.cxx:151
-+#: src/gtk/MainView.cxx:153
- msgid "_Last Page"
- msgstr "Trang cuối"
-
--#: src/gtk/MainView.cxx:152
-+#: src/gtk/MainView.cxx:154
- msgid "Go to the last page"
- msgstr "Äi đến trang cuối"
-
--#: src/gtk/MainView.cxx:155
-+#: src/gtk/MainView.cxx:157
- msgid "_About"
- msgstr "_Vá»..."
-
--#: src/gtk/MainView.cxx:156
-+#: src/gtk/MainView.cxx:158
- msgid "Display application's credits"
- msgstr "Hiển thị danh sách đóng góp"
-
--#: src/gtk/MainView.cxx:166
-+#: src/gtk/MainView.cxx:175
- msgid "F_ull screen"
- msgstr ""
-
--#: src/gtk/MainView.cxx:167
-+#: src/gtk/MainView.cxx:176
- msgid "Toggle full screen window"
- msgstr ""
-
--#: src/gtk/MainView.cxx:170
-+#: src/gtk/MainView.cxx:179
- msgid "Show _Toolbar"
- msgstr "Hiển thị thanh công cụ"
-
--#: src/gtk/MainView.cxx:171
-+#: src/gtk/MainView.cxx:180
- msgid "Show or hide the toolbar"
- msgstr "Hiển thị hoặc dấu thanh công cụ"
-
--#: src/gtk/MainView.cxx:174
-+#: src/gtk/MainView.cxx:183
- msgid "Show _Statusbar"
- msgstr "Hiển thị thanh trạng thái"
-
--#: src/gtk/MainView.cxx:175
-+#: src/gtk/MainView.cxx:184
- msgid "Show or hide the statusbar"
- msgstr "Hiển thị hoặc dấu thanh trạng thái"
-
--#: src/gtk/MainView.cxx:178
-+#: src/gtk/MainView.cxx:187
- msgid "Show I_ndex"
- msgstr "Hiển thị chỉ mục"
-
--#: src/gtk/MainView.cxx:179
-+#: src/gtk/MainView.cxx:188
- msgid "Show or hide the document's outline"
- msgstr "Hiển thị hoặc dấu hình dáng bên ngoài của tài liệu"
-
--#: src/gtk/MainView.cxx:182
-+#: src/gtk/MainView.cxx:191
- msgid "Zoom to _Fit"
- msgstr "Hiệu chỉnh _hợp với cửa sổ"
-
--#: src/gtk/MainView.cxx:183
-+#: src/gtk/MainView.cxx:192
- msgid "Make the current document fill the window"
- msgstr "Hiệu chỉnh tài liệu hiện tại lấp đầy cửa sổ"
-
--#: src/gtk/MainView.cxx:186 src/gtk/StockIcons.cxx:44
-+#: src/gtk/MainView.cxx:195 src/gtk/StockIcons.cxx:44
- msgid "Zoom to _Width"
- msgstr "Hiệu chỉnh theo bỠ_rộng trang"
-
--#: src/gtk/MainView.cxx:187
-+#: src/gtk/MainView.cxx:196
- msgid "Make the current document fill the window width"
- msgstr "Hiệu chỉnh tài liệu hiện tại hợp với bỠrộng trang"
-
--#: src/gtk/MainView.cxx:278
-+#: src/gtk/MainView.cxx:202
-+msgid "Scroll"
-+msgstr ""
-+
-+#: src/gtk/MainView.cxx:203
-+msgid "Mouse scroll page"
-+msgstr ""
-+
-+#: src/gtk/MainView.cxx:205
-+msgid "Select Text"
-+msgstr ""
-+
-+#: src/gtk/MainView.cxx:206
-+msgid " Mouse select text"
-+msgstr ""
-+
-+#: src/gtk/MainView.cxx:320
- msgid "Open PDF File"
- msgstr "Mở file PDF"
-
--#: src/gtk/MainView.cxx:298 src/gtk/MainView.cxx:412
-+#: src/gtk/MainView.cxx:340 src/gtk/MainView.cxx:454
- msgid "Portable Document Format (PDF) Files"
- msgstr "file PDF"
-
--#: src/gtk/MainView.cxx:310 src/gtk/MainView.cxx:424
-+#: src/gtk/MainView.cxx:352 src/gtk/MainView.cxx:466
- msgid "All Files"
- msgstr "Tất cả các file"
-
--#: src/gtk/MainView.cxx:362
-+#: src/gtk/MainView.cxx:404
- msgid "Password"
- msgstr "Mật mã"
-
--#: src/gtk/MainView.cxx:386
-+#: src/gtk/MainView.cxx:428
- msgid "Save PDF File"
- msgstr "LÆ°u file PDF"
-
--#: src/gtk/MainView.cxx:816
-+#: src/gtk/MainView.cxx:858
- msgid "Page"
- msgstr "Trang"
-
--#: src/gtk/MainView.cxx:826
-+#: src/gtk/MainView.cxx:868
- msgid "of 0"
- msgstr "0/0"
-
--#: src/gtk/MainView.cxx:879
-+#: src/gtk/MainView.cxx:921
- msgid "Index"
- msgstr "Chỉ mục"
-
--#: src/gtk/MainView.cxx:946 src/gtk/MainView.cxx:956
-+#: src/gtk/MainView.cxx:991 src/gtk/MainView.cxx:1001
- #, c-format
- msgid "Error building UI manager: %s\n"
- msgstr "Lá»—i khi tạo quản lý giao diện ngÆ°á»i dùng: %s\n"
-
--#: src/gtk/MainView.cxx:1056
-+#: src/gtk/MainView.cxx:1108
- msgid "A lightweight PDF viewer"
- msgstr "Má»™t trình xem PDF nhá» gá»n"
-
--#: src/gtk/MainView.cxx:1059
-+#: src/gtk/MainView.cxx:1111
- msgid ""
- "ePDFView is free software; you can redistribute it and/or modify\n"
- "it under the terms of the GNU General Public License as published by\n"
-@@ -400,7 +424,7 @@
- "bởi Free Software Foundation; phiên bản 2 hoặc (theo lá»±a chá»n của bạn)\n"
- " bất kì phiên bản mới nào.\n"
-
--#: src/gtk/MainView.cxx:1063
-+#: src/gtk/MainView.cxx:1115
- msgid ""
- "ePDFView is distributes in the hope that it will be useful,\n"
- "but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
-@@ -412,7 +436,7 @@
- "ngay cả cho MERCHANTABILITY hoặc FITNESS FOR A PARTICULAR PURPOSE.\n"
- " Xem giấy phép GNU GPL để biết thêm chi tiết.\n"
-
--#: src/gtk/MainView.cxx:1067
-+#: src/gtk/MainView.cxx:1119
- msgid ""
- "You should have received a copy of the GNU General Public License\n"
- "along with ePDFView; if not, write to the Free Software Foundation,Inc.,\n"
-@@ -422,11 +446,11 @@
- "ePDFView; nếu không, thì hãy liên lạc Free Software Foundation, Inc., 59 "
- "Temple Place, Suite 330, Boston, MA 02111-1307 USA\n"
-
--#: src/gtk/MainView.cxx:1076
-+#: src/gtk/MainView.cxx:1128
- msgid "ePDFView"
- msgstr "ePDFView"
-
--#: src/gtk/MainView.cxx:1083
-+#: src/gtk/MainView.cxx:1135
- msgid "translator-credits"
- msgstr "VnPenguin <vnpenguin@gmail.com>"
-
-diff -Nurd epdfview-0.1.6-svn/po/zh_CN.po epdfview/po/zh_CN.po
---- epdfview-0.1.6-svn/po/zh_CN.po 1970-01-01 01:00:00.000000000 +0100
-+++ epdfview/po/zh_CN.po 2008-07-13 12:55:55.083198000 +0200
-@@ -0,0 +1,593 @@
-+# Simplified Chinese Messages for epdfview.
-+# Copyright (C) 2007 Free Software Foundation, Inc.
-+# This file is distributed under the same license as the epdfview package.
-+# Changyan Xie <panchoat@gmail.com>, 2007.
-+#
-+msgid ""
-+msgstr ""
-+"Project-Id-Version: epdfview 0.1.5\n"
-+"Report-Msgid-Bugs-To: jordi@emma-soft.com\n"
-+"POT-Creation-Date: 2008-04-14 13:27+0200\n"
-+"PO-Revision-Date: 2006-06-19 10:47+0800\n"
-+"Last-Translator: Changyan Xie <panchoat@gmail.com>\n"
-+"Language-Team: Changyan Xie <panchoat@gmail.com>\n"
-+"MIME-Version: 1.0\n"
-+"Content-Type: text/plain; charset=UTF-8\n"
-+"Content-Transfer-Encoding: 8bit\n"
-+"Plural-Forms: nplurals=1; plural=0;\n"
-+
-+#: src/FindPter.cxx:187
-+msgid "No Results Found!"
-+msgstr "找ä¸åˆ°ä»»ä½•ç»“æžœï¼"
-+
-+#: src/FindPter.cxx:195
-+#, c-format
-+msgid "Searching in page %d of %d..."
-+msgstr "正在查找 %2$d 页中的第 %1$d 页…"
-+
-+#: src/IDocument.cxx:82
-+msgid "No error."
-+msgstr "没有错误。"
-+
-+#: src/IDocument.cxx:85
-+msgid "File not found."
-+msgstr "找ä¸åˆ°æ–‡ä»¶ã€‚"
-+
-+#: src/IDocument.cxx:88
-+msgid "Couldn't read the page catalog."
-+msgstr "无法读å–页é¢åˆ†ç±»ã€‚"
-+
-+#: src/IDocument.cxx:91
-+msgid "The PDF file is damaged and can't be repaired."
-+msgstr "PDF 文件å—æŸè€Œä¸”无法修å¤ã€‚"
-+
-+#: src/IDocument.cxx:94
-+msgid "The file is encrypted and the password was incorrect or not supplied."
-+msgstr "文件已加密而且密ç æ˜¯ä¸æ­£ç¡®æˆ–是无法æ供的。"
-+
-+#: src/IDocument.cxx:97
-+msgid "Nonexistent or invalid highlight file."
-+msgstr "ä¸å­˜åœ¨æˆ–无效的高亮度文件。"
-+
-+#: src/IDocument.cxx:100
-+msgid "Invalid printer."
-+msgstr "无效的打å°æœºã€‚"
-+
-+#: src/IDocument.cxx:103
-+msgid "Error during printing."
-+msgstr "打å°æ—¶å‘生错误"
-+
-+#: src/IDocument.cxx:106
-+msgid "The PDF file doesn't allow that operation."
-+msgstr "PDF 文件ä¸å…许该项æ“作。"
-+
-+#: src/IDocument.cxx:109
-+msgid "Invalid page number."
-+msgstr "无效的页ç ã€‚"
-+
-+#: src/IDocument.cxx:112
-+msgid "File I/O error."
-+msgstr "文件 I/O 错误。"
-+
-+#: src/IDocument.cxx:115
-+#, c-format
-+msgid "Unknown error (%d)."
-+msgstr "ä¸æ˜Žçš„错误 (%d)。"
-+
-+#: src/main.cxx:59
-+msgid "[FILE] - view PDF documents"
-+msgstr "[FILE] - æµè§ˆ PDF 文件"
-+
-+#: src/main.cxx:72 src/MainPter.cxx:153
-+msgid "PDF Viewer"
-+msgstr "PDF æµè§ˆå™¨"
-+
-+#: src/MainPter.cxx:233
-+#, c-format
-+msgid "Reloading file %s..."
-+msgstr "正在é‡æ–°è£…载文件 %s…"
-+
-+#: src/MainPter.cxx:237
-+#, c-format
-+msgid "Loading file %s..."
-+msgstr "装载文件 %s…"
-+
-+#: src/MainPter.cxx:413 src/MainPter.cxx:892
-+#, c-format
-+msgid "of %d"
-+msgstr "之于 %d"
-+
-+#: src/MainPter.cxx:588
-+#, c-format
-+msgid "Saving document to %s..."
-+msgstr "ä¿å­˜æ–‡ä»¶è‡³ %s…"
-+
-+#: src/MainPter.cxx:832 src/MainPter.cxx:871
-+msgid "Error Loading File"
-+msgstr "装载文件时å‘生错误"
-+
-+#: src/MainPter.cxx:872
-+msgid "The password you have supplied is not a valid password for this file."
-+msgstr "您æ供的密ç å¯¹äºŽæ­¤æ–‡ä»¶æ— æ•ˆã€‚"
-+
-+#: src/MainPter.cxx:953
-+msgid "Error Saving File"
-+msgstr "ä¿å­˜æ–‡ä»¶æ—¶å‘生错误"
-+
-+#: src/PagePter.cxx:338
-+msgid "Loading..."
-+msgstr "装载…"
-+
-+#: src/PrintPter.cxx:252
-+msgid "A4"
-+msgstr ""
-+
-+#: src/PrintPter.cxx:280
-+msgid "300 DPI"
-+msgstr ""
-+
-+#: src/PrintPter.cxx:308
-+msgid "Grayscale"
-+msgstr "ç°åº¦"
-+
-+#: src/PrintPter.cxx:409
-+msgid "Idle"
-+msgstr "闲置"
-+
-+#: src/PrintPter.cxx:412
-+msgid "Stopped"
-+msgstr "å·²åœæ­¢"
-+
-+#: src/PrintPter.cxx:415
-+msgid "Processing"
-+msgstr "处ç†ä¸­"
-+
-+#: src/PrintPter.cxx:418
-+msgid "Unknown"
-+msgstr "未知"
-+
-+#: src/PDFDocument.cxx:272
-+#, c-format
-+msgid ""
-+"Failed to load document '%s'.\n"
-+"%s\n"
-+msgstr ""
-+"装载文件 '%s' 时失败。\n"
-+"%s\n"
-+
-+#: src/gtk/FindView.cxx:51
-+msgid "Find:"
-+msgstr "查找:"
-+
-+#: src/gtk/MainView.cxx:89
-+msgid "_File"
-+msgstr "文件(_F)"
-+
-+#: src/gtk/MainView.cxx:90
-+msgid "_Edit"
-+msgstr "编辑(_E)"
-+
-+#: src/gtk/MainView.cxx:91
-+msgid "_View"
-+msgstr "æµè§ˆ(_V)"
-+
-+#: src/gtk/MainView.cxx:92
-+msgid "_Go"
-+msgstr "å‰å¾€(_G)"
-+
-+#: src/gtk/MainView.cxx:93
-+msgid "_Help"
-+msgstr "帮助(_H)"
-+
-+#: src/gtk/MainView.cxx:95
-+msgid "_Open"
-+msgstr "打开(_O)"
-+
-+#: src/gtk/MainView.cxx:96
-+msgid "Open a PDF document"
-+msgstr "打开 PDF 文件"
-+
-+#: src/gtk/MainView.cxx:99
-+msgid "_Reload"
-+msgstr "é‡æ–°è£…è½½(_R)"
-+
-+#: src/gtk/MainView.cxx:100
-+msgid "Reload the current document"
-+msgstr "é‡æ–°è£…载当å‰æ–‡ä»¶"
-+
-+#: src/gtk/MainView.cxx:103
-+msgid "_Save a Copy..."
-+msgstr "ä¿å­˜å‰¯æœ¬(_S)…"
-+
-+#: src/gtk/MainView.cxx:104
-+msgid "Save a copy of the current document"
-+msgstr "ä¿å­˜å½“å‰æ–‡ä»¶çš„副本"
-+
-+#: src/gtk/MainView.cxx:108
-+msgid "_Print..."
-+msgstr "打å°(_P)…"
-+
-+#: src/gtk/MainView.cxx:109
-+msgid "Print the current document"
-+msgstr "打å°å½“å‰æ–‡ä»¶"
-+
-+#: src/gtk/MainView.cxx:113
-+msgid "_Close"
-+msgstr "关闭(_C)"
-+
-+#: src/gtk/MainView.cxx:114
-+msgid "Close this window"
-+msgstr "关闭此窗å£"
-+
-+#: src/gtk/MainView.cxx:117
-+msgid "_Find"
-+msgstr "查找(_F)"
-+
-+#: src/gtk/MainView.cxx:118
-+msgid "Find a word in the document"
-+msgstr "在文件中查找字è¯"
-+
-+#: src/gtk/MainView.cxx:121
-+msgid "Preferences..."
-+msgstr "å好设定…"
-+
-+#: src/gtk/MainView.cxx:122
-+msgid "Change the application's preferences"
-+msgstr "改å˜åº”用软件的å好设定"
-+
-+#: src/gtk/MainView.cxx:125
-+msgid "Zoom _In"
-+msgstr "放大(_I)"
-+
-+#: src/gtk/MainView.cxx:126
-+msgid "Enlarge the document"
-+msgstr "放大文件"
-+
-+#: src/gtk/MainView.cxx:129
-+msgid "Zoom _Out"
-+msgstr "缩å°(_O)"
-+
-+#: src/gtk/MainView.cxx:130
-+msgid "Shrink the document"
-+msgstr "缩å°æ–‡ä»¶"
-+
-+#: src/gtk/MainView.cxx:133 src/gtk/StockIcons.cxx:43
-+msgid "Rotate _Right"
-+msgstr "å‘å³æ—‹è½¬(_R)"
-+
-+#: src/gtk/MainView.cxx:134
-+msgid "Rotate the document 90 degrees clockwise"
-+msgstr "顺时针旋转文件 90 度"
-+
-+#: src/gtk/MainView.cxx:137 src/gtk/StockIcons.cxx:42
-+msgid "Rotate _Left"
-+msgstr "å‘左旋转(_L)"
-+
-+#: src/gtk/MainView.cxx:138
-+msgid "Rotate the document 90 degrees counter-clockwise"
-+msgstr "逆时针旋转文件 90 度"
-+
-+#: src/gtk/MainView.cxx:141
-+msgid "_First Page"
-+msgstr "第一页(_F)"
-+
-+#: src/gtk/MainView.cxx:142
-+msgid "Go to the first page"
-+msgstr "å‰å¾€ç¬¬ä¸€é¡µ"
-+
-+#: src/gtk/MainView.cxx:145
-+msgid "_Next Page"
-+msgstr "下一页(_N)"
-+
-+#: src/gtk/MainView.cxx:146
-+msgid "Go to the next page"
-+msgstr "å‰å¾€ä¸‹ä¸€é¡µ"
-+
-+#: src/gtk/MainView.cxx:149
-+msgid "_Previous Page"
-+msgstr "上一页(_P)"
-+
-+#: src/gtk/MainView.cxx:150
-+msgid "Go to the previous page"
-+msgstr "å‰å¾€ä¸Šä¸€é¡µ"
-+
-+#: src/gtk/MainView.cxx:153
-+msgid "_Last Page"
-+msgstr "最åŽä¸€é¡µ(_L)"
-+
-+#: src/gtk/MainView.cxx:154
-+msgid "Go to the last page"
-+msgstr "å‰å¾€æœ€åŽä¸€é¡µ"
-+
-+#: src/gtk/MainView.cxx:157
-+msgid "_About"
-+msgstr "关于(_A)"
-+
-+#: src/gtk/MainView.cxx:158
-+msgid "Display application's credits"
-+msgstr "显示应用程åºçš„æ„Ÿè°¢"
-+
-+#: src/gtk/MainView.cxx:175
-+msgid "F_ull screen"
-+msgstr "å…¨å±(_F)"
-+
-+#: src/gtk/MainView.cxx:176
-+msgid "Toggle full screen window"
-+msgstr "开关全å±æ¨¡å¼"
-+
-+#: src/gtk/MainView.cxx:179
-+msgid "Show _Toolbar"
-+msgstr "显示工具æ (_T)"
-+
-+#: src/gtk/MainView.cxx:180
-+msgid "Show or hide the toolbar"
-+msgstr "显示或éšè—工具æ "
-+
-+#: src/gtk/MainView.cxx:183
-+msgid "Show _Statusbar"
-+msgstr "显示状æ€æ (_S)"
-+
-+#: src/gtk/MainView.cxx:184
-+msgid "Show or hide the statusbar"
-+msgstr "显示或éšè—状æ€æ "
-+
-+#: src/gtk/MainView.cxx:187
-+msgid "Show I_ndex"
-+msgstr "显示索引(_N)"
-+
-+#: src/gtk/MainView.cxx:188
-+msgid "Show or hide the document's outline"
-+msgstr "显示或éšè—文件外框"
-+
-+#: src/gtk/MainView.cxx:191
-+msgid "Zoom to _Fit"
-+msgstr "符åˆçª—å£(_F)"
-+
-+#: src/gtk/MainView.cxx:192
-+msgid "Make the current document fill the window"
-+msgstr "将当å‰æ–‡ä»¶å¡«æ»¡çª—å£"
-+
-+#: src/gtk/MainView.cxx:195 src/gtk/StockIcons.cxx:44
-+msgid "Zoom to _Width"
-+msgstr "符åˆå®½åº¦(_W)"
-+
-+#: src/gtk/MainView.cxx:196
-+msgid "Make the current document fill the window width"
-+msgstr "将当å‰æ–‡ä»¶ç¬¦åˆçª—å£å®½åº¦"
-+
-+#: src/gtk/MainView.cxx:202
-+msgid "Scroll"
-+msgstr ""
-+
-+#: src/gtk/MainView.cxx:203
-+msgid "Mouse scroll page"
-+msgstr ""
-+
-+#: src/gtk/MainView.cxx:205
-+msgid "Select Text"
-+msgstr ""
-+
-+#: src/gtk/MainView.cxx:206
-+msgid " Mouse select text"
-+msgstr ""
-+
-+#: src/gtk/MainView.cxx:320
-+msgid "Open PDF File"
-+msgstr "打开 PDF 文件"
-+
-+#: src/gtk/MainView.cxx:340 src/gtk/MainView.cxx:454
-+msgid "Portable Document Format (PDF) Files"
-+msgstr "å¯æºå¼æ–‡ä»¶æ ¼å¼ (PDF) 文件"
-+
-+#: src/gtk/MainView.cxx:352 src/gtk/MainView.cxx:466
-+msgid "All Files"
-+msgstr "所有文件"
-+
-+#: src/gtk/MainView.cxx:404
-+msgid "Password"
-+msgstr "密ç "
-+
-+#: src/gtk/MainView.cxx:428
-+msgid "Save PDF File"
-+msgstr "ä¿å­˜ PDF 文件"
-+
-+#: src/gtk/MainView.cxx:858
-+msgid "Page"
-+msgstr "页é¢"
-+
-+#: src/gtk/MainView.cxx:868
-+msgid "of 0"
-+msgstr "之于 0"
-+
-+#: src/gtk/MainView.cxx:921
-+msgid "Index"
-+msgstr "索引"
-+
-+#: src/gtk/MainView.cxx:991 src/gtk/MainView.cxx:1001
-+#, c-format
-+msgid "Error building UI manager: %s\n"
-+msgstr "建立 UI 管ç†å‘˜æ—¶å‘生错误:%s\n"
-+
-+#: src/gtk/MainView.cxx:1108
-+msgid "A lightweight PDF viewer"
-+msgstr "è½»é‡çº§çš„ PDF æµè§ˆå™¨"
-+
-+#: src/gtk/MainView.cxx:1111
-+msgid ""
-+"ePDFView is free software; you can redistribute it and/or modify\n"
-+"it under the terms of the GNU General Public License as published by\n"
-+"the Free Software Foundation; either version 2 of the License, or\n"
-+"(at your option) any later version.\n"
-+msgstr ""
-+"ePDFView 为自由软件;您å¯ä¾æ®è‡ªç”±è½¯ä»¶åŸºé‡‘会所å‘表的 GNU 通用公共授æƒ\n"
-+"æ¡æ¬¾è§„定,就本程åºé‡æ–°åˆ†å‘与ï¼æˆ–修改;无论您ä¾æ®çš„是本授æƒçš„第二版或\n"
-+"(您自行选择的)任何ç¨åŽå‘行的版本。\n"
-+
-+#: src/gtk/MainView.cxx:1115
-+msgid ""
-+"ePDFView is distributes in the hope that it will be useful,\n"
-+"but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
-+"MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n"
-+"GNU General Public License for more details.\n"
-+msgstr ""
-+"ePDFView 系基于使用目的而加以分å‘,然而ä¸è´Ÿä»»ä½•æ‹…ä¿è´£ä»»ï¼›äº¦æ— å¯¹é€‚售性\n"
-+"或特定目的适用性所为的默示性担ä¿ã€‚详情请å‚ç…§ GNU 通用公共授æƒã€‚\n"
-+
-+#: src/gtk/MainView.cxx:1119
-+msgid ""
-+"You should have received a copy of the GNU General Public License\n"
-+"along with ePDFView; if not, write to the Free Software Foundation,Inc.,\n"
-+"59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n"
-+msgstr ""
-+"您应已收到附éšäºŽ ePDFView çš„ GNU 通用公共授æƒçš„副本;如无,请写信至\n"
-+"自由软件基金会: \n"
-+"59 Temple Place – Suite 330, Boston, Ma 02111-1307, USA。\n"
-+
-+#: src/gtk/MainView.cxx:1128
-+msgid "ePDFView"
-+msgstr "ePDFView"
-+
-+#: src/gtk/MainView.cxx:1135
-+msgid "translator-credits"
-+msgstr "è°¢é•¿é› <panchoat@gmail.com>"
-+
-+#: src/gtk/PreferencesView.cxx:32
-+msgid "Preferences"
-+msgstr "å好设定"
-+
-+#: src/gtk/PreferencesView.cxx:46
-+msgid "External Commands"
-+msgstr "外部命令"
-+
-+#: src/gtk/PreferencesView.cxx:105
-+msgid "Web _Browser:"
-+msgstr "网页æµè§ˆå™¨(_B):"
-+
-+#: src/gtk/PreferencesView.cxx:118
-+#, c-format
-+msgid "Note: <i>%s</i> will be replaced by the URI."
-+msgstr "注æ„:<i>%s</i> 将会被 URI 所å–代。"
-+
-+#: src/gtk/PrintView.cxx:51
-+msgid "Print"
-+msgstr "打å°"
-+
-+#: src/gtk/PrintView.cxx:69 src/gtk/PrintView.cxx:659
-+msgid "Printer"
-+msgstr "打å°æœº"
-+
-+#: src/gtk/PrintView.cxx:74
-+msgid "Job"
-+msgstr "工作"
-+
-+#: src/gtk/PrintView.cxx:79
-+msgid "Paper"
-+msgstr "纸张"
-+
-+#: src/gtk/PrintView.cxx:359
-+msgid "<b>Print Range</b>"
-+msgstr "<b>打å°èŒƒå›´</b>"
-+
-+#: src/gtk/PrintView.cxx:377
-+msgid "_All pages"
-+msgstr "所有页é¢(_A)"
-+
-+#: src/gtk/PrintView.cxx:380
-+msgid "_Range:"
-+msgstr "范围(_R):"
-+
-+#: src/gtk/PrintView.cxx:392
-+msgid "<b>Page Set</b>"
-+msgstr "<b>页é¢è®¾å®š</b>"
-+
-+#: src/gtk/PrintView.cxx:408
-+msgid "A_ll pages"
-+msgstr "所有页é¢(_L)"
-+
-+#: src/gtk/PrintView.cxx:412
-+msgid "O_dd pages"
-+msgstr "奇数页é¢(_D)"
-+
-+#: src/gtk/PrintView.cxx:416
-+msgid "_Even pages"
-+msgstr "å¶æ•°é¡µé¢(_E)"
-+
-+#: src/gtk/PrintView.cxx:420
-+msgid "<b>Copies</b>"
-+msgstr "<b>份数</b>"
-+
-+#: src/gtk/PrintView.cxx:437
-+msgid "N_umber of copies:"
-+msgstr "副本的数é‡ï¼š"
-+
-+#: src/gtk/PrintView.cxx:444
-+msgid "C_ollate"
-+msgstr "自动分页(_O)"
-+
-+#: src/gtk/PrintView.cxx:465
-+msgid "<b>Paper and Layout</b>"
-+msgstr "<b>纸张和版é¢</b>"
-+
-+#: src/gtk/PrintView.cxx:482
-+msgid "Paper _Size:"
-+msgstr "纸张大å°(_S):"
-+
-+#: src/gtk/PrintView.cxx:508
-+msgid "Page _orientation:"
-+msgstr "纸张方å‘(_O):"
-+
-+#: src/gtk/PrintView.cxx:539
-+msgid "_Layout:"
-+msgstr "版é¢(_L)"
-+
-+#: src/gtk/PrintView.cxx:568
-+msgid "<b>Output</b>"
-+msgstr "<b>输出</b>"
-+
-+#: src/gtk/PrintView.cxx:585
-+msgid "_Mode:"
-+msgstr "模å¼(_M):"
-+
-+#: src/gtk/PrintView.cxx:613
-+msgid "_Resolution:"
-+msgstr "分辨率(_R):"
-+
-+#: src/gtk/PrintView.cxx:668
-+msgid "State"
-+msgstr "状æ€"
-+
-+#: src/gtk/PrintView.cxx:677
-+msgid "Jobs"
-+msgstr "工作"
-+
-+#: src/gtk/PrintView.cxx:686
-+msgid "Location"
-+msgstr "ä½ç½®"
-+
-+#: src/gtk/PrintView.cxx:717
-+msgid "Plain"
-+msgstr "普通"
-+
-+#: src/gtk/PrintView.cxx:723
-+msgid "2 pages in 1"
-+msgstr "两页åˆä¸€"
-+
-+#: src/gtk/PrintView.cxx:729
-+msgid "4 pages in 1"
-+msgstr "四页åˆä¸€"
-+
-+#: src/gtk/PrintView.cxx:744
-+msgid "Portrait"
-+msgstr "纵å‘"
-+
-+#: src/gtk/PrintView.cxx:750
-+msgid "Landscape"
-+msgstr "横å‘"
-+
-+#: src/gtk/StockIcons.cxx:40
-+msgid "Find _Next"
-+msgstr "查找下一个(_N)"
-+
-+#: src/gtk/StockIcons.cxx:41
-+msgid "Find _Previous"
-+msgstr "查找上一个(_P)"
-diff -Nurd epdfview-0.1.6-svn/po/zh_TW.po epdfview/po/zh_TW.po
---- epdfview-0.1.6-svn/po/zh_TW.po 2008-07-13 12:57:47.543198000 +0200
-+++ epdfview/po/zh_TW.po 2008-07-13 12:55:55.083198000 +0200
-@@ -1,14 +1,13 @@
- # Traditional Chinese Messages for epdfview.
--# Copyright (C) 2006 Free Software Foundation, Inc.
- # This file is distributed under the same license as the epdfview package.
--# Wei-Lun Chao <william.chao@ossii.com.tw>, 2006.
-+# Wei-Lun Chao <william.chao@ossii.com.tw>, 2006, 07.
- #
- msgid ""
- msgstr ""
--"Project-Id-Version: epdfview 0.1.5\n"
-+"Project-Id-Version: epdfview 0.1.6\n"
- "Report-Msgid-Bugs-To: jordi@emma-soft.com\n"
--"POT-Creation-Date: 2007-02-26 17:47+0100\n"
--"PO-Revision-Date: 2006-06-19 10:47+0800\n"
-+"POT-Creation-Date: 2008-04-14 13:27+0200\n"
-+"PO-Revision-Date: 2007-04-20 12:47+0800\n"
- "Last-Translator: Wei-Lun Chao <william.chao@ossii.com.tw>\n"
- "Language-Team: Chinese (traditional) <zh-l10n@linux.org.tw>\n"
- "MIME-Version: 1.0\n"
-@@ -74,11 +73,11 @@
- msgid "Unknown error (%d)."
- msgstr "ä¸æ˜Žçš„錯誤 (%d)。"
-
--#: src/main.cxx:38
-+#: src/main.cxx:59
- msgid "[FILE] - view PDF documents"
- msgstr "[FILE] - 檢視 PDF 文件"
-
--#: src/main.cxx:51 src/MainPter.cxx:153
-+#: src/main.cxx:72 src/MainPter.cxx:153
- msgid "PDF Viewer"
- msgstr "PDF 檢視器"
-
-@@ -92,7 +91,7 @@
- msgid "Loading file %s..."
- msgstr "載入檔案 %s…"
-
--#: src/MainPter.cxx:413 src/MainPter.cxx:886
-+#: src/MainPter.cxx:413 src/MainPter.cxx:892
- #, c-format
- msgid "of %d"
- msgstr "之於 %d"
-@@ -102,39 +101,47 @@
- msgid "Saving document to %s..."
- msgstr "儲存文件至 %s…"
-
--#: src/MainPter.cxx:826 src/MainPter.cxx:865
-+#: src/MainPter.cxx:832 src/MainPter.cxx:871
- msgid "Error Loading File"
- msgstr "載入檔案時發生錯誤"
-
--#: src/MainPter.cxx:866
-+#: src/MainPter.cxx:872
- msgid "The password you have supplied is not a valid password for this file."
- msgstr "您æ供的密碼å°æ–¼æ­¤æª”案無效。"
-
--#: src/MainPter.cxx:947
-+#: src/MainPter.cxx:953
- msgid "Error Saving File"
- msgstr "儲存檔案時發生錯誤"
-
--#: src/PagePter.cxx:292
-+#: src/PagePter.cxx:338
- msgid "Loading..."
- msgstr "載入…"
-
--#: src/PrintPter.cxx:295
-+#: src/PrintPter.cxx:252
-+msgid "A4"
-+msgstr ""
-+
-+#: src/PrintPter.cxx:280
-+msgid "300 DPI"
-+msgstr ""
-+
-+#: src/PrintPter.cxx:308
- msgid "Grayscale"
- msgstr "ç°éšŽ"
-
--#: src/PrintPter.cxx:395
-+#: src/PrintPter.cxx:409
- msgid "Idle"
- msgstr "é–’ç½®"
-
--#: src/PrintPter.cxx:398
-+#: src/PrintPter.cxx:412
- msgid "Stopped"
- msgstr "å·²åœæ­¢"
-
--#: src/PrintPter.cxx:401
-+#: src/PrintPter.cxx:415
- msgid "Processing"
- msgstr "處ç†ä¸­"
-
--#: src/PrintPter.cxx:404
-+#: src/PrintPter.cxx:418
- msgid "Unknown"
- msgstr "未知"
-
-@@ -151,244 +158,260 @@
- msgid "Find:"
- msgstr "尋找:"
-
--#: src/gtk/MainView.cxx:87
-+#: src/gtk/MainView.cxx:89
- msgid "_File"
- msgstr "檔案(_F)"
-
--#: src/gtk/MainView.cxx:88
-+#: src/gtk/MainView.cxx:90
- msgid "_Edit"
- msgstr "編輯(_E)"
-
--#: src/gtk/MainView.cxx:89
-+#: src/gtk/MainView.cxx:91
- msgid "_View"
- msgstr "檢視(_V)"
-
--#: src/gtk/MainView.cxx:90
-+#: src/gtk/MainView.cxx:92
- msgid "_Go"
- msgstr "å‰å¾€(_G)"
-
--#: src/gtk/MainView.cxx:91
-+#: src/gtk/MainView.cxx:93
- msgid "_Help"
- msgstr "求助(_H)"
-
--#: src/gtk/MainView.cxx:93
-+#: src/gtk/MainView.cxx:95
- msgid "_Open"
- msgstr "é–‹å•Ÿ(_O)"
-
--#: src/gtk/MainView.cxx:94
-+#: src/gtk/MainView.cxx:96
- msgid "Open a PDF document"
- msgstr "開啟 PDF 文件"
-
--#: src/gtk/MainView.cxx:97
-+#: src/gtk/MainView.cxx:99
- msgid "_Reload"
- msgstr "é‡æ–°è¼‰å…¥(_R)"
-
--#: src/gtk/MainView.cxx:98
-+#: src/gtk/MainView.cxx:100
- msgid "Reload the current document"
- msgstr "é‡æ–°è¼‰å…¥ç›®å‰æ–‡ä»¶"
-
--#: src/gtk/MainView.cxx:101
-+#: src/gtk/MainView.cxx:103
- msgid "_Save a Copy..."
- msgstr "儲存複本(_S)…"
-
--#: src/gtk/MainView.cxx:102
-+#: src/gtk/MainView.cxx:104
- msgid "Save a copy of the current document"
- msgstr "儲存目å‰æ–‡ä»¶çš„複本"
-
--#: src/gtk/MainView.cxx:106
-+#: src/gtk/MainView.cxx:108
- msgid "_Print..."
- msgstr "列å°(_P)…"
-
--#: src/gtk/MainView.cxx:107
-+#: src/gtk/MainView.cxx:109
- msgid "Print the current document"
- msgstr "列å°ç›®å‰æ–‡ä»¶"
-
--#: src/gtk/MainView.cxx:111
-+#: src/gtk/MainView.cxx:113
- msgid "_Close"
- msgstr "關閉(_C)"
-
--#: src/gtk/MainView.cxx:112
-+#: src/gtk/MainView.cxx:114
- msgid "Close this window"
- msgstr "關閉此視窗"
-
--#: src/gtk/MainView.cxx:115
-+#: src/gtk/MainView.cxx:117
- msgid "_Find"
- msgstr "尋找(_F)"
-
--#: src/gtk/MainView.cxx:116
-+#: src/gtk/MainView.cxx:118
- msgid "Find a word in the document"
- msgstr "在文件中尋找字詞"
-
--#: src/gtk/MainView.cxx:119
-+#: src/gtk/MainView.cxx:121
- msgid "Preferences..."
- msgstr "å好設定…"
-
--#: src/gtk/MainView.cxx:120
-+#: src/gtk/MainView.cxx:122
- msgid "Change the application's preferences"
- msgstr "改變應用軟體的å好設定"
-
--#: src/gtk/MainView.cxx:123
-+#: src/gtk/MainView.cxx:125
- msgid "Zoom _In"
- msgstr "放大(_I)"
-
--#: src/gtk/MainView.cxx:124
-+#: src/gtk/MainView.cxx:126
- msgid "Enlarge the document"
- msgstr "放大文件"
-
--#: src/gtk/MainView.cxx:127
-+#: src/gtk/MainView.cxx:129
- msgid "Zoom _Out"
- msgstr "縮å°(_O)"
-
--#: src/gtk/MainView.cxx:128
-+#: src/gtk/MainView.cxx:130
- msgid "Shrink the document"
- msgstr "收縮文件"
-
--#: src/gtk/MainView.cxx:131 src/gtk/StockIcons.cxx:43
-+#: src/gtk/MainView.cxx:133 src/gtk/StockIcons.cxx:43
- msgid "Rotate _Right"
- msgstr "å‘å³æ—‹è½‰(_R)"
-
--#: src/gtk/MainView.cxx:132
-+#: src/gtk/MainView.cxx:134
- msgid "Rotate the document 90 degrees clockwise"
- msgstr "順時é‡æ—‹è½‰æ–‡ä»¶ 90 度"
-
--#: src/gtk/MainView.cxx:135 src/gtk/StockIcons.cxx:42
-+#: src/gtk/MainView.cxx:137 src/gtk/StockIcons.cxx:42
- msgid "Rotate _Left"
- msgstr "å‘左旋轉(_L)"
-
--#: src/gtk/MainView.cxx:136
-+#: src/gtk/MainView.cxx:138
- msgid "Rotate the document 90 degrees counter-clockwise"
- msgstr "逆時é‡æ—‹è½‰æ–‡ä»¶ 90 度"
-
--#: src/gtk/MainView.cxx:139
-+#: src/gtk/MainView.cxx:141
- msgid "_First Page"
- msgstr "首é (_F)"
-
--#: src/gtk/MainView.cxx:140
-+#: src/gtk/MainView.cxx:142
- msgid "Go to the first page"
- msgstr "å‰å¾€ç¬¬ä¸€é "
-
--#: src/gtk/MainView.cxx:143
-+#: src/gtk/MainView.cxx:145
- msgid "_Next Page"
- msgstr "下é (_N)"
-
--#: src/gtk/MainView.cxx:144
-+#: src/gtk/MainView.cxx:146
- msgid "Go to the next page"
- msgstr "å‰å¾€ä¸‹ä¸€é "
-
--#: src/gtk/MainView.cxx:147
-+#: src/gtk/MainView.cxx:149
- msgid "_Previous Page"
- msgstr "上é (_P)"
-
--#: src/gtk/MainView.cxx:148
-+#: src/gtk/MainView.cxx:150
- msgid "Go to the previous page"
- msgstr "å‰å¾€ä¸Šä¸€é "
-
--#: src/gtk/MainView.cxx:151
-+#: src/gtk/MainView.cxx:153
- msgid "_Last Page"
- msgstr "末é (_L)"
-
--#: src/gtk/MainView.cxx:152
-+#: src/gtk/MainView.cxx:154
- msgid "Go to the last page"
- msgstr "å‰å¾€æœ€æœ«é "
-
--#: src/gtk/MainView.cxx:155
-+#: src/gtk/MainView.cxx:157
- msgid "_About"
- msgstr "關於(_A)"
-
--#: src/gtk/MainView.cxx:156
-+#: src/gtk/MainView.cxx:158
- msgid "Display application's credits"
- msgstr "顯示應用程å¼çš„é³´è¬"
-
--#: src/gtk/MainView.cxx:166
-+#: src/gtk/MainView.cxx:175
- msgid "F_ull screen"
--msgstr ""
-+msgstr "全螢幕(_U)"
-
--#: src/gtk/MainView.cxx:167
-+#: src/gtk/MainView.cxx:176
- msgid "Toggle full screen window"
--msgstr ""
-+msgstr "切æ›åˆ°å…¨èž¢å¹•è¦–窗"
-
--#: src/gtk/MainView.cxx:170
-+#: src/gtk/MainView.cxx:179
- msgid "Show _Toolbar"
- msgstr "顯示工具列(_T)"
-
--#: src/gtk/MainView.cxx:171
-+#: src/gtk/MainView.cxx:180
- msgid "Show or hide the toolbar"
- msgstr "顯示或隱è—工具列"
-
--#: src/gtk/MainView.cxx:174
-+#: src/gtk/MainView.cxx:183
- msgid "Show _Statusbar"
- msgstr "顯示狀態列(_S)"
-
--#: src/gtk/MainView.cxx:175
-+#: src/gtk/MainView.cxx:184
- msgid "Show or hide the statusbar"
- msgstr "顯示或隱è—狀態列"
-
--#: src/gtk/MainView.cxx:178
-+#: src/gtk/MainView.cxx:187
- msgid "Show I_ndex"
- msgstr "顯示索引(_N)"
-
--#: src/gtk/MainView.cxx:179
-+#: src/gtk/MainView.cxx:188
- msgid "Show or hide the document's outline"
- msgstr "顯示或隱è—文件外框"
-
--#: src/gtk/MainView.cxx:182
-+#: src/gtk/MainView.cxx:191
- msgid "Zoom to _Fit"
- msgstr "符åˆè¦–窗(_F)"
-
--#: src/gtk/MainView.cxx:183
-+#: src/gtk/MainView.cxx:192
- msgid "Make the current document fill the window"
- msgstr "將目å‰æ–‡ä»¶å¡«æ»¿è¦–窗"
-
--#: src/gtk/MainView.cxx:186 src/gtk/StockIcons.cxx:44
-+#: src/gtk/MainView.cxx:195 src/gtk/StockIcons.cxx:44
- msgid "Zoom to _Width"
- msgstr "符åˆå¯¬åº¦(_W)"
-
--#: src/gtk/MainView.cxx:187
-+#: src/gtk/MainView.cxx:196
- msgid "Make the current document fill the window width"
- msgstr "將目å‰æ–‡ä»¶å¡«æ»¿è¦–窗寬度"
-
--#: src/gtk/MainView.cxx:278
-+#: src/gtk/MainView.cxx:202
-+msgid "Scroll"
-+msgstr ""
-+
-+#: src/gtk/MainView.cxx:203
-+msgid "Mouse scroll page"
-+msgstr ""
-+
-+#: src/gtk/MainView.cxx:205
-+msgid "Select Text"
-+msgstr ""
-+
-+#: src/gtk/MainView.cxx:206
-+msgid " Mouse select text"
-+msgstr ""
-+
-+#: src/gtk/MainView.cxx:320
- msgid "Open PDF File"
- msgstr "開啟 PDF 檔案"
-
--#: src/gtk/MainView.cxx:298 src/gtk/MainView.cxx:412
-+#: src/gtk/MainView.cxx:340 src/gtk/MainView.cxx:454
- msgid "Portable Document Format (PDF) Files"
- msgstr "å¯æ”œå¼æ–‡ä»¶æ ¼å¼ (PDF) 檔案"
-
--#: src/gtk/MainView.cxx:310 src/gtk/MainView.cxx:424
-+#: src/gtk/MainView.cxx:352 src/gtk/MainView.cxx:466
- msgid "All Files"
- msgstr "所有檔案"
-
--#: src/gtk/MainView.cxx:362
-+#: src/gtk/MainView.cxx:404
- msgid "Password"
- msgstr "密碼"
-
--#: src/gtk/MainView.cxx:386
-+#: src/gtk/MainView.cxx:428
- msgid "Save PDF File"
- msgstr "儲存 PDF 檔案"
-
--#: src/gtk/MainView.cxx:816
-+#: src/gtk/MainView.cxx:858
- msgid "Page"
- msgstr "é é¢"
-
--#: src/gtk/MainView.cxx:826
-+#: src/gtk/MainView.cxx:868
- msgid "of 0"
- msgstr "之於 0"
-
--#: src/gtk/MainView.cxx:879
-+#: src/gtk/MainView.cxx:921
- msgid "Index"
- msgstr "索引"
-
--#: src/gtk/MainView.cxx:946 src/gtk/MainView.cxx:956
-+#: src/gtk/MainView.cxx:991 src/gtk/MainView.cxx:1001
- #, c-format
- msgid "Error building UI manager: %s\n"
- msgstr "建立 UI 管ç†å“¡æ™‚發生錯誤:%s\n"
-
--#: src/gtk/MainView.cxx:1056
-+#: src/gtk/MainView.cxx:1108
- msgid "A lightweight PDF viewer"
- msgstr "輕é‡ç´šçš„ PDF 檢視器"
-
--#: src/gtk/MainView.cxx:1059
-+#: src/gtk/MainView.cxx:1111
- msgid ""
- "ePDFView is free software; you can redistribute it and/or modify\n"
- "it under the terms of the GNU General Public License as published by\n"
-@@ -399,7 +422,7 @@
- "æ¢æ¬¾è¦å®šï¼Œå°±æœ¬ç¨‹å¼å†ç‚ºæ•£å¸ƒèˆ‡ï¼æˆ–修改;無論您ä¾æ“šçš„是本授權的第二版或\n"
- "(您自行é¸æ“‡çš„)任何ç¨å¾Œç™¼è¡Œçš„版本。\n"
-
--#: src/gtk/MainView.cxx:1063
-+#: src/gtk/MainView.cxx:1115
- msgid ""
- "ePDFView is distributes in the hope that it will be useful,\n"
- "but WITHOUT ANY WARRANTY; without even the implied warranty of\n"
-@@ -409,7 +432,7 @@
- "ePDFView 係基於使用目的而加以散布,然而ä¸è² ä»»ä½•æ“”ä¿è²¬ä»»ï¼›äº¦ç„¡å°é©å”®æ€§\n"
- "或特定目的é©ç”¨æ€§æ‰€ç‚ºçš„默示性擔ä¿ã€‚詳情請åƒç…§ GNU 通用公共授權。\n"
-
--#: src/gtk/MainView.cxx:1067
-+#: src/gtk/MainView.cxx:1119
- msgid ""
- "You should have received a copy of the GNU General Public License\n"
- "along with ePDFView; if not, write to the Free Software Foundation,Inc.,\n"
-@@ -419,11 +442,11 @@
- "自由軟體基金會: \n"
- "59 Temple Place – Suite 330, Boston, Ma 02111-1307, USA。\n"
-
--#: src/gtk/MainView.cxx:1076
-+#: src/gtk/MainView.cxx:1128
- msgid "ePDFView"
- msgstr "ePDFView"
-
--#: src/gtk/MainView.cxx:1083
-+#: src/gtk/MainView.cxx:1135
- msgid "translator-credits"
- msgstr "趙惟倫 <william.chao@ossii.com.tw>"
-
-diff -Nurd epdfview-0.1.6-svn/src/Config.cxx epdfview/src/Config.cxx
---- epdfview-0.1.6-svn/src/Config.cxx 2008-07-13 12:57:45.043198000 +0200
-+++ epdfview/src/Config.cxx 2008-07-13 12:55:52.473198000 +0200
-@@ -40,7 +40,6 @@
-
- // Forward declarations.
- gchar *getConfigFileName (void);
--void makeDirWithParents (const gchar *);
-
- ///
- /// @brief Constructs a new Config object.
-@@ -502,42 +501,9 @@
- {
- gchar *configDir =
- g_build_filename (g_get_user_config_dir (), PACKAGE, NULL);
-- makeDirWithParents (configDir);
-+ g_mkdir_with_parents (configDir, 0700);
- gchar *configFile = g_build_filename (configDir, "main.conf", NULL);
- g_free (configDir);
-
- return configFile;
- }
--
--///
--/// @brief Creates the directory and all its parent directories.
--///
--/// If the directory already exists it does nothing.
--///
--/// @param path The directory to create.
--///
--void
--makeDirWithParents (const gchar *path)
--{
-- // Get the list of directories to create.
-- GList *dirs = NULL;
-- gchar *dirName = g_strdup (path);
-- while ( !g_file_test (dirName, G_FILE_TEST_EXISTS) )
-- {
-- dirs = g_list_prepend (dirs, dirName);
-- dirName = g_path_get_dirname (dirName);
-- }
--
-- // Now create all of them.
-- GList *dir = g_list_first (dirs);
-- while ( NULL != dir )
-- {
-- if ( -1 == g_mkdir ((gchar *)dir->data, 0700) )
-- {
-- g_warning ("Couldn't make directory '%s'\n", (gchar *)dir->data);
-- }
-- g_free (dir->data);
-- dir = g_list_next (dir);
-- }
-- g_list_free (dirs);
--}
-diff -Nurd epdfview-0.1.6-svn/src/DocumentPage.cxx epdfview/src/DocumentPage.cxx
---- epdfview-0.1.6-svn/src/DocumentPage.cxx 2008-07-13 12:57:45.043198000 +0200
-+++ epdfview/src/DocumentPage.cxx 2008-07-13 12:55:52.473198000 +0200
-@@ -17,6 +17,7 @@
-
- #include <config.h>
- #include <string.h>
-+#include <gdk/gdk.h>
- #include "epdfview.h"
-
- using namespace ePDFView;
-@@ -28,6 +29,7 @@
- ///
- DocumentPage::DocumentPage ()
- {
-+ m_Selection = NULL;
- m_Data = NULL;
- m_HasSelection = FALSE;
- m_Height = 0;
-@@ -49,6 +51,9 @@
- delete link;
- }
- g_list_free (m_LinkList);
-+
-+ if(m_Selection)
-+ gdk_region_destroy(m_Selection);
- }
-
- ///
-@@ -79,6 +84,12 @@
- invertArea (m_SelectionX1, m_SelectionY1, m_SelectionX2, m_SelectionY2);
- m_HasSelection = FALSE;
- }
-+
-+ if(NULL != m_Selection){
-+ invertRegion(m_Selection);
-+ gdk_region_destroy(m_Selection);
-+ m_Selection = NULL;
-+ }
- }
-
- ///
-@@ -195,6 +206,20 @@
- }
- }
-
-+void
-+DocumentPage::invertRegion (GdkRegion* region)
-+{
-+ int count;
-+ GdkRectangle *rectangles;
-+ gdk_region_get_rectangles(region, &rectangles, &count);
-+ while(count--){
-+ GdkRectangle r = rectangles[count];
-+ invertArea(r.x, r.y, r.x + r.width, r.y + r.height);
-+ }
-+ g_free(rectangles);
-+}
-+
-+
- ///
- /// @brief Allocates the memory for a new page.
- ///
-@@ -253,3 +278,13 @@
-
- m_HasSelection = TRUE;
- }
-+
-+void
-+DocumentPage::setSelection (GdkRegion *region)
-+{
-+ clearSelection ();
-+
-+ invertRegion (region);
-+
-+ m_Selection = gdk_region_copy(region);
-+}
-diff -Nurd epdfview-0.1.6-svn/src/DocumentPage.h epdfview/src/DocumentPage.h
---- epdfview-0.1.6-svn/src/DocumentPage.h 2008-07-13 12:57:45.123198000 +0200
-+++ epdfview/src/DocumentPage.h 2008-07-13 12:55:52.573198000 +0200
-@@ -18,6 +18,8 @@
- #if !defined (__DOCUMENT_PAGE_H__)
- #define __DOCUMENT_PAGE_H__
-
-+typedef struct _GdkRegion GdkRegion;
-+
- namespace ePDFView
- {
- ///
-@@ -41,6 +43,7 @@
- gint getWidth (void);
- gboolean newPage (gint width, gint height);
- void setSelection (DocumentRectangle &selection, gdouble scale);
-+ void setSelection (GdkRegion *region);
-
- protected:
- /// The page's image.
-@@ -61,7 +64,10 @@
- gint m_Width;
- /// The list of links from the page.
- GList *m_LinkList;
--
-+ /// Selection region
-+ GdkRegion *m_Selection;
-+
-+ void invertRegion (GdkRegion*);
- void invertArea (gint x1, gint y1, gint x2, gint y2);
- };
- }
-diff -Nurd epdfview-0.1.6-svn/src/gtk/MainView.cxx epdfview/src/gtk/MainView.cxx
---- epdfview-0.1.6-svn/src/gtk/MainView.cxx 2008-07-13 12:57:44.223198000 +0200
-+++ epdfview/src/gtk/MainView.cxx 2008-07-13 12:55:50.923198000 +0200
-@@ -76,6 +76,8 @@
- static void main_window_zoom_in_cb (GtkWidget *, gpointer);
- static void main_window_zoom_out_cb (GtkWidget *, gpointer);
- static void main_window_zoom_width_cb (GtkToggleAction *, gpointer);
-+static void main_window_set_page_mode (GtkRadioAction *, GtkRadioAction *, gpointer);
-+static void main_window_page_scrolled_cb (GtkWidget *widget, GdkEventScroll *event, gpointer data);
-
- #if defined (HAVE_CUPS)
- static void main_window_print_cb (GtkWidget *, gpointer);
-@@ -128,11 +130,11 @@
- N_("Shrink the document"),
- G_CALLBACK (main_window_zoom_out_cb) },
-
-- { "RotateRight", EPDFVIEW_STOCK_ROTATE_RIGHT, N_("Rotate _Right"), NULL,
-+ { "RotateRight", EPDFVIEW_STOCK_ROTATE_RIGHT, N_("Rotate _Right"), "<control>bracketright",
- N_("Rotate the document 90 degrees clockwise"),
- G_CALLBACK (main_window_rotate_right_cb) },
-
-- { "RotateLeft", EPDFVIEW_STOCK_ROTATE_LEFT, N_("Rotate _Left"), NULL,
-+ { "RotateLeft", EPDFVIEW_STOCK_ROTATE_LEFT, N_("Rotate _Left"), "<control>bracketleft",
- N_("Rotate the document 90 degrees counter-clockwise"),
- G_CALLBACK (main_window_rotate_left_cb) },
-
-@@ -158,7 +160,14 @@
-
- // Accelerator keys.
- { "Slash", GTK_STOCK_FIND, NULL, "slash", NULL,
-- G_CALLBACK (main_window_find_cb) }
-+ G_CALLBACK (main_window_find_cb) },
-+
-+ { "KPAdd", GTK_STOCK_ZOOM_IN, NULL, "<control>KP_Add", NULL,
-+ G_CALLBACK (main_window_zoom_in_cb) },
-+
-+ { "KPSubtract", GTK_STOCK_ZOOM_OUT, NULL, "<control>KP_Subtract",
-+ NULL,
-+ G_CALLBACK (main_window_zoom_out_cb) }
- };
-
- static GtkToggleActionEntry g_ToggleEntries[] =
-@@ -185,10 +194,19 @@
-
- { "ZoomWidth", EPDFVIEW_STOCK_ZOOM_WIDTH, N_("Zoom to _Width"), NULL,
- N_("Make the current document fill the window width"),
-- G_CALLBACK (main_window_zoom_width_cb), FALSE }
-+ G_CALLBACK (main_window_zoom_width_cb), FALSE },
-+};
-
-+static GtkRadioActionEntry g_PageScrollEntries[] =
-+{
-+ { "PageModeScroll", GTK_STOCK_FULLSCREEN, N_("Scroll"), NULL,
-+ N_("Mouse scroll page"), (int)PagePterModeScroll },
-+
-+ { "PageModeText", GTK_STOCK_SELECT_ALL, N_("Select Text"), NULL,
-+ N_(" Mouse select text"), (int)PagePterModeSelectText },
- };
-
-+
- ////////////////////////////////////////////////////////////////
- // Interface Methods.
- ////////////////////////////////////////////////////////////////
-@@ -238,6 +256,9 @@
- GtkWidget *pageViewPaned = createPageView ();
- gtk_box_pack_start (GTK_BOX (m_MainBox), pageViewPaned, TRUE, TRUE, 0);
- gtk_widget_show (pageViewPaned);
-+ // By default set focus to page view so user can navigate pdf document with
-+ // keyboard right away without need to click to page view first
-+ gtk_widget_grab_focus (m_PageView->getTopWidget ());
- // Add the find bar.
- m_FindView = new FindView ();
- gtk_box_pack_start (GTK_BOX (m_MainBox), m_FindView->getTopWidget (),
-@@ -247,6 +268,10 @@
- // look weird.
- m_StatusBar = gtk_statusbar_new ();
- gtk_box_pack_start (GTK_BOX (m_MainBox), m_StatusBar, FALSE, FALSE, 0);
-+
-+ // Signal for Zooming into the page per ctrl + scroll-wheel.
-+ g_signal_connect (G_OBJECT (m_PageView->getTopWidget ()), "scroll-event",
-+ G_CALLBACK (main_window_page_scrolled_cb), pter);
- }
-
- MainView::~MainView ()
-@@ -272,6 +297,23 @@
- gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (zoomWidth), active);
- }
-
-+void
-+MainView::activePageModeScroll (gboolean active)
-+{
-+ GtkAction *action =
-+ gtk_ui_manager_get_action (m_UIManager, "/ToolBar/PageModeScroll");
-+ gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action), active);
-+}
-+
-+
-+void
-+MainView::activePageModeText (gboolean active)
-+{
-+ GtkAction *action =
-+ gtk_ui_manager_get_action (m_UIManager, "/ToolBar/PageModeText");
-+ gtk_toggle_action_set_active (GTK_TOGGLE_ACTION (action), active);
-+}
-+
- gchar *
- MainView::openFileDialog (const gchar *lastFolder)
- {
-@@ -935,6 +977,9 @@
- gtk_action_group_add_toggle_actions (actionGroup, g_ToggleEntries,
- G_N_ELEMENTS (g_ToggleEntries),
- m_Pter);
-+ gtk_action_group_add_radio_actions (actionGroup, g_PageScrollEntries,
-+ G_N_ELEMENTS (g_PageScrollEntries), 0,
-+ G_CALLBACK(main_window_set_page_mode), m_Pter);
- m_UIManager = gtk_ui_manager_new ();
- gtk_ui_manager_insert_action_group (m_UIManager, actionGroup, 0);
-
-@@ -1038,6 +1083,13 @@
- }
- }
-
-+void
-+MainView::copyTextToClibboard(const gchar* text)
-+{
-+ GtkClipboard *clipboard = gtk_clipboard_get(GDK_SELECTION_PRIMARY);
-+ gtk_clipboard_set_text(clipboard, text, -1);
-+}
-+
- ////////////////////////////////////////////////////////////////
- // GTK+ Callbacks.
- ////////////////////////////////////////////////////////////////
-@@ -1416,3 +1468,29 @@
- MainPter *pter = (MainPter *)data;
- pter->zoomWidthActivated (gtk_toggle_action_get_active (action));
- }
-+
-+void
-+main_window_set_page_mode (GtkRadioAction *action, GtkRadioAction *current, gpointer data)
-+{
-+ g_assert ( NULL != data && "The data parameter is NULL.");
-+
-+ MainPter *pter = (MainPter *)data;
-+ PagePterMode mode = (PagePterMode)gtk_radio_action_get_current_value(action);
-+ pter->setPageMode (mode);
-+}
-+
-+void
-+main_window_page_scrolled_cb (GtkWidget *widget, GdkEventScroll *event, gpointer data)
-+{
-+ g_assert ( NULL != data && "The data parameter is NULL.");
-+
-+ MainPter *pter = (MainPter *)data;
-+ // Only zoom when the CTRL-Button is down...
-+ if ( !(event->state & GDK_CONTROL_MASK) ) return;
-+ if ( event->direction == GDK_SCROLL_UP ) {
-+ pter->zoomInActivated ();
-+ } else if ( event->direction == GDK_SCROLL_DOWN ) {
-+ pter->zoomOutActivated ();
-+ }
-+}
-+
-diff -Nurd epdfview-0.1.6-svn/src/gtk/MainView.h epdfview/src/gtk/MainView.h
---- epdfview-0.1.6-svn/src/gtk/MainView.h 2008-07-13 12:57:44.233198000 +0200
-+++ epdfview/src/gtk/MainView.h 2008-07-13 12:55:50.923198000 +0200
-@@ -35,6 +35,8 @@
-
- void activeZoomFit (gboolean active);
- void activeZoomWidth (gboolean active);
-+ void activePageModeScroll (gboolean active);
-+ void activePageModeText (gboolean active);
- gchar *openFileDialog (const gchar *lastFolder);
- gchar *promptPasswordDialog (void);
- gchar *saveFileDialog (const gchar *lastFolder,
-@@ -68,6 +70,7 @@
- void setStatusBarText (const gchar *text);
- void setZoomText (const gchar *text);
- const gchar *getGoToPageText (void);
-+ void copyTextToClibboard(const gchar* text);
- IFindView *getFindView (void);
- IPageView *getPageView (void);
- IPreferencesView *getPreferencesView (void);
-diff -Nurd epdfview-0.1.6-svn/src/gtk/PageView.cxx epdfview/src/gtk/PageView.cxx
---- epdfview-0.1.6-svn/src/gtk/PageView.cxx 2008-07-13 12:57:44.243198000 +0200
-+++ epdfview/src/gtk/PageView.cxx 2008-07-13 12:55:50.943198000 +0200
-@@ -184,6 +184,9 @@
- GdkCursor *cursor = NULL;
- switch (cursorType)
- {
-+ case PAGE_VIEW_CURSOR_SELECT_TEXT:
-+ cursor = gdk_cursor_new (GDK_XTERM);
-+ break;
- case PAGE_VIEW_CURSOR_LINK:
- cursor = gdk_cursor_new (GDK_HAND2);
- break;
-@@ -524,6 +527,13 @@
- {
- g_assert ( NULL != data && "The data parameter is NULL.");
-
-+ // don't scroll when the CRTL-Button is down, because then the page should
-+ // actually be zoomed and not scrolled. Zooming is handelt by the MainView
-+ // class.
-+ if ( event->state & GDK_CONTROL_MASK )
-+ {
-+ return FALSE;
-+ }
- PagePter *pter = (PagePter *)data;
- GtkAdjustment *adjustment =
- gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (widget));
-@@ -553,11 +563,15 @@
-
- GtkScrollType direction;
- gboolean horizontal = FALSE;
-+ gboolean returnValue = TRUE;
- PagePter *pter = (PagePter *)data;
-
-- GtkAdjustment *adjustment =
-+ GtkAdjustment *hadjustment =
-+ gtk_scrolled_window_get_hadjustment (GTK_SCROLLED_WINDOW (widget));
-+ gdouble hposition = gtk_adjustment_get_value (hadjustment);
-+ GtkAdjustment *vadjustment =
- gtk_scrolled_window_get_vadjustment (GTK_SCROLLED_WINDOW (widget));
-- gdouble position = gtk_adjustment_get_value (adjustment);
-+ gdouble vposition = gtk_adjustment_get_value (vadjustment);
-
- if ( event->state & (GDK_SHIFT_MASK | GDK_CONTROL_MASK) )
- {
-@@ -568,51 +582,96 @@
- {
- case GDK_Left:
- case GDK_KP_Left:
-+ case GDK_h:
-+ if ( hposition == hadjustment->lower )
-+ {
-+ pter->scrollToPreviousPage ();
-+ return TRUE;
-+ }
- direction = GTK_SCROLL_STEP_LEFT;
- horizontal = TRUE;
- break;
-
- case GDK_Right:
- case GDK_KP_Right:
-+ case GDK_l:
-+ if ( hposition == ( hadjustment->upper - hadjustment->page_size) )
-+ {
-+ pter->scrollToNextPage ();
-+ return TRUE;
-+ }
- horizontal = TRUE;
- direction = GTK_SCROLL_STEP_RIGHT;
- break;
-
- case GDK_Up:
- case GDK_KP_Up:
-+ case GDK_k:
-+ if ( vposition == vadjustment->lower )
-+ {
-+ pter->scrollToPreviousPage ();
-+ return TRUE;
-+ }
- direction = GTK_SCROLL_STEP_UP;
- break;
-
- case GDK_Down:
- case GDK_KP_Down:
-+ case GDK_j:
-+ if ( vposition == ( vadjustment->upper - vadjustment->page_size) )
-+ {
-+ pter->scrollToNextPage ();
-+ return TRUE;
-+ }
- direction = GTK_SCROLL_STEP_DOWN;
- break;
-
- case GDK_Page_Up:
- case GDK_KP_Page_Up:
-- if ( position == adjustment->lower )
-+ if ( vposition == vadjustment->lower )
- {
- pter->scrollToPreviousPage ();
- return TRUE;
- }
-- direction = GTK_SCROLL_START;
-+ direction = GTK_SCROLL_PAGE_UP;
- break;
-
-+ case GDK_space:
-+ case GDK_KP_Space:
- case GDK_Page_Down:
- case GDK_KP_Page_Down:
-- if ( position == ( adjustment->upper - adjustment->page_size) )
-+ if ( vposition == ( vadjustment->upper - vadjustment->page_size) )
- {
- pter->scrollToNextPage ();
- return TRUE;
- }
-+ direction = GTK_SCROLL_PAGE_DOWN;
-+ break;
-+
-+ case GDK_Home:
-+ case GDK_KP_Home:
-+ direction = GTK_SCROLL_START;
-+ break;
-+
-+ case GDK_End:
-+ case GDK_KP_End:
- direction = GTK_SCROLL_END;
- break;
-
-- default:
-+ case GDK_Return:
-+ case GDK_KP_Enter:
-+ pter->scrollToNextPage ();
-+ direction = GTK_SCROLL_START;
-+
-+ case GDK_BackSpace:
-+ pter->scrollToNextPage ();
-+ direction = GTK_SCROLL_START;
-+
-+ default:
- return FALSE;
- }
-
- g_signal_emit_by_name(G_OBJECT(widget), "scroll-child",
-- direction, horizontal);
-- return TRUE;
-+ direction, horizontal, &returnValue);
-+ return returnValue;
- }
-diff -Nurd epdfview-0.1.6-svn/src/IDocument.h epdfview/src/IDocument.h
---- epdfview-0.1.6-svn/src/IDocument.h 2008-07-13 12:57:45.053198000 +0200
-+++ epdfview/src/IDocument.h 2008-07-13 12:55:52.473198000 +0200
-@@ -21,12 +21,14 @@
- /// This is the definition of the GQuark used for Document's errors.
- #define EPDFVIEW_DOCUMENT_ERROR ePDFView::IDocument::getErrorQuark ()
-
-+typedef struct _GdkRegion GdkRegion;
-+
- namespace ePDFView
- {
- // Forward declarations.
- class DocumentIndex;
- class IDocumentObserver;
-- class DocumentPage;
-+ class DocumentPage;
-
- ///
- /// @brief Defines the possible errors loading a document.
-@@ -263,6 +265,9 @@
- virtual gboolean saveFile (const gchar *filename,
- GError **error) = 0;
-
-+ virtual GdkRegion* getTextRegion (DocumentRectangle *rect) = 0;
-+ virtual void setTextSelection (DocumentRectangle *rect) = 0;
-+
- void attach (const IDocumentObserver *observer);
- void detach (const IDocumentObserver *observer);
-
-diff -Nurd epdfview-0.1.6-svn/src/IDocumentLink.h epdfview/src/IDocumentLink.h
---- epdfview-0.1.6-svn/src/IDocumentLink.h 2008-07-13 12:57:45.053198000 +0200
-+++ epdfview/src/IDocumentLink.h 2008-07-13 12:55:52.483198000 +0200
-@@ -33,7 +33,7 @@
- class IDocumentLink
- {
- public:
-- IDocumentLink (gdouble x1, gdouble y1, gdouble x2, gdouble y1);
-+ IDocumentLink (gdouble x1, gdouble y1, gdouble x2, gdouble y2);
- virtual ~IDocumentLink (void);
-
- virtual void activate (IDocument *document) = 0;
-diff -Nurd epdfview-0.1.6-svn/src/IDocumentObserver.h epdfview/src/IDocumentObserver.h
---- epdfview-0.1.6-svn/src/IDocumentObserver.h 2008-07-13 12:57:45.023198000 +0200
-+++ epdfview/src/IDocumentObserver.h 2008-07-13 12:55:51.753198000 +0200
-@@ -150,6 +150,16 @@
- ///
- virtual void notifySaveError (const GError *error) { }
-
-+ ///
-+ /// @brief Someone select text in document.
-+ ///
-+ /// This function called when someone select some text
-+ /// in document.
-+ ///
-+ /// @param text Selected text.
-+ ///
-+ virtual void notifyTextSelected (const gchar* text) { }
-+
- protected:
- ///
- /// @brief Constructs a new IDocumentObserver object.
-diff -Nurd epdfview-0.1.6-svn/src/IJob.cxx epdfview/src/IJob.cxx
---- epdfview-0.1.6-svn/src/IJob.cxx 2008-07-13 12:57:45.053198000 +0200
-+++ epdfview/src/IJob.cxx 2008-07-13 12:55:52.483198000 +0200
-@@ -16,6 +16,7 @@
- // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
- #include "epdfview.h"
-+#include <unistd.h>
-
- using namespace ePDFView;
-
-@@ -59,6 +60,7 @@
- delete job;
- }
- }
-+ sleep(0);
- }
-
- ///
-diff -Nurd epdfview-0.1.6-svn/src/IMainView.h epdfview/src/IMainView.h
---- epdfview-0.1.6-svn/src/IMainView.h 2008-07-13 12:57:45.053198000 +0200
-+++ epdfview/src/IMainView.h 2008-07-13 12:55:52.473198000 +0200
-@@ -576,6 +576,10 @@
- ///
- virtual void setOutline (DocumentOutline *outline) = 0;
-
-+ virtual void copyTextToClibboard(const gchar* text) = 0;
-+ virtual void activePageModeScroll (gboolean active) = 0;
-+ virtual void activePageModeText (gboolean active) = 0;
-+
- protected:
- ///
- /// @brief Constructs a new main view.
-diff -Nurd epdfview-0.1.6-svn/src/IPageView.h epdfview/src/IPageView.h
---- epdfview-0.1.6-svn/src/IPageView.h 2008-07-13 12:57:45.123198000 +0200
-+++ epdfview/src/IPageView.h 2008-07-13 12:55:52.573198000 +0200
-@@ -32,6 +32,8 @@
- PAGE_VIEW_CURSOR_NORMAL,
- /// Drag cursor.
- PAGE_VIEW_CURSOR_DRAG,
-+ /// Text selection cursor.
-+ PAGE_VIEW_CURSOR_SELECT_TEXT,
- /// Link cursor.
- PAGE_VIEW_CURSOR_LINK
- };
-diff -Nurd epdfview-0.1.6-svn/src/main.cxx epdfview/src/main.cxx
---- epdfview-0.1.6-svn/src/main.cxx 2008-07-13 12:57:45.053198000 +0200
-+++ epdfview/src/main.cxx 2008-07-13 12:55:52.483198000 +0200
-@@ -25,6 +25,27 @@
-
- using namespace ePDFView;
-
-+struct LoadFileInfo
-+{
-+ gchar *fileName;
-+ MainPter *mainPter;
-+ PDFDocument *document;
-+};
-+
-+static int
-+loadFileFromCommandLine (gpointer data)
-+{
-+ LoadFileInfo *info = static_cast<LoadFileInfo *> (data);
-+
-+ info->mainPter->setOpenState (info->fileName, FALSE);
-+ info->document->load (info->fileName, NULL);
-+
-+ g_free (info->fileName);
-+ delete info;
-+
-+ return FALSE;
-+}
-+
- int
- main (int argc, char **argv)
- {
-@@ -56,13 +77,15 @@
- MainView *mainView = new MainView (mainPter);
- // Let know to the presenter which is its view.
- mainPter->setView (mainView);
-- // Enter the main loop and wait for user interaction. */
- // Now check if we have additional parameters. Any additional parameter
- // will be a file name to open.
- if ( argc > 1 )
- {
-- mainPter->setOpenState (argv[1], FALSE);
-- document->load (argv[1], NULL);
-+ LoadFileInfo *info = new LoadFileInfo;
-+ info->mainPter = mainPter;
-+ info->document = document;
-+ info->fileName = g_strdup (argv[1]);
-+ g_idle_add (loadFileFromCommandLine, info);
- }
-
- gtk_main();
-@@ -74,6 +97,8 @@
- // Save the configuration.
- Config::getConfig().save ();
-
-+ g_option_context_free (optionContext);
-+
- // All done!.
- return EXIT_SUCCESS;
- }
-diff -Nurd epdfview-0.1.6-svn/src/MainPter.cxx epdfview/src/MainPter.cxx
---- epdfview-0.1.6-svn/src/MainPter.cxx 2008-07-13 12:57:45.023198000 +0200
-+++ epdfview/src/MainPter.cxx 2008-07-13 12:55:51.753198000 +0200
-@@ -695,6 +695,12 @@
- }
- }
-
-+void
-+MainPter::setPageMode (PagePterMode mode)
-+{
-+ m_PagePter->setMode(mode);
-+}
-+
- ///
- /// @brief The "Zoom In" was activated.
- ///
-@@ -995,3 +1001,9 @@
- G_UNLOCK (fileSaved);
- }
- #endif // DEBUG
-+
-+void
-+MainPter::notifyTextSelected (const gchar* text)
-+{
-+ getView ().copyTextToClibboard(text);
-+}
-diff -Nurd epdfview-0.1.6-svn/src/MainPter.h epdfview/src/MainPter.h
---- epdfview-0.1.6-svn/src/MainPter.h 2008-07-13 12:57:45.043198000 +0200
-+++ epdfview/src/MainPter.h 2008-07-13 12:55:52.473198000 +0200
-@@ -40,6 +40,8 @@
- MainPter (IDocument *document);
- ~MainPter (void);
-
-+ void setPageMode(PagePterMode mode);
-+
- void setInitialState (void);
- void setOpenState (const gchar *fileName, gboolean reload);
- IMainView &getView (void);
-@@ -84,6 +86,7 @@
- void notifyReload (void);
- void notifySave (void);
- void notifySaveError (const GError *error);
-+ void notifyTextSelected (const gchar* text);
-
- #if defined (DEBUG)
- void waitForFileLoaded (void);
-diff -Nurd epdfview-0.1.6-svn/src/PagePter.cxx epdfview/src/PagePter.cxx
---- epdfview-0.1.6-svn/src/PagePter.cxx 2008-07-13 12:57:45.043198000 +0200
-+++ epdfview/src/PagePter.cxx 2008-07-13 12:55:52.473198000 +0200
-@@ -15,6 +15,7 @@
- // along with this program; if not, write to the Free Software
- // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-
-+#include <gdk/gdk.h>
- #include "epdfview.h"
-
- using namespace ePDFView;
-@@ -47,9 +48,9 @@
- /// The Y position of the pointer when the drag started.
- gint y;
- /// The horizontal position of the page view scroll when the drag started.
-- gdouble scrollX;
-+ int startX;
- /// The vertical position of the page view scroll when the drag started.
-- gdouble scrollY;
-+ int startY;
- };
-
- // Global variables.
-@@ -60,11 +61,13 @@
- ///
- PagePter::PagePter (IDocument *document)
- {
-+ m_LastSelection = NULL;
- m_Document = document;
- m_Document->attach (this);
- m_DragInfo = NULL;
- m_NextPageScroll = PAGE_SCROLL_START;
- m_PageView = NULL;
-+ m_ScrollMode = PagePterModeScroll;
- }
-
- ///
-@@ -129,9 +132,12 @@
- m_DragInfo->y = y;
-
- IPageView &view = getView ();
-- m_DragInfo->scrollX = view.getHorizontalScroll ();
-- m_DragInfo->scrollY = view.getVerticalScroll ();
-- view.setCursor (PAGE_VIEW_CURSOR_DRAG);
-+ m_DragInfo->startX = x;
-+ m_DragInfo->startY = y;
-+ if(m_ScrollMode == PagePterModeScroll)
-+ view.setCursor (PAGE_VIEW_CURSOR_DRAG);
-+ else
-+ view.setCursor (PAGE_VIEW_CURSOR_SELECT_TEXT);
- }
- }
- }
-@@ -149,8 +155,24 @@
- {
- if ( 1 == button )
- {
-+ if(m_LastSelection)
-+ gdk_region_destroy(m_LastSelection);
-+ m_LastSelection = NULL;
-+
-+ if ( m_Document->isLoaded() &&
-+ m_ScrollMode == PagePterModeSelectText &&
-+ NULL != m_DragInfo )
-+ {
-+ DocumentRectangle rect(m_DragInfo->startX, m_DragInfo->startY,
-+ m_DragInfo->x, m_DragInfo->y);
-+ m_Document->setTextSelection(&rect);
-+ }
-+
- delete m_DragInfo;
- m_DragInfo = NULL;
-+
-+ refreshPage(PAGE_SCROLL_NONE, FALSE);
-+
- getView ().setCursor (PAGE_VIEW_CURSOR_NORMAL);
- }
- }
-@@ -181,10 +203,32 @@
- view.setCursor (PAGE_VIEW_CURSOR_NORMAL);
- }
- }
-- else
-- {
-- view.scrollPage (m_DragInfo->scrollX, m_DragInfo->scrollY,
-- x - m_DragInfo->x, y - m_DragInfo->y);
-+ else{
-+ m_DragInfo->x = x;
-+ m_DragInfo->y = y;
-+
-+ if(m_ScrollMode == PagePterModeScroll){
-+ view.scrollPage (view.getHorizontalScroll (), view.getVerticalScroll (),
-+ x - m_DragInfo->startX, y - m_DragInfo->startY);
-+ }
-+ else{
-+ if(!m_Document->isLoaded())
-+ return ;
-+
-+ DocumentRectangle rect(m_DragInfo->startX, m_DragInfo->startY,
-+ m_DragInfo->x, m_DragInfo->y);
-+
-+ GdkRegion *region = m_Document->getTextRegion (&rect);
-+
-+ if( !m_LastSelection || !gdk_region_equal(m_LastSelection, region)){
-+ if(m_LastSelection)
-+ gdk_region_destroy(m_LastSelection);
-+ m_LastSelection = gdk_region_copy(region);
-+ DocumentPage *page = m_Document->getCurrentPage();
-+ if ( NULL != page )
-+ refreshPage (PAGE_SCROLL_NONE, FALSE);
-+ }
-+ }
- }
- }
-
-@@ -273,6 +317,8 @@
- if ( NULL != documentPage )
- {
- g_WaitingForPage = FALSE;
-+ if ( NULL != m_LastSelection )
-+ documentPage->setSelection(m_LastSelection);
- view.showPage (documentPage, pageScroll);
- }
- else
-@@ -364,6 +410,17 @@
- }
-
- ///
-+/// @brief Sets the page mouse scroll mode
-+///
-+/// @param mode Scroll mode to set.
-+///
-+void
-+PagePter::setMode (PagePterMode mode)
-+{
-+ this->m_ScrollMode = mode;
-+}
-+
-+///
- /// @brief The page view has been resized.
- ///
- /// @param width The new with of the page view.
-diff -Nurd epdfview-0.1.6-svn/src/PagePter.h epdfview/src/PagePter.h
---- epdfview-0.1.6-svn/src/PagePter.h 2008-07-13 12:57:45.053198000 +0200
-+++ epdfview/src/PagePter.h 2008-07-13 12:55:52.483198000 +0200
-@@ -23,6 +23,11 @@
-
- namespace ePDFView
- {
-+ enum PagePterMode{
-+ PagePterModeScroll,
-+ PagePterModeSelectText,
-+ };
-+
- ///
- /// @class PagePter.
- /// @brief The page presenter.
-@@ -53,6 +58,7 @@
- void setNextPageScroll (PageScroll next);
- void setView (IMainView &view);
- void viewResized (gint width, gint height);
-+ void setMode(PagePterMode mode);
-
- protected:
- /// The document whose page is shown.
-@@ -63,7 +69,11 @@
- PageScroll m_NextPageScroll;
- /// The page view.
- IPageView *m_PageView;
--
-+ /// Last text selection
-+ GdkRegion *m_LastSelection;
-+ /// What page presenter must do when user move mouse with button pressed.
-+ PagePterMode m_ScrollMode;
-+
- void refreshPage (PageScroll pageScroll, gboolean wasZoomed);
- };
- }
-diff -Nurd epdfview-0.1.6-svn/src/PDFDocument.cxx epdfview/src/PDFDocument.cxx
---- epdfview-0.1.6-svn/src/PDFDocument.cxx 2008-07-13 12:57:45.043198000 +0200
-+++ epdfview/src/PDFDocument.cxx 2008-07-13 12:55:52.473198000 +0200
-@@ -191,7 +191,7 @@
- /// @param filename The name of the file name to open. It must be an absolute
- /// path.
- /// @param password The password to use to open @a filename.
--/// @param error Location to store the error occurring or NULL to ignore
-+/// @param error Location to store the error occurring or NULL to ignore
- /// errors.
- ///
- /// @return TRUE if the file could be opened, FALSE otherwise.
-@@ -257,7 +257,7 @@
- else
- {
- // OK, the glib's wrapper don't pass the error code directly
-- // from Poppler. Instead returns G_FILE_ERROR_FAILED and a
-+ // from Poppler. Instead returns G_FILE_ERROR_FAILED and a
- // non translated string.
- // Maybe I'm wrong (very probable) but that's a wrong way.
- // So I'm reading the error code from the error string...
-@@ -412,7 +412,7 @@
- poppler_page_get_size (popplerPage, NULL, &pageHeight);
- // We'll already calculate the positions scaled.
- gdouble scale = getZoom ();
-- GList *pageLinks = poppler_page_get_link_mapping (popplerPage);
-+ GList *pageLinks = poppler_page_get_link_mapping (popplerPage);
- for (GList *pageLink = g_list_first (pageLinks) ;
- NULL != pageLink ;
- pageLink = g_list_next (pageLink) )
-@@ -440,7 +440,7 @@
- /// poppler_index_iter_new().
- ///
- void
--PDFDocument::setOutline (DocumentOutline *outline,
-+PDFDocument::setOutline (DocumentOutline *outline,
- PopplerIndexIter *childrenList)
- {
- if ( NULL != childrenList )
-@@ -474,11 +474,11 @@
- #endif // HAVE_POPPLER_0_5_2
-
- outline->addChild (child);
-- PopplerIndexIter *childIter =
-+ PopplerIndexIter *childIter =
- poppler_index_iter_get_child (childrenList);
- setOutline (child, childIter);
- }
-- }
-+ }
- while ( poppler_index_iter_next (childrenList) );
-
- poppler_index_iter_free (childrenList);
-@@ -490,7 +490,7 @@
- ///
- /// Retrieves the width and height of a document's page before to scale, but
- /// after rotation.
--///
-+///
- /// @param pageNum The page to get its size.
- /// @param width The output pointer to save the page's width.
- /// @param height The output pointer to save the page's height.
-@@ -656,6 +656,107 @@
- return result;
- }
-
-+static void
-+repairEmpty(PopplerRectangle& rect)
-+{
-+ //rect must have be least 1x1
-+ if(rect.y1 == rect.y2)
-+ rect.y2++;
-+ if(rect.x1 == rect.x2)
-+ rect.x2++;
-+}
-+
-+void
-+PDFDocument::setTextSelection (DocumentRectangle *rect)
-+{
-+ g_assert(rect);
-+
-+ PopplerPage *page = poppler_document_get_page (m_Document, getCurrentPageNum()-1);
-+ if(!page)
-+ return;
-+
-+ gdouble pageWidth, pageHeight;
-+ poppler_page_get_size(page, &pageWidth, &pageHeight);
-+
-+ //for get text we must exchange y coordinate, don't ask me where logic here.
-+ PopplerRectangle textRect = { rect->getX1() / getZoom(),
-+ (pageHeight - rect->getY2() / getZoom()),
-+ rect->getX2() * getZoom() / getZoom(),
-+ (pageHeight - rect->getY1() / getZoom())};
-+ repairEmpty(textRect);
-+
-+#if defined (HAVE_POPPLER_0_6_0)
-+ gchar *text = poppler_page_get_text(page, POPPLER_SELECTION_GLYPH,
-+ &textRect);
-+#else // !HAVE_POPPLER_0_6_0
-+ gchar *text = poppler_page_get_text(page, &textRect);
-+#endif // HAVE_POPPLER_0_6_0
-+ if(!text)
-+ goto cleanup;
-+
-+ for ( GList *obs = g_list_first (m_Observers) ;
-+ NULL != obs ;
-+ obs = g_list_next (obs) )
-+ {
-+ IDocumentObserver *observer = (IDocumentObserver*)obs->data;
-+ observer->notifyTextSelected(text);
-+ }
-+
-+ cleanup:
-+ if(page)
-+ g_object_unref(page);
-+ if(text)
-+ g_free(text);
-+}
-+
-+GdkRegion*
-+PDFDocument::getTextRegion (DocumentRectangle *r)
-+{
-+ GdkRegion *res = NULL;
-+ PopplerPage *page = poppler_document_get_page (m_Document, getCurrentPageNum()-1);
-+ if(!page)
-+ return NULL;
-+
-+ //calulate rect
-+ PopplerRectangle rect;
-+ rect.x1 = r->getX1() / getZoom();
-+ rect.y1 = r->getY1() / getZoom();
-+ rect.x2 = r->getX2() / getZoom();
-+ rect.y2 = r->getY2() / getZoom();
-+ repairEmpty(rect);
-+
-+ //calc selection size
-+#if defined (HAVE_POPPLER_0_8_0)
-+ GList *selections = poppler_page_get_selection_region(page, getZoom(),
-+ POPPLER_SELECTION_GLYPH, &rect);
-+ res = gdk_region_new();
-+ for (GList *selection = g_list_first (selections) ;
-+ NULL != selection ; selection = g_list_next (selection)) {
-+ PopplerRectangle *rectangle = (PopplerRectangle *)selection->data;
-+ GdkRectangle rect;
-+
-+ rect.x = (gint)rectangle->x1;
-+ rect.y = (gint)rectangle->y1;
-+ rect.width = (gint) (rectangle->x2 - rectangle->x1);
-+ rect.height = (gint) (rectangle->y2 - rectangle->y1);
-+
-+ gdk_region_union_with_rect (res, &rect);
-+ }
-+ poppler_page_selection_region_free (selections);
-+#elif defined (HAVE_POPPLER_0_6_0)
-+ res = poppler_page_get_selection_region(page, getZoom(),
-+ POPPLER_SELECTION_GLYPH, &rect);
-+#else // !HAVE_POPPLER_0_6_0
-+ res = poppler_page_get_selection_region(page, getZoom(), &rect);
-+#endif // HAVE_POPPLER_0_6_0
-+
-+ //free some local data
-+ g_object_unref(page);
-+
-+ return res;
-+}
-+
-+
- ///
- /// @brief Gets the document's page layout from Poppler's page layout.
- ///
-diff -Nurd epdfview-0.1.6-svn/src/PDFDocument.h epdfview/src/PDFDocument.h
---- epdfview-0.1.6-svn/src/PDFDocument.h 2008-07-13 12:57:45.063198000 +0200
-+++ epdfview/src/PDFDocument.h 2008-07-13 12:55:52.493198000 +0200
-@@ -54,6 +54,8 @@
-
- DocumentPage *renderPage (gint pageNum);
- gboolean saveFile (const gchar *fileName, GError **error);
-+ GdkRegion* getTextRegion (DocumentRectangle* rect);
-+ void setTextSelection (DocumentRectangle *rect);
-
- protected:
- /// The PDF document.
-diff -Nurd epdfview-0.1.6-svn/src/PrintPter.cxx epdfview/src/PrintPter.cxx
---- epdfview-0.1.6-svn/src/PrintPter.cxx 2008-07-13 12:57:45.043198000 +0200
-+++ epdfview/src/PrintPter.cxx 2008-07-13 12:55:52.473198000 +0200
-@@ -230,20 +230,27 @@
- ppdFindOption (printerPPD, "PageSize");
- view.clearPageSizeList ();
- int pageSizeToSelect = 0;
-- ppd_choice_t *pageSizeChoice = pageSizeOption->choices;
-- for ( int currentSize = 0 ;
-- currentSize < pageSizeOption->num_choices ;
-- ++currentSize, ++pageSizeChoice )
-+ if ( 0 != pageSizeOption )
- {
-- const gchar *sizeName = pageSizeChoice->text;
-- const gchar *sizeValue = pageSizeChoice->choice;
--
-- view.addPageSize (_(sizeName), sizeValue);
-- if ( pageSizeChoice->marked )
-+ ppd_choice_t *pageSizeChoice = pageSizeOption->choices;
-+ for ( int currentSize = 0 ;
-+ currentSize < pageSizeOption->num_choices ;
-+ ++currentSize, ++pageSizeChoice )
- {
-- pageSizeToSelect = currentSize;
-+ const gchar *sizeName = pageSizeChoice->text;
-+ const gchar *sizeValue = pageSizeChoice->choice;
-+
-+ view.addPageSize (_(sizeName), sizeValue);
-+ if ( pageSizeChoice->marked )
-+ {
-+ pageSizeToSelect = currentSize;
-+ }
- }
- }
-+ else
-+ {
-+ view.addPageSize (_("A4"), "A4");
-+ }
- view.selectPageSize (pageSizeToSelect);
-
- // Get the resolutions.
-@@ -251,29 +258,36 @@
- ppdFindOption (printerPPD, "Resolution");
- view.clearResolutionList ();
- int resolutionToSelect = 0;
-- ppd_choice_t *resolutionChoice = resolutionOption->choices;
-- for ( int currentRes = 0 ;
-- currentRes < resolutionOption->num_choices ;
-- ++currentRes, ++resolutionChoice )
-+ if ( 0 != resolutionOption )
- {
-- const gchar *resName = resolutionChoice->text;
-- const gchar *resValue = resolutionChoice->choice;
--
-- view.addResolution (_(resName), resValue);
-- if ( resolutionChoice->marked )
-+ ppd_choice_t *resolutionChoice = resolutionOption->choices;
-+ for ( int currentRes = 0 ;
-+ currentRes < resolutionOption->num_choices ;
-+ ++currentRes, ++resolutionChoice )
- {
-- resolutionToSelect = currentRes;
-+ const gchar *resName = resolutionChoice->text;
-+ const gchar *resValue = resolutionChoice->choice;
-+
-+ view.addResolution (_(resName), resValue);
-+ if ( resolutionChoice->marked )
-+ {
-+ resolutionToSelect = currentRes;
-+ }
- }
- }
-+ else
-+ {
-+ view.addResolution (_("300 DPI"), "300x300dpi");
-+ }
- view.selectResolution (resolutionToSelect);
-
- // Get the color models.
- ppd_option_t *colorModelOption =
- ppdFindOption (printerPPD, "ColorModel");
- view.clearColorModelList ();
-+ int colorModelToSelect = 0;
- if ( NULL != colorModelOption )
- {
-- int colorModelToSelect = 0;
- ppd_choice_t *colorModelChoice = colorModelOption->choices;
- for ( int currentColor = 0 ;
- currentColor < colorModelOption->num_choices ;
-@@ -288,12 +302,12 @@
- colorModelToSelect = currentColor;
- }
- }
-- view.selectColorModel (colorModelToSelect);
- }
- else
- {
- view.addColorModel (_("Grayscale"), "Gray");
- }
-+ view.selectColorModel (colorModelToSelect);
- ppdClose (printerPPD);
- }
- }
-diff -Nurd epdfview-0.1.6-svn/THANKS epdfview/THANKS
---- epdfview-0.1.6-svn/THANKS 2008-07-13 12:57:47.583198000 +0200
-+++ epdfview/THANKS 2008-07-13 12:55:55.133198000 +0200
-@@ -1,16 +1,34 @@
- I would like to give thanks to the following for their support and
- contributions:
-
-- - Enrico Tröger <enrico.troeger@uvena.de>, for his full screen patch.
-- - Igor Vagulin <igor_vagulin@mail.ru>, for his Russian translation.
-+ - Alex Dedul <rotmer@gmail.com>, for his patch.
-+ - Enrico Tröger <enrico.troeger@uvena.de>, for his full screen patch and others.
-+ - Daniel Nylander <po@danielnylander.se>, for his Swedish translation.
-+ - Dragonlord <dragonlord@seznam.cz>, for his Czech translation.
-+ - Fábio Antunes <fabio.antunes@hotmail.com>, for his Brazilian Portuguese translation.
-+ - Fabio Vergnani <monghitri@aruba.it>, for his Italion translation.
-+ - Ihar Hrachyshka <ihar.hrachyshka@gmail.com>, for his vim keybindings patch.
-+ - Igor Vagulin <igor_vagulin@mail.ru>, for his Russian translation and patches.
-+ - Lester Godwin <lgodwin@pushcorp.com>, for his patches.
- - LoneFox <>, for his patches.
-+ - Michael Opitz <opitz.michael@gmail.com>, for his patches.
- - Moritz Heiber <moe@xfce.org>, for his German translation.
- - Mr_Moustache <mr.moustache@laposte.net>, for his French translation.
-+ - Nuno Miguel <nunis@netcabo.pt>, for his European Portuguese translation.
-+ - Nyu <nyu_8804@yahoo.co.jp>, for his Japanese translation.
-+ - Panchoat <panchoat@gmail.com>, for his Simplified Chinese translation.
-+ - Piotr Pacholak <obi_gl@o2.pl>, for corrections in the Polish translation.
-+ - Rafał Mużyło <galtgendo@o2.pl>, for his patches.
-+ - Sergey Starosek <sergey.starosek@gmail.com>, for his Russian patches.
- - Stavros Giannouris <stavrosg2002@freemail.gr>, for his Greek translation.
-+ - Tilman Sauerbeck <tilman@code-monkey.de>, for his patches.
- - tbm <tbm@home.nl>, for his patches.
-+ - Valery Koval <Valery.Koval@innovinn.com>, for his patches.
- - VnPenguin <vnpenguin@gmail.com>, for his Vietnamese translation.
- - Wei-Lun Chao <chaoweilun@pcmail.com.tw>, for his Traditional Chinese translation.
- - Wojciech Myrda <vojcek@tlen.pl>, for his Polish translation.
- - Yuri Pankov <yuri.pankov@gmail.com>, for his patches.
-+ - Yves-Alexis Perez <corsac@debian.org>, for his patches.
-+ - zhou sf <sxzzsf@gmail.com>, for his patches.
-
- If you feel that you should be in this list and I didn't remember to add you in it, please send me an e-mail! :-)
diff --git a/recipes/euphony/euphony_0.1.3.bb b/recipes/euphony/euphony_0.1.3.bb
index 134a39dc5e..7d332ee8e3 100644
--- a/recipes/euphony/euphony_0.1.3.bb
+++ b/recipes/euphony/euphony_0.1.3.bb
@@ -6,6 +6,7 @@ SECTION = "x11/multimedia"
inherit autotools
SRC_URI = "http://projects.gstaedtner.net/euphony/${PN}-${PV}.tar.gz"
+PR = "r1"
FILES_${PN} += "${datadir}"
diff --git a/recipes/eyeos/eyeos_1.8.7.1.bb b/recipes/eyeos/eyeos_1.8.7.1.bb
new file mode 100644
index 0000000000..f4cd79eaf3
--- /dev/null
+++ b/recipes/eyeos/eyeos_1.8.7.1.bb
@@ -0,0 +1,16 @@
+DESCRIPTION = "The Open Source Clouds Web Desktop"
+HOMEPAGE = "http://eyeos.org/"
+LICENSE = "AGPL3"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/eyeos/eyeOS_${PV}.zip"
+
+S = "${WORKDIR}/eyeOS"
+
+do_install() {
+ install -d ${D}/www/pages/eyeos
+ cp -r ${S}/* ${D}/www/pages/eyeos
+}
+
+PACKAGE_ARCH = "all"
+FILES_${PN} += "/www/pages/eyeos"
+
diff --git a/recipes/ez-ipupdate/ez-ipupdate_3.0.10.bb b/recipes/ez-ipupdate/ez-ipupdate_3.0.10.bb
index fbf5f61a39..f3434e16f9 100644
--- a/recipes/ez-ipupdate/ez-ipupdate_3.0.10.bb
+++ b/recipes/ez-ipupdate/ez-ipupdate_3.0.10.bb
@@ -4,14 +4,15 @@ HOMEPAGE = "http://www.ez-ipupdate.com/"
SECTION = "console/network"
PRIORITY = "optional"
LICENSE = "GPL"
-PR = "r0"
+PR = "r1"
-SRC_URI = "http://www.ez-ipupdate.com/dist/ez-ipupdate-${PV}.tar.gz"
-SRC_URI += "file://configure.patch;patch=1"
-SRC_URI += "file://conffile.patch;patch=1"
-SRC_URI += "file://zoneedit.patch;patch=1"
-SRC_URI += "file://init"
-SRC_URI += "file://ipupdate.conf"
+SRC_URI = "http://www.ez-ipupdate.com/dist/ez-ipupdate-${PV}.tar.gz \
+ file://configure.patch;patch=1 \
+ file://conffile.patch;patch=1 \
+ file://zoneedit.patch;patch=1 \
+ file://init \
+ file://ipupdate.conf \
+ "
INITSCRIPT_NAME = "ipupdate"
# No dependencies, so just go in at the standard level (20)
@@ -22,8 +23,6 @@ CONFFILES_${PN} = "${sysconfdir}/ipupdate.conf"
inherit autotools update-rc.d
-PACKAGES += "ez-ipupdate"
-
do_install_append() {
install -d "${D}${sysconfdir}/init.d"
install -c -m 755 ${WORKDIR}/init "${D}${sysconfdir}/init.d/ipupdate"
diff --git a/recipes/fbreader/fbreader-0.12.1/Makefile.patch b/recipes/fbreader/fbreader-0.12.1/Makefile.patch
new file mode 100644
index 0000000000..0e498c7125
--- /dev/null
+++ b/recipes/fbreader/fbreader-0.12.1/Makefile.patch
@@ -0,0 +1,22 @@
+diff -uri fbreader-0.12.1.orig/fbreader/Makefile fbreader-0.12.1/fbreader/Makefile
+--- fbreader-0.12.1.orig/fbreader/Makefile 2009-12-13 09:03:11.000000000 +0100
++++ fbreader-0.12.1/fbreader/Makefile 2009-12-14 17:18:47.548638783 +0100
+@@ -37,7 +37,6 @@
+ @install $(TARGET) $(DESTDIR)$(BINDIR)/FBReader
+ @install -d $(FBSHAREDIR)
+ @install -d $(FBSHAREDIR)/help
+- @./scripts/install_help.sh $(VARIANT) $(FBSHAREDIR)/help
+ @install -d $(FBSHAREDIR)/network
+ @install -m 0644 $(wildcard data/network/*.xml) $(FBSHAREDIR)/network
+ @install -d $(FBSHAREDIR)/network/certificates
+@@ -58,8 +57,8 @@
+ @install -d $(FBSHAREDIR)/resources
+ @install -m 0644 $(wildcard data/resources/*.xml) $(FBSHAREDIR)/resources
+ @install -d $(DESTDIR)$(APPIMAGEDIR_REAL)
+- @install -m 0644 $(wildcard data/icons/toolbar/$(VARIANT)/*.*) $(DESTDIR)$(APPIMAGEDIR_REAL)
+- @install -m 0644 $(wildcard data/icons/filetree/$(VARIANT)/*.*) $(DESTDIR)$(APPIMAGEDIR_REAL)
++ @install -m 0644 $(wildcard data/icons/toolbar/$(TARGET_ARCH)/*.*) $(DESTDIR)$(APPIMAGEDIR_REAL)
++ @install -m 0644 $(wildcard data/icons/filetree/$(TARGET_ARCH)/*.*) $(DESTDIR)$(APPIMAGEDIR_REAL)
+ @install -m 0644 $(wildcard data/icons/booktree/new/*.*) $(DESTDIR)$(APPIMAGEDIR_REAL)
+ @make -C $(TARGET_ARCH) RESOLUTION=$(RESOLUTION) install
+
diff --git a/recipes/fbreader/fbreader_0.12.1.bb b/recipes/fbreader/fbreader_0.12.1.bb
new file mode 100644
index 0000000000..c1c3025a1a
--- /dev/null
+++ b/recipes/fbreader/fbreader_0.12.1.bb
@@ -0,0 +1,35 @@
+DESCRIPTION = "FBreader is an ebook reader"
+HOMEPAGE = "http://www.fbreader.org"
+SECTION = "x11/utils"
+PRIORITY = "optional"
+LICENSE = "GPLv2"
+DEPENDS = "gtk+ enca expat bzip2 libgpewidget virtual/libiconv liblinebreak libfribidi"
+
+SRC_URI = "http://www.fbreader.org/fbreader-sources-${PV}.tgz \
+file://Makefile.patch;patch=1"
+
+# Set the defaults
+READER_RESOLUTION ?= "1024x600"
+READER_ARCH ?= "desktop"
+READER_UI ?= "gtk"
+READER_STATUS ?= "release"
+
+FILES_${PN} += "${datadir}/FBReader ${datadir}/zlibrary ${libdir}/zlibrary"
+
+CFLAGS_append = " RESOLUTION=${READER_RESOLUTION} INSTALLDIR=${prefix}"
+EXTRA_OEMAKE = "CC='${CXX}' LD='${CXX}' OE_CFLAGS='${CXXFLAGS}' INCPATH='${STAGING_INCDIR}' LIBPATH='${STAGING_LIBDIR}'"
+
+inherit pkgconfig
+
+do_configure() {
+ cd ${WORKDIR}/${PN}-${PV}
+ mv makefiles/target.mk makefiles/target.mk.orig
+
+ echo "TARGET_ARCH = ${READER_ARCH}" > makefiles/target.mk
+ echo "UI_TYPE = ${READER_UI}" >> makefiles/target.mk
+ echo "TARGET_STATUS = ${READER_STATUS}" >> makefiles/target.mk
+}
+
+do_install() {
+ oe_runmake install DESTDIR=${D} RESOLUTION=${READER_RESOLUTION}
+}
diff --git a/recipes/gabriel/gabriel_svn.bb b/recipes/gabriel/gabriel_svn.bb
index 94fdfe99e7..f525885fb0 100644
--- a/recipes/gabriel/gabriel_svn.bb
+++ b/recipes/gabriel/gabriel_svn.bb
@@ -2,7 +2,7 @@ DESCRIPTION = "Gabriel is a small utility to enable D-Bus clients to connect to
daemon running on a remote machine, through SSH. In simple words, gabriel is a proxy for \
a dbus daemon running on a remote machine."
LICENSE = "GPL"
-DEPENDS = "libssh glib-2.0 dbus glib-dbus"
+DEPENDS = "libssh glib-2.0 dbus dbus-glib"
SECTION = "console/network"
PV = "0.0.0+svnr${SRCPV}"
diff --git a/recipes/gcc/gcc-configure-cross.inc b/recipes/gcc/gcc-configure-cross.inc
index 980f7929ff..1c37de8b4a 100644
--- a/recipes/gcc/gcc-configure-cross.inc
+++ b/recipes/gcc/gcc-configure-cross.inc
@@ -36,9 +36,6 @@ do_stage_append () {
${STAGING_INCDIR}/
fi
- # We use libiberty from binutils
- rm -f ${CROSS_DIR}/lib/libiberty.a
-
# We probably don't need these
rmdir ${CROSS_DIR}/include || :
diff --git a/recipes/gcc/gcc-cross-initial_svn.bb b/recipes/gcc/gcc-cross-initial_svn.bb
index 067ab61be3..0650a81ecf 100644
--- a/recipes/gcc/gcc-cross-initial_svn.bb
+++ b/recipes/gcc/gcc-cross-initial_svn.bb
@@ -1,7 +1,7 @@
require gcc-cross_${PV}.bb
require gcc-cross-initial.inc
-DEPENDS += "gmp-native mpfr-native"
+DEPENDS += "gmp-native mpfr-native mpc-native"
EXTRA_OECONF += " --disable-libmudflap \
--disable-libgomp \
diff --git a/recipes/gcc/gcc-cross-intermediate_svn.bb b/recipes/gcc/gcc-cross-intermediate_svn.bb
index a9ae5bdf20..93cd35730b 100644
--- a/recipes/gcc/gcc-cross-intermediate_svn.bb
+++ b/recipes/gcc/gcc-cross-intermediate_svn.bb
@@ -1,7 +1,7 @@
require gcc-cross_${PV}.bb
require gcc-cross-intermediate.inc
-DEPENDS += "gmp-native mpfr-native"
+DEPENDS += "mpc-native gmp-native mpfr-native"
EXTRA_OECONF += " --disable-libmudflap \
--disable-libgomp \
diff --git a/recipes/gcc/gcc-cross-sdk_svn.bb b/recipes/gcc/gcc-cross-sdk_svn.bb
index 22937da3c4..752266be5f 100644
--- a/recipes/gcc/gcc-cross-sdk_svn.bb
+++ b/recipes/gcc/gcc-cross-sdk_svn.bb
@@ -7,7 +7,7 @@ require gcc-cross-sdk.inc
require gcc-configure-sdk.inc
require gcc-package-sdk.inc
-DEPENDS += "gmp-native mpfr-native"
+DEPENDS += "mpc-native gmp-native mpfr-native"
EXTRA_OECONF += "--disable-libunwind-exceptions --disable-libssp \
--disable-libgomp --disable-libmudflap \
diff --git a/recipes/gcc/gcc-cross_svn.bb b/recipes/gcc/gcc-cross_svn.bb
index 2186a81944..af46e3ac88 100644
--- a/recipes/gcc/gcc-cross_svn.bb
+++ b/recipes/gcc/gcc-cross_svn.bb
@@ -4,6 +4,8 @@ require gcc-cross4.inc
require gcc-configure-cross.inc
require gcc-package-cross.inc
+DEPENDS += "mpc-native"
+
SRC_URI_append_fail-fast = " file://zecke-no-host-includes.patch;patch=1 "
EXTRA_OECONF += " --disable-libunwind-exceptions --with-mpfr=${STAGING_DIR_NATIVE}${prefix_native}"
diff --git a/recipes/gcc/gcc-svn.inc b/recipes/gcc/gcc-svn.inc
index ab39a73724..c39546dc96 100644
--- a/recipes/gcc/gcc-svn.inc
+++ b/recipes/gcc/gcc-svn.inc
@@ -4,7 +4,7 @@ ARM_INSTRUCTION_SET = "arm"
require gcc-common.inc
-DEPENDS = "mpfr gmp"
+DEPENDS = "mpfr gmp mpc"
GCC_BASE ?= "4.5"
PV = "${GCC_BASE}+svnr${SRCPV}"
diff --git a/recipes/glew/libglew_1.5.1.bb b/recipes/glew/libglew_1.5.1.bb
index c011a12525..23257b552a 100644
--- a/recipes/glew/libglew_1.5.1.bb
+++ b/recipes/glew/libglew_1.5.1.bb
@@ -4,7 +4,7 @@ LICENSE = "Modified BSD License, Mesa 3-D License, Khronos License"
DEPENDS = "virtual/libx11 virtual/libgl libxext libxi libxmu"
-PR = "r0"
+PR = "r1"
SRC_URI = "${SOURCEFORGE_MIRROR}/project/glew/glew/1.5.1/glew-1.5.1-src.tgz \
diff --git a/recipes/glib-2.0/glib-2.0-2.22.1/uclibc-res_query.patch b/recipes/glib-2.0/glib-2.0-2.22.1/uclibc-res_query.patch
new file mode 100644
index 0000000000..bbb34b5c09
--- /dev/null
+++ b/recipes/glib-2.0/glib-2.0-2.22.1/uclibc-res_query.patch
@@ -0,0 +1,36 @@
+Index: glib-2.22.1/configure.in
+===================================================================
+--- glib-2.22.1.orig/configure.in 2009-12-08 12:01:39.000000000 -0800
++++ glib-2.22.1/configure.in 2009-12-08 12:05:29.000000000 -0800
+@@ -1004,17 +1004,22 @@ if test $glib_native_win32 = no; then
+ AC_CHECK_FUNC(res_query, ,
+ [AC_CHECK_LIB(resolv, res_query, [ LIBASYNCNS_LIBADD="-lresolv" ],
+ [ save_libs="$LIBS"
+- LIBS="-lresolv $LIBS"
+- AC_MSG_CHECKING([for res_query in -lresolv (alternate version)])
++ AC_MSG_CHECKING([for res_query (alternate version)])
+ AC_LINK_IFELSE(
+ [AC_LANG_PROGRAM([[#include <resolv.h>]], [[res_query(0,0,0,0,0)]])],
+- [ AC_MSG_RESULT(yes)
+- LIBASYNCNS_LIBADD="-lresolv" ],
+- [ AC_MSG_RESULT(no)
+- AC_CHECK_LIB(bind, res_query,
+- [ LIBASYNCNS_LIBADD="-lbind" ],
+- [ AC_MSG_ERROR(res_query not found) ] ) ] )
+- LIBS="$save_libs"
++ [ ac_cv_func_res_query=yes ],
++ [ AC_MSG_CHECKING([for res_query in -lresolv (alternate version)])
++ LIBS="-lresolv $LIBS"
++ AC_LINK_IFELSE(
++ [AC_LANG_PROGRAM([[#include <resolv.h>]], [[res_query(0,0,0,0,0)]])],
++ [ AC_MSG_RESULT(yes)
++ LIBASYNCNS_LIBADD="-lresolv" ],
++ [ AC_MSG_RESULT(no)
++ AC_CHECK_LIB(bind, res_query,
++ [ LIBASYNCNS_LIBADD="-lbind" ],
++ [ AC_MSG_ERROR(res_query not found) ] ) ] )
++ ] )
++ LIBS="$save_libs"
+ ] )
+ ]
+ )
diff --git a/recipes/glib-2.0/glib-2.0_2.22.1.bb b/recipes/glib-2.0/glib-2.0_2.22.1.bb
index 533116b825..95fa07bbce 100644
--- a/recipes/glib-2.0/glib-2.0_2.22.1.bb
+++ b/recipes/glib-2.0/glib-2.0_2.22.1.bb
@@ -1,5 +1,5 @@
require glib.inc
-PR = "${INC_PR}.1"
+PR = "${INC_PR}.2"
SRC_URI = "\
http://ftp.gnome.org/pub/GNOME/sources/glib/2.22/glib-${PV}.tar.bz2 \
@@ -7,6 +7,7 @@ SRC_URI = "\
file://configure-libtool.patch;patch=1 \
file://bug-556515.patch;patch=1 \
file://g_once_init_enter.patch;patch=1 \
+ file://uclibc-res_query.patch;patch=1 \
"
diff --git a/recipes/gnome/zenity_2.28.0.bb b/recipes/gnome/zenity_2.28.0.bb
new file mode 100644
index 0000000000..0d8d208f16
--- /dev/null
+++ b/recipes/gnome/zenity_2.28.0.bb
@@ -0,0 +1,11 @@
+DESCRIPTION = "A tool to display dialogs from the command line and shell scripts."
+LICENSE = "GPL"
+
+DEPENDS = "gtk+ libglade glib-2.0 libnotify"
+
+inherit gnome
+
+do_configure_prepend() {
+ sed -i -e '/-I$(includedir)/d' src/Makefile.am
+}
+
diff --git a/recipes/gstreamer/gst-plugins.inc b/recipes/gstreamer/gst-plugins.inc
index 9b69f3a609..a12c4ed5e1 100644
--- a/recipes/gstreamer/gst-plugins.inc
+++ b/recipes/gstreamer/gst-plugins.inc
@@ -10,6 +10,7 @@ PACKAGES_DYNAMIC = "gst-plugin-*"
SRC_URI = "http://gstreamer.freedesktop.org/src/${PN}/${PN}-${PV}.tar.bz2"
EXTRA_OECONF = "--disable-aalib --disable-shout2 --disable-sdl --disable-cdaudio --x-includes=${STAGING_INCDIR} --x-libraries=${STAGING_LIBDIR} "
+EXTRA_OECONF_append_shr = " --disable-dvdnav "
acpaths = "-I ${S}/common/m4 -I ${S}/m4"
diff --git a/recipes/gtk-webcore/midori-0.2.1/retain-navigationbar-in-fullwindow.patch b/recipes/gtk-webcore/midori-0.2.1/retain-navigationbar-in-fullwindow.patch
new file mode 100644
index 0000000000..78d8fba085
--- /dev/null
+++ b/recipes/gtk-webcore/midori-0.2.1/retain-navigationbar-in-fullwindow.patch
@@ -0,0 +1,39 @@
+From a08caa02b95db6c9251a5342de0fb985fae8399b Mon Sep 17 00:00:00 2001
+From: Christian Dywan <christian@twotoasts.de>
+Date: Tue, 08 Dec 2009 22:55:25 +0000
+Subject: Retain the visibility of the navigationbar in fullscreen mode
+
+It can be hidden manually, the way it used to be in 0.2.0
+---
+diff --git a/midori/midori-browser.c b/midori/midori-browser.c
+index 92769fd..11ca4aa 100644
+--- a/midori/midori-browser.c
++++ b/midori/midori-browser.c
+@@ -3604,9 +3604,7 @@ _action_location_focus_out (GtkAction* action,
+ {
+ GtkWidget* view = midori_browser_get_current_tab (browser);
+
+- if (!browser->show_navigationbar
+- || gdk_window_get_state (GTK_WIDGET (browser)->window)
+- & GDK_WINDOW_STATE_FULLSCREEN)
++ if (!browser->show_navigationbar)
+ gtk_widget_hide (browser->navigationbar);
+
+ if (g_object_get_data (G_OBJECT (view), "news-feeds"))
+@@ -5148,14 +5146,11 @@ midori_browser_window_state_event_cb (MidoriBrowser* browser,
+ if (event->new_window_state & GDK_WINDOW_STATE_FULLSCREEN)
+ {
+ gtk_widget_hide (browser->menubar);
+- gtk_widget_hide (browser->navigationbar);
+ }
+ else
+ {
+ if (katze_object_get_boolean (browser->settings, "show-menubar"))
+ gtk_widget_show (browser->menubar);
+- if (katze_object_get_boolean (browser->settings, "show-navigationbar"))
+- gtk_widget_show (browser->navigationbar);
+ }
+ }
+ }
+--
+cgit v0.8.2.1
diff --git a/recipes/gtk-webcore/midori/config b/recipes/gtk-webcore/midori/config
index 7b6991d063..49aad72ef3 100644
--- a/recipes/gtk-webcore/midori/config
+++ b/recipes/gtk-webcore/midori/config
@@ -1,4 +1,13 @@
[settings]
enforce-96-dpi=true
-toolbar-items=Back,Forward,ReloadStop,Fullscreen,Location,Panel,
+toolbar-items=Back,Forward,ReloadStop,Fullscreen,Location,
+show-menubar=true
+show-navigationbar=true
+show-bookmarkbar=false
+show-panel=false
+show-transferbar=false
+show-statusbar=false
+zoom-text-and-images=true
+open-new-pages-in=MIDORI_NEW_PAGE_WINDOW
+open-external-pages-in=MIDORI_NEW_PAGE_WINDOW
diff --git a/recipes/gtk-webcore/midori_0.2.1.bb b/recipes/gtk-webcore/midori_0.2.1.bb
index 3eaf0f0bf8..2e5b6e4c57 100644
--- a/recipes/gtk-webcore/midori_0.2.1.bb
+++ b/recipes/gtk-webcore/midori_0.2.1.bb
@@ -5,9 +5,11 @@ DEPENDS += "python-native python-docutils-native"
SRC_URI = "http://archive.xfce.org/src/apps/midori/0.2/midori-${PV}.tar.bz2 \
file://waf"
-SRC_URI_append_shr = " file://config "
+SRC_URI_append_shr = " file://config \
+ file://retain-navigationbar-in-fullwindow.patch;patch=1 \
+ "
-PR = "r1"
+PR = "r2"
do_configure() {
cp -f ${WORKDIR}/waf ${S}/
diff --git a/recipes/icu/icu-3.6.inc b/recipes/icu/icu-3.6.inc
index 73162c2b80..198c73f491 100644
--- a/recipes/icu/icu-3.6.inc
+++ b/recipes/icu/icu-3.6.inc
@@ -1,6 +1,8 @@
LICENSE = "ICU"
+INC_PR = "r5"
+
SRC_URI = "ftp://ftp.software.ibm.com/software/globalization/icu/3.6/icu4c-3_6-src.tgz \
file://elif-to-else.patch;patch=1"
diff --git a/recipes/icu/icu-native_3.6.bb b/recipes/icu/icu-native_3.6.bb
index 887bfcac2f..ffbb447e18 100644
--- a/recipes/icu/icu-native_3.6.bb
+++ b/recipes/icu/icu-native_3.6.bb
@@ -1,3 +1,5 @@
require icu-3.6.inc
+PR = "${INC_PR}.1"
+
inherit native
diff --git a/recipes/icu/icu_3.6.bb b/recipes/icu/icu_3.6.bb
index 56a70a2f1d..6fd9b3d613 100644
--- a/recipes/icu/icu_3.6.bb
+++ b/recipes/icu/icu_3.6.bb
@@ -1,7 +1,7 @@
require icu-3.6.inc
DEPENDS += "icu-native"
-PR = "r4"
+PR = "${INC_PR}.1"
SRC_URI += "file://use-g++-for-linking.patch;patch=1 \
file://rematch-gcc-bug.patch;patch=1"
diff --git a/recipes/intone-video/intone-video_svn.bb b/recipes/intone-video/intone-video_svn.bb
index 351b95975d..0f7979f122 100644
--- a/recipes/intone-video/intone-video_svn.bb
+++ b/recipes/intone-video/intone-video_svn.bb
@@ -7,28 +7,17 @@ DEPENDS = "elementary eina sqlite3 edbus"
RDEPENDS = "mplayer lame libxv libsdl-x11"
PV = "0.13+svnr${SRCPV}"
-PR = "r0.1"
+PR = "r1"
-SRC_URI = "svn://intone-video.googlecode.com/svn/trunk;module=.;proto=http"
-S = "${WORKDIR}"
+SRC_URI = "svn://intone-video.googlecode.com/svn;module=trunk;proto=http"
+S = "${WORKDIR}/trunk"
inherit autotools
-do_configure_prepend() {
- rm -f "${S}/INSTALL"
- touch "${S}/INSTALL"
- sed -i 's/intone/intone-video/g' ${S}/configure.ac
- sed -i 's/\/doc\/intone$/\/share\/doc\/intone-video/g' ${S}/Makefile.am
- sed -i '/^EXTRA_DIST = $(glade_DATA)/d' ${S}/src/Makefile.am
- sed -i '/^gladedir = $(datadir)\/intone\/glade/d' ${S}/src/Makefile.am
- sed -i '/^glade_DATA = intone.glade/d' ${S}/src/Makefile.am
-}
-
do_install_append() {
- mv ${D}/${bindir}/intone ${D}/${bindir}/intone-video
- mkdir -p "${D}/${datadir}/pixmaps"
+ install -d "${D}/${datadir}/pixmaps"
install -m 0644 "${S}/resources/intone-video.png" "${D}/${datadir}/pixmaps"
- mkdir -p "${D}/${datadir}/applications"
+ install -d "${D}/${datadir}/applications"
install -m 0644 "${S}/resources/intone-video.desktop" "${D}/${datadir}/applications"
}
diff --git a/recipes/intone/intone_svn.bb b/recipes/intone/intone_svn.bb
index 094ea00185..29773c2638 100644
--- a/recipes/intone/intone_svn.bb
+++ b/recipes/intone/intone_svn.bb
@@ -7,20 +7,14 @@ DEPENDS = "elementary eina sqlite3 edbus libvorbis id3lib"
RDEPENDS = "mplayer lame libxv libsdl-x11"
PV = "0.66+svnr${SRCPV}"
-PR = "r1.1"
+PR = "r2"
-SRC_URI = "svn://intone.googlecode.com/svn/trunk;module=.;proto=http \
+SRC_URI = "svn://intone.googlecode.com/svn;module=trunk;proto=http \
file://vorbis-include-id3tag.patch;pnum=1;patch=1;maxrev=18"
-S = "${WORKDIR}"
+S = "${WORKDIR}/trunk"
inherit autotools
-do_configure_prepend() {
- rm -f "${S}/INSTALL"
- touch "${S}/INSTALL"
- sed -i 's/{prefix}\/doc\/intone$/{prefix}\/share\/doc\/intone/g' ${S}/Makefile.am
-}
-
do_install_append() {
mkdir -p "${D}/${datadir}/pixmaps"
install -m 0644 "${S}/resources/intone.png" "${D}/${datadir}/pixmaps"
diff --git a/recipes/iproute2/iproute2-2.6.29/use-cross-compiler.patch b/recipes/iproute2/iproute2-2.6.29/use-cross-compiler.patch
new file mode 100644
index 0000000000..be5d31d5e1
--- /dev/null
+++ b/recipes/iproute2/iproute2-2.6.29/use-cross-compiler.patch
@@ -0,0 +1,53 @@
+Patch to tc/Makefile is from
+http://bugs.gentoo.org/236861
+
+configure patch is based on suggestion from
+PR 5117
+
+http://bugs.openembedded.org/show_bug.cgi?id=5147
+
+-Khem
+Index: iproute2-2.6.29/configure
+===================================================================
+--- iproute2-2.6.29.orig/configure 2009-12-14 11:07:42.000000000 -0800
++++ iproute2-2.6.29/configure 2009-12-14 11:08:38.000000000 -0800
+@@ -16,7 +16,7 @@ int main(int argc, char **argv) {
+ return 0;
+ }
+ EOF
+-gcc -I$INCLUDE -o /tmp/atmtest /tmp/atmtest.c -latm >/dev/null 2>&1
++$CC -I$INCLUDE -o /tmp/atmtest /tmp/atmtest.c -latm >/dev/null 2>&1
+ if [ $? -eq 0 ]
+ then
+ echo "TC_CONFIG_ATM:=y" >>Config
+@@ -49,7 +49,7 @@ int main(int argc, char **argv) {
+ }
+
+ EOF
+-gcc -I$INCLUDE $IPTC -o /tmp/ipttest /tmp/ipttest.c $IPTL -ldl >/dev/null 2>&1
++$CC -I$INCLUDE $IPTC -o /tmp/ipttest /tmp/ipttest.c $IPTL -ldl >/dev/null 2>&1
+
+ if [ $? -eq 0 ]
+ then
+@@ -81,7 +81,7 @@ int main(int argc, char **argv) {
+ }
+
+ EOF
+-gcc -I$INCLUDE $IPTC -o /tmp/ipttest /tmp/ipttest.c $IPTL -ldl >/dev/null 2>&1
++$CC -I$INCLUDE $IPTC -o /tmp/ipttest /tmp/ipttest.c $IPTL -ldl >/dev/null 2>&1
+
+ if [ $? -eq 0 ]
+ then
+Index: iproute2-2.6.29/tc/Makefile
+===================================================================
+--- iproute2-2.6.29.orig/tc/Makefile 2009-12-14 11:10:27.000000000 -0800
++++ iproute2-2.6.29/tc/Makefile 2009-12-14 11:11:39.000000000 -0800
+@@ -100,7 +100,7 @@ clean:
+ rm -f emp_ematch.yacc.output
+
+ q_atm.so: q_atm.c
+- $(CC) $(CFLAGS) -shared -fpic -o q_atm.so q_atm.c -latm
++ $(CC) $(CFLAGS) $(LDFLAGS) -shared -fpic -o q_atm.so q_atm.c -latm
+
+ %.yacc.c: %.y
+ $(YACC) $(YACCFLAGS) -o $@ $<
diff --git a/recipes/iproute2/iproute2.inc b/recipes/iproute2/iproute2.inc
index 8c8519f230..9792bad4d6 100644
--- a/recipes/iproute2/iproute2.inc
+++ b/recipes/iproute2/iproute2.inc
@@ -4,6 +4,8 @@ SECTION = "base"
LICENSE = "GPL"
DEPENDS = "flex-native bison-native"
+INC_PR = "r3"
+
# Set the DATE in the .bb file
SRC_URI = "http://developer.osdl.org/dev/iproute2/download/${P}-${DATE}.tar.gz"
diff --git a/recipes/iproute2/iproute2_2.6.18.bb b/recipes/iproute2/iproute2_2.6.18.bb
index d442a091db..32e871118e 100644
--- a/recipes/iproute2/iproute2_2.6.18.bb
+++ b/recipes/iproute2/iproute2_2.6.18.bb
@@ -1,4 +1,4 @@
-PR = "r3"
+PR = "${INC_PR}.0"
require iproute2.inc
diff --git a/recipes/iproute2/iproute2_2.6.20.bb b/recipes/iproute2/iproute2_2.6.20.bb
index e72dfccdde..dd1a504142 100644
--- a/recipes/iproute2/iproute2_2.6.20.bb
+++ b/recipes/iproute2/iproute2_2.6.20.bb
@@ -1,6 +1,6 @@
require iproute2.inc
-PR = "r2"
+PR = "${INC_PR}.0"
DATE = "070313"
SRC_URI_append = " file://new-flex-fix.patch;patch=1 \
diff --git a/recipes/iproute2/iproute2_2.6.22.bb b/recipes/iproute2/iproute2_2.6.22.bb
index 1ee0ce7ab2..55e3a7575d 100644
--- a/recipes/iproute2/iproute2_2.6.22.bb
+++ b/recipes/iproute2/iproute2_2.6.22.bb
@@ -1,6 +1,6 @@
require iproute2.inc
-PR = "r1"
+PR = "${INC_PR}.0"
DATE = "070710"
SRC_URI_append = " file://new-flex-fix.patch;patch=1 \
diff --git a/recipes/iproute2/iproute2_2.6.29.bb b/recipes/iproute2/iproute2_2.6.29.bb
index d02573a359..d38dde880f 100644
--- a/recipes/iproute2/iproute2_2.6.29.bb
+++ b/recipes/iproute2/iproute2_2.6.29.bb
@@ -1,10 +1,11 @@
require iproute2.inc
-PR = "r1"
+PR = "${INC_PR}.0"
SRC_URI = "http://developer.osdl.org/dev/iproute2/download/${P}.tar.bz2 \
file://new-flex-fix.patch;patch=1 \
file://compilation-fix.patch;patch=1 \
+ file://use-cross-compiler.patch;patch=1 \
"
S = "${WORKDIR}/iproute2-${PV}"
diff --git a/recipes/kexec/files/dietlibc.patch b/recipes/kexec-tools/files/dietlibc.patch
index 0048d7a6a2..0048d7a6a2 100644
--- a/recipes/kexec/files/dietlibc.patch
+++ b/recipes/kexec-tools/files/dietlibc.patch
diff --git a/recipes/kexec/files/fix-arm-arch-detection.patch b/recipes/kexec-tools/files/fix-arm-arch-detection.patch
index 6116c5bb84..6116c5bb84 100644
--- a/recipes/kexec/files/fix-arm-arch-detection.patch
+++ b/recipes/kexec-tools/files/fix-arm-arch-detection.patch
diff --git a/recipes/kexec/files/kexec-arm-atags.patch b/recipes/kexec-tools/files/kexec-arm-atags.patch
index eb3cb75990..eb3cb75990 100644
--- a/recipes/kexec/files/kexec-arm-atags.patch
+++ b/recipes/kexec-tools/files/kexec-arm-atags.patch
diff --git a/recipes/kexec/files/kexec-klibc.patch b/recipes/kexec-tools/files/kexec-klibc.patch
index 090b6231f1..090b6231f1 100644
--- a/recipes/kexec/files/kexec-klibc.patch
+++ b/recipes/kexec-tools/files/kexec-klibc.patch
diff --git a/recipes/kexec/files/kexec-static.patch b/recipes/kexec-tools/files/kexec-static.patch
index 549300576e..549300576e 100644
--- a/recipes/kexec/files/kexec-static.patch
+++ b/recipes/kexec-tools/files/kexec-static.patch
diff --git a/recipes/kexec/files/kexec-tools-2-arm-add-uImage.patch b/recipes/kexec-tools/files/kexec-tools-2-arm-add-uImage.patch
index 69a1588ba2..69a1588ba2 100644
--- a/recipes/kexec/files/kexec-tools-2-arm-add-uImage.patch
+++ b/recipes/kexec-tools/files/kexec-tools-2-arm-add-uImage.patch
diff --git a/recipes/kexec/files/kexec-tools-2-headers.patch b/recipes/kexec-tools/files/kexec-tools-2-headers.patch
index 091e12d9a8..091e12d9a8 100644
--- a/recipes/kexec/files/kexec-tools-2-headers.patch
+++ b/recipes/kexec-tools/files/kexec-tools-2-headers.patch
diff --git a/recipes/kexec/files/kexec-tools-2-klibc.patch b/recipes/kexec-tools/files/kexec-tools-2-klibc.patch
index 2008829b60..2008829b60 100644
--- a/recipes/kexec/files/kexec-tools-2-klibc.patch
+++ b/recipes/kexec-tools/files/kexec-tools-2-klibc.patch
diff --git a/recipes/kexec/files/kexec-tools-arm.patch b/recipes/kexec-tools/files/kexec-tools-arm.patch
index 6e43b76096..6e43b76096 100644
--- a/recipes/kexec/files/kexec-tools-arm.patch
+++ b/recipes/kexec-tools/files/kexec-tools-arm.patch
diff --git a/recipes/kexec/files/no-getline-no-fscanf.patch b/recipes/kexec-tools/files/no-getline-no-fscanf.patch
index f2a32b4d0d..f2a32b4d0d 100644
--- a/recipes/kexec/files/no-getline-no-fscanf.patch
+++ b/recipes/kexec-tools/files/no-getline-no-fscanf.patch
diff --git a/recipes/kexec/kexec-tools-dietlibc_2.0.1.bb b/recipes/kexec-tools/kexec-tools-dietlibc_2.0.1.bb
index 0155e72793..4f49755f9d 100644
--- a/recipes/kexec/kexec-tools-dietlibc_2.0.1.bb
+++ b/recipes/kexec-tools/kexec-tools-dietlibc_2.0.1.bb
@@ -1,12 +1,10 @@
-# the binaries are statical linked against klibc
+# the binaries are statical linked against dietlibc
require kexec-tools2.inc
SRC_URI += "file://dietlibc.patch;patch=1"
inherit dietlibc
-#DEFAULT_PREFERENCE = "-1"
-
PR = "r0"
S = "${WORKDIR}/kexec-tools-${PV}"
diff --git a/recipes/kexec/kexec-tools-klibc-static_1.101.bb b/recipes/kexec-tools/kexec-tools-klibc-static_1.101.bb
index 5d131d839e..3ee699b1b3 100644
--- a/recipes/kexec/kexec-tools-klibc-static_1.101.bb
+++ b/recipes/kexec-tools/kexec-tools-klibc-static_1.101.bb
@@ -1,7 +1,7 @@
# the binaries are statical linked against klibc
require kexec-tools.inc
-PR = "r6"
+PR = "r7"
DEPENDS = "klibc"
SRC_URI += "file://kexec-static.patch;patch=1 \
@@ -13,11 +13,6 @@ EXTRA_OECONF = " --without-zlib"
export CC=${TARGET_PREFIX}klcc
-# standart oe cflags don't work with klcc
-export CFLAGS=""
-export CPPFLAGS=""
-export LDFLAGS=""
-
PACKAGES =+ "kexec-klibc-static kdump-klibc-static"
FILES_kexec-klibc-static = "${sbindir}/kexec"
diff --git a/recipes/kexec/kexec-tools-klibc-static_2.0.1.bb b/recipes/kexec-tools/kexec-tools-klibc-static_2.0.1.bb
index 54e4601d20..1c2327f82e 100644
--- a/recipes/kexec/kexec-tools-klibc-static_2.0.1.bb
+++ b/recipes/kexec-tools/kexec-tools-klibc-static_2.0.1.bb
@@ -3,7 +3,7 @@ require kexec-tools2.inc
DEFAULT_PREFERENCE = "1"
-PR = "r2"
+PR = "r3"
DEPENDS = "klibc"
SRC_URI += "file://kexec-tools-2-headers.patch;patch=1 \
@@ -16,11 +16,6 @@ EXTRA_OECONF = " --without-zlib"
export CC=${TARGET_PREFIX}klcc
-# standart oe cflags don't work with klcc
-export CFLAGS=""
-export CPPFLAGS=""
-export LDFLAGS=""
-
PACKAGES =+ "kexec-klibc-static kdump-klibc-static"
FILES_kexec-klibc-static = "${sbindir}/kexec"
diff --git a/recipes/kexec/kexec-tools.inc b/recipes/kexec-tools/kexec-tools.inc
index f806e71480..f806e71480 100644
--- a/recipes/kexec/kexec-tools.inc
+++ b/recipes/kexec-tools/kexec-tools.inc
diff --git a/recipes/kexec/kexec-tools2.inc b/recipes/kexec-tools/kexec-tools2.inc
index a21afe4003..a21afe4003 100644
--- a/recipes/kexec/kexec-tools2.inc
+++ b/recipes/kexec-tools/kexec-tools2.inc
diff --git a/recipes/kexec/kexec-tools_1.101.bb b/recipes/kexec-tools/kexec-tools_1.101.bb
index f74c7bcd83..f74c7bcd83 100644
--- a/recipes/kexec/kexec-tools_1.101.bb
+++ b/recipes/kexec-tools/kexec-tools_1.101.bb
diff --git a/recipes/kexec/kexec-tools_2.0.1.bb b/recipes/kexec-tools/kexec-tools_2.0.1.bb
index 606b3fd634..606b3fd634 100644
--- a/recipes/kexec/kexec-tools_2.0.1.bb
+++ b/recipes/kexec-tools/kexec-tools_2.0.1.bb
diff --git a/recipes/kexecboot/initramfs-kexecboot-image.bb b/recipes/kexecboot/initramfs-kexecboot-image.bb
index 6321d36e9b..cdf0861285 100644
--- a/recipes/kexecboot/initramfs-kexecboot-image.bb
+++ b/recipes/kexecboot/initramfs-kexecboot-image.bb
@@ -1,8 +1,9 @@
-#initramfs image which mounts the rootfilesystem and kexecs a kernel from there
-PR = "r1"
+# Initramfs image providing kexecboot
+# a linux as bootloader implementation
+PR = "r2"
ONLINE_PACKAGE_MANAGEMENT = "none"
-IMAGE_FSTYPES = "cpio.gz"
+IMAGE_FSTYPES = "cpio.gz cpio.lzma"
# Deprecated: device nodes are populated by kexecboot now
# These devices need mmcblk* to be 254 instead of 179
diff --git a/recipes/kexecboot/kexecboot.inc b/recipes/kexecboot/kexecboot.inc
index ebd193beea..679c4a378a 100644
--- a/recipes/kexecboot/kexecboot.inc
+++ b/recipes/kexecboot/kexecboot.inc
@@ -14,10 +14,12 @@ SRC_URI += "file://logo-img.h \
export CC=${TARGET_PREFIX}klcc
-# standard oe cflags don't work with klcc
-export CFLAGS = ""
-export CPPFLAGS = ""
-export LDFLAGS = ""
+# for output on serial console: --enable-debug
+EXTRA_OECONF_akita = "--with-zaurus"
+EXTRA_OECONF_c7x0 = "--with-zaurus"
+EXTRA_OECONF_spitz = "--with-zaurus"
+EXTRA_OECONF_poodle = "--with-zaurus"
+EXTRA_OECONF_tosa = "--with-zaurus"
do_configure_prepend () {
install -m 0644 ${WORKDIR}/logo-img.h ${S}/res/
diff --git a/recipes/kexecboot/kexecboot_git.bb b/recipes/kexecboot/kexecboot_git.bb
index 9aa2fdc3f9..561706e9f6 100644
--- a/recipes/kexecboot/kexecboot_git.bb
+++ b/recipes/kexecboot/kexecboot_git.bb
@@ -1,8 +1,8 @@
PV = "0.5"
-PR = "r7+gitr${SRCREV}"
+PR = "r9+gitr${SRCREV}"
SRC_URI = "git://git.linuxtogo.org/home/groups/kexecboot/kexecboot.git;protocol=git "
-SRCREV = "ddf66724ce68509a8d80727f26f682b9a9341ff5"
+SRCREV = "daa68b5aaa56a036c24c7929e239ebd5edf8fdfe"
S = "${WORKDIR}/git"
diff --git a/recipes/kexecboot/linux-kexecboot-2.6.32/ARM-Add-support-for-LZMA-compressed-kernel-images.patch b/recipes/kexecboot/linux-kexecboot-2.6.32/ARM-Add-support-for-LZMA-compressed-kernel-images.patch
new file mode 100644
index 0000000000..3344ea6439
--- /dev/null
+++ b/recipes/kexecboot/linux-kexecboot-2.6.32/ARM-Add-support-for-LZMA-compressed-kernel-images.patch
@@ -0,0 +1,51 @@
+diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
+index 350921d..34163da 100644
+--- a/arch/arm/Kconfig
++++ b/arch/arm/Kconfig
+@@ -20,6 +20,7 @@ config ARM
+ select HAVE_GENERIC_DMA_COHERENT
+ select HAVE_KERNEL_GZIP
+ select HAVE_KERNEL_LZO
++ select HAVE_KERNEL_LZMA
+ help
+ The ARM series is a line of low-power-consumption RISC chip designs
+ licensed by ARM Ltd and targeted at embedded applications and
+diff --git a/arch/arm/boot/compressed/Makefile b/arch/arm/boot/compressed/Makefile
+index 2d4d88b..3906432 100644
+--- a/arch/arm/boot/compressed/Makefile
++++ b/arch/arm/boot/compressed/Makefile
+@@ -65,6 +65,7 @@ SEDFLAGS = s/TEXT_START/$(ZTEXTADDR)/;s/BSS_START/$(ZBSSADDR)/
+
+ suffix_$(CONFIG_KERNEL_GZIP) = gzip
+ suffix_$(CONFIG_KERNEL_LZO) = lzo
++suffix_$(CONFIG_KERNEL_LZMA) = lzma
+
+ targets := vmlinux vmlinux.lds \
+ piggy.$(suffix_y) piggy.$(suffix_y).o \
+diff --git a/arch/arm/boot/compressed/misc.c b/arch/arm/boot/compressed/misc.c
+index 7e0fe4d..4e35a10 100644
+--- a/arch/arm/boot/compressed/misc.c
++++ b/arch/arm/boot/compressed/misc.c
+@@ -237,6 +237,10 @@ static unsigned long free_mem_end_ptr;
+ #include "../../../../lib/decompress_inflate.c"
+ #endif
+
++#ifdef CONFIG_KERNEL_LZMA
++#include "../../../../lib/decompress_unlzma.c"
++#endif
++
+ #ifdef CONFIG_KERNEL_LZO
+ #include "../../../../lib/decompress_unlzo.c"
+ #endif
+diff --git a/arch/arm/boot/compressed/piggy.lzma.S b/arch/arm/boot/compressed/piggy.lzma.S
+new file mode 100644
+index 0000000..d7e69cf
+--- /dev/null
++++ b/arch/arm/boot/compressed/piggy.lzma.S
+@@ -0,0 +1,6 @@
++ .section .piggydata,#alloc
++ .globl input_data
++input_data:
++ .incbin "arch/arm/boot/compressed/piggy.lzma"
++ .globl input_data_end
++input_data_end:
diff --git a/recipes/kexecboot/linux-kexecboot-2.6.32/c7x0/defconfig b/recipes/kexecboot/linux-kexecboot-2.6.32/c7x0/defconfig
new file mode 100644
index 0000000000..0215fe1d91
--- /dev/null
+++ b/recipes/kexecboot/linux-kexecboot-2.6.32/c7x0/defconfig
@@ -0,0 +1,1176 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.32
+# Sat Dec 12 19:30:33 2009
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
+CONFIG_GENERIC_CLOCKEVENTS=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_HAVE_LATENCYTOP_SUPPORT=y
+CONFIG_LOCKDEP_SUPPORT=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+CONFIG_ARCH_HAS_CPUFREQ=y
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_ARCH_MTD_XIP=y
+CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+CONFIG_CONSTRUCTORS=y
+
+#
+# General setup
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+CONFIG_LOCALVERSION=""
+# CONFIG_LOCALVERSION_AUTO is not set
+CONFIG_HAVE_KERNEL_GZIP=y
+CONFIG_HAVE_KERNEL_LZMA=y
+CONFIG_HAVE_KERNEL_LZO=y
+CONFIG_KERNEL_GZIP=y
+# CONFIG_KERNEL_BZIP2 is not set
+# CONFIG_KERNEL_LZMA is not set
+# CONFIG_KERNEL_LZO is not set
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+CONFIG_SYSVIPC_SYSCTL=y
+CONFIG_BSD_PROCESS_ACCT=y
+# CONFIG_BSD_PROCESS_ACCT_V3 is not set
+
+#
+# RCU Subsystem
+#
+CONFIG_TREE_RCU=y
+# CONFIG_TREE_PREEMPT_RCU is not set
+# CONFIG_RCU_TRACE is not set
+CONFIG_RCU_FANOUT=32
+# CONFIG_RCU_FANOUT_EXACT is not set
+# CONFIG_TREE_RCU_TRACE is not set
+# CONFIG_IKCONFIG is not set
+CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_GROUP_SCHED is not set
+# CONFIG_CGROUPS is not set
+# CONFIG_SYSFS_DEPRECATED_V2 is not set
+# CONFIG_RELAY is not set
+# CONFIG_NAMESPACES is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE="initramfs.cpio.gz"
+CONFIG_INITRAMFS_ROOT_UID=0
+CONFIG_INITRAMFS_ROOT_GID=0
+CONFIG_RD_GZIP=y
+# CONFIG_RD_BZIP2 is not set
+# CONFIG_RD_LZMA is not set
+# CONFIG_RD_LZO is not set
+# CONFIG_INITRAMFS_COMPRESSION_NONE is not set
+CONFIG_INITRAMFS_COMPRESSION_GZIP=y
+# CONFIG_INITRAMFS_COMPRESSION_BZIP2 is not set
+# CONFIG_INITRAMFS_COMPRESSION_LZMA is not set
+# CONFIG_INITRAMFS_COMPRESSION_LZO is not set
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_ANON_INODES=y
+CONFIG_EMBEDDED=y
+CONFIG_UID16=y
+CONFIG_SYSCTL_SYSCALL=y
+# CONFIG_KALLSYMS is not set
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+# CONFIG_ELF_CORE is not set
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SIGNALFD=y
+CONFIG_TIMERFD=y
+CONFIG_EVENTFD=y
+CONFIG_SHMEM=y
+# CONFIG_AIO is not set
+
+#
+# Kernel Performance Events And Counters
+#
+CONFIG_VM_EVENT_COUNTERS=y
+# CONFIG_SLUB_DEBUG is not set
+# CONFIG_COMPAT_BRK is not set
+# CONFIG_SLAB is not set
+CONFIG_SLUB=y
+# CONFIG_SLOB is not set
+# CONFIG_PROFILING is not set
+CONFIG_HAVE_OPROFILE=y
+CONFIG_HAVE_KPROBES=y
+CONFIG_HAVE_KRETPROBES=y
+CONFIG_HAVE_CLK=y
+
+#
+# GCOV-based kernel profiling
+#
+# CONFIG_SLOW_WORK is not set
+CONFIG_HAVE_GENERIC_DMA_COHERENT=y
+CONFIG_RT_MUTEXES=y
+CONFIG_BASE_SMALL=0
+# CONFIG_MODULES is not set
+CONFIG_BLOCK=y
+# CONFIG_LBDAF is not set
+# CONFIG_BLK_DEV_BSG is not set
+# CONFIG_BLK_DEV_INTEGRITY is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+# CONFIG_IOSCHED_AS is not set
+CONFIG_IOSCHED_DEADLINE=y
+# CONFIG_IOSCHED_CFQ is not set
+# CONFIG_DEFAULT_AS is not set
+CONFIG_DEFAULT_DEADLINE=y
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="deadline"
+CONFIG_FREEZER=y
+
+#
+# System Type
+#
+CONFIG_MMU=y
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_GEMINI is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_MXC is not set
+# CONFIG_ARCH_STMP3XXX is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_NOMADIK is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_KIRKWOOD is not set
+# CONFIG_ARCH_LOKI is not set
+# CONFIG_ARCH_MV78XX0 is not set
+# CONFIG_ARCH_ORION5X is not set
+# CONFIG_ARCH_MMP is not set
+# CONFIG_ARCH_KS8695 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_W90X900 is not set
+# CONFIG_ARCH_PNX4008 is not set
+CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_MSM is not set
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_S3C64XX is not set
+# CONFIG_ARCH_S5PC1XX is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_U300 is not set
+# CONFIG_ARCH_DAVINCI is not set
+# CONFIG_ARCH_OMAP is not set
+# CONFIG_ARCH_BCMRING is not set
+
+#
+# Intel PXA2xx/PXA3xx Implementations
+#
+# CONFIG_ARCH_GUMSTIX is not set
+# CONFIG_MACH_INTELMOTE2 is not set
+# CONFIG_MACH_STARGATE2 is not set
+# CONFIG_ARCH_LUBBOCK is not set
+# CONFIG_MACH_LOGICPD_PXA270 is not set
+# CONFIG_MACH_MAINSTONE is not set
+# CONFIG_MACH_MP900C is not set
+# CONFIG_MACH_BALLOON3 is not set
+# CONFIG_ARCH_PXA_IDP is not set
+CONFIG_PXA_SHARPSL=y
+CONFIG_SHARPSL_PM=y
+# CONFIG_MACH_POODLE is not set
+CONFIG_MACH_CORGI=y
+CONFIG_MACH_SHEPHERD=y
+CONFIG_MACH_HUSKY=y
+# CONFIG_MACH_AKITA is not set
+# CONFIG_MACH_SPITZ is not set
+# CONFIG_MACH_BORZOI is not set
+# CONFIG_MACH_TOSA is not set
+# CONFIG_ARCH_VIPER is not set
+# CONFIG_ARCH_PXA_ESERIES is not set
+# CONFIG_TRIZEPS_PXA is not set
+# CONFIG_MACH_H5000 is not set
+# CONFIG_MACH_EM_X270 is not set
+# CONFIG_MACH_EXEDA is not set
+# CONFIG_MACH_COLIBRI is not set
+# CONFIG_MACH_COLIBRI300 is not set
+# CONFIG_MACH_COLIBRI320 is not set
+# CONFIG_MACH_ZYLONITE is not set
+# CONFIG_MACH_LITTLETON is not set
+# CONFIG_MACH_TAVOREVB is not set
+# CONFIG_MACH_SAAR is not set
+# CONFIG_MACH_ARMCORE is not set
+# CONFIG_MACH_CM_X300 is not set
+# CONFIG_MACH_H4700 is not set
+# CONFIG_MACH_MAGICIAN is not set
+# CONFIG_MACH_HIMALAYA is not set
+# CONFIG_MACH_MIOA701 is not set
+# CONFIG_MACH_PCM027 is not set
+# CONFIG_ARCH_PXA_PALM is not set
+# CONFIG_MACH_CSB726 is not set
+# CONFIG_PXA_EZX is not set
+# CONFIG_MACH_XCEP is not set
+CONFIG_PXA25x=y
+CONFIG_PXA_SHARP_C7xx=y
+CONFIG_PXA_SSP=y
+CONFIG_PLAT_PXA=y
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_XSCALE=y
+CONFIG_CPU_32v5=y
+CONFIG_CPU_ABRT_EV5T=y
+CONFIG_CPU_PABRT_LEGACY=y
+CONFIG_CPU_CACHE_VIVT=y
+CONFIG_CPU_TLB_V4WBI=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_CPU_DCACHE_DISABLE is not set
+CONFIG_ARM_L1_CACHE_SHIFT=5
+# CONFIG_IWMMXT is not set
+CONFIG_XSCALE_PMU=y
+CONFIG_SHARP_PARAM=y
+CONFIG_SHARP_SCOOP=y
+CONFIG_COMMON_CLKDEV=y
+
+#
+# Bus support
+#
+# CONFIG_PCI_SYSCALL is not set
+# CONFIG_ARCH_SUPPORTS_MSI is not set
+CONFIG_PCCARD=y
+# CONFIG_PCMCIA_DEBUG is not set
+CONFIG_PCMCIA=y
+CONFIG_PCMCIA_LOAD_CIS=y
+CONFIG_PCMCIA_IOCTL=y
+
+#
+# PC-card bridges
+#
+CONFIG_PCMCIA_PXA2XX=y
+
+#
+# Kernel Features
+#
+CONFIG_TICK_ONESHOT=y
+CONFIG_NO_HZ=y
+# CONFIG_HIGH_RES_TIMERS is not set
+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
+CONFIG_VMSPLIT_3G=y
+# CONFIG_VMSPLIT_2G is not set
+# CONFIG_VMSPLIT_1G is not set
+CONFIG_PAGE_OFFSET=0xC0000000
+CONFIG_PREEMPT_NONE=y
+# CONFIG_PREEMPT_VOLUNTARY is not set
+# CONFIG_PREEMPT is not set
+CONFIG_HZ=100
+CONFIG_AEABI=y
+# CONFIG_OABI_COMPAT is not set
+# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set
+# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set
+# CONFIG_HIGHMEM is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+CONFIG_PAGEFLAGS_EXTENDED=y
+CONFIG_SPLIT_PTLOCK_CPUS=4096
+# CONFIG_PHYS_ADDR_T_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=0
+CONFIG_VIRT_TO_BUS=y
+CONFIG_HAVE_MLOCK=y
+CONFIG_HAVE_MLOCKED_PAGE_BIT=y
+# CONFIG_KSM is not set
+CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
+CONFIG_ALIGNMENT_TRAP=y
+# CONFIG_UACCESS_WITH_MEMCPY is not set
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0
+CONFIG_ZBOOT_ROM_BSS=0
+CONFIG_CMDLINE="console=tty1 console=ttyS0,115200n8 loglevel=3 "
+# CONFIG_XIP_KERNEL is not set
+CONFIG_KEXEC=y
+CONFIG_ATAGS_PROC=y
+
+#
+# CPU Power Management
+#
+# CONFIG_CPU_FREQ is not set
+# CONFIG_CPU_IDLE is not set
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+CONFIG_HAVE_AOUT=y
+# CONFIG_BINFMT_AOUT is not set
+# CONFIG_BINFMT_MISC is not set
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_DEBUG is not set
+CONFIG_PM_SLEEP=y
+CONFIG_SUSPEND=y
+CONFIG_SUSPEND_FREEZER=y
+CONFIG_APM_EMULATION=y
+# CONFIG_PM_RUNTIME is not set
+CONFIG_ARCH_SUSPEND_POSSIBLE=y
+# CONFIG_NET is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+# CONFIG_DEVTMPFS is not set
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=y
+CONFIG_FIRMWARE_IN_KERNEL=y
+CONFIG_EXTRA_FIRMWARE=""
+# CONFIG_SYS_HYPERVISOR is not set
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_CONCAT is not set
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+CONFIG_MTD_CMDLINE_PARTS=y
+# CONFIG_MTD_AFS_PARTS is not set
+# CONFIG_MTD_AR7_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLKDEVS=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+# CONFIG_MTD_OOPS is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+# CONFIG_MTD_CFI is not set
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+CONFIG_MTD_RAM=y
+CONFIG_MTD_ROM=y
+# CONFIG_MTD_ABSENT is not set
+
+#
+# Mapping drivers for chip access
+#
+CONFIG_MTD_COMPLEX_MAPPINGS=y
+# CONFIG_MTD_PHYSMAP is not set
+# CONFIG_MTD_GPIO_ADDR is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_DATAFLASH is not set
+# CONFIG_MTD_M25P80 is not set
+# CONFIG_MTD_SST25L is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+CONFIG_MTD_NAND=y
+CONFIG_MTD_NAND_VERIFY_WRITE=y
+# CONFIG_MTD_NAND_ECC_SMC is not set
+# CONFIG_MTD_NAND_MUSEUM_IDS is not set
+# CONFIG_MTD_NAND_H1900 is not set
+# CONFIG_MTD_NAND_GPIO is not set
+CONFIG_MTD_NAND_IDS=y
+# CONFIG_MTD_NAND_DISKONCHIP is not set
+CONFIG_MTD_NAND_SHARPSL=y
+# CONFIG_MTD_NAND_NANDSIM is not set
+# CONFIG_MTD_NAND_PLATFORM is not set
+# CONFIG_MTD_ONENAND is not set
+
+#
+# LPDDR flash memory drivers
+#
+# CONFIG_MTD_LPDDR is not set
+
+#
+# UBI - Unsorted block images
+#
+CONFIG_MTD_UBI=y
+CONFIG_MTD_UBI_WL_THRESHOLD=4096
+CONFIG_MTD_UBI_BEB_RESERVE=1
+# CONFIG_MTD_UBI_GLUEBI is not set
+
+#
+# UBI debugging options
+#
+# CONFIG_MTD_UBI_DEBUG is not set
+# CONFIG_PARPORT is not set
+CONFIG_BLK_DEV=y
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=y
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_RAM is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_MG_DISK is not set
+CONFIG_MISC_DEVICES=y
+# CONFIG_ENCLOSURE_SERVICES is not set
+# CONFIG_C2PORT is not set
+
+#
+# EEPROM support
+#
+# CONFIG_EEPROM_AT25 is not set
+# CONFIG_EEPROM_93CX6 is not set
+CONFIG_HAVE_IDE=y
+CONFIG_IDE=y
+
+#
+# Please see Documentation/ide/ide.txt for help/info on IDE drives
+#
+# CONFIG_BLK_DEV_IDE_SATA is not set
+# CONFIG_IDE_GD is not set
+CONFIG_BLK_DEV_IDECS=y
+# CONFIG_BLK_DEV_IDECD is not set
+# CONFIG_BLK_DEV_IDETAPE is not set
+# CONFIG_IDE_TASK_IOCTL is not set
+CONFIG_IDE_PROC_FS=y
+
+#
+# IDE chipset support/bugfixes
+#
+# CONFIG_BLK_DEV_PLATFORM is not set
+# CONFIG_BLK_DEV_IDEDMA is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+# CONFIG_SCSI_DMA is not set
+# CONFIG_SCSI_NETLINK is not set
+# CONFIG_ATA is not set
+# CONFIG_MD is not set
+# CONFIG_PHONE is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+# CONFIG_INPUT_POLLDEV is not set
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+# CONFIG_INPUT_MOUSEDEV_PSAUX is not set
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=640
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=480
+# CONFIG_INPUT_JOYDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+CONFIG_INPUT_APMPOWER=y
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ATKBD is not set
+CONFIG_KEYBOARD_CORGI=y
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_GPIO is not set
+# CONFIG_KEYBOARD_MATRIX is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_OPENCORES is not set
+# CONFIG_KEYBOARD_SPITZ is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
+CONFIG_INPUT_MOUSE=y
+# CONFIG_MOUSE_PS2 is not set
+# CONFIG_MOUSE_SERIAL is not set
+# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_MOUSE_GPIO is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TABLET is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+CONFIG_TOUCHSCREEN_ADS7846=y
+# CONFIG_TOUCHSCREEN_AD7877 is not set
+# CONFIG_TOUCHSCREEN_AD7879_SPI is not set
+# CONFIG_TOUCHSCREEN_AD7879 is not set
+# CONFIG_TOUCHSCREEN_CORGI is not set
+# CONFIG_TOUCHSCREEN_FUJITSU is not set
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_WACOM_W8001 is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_INEXIO is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set
+# CONFIG_TOUCHSCREEN_W90X900 is not set
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+# CONFIG_CONSOLE_TRANSLATIONS is not set
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+# CONFIG_DEVKMEM is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+# CONFIG_SERIAL_MAX3100 is not set
+CONFIG_SERIAL_PXA=y
+CONFIG_SERIAL_PXA_CONSOLE=y
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
+# CONFIG_LEGACY_PTYS is not set
+# CONFIG_IPMI_HANDLER is not set
+CONFIG_HW_RANDOM=y
+# CONFIG_HW_RANDOM_TIMERIOMEM is not set
+# CONFIG_R3964 is not set
+
+#
+# PCMCIA character devices
+#
+# CONFIG_SYNCLINK_CS is not set
+# CONFIG_CARDMAN_4000 is not set
+# CONFIG_CARDMAN_4040 is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_TCG_TPM is not set
+# CONFIG_I2C is not set
+CONFIG_SPI=y
+CONFIG_SPI_MASTER=y
+
+#
+# SPI Master Controller Drivers
+#
+# CONFIG_SPI_BITBANG is not set
+# CONFIG_SPI_GPIO is not set
+CONFIG_SPI_PXA2XX=y
+
+#
+# SPI Protocol Masters
+#
+# CONFIG_SPI_SPIDEV is not set
+# CONFIG_SPI_TLE62X0 is not set
+
+#
+# PPS support
+#
+# CONFIG_PPS is not set
+CONFIG_ARCH_REQUIRE_GPIOLIB=y
+CONFIG_GPIOLIB=y
+CONFIG_GPIO_SYSFS=y
+
+#
+# Memory mapped GPIO expanders:
+#
+
+#
+# I2C GPIO expanders:
+#
+
+#
+# PCI GPIO expanders:
+#
+
+#
+# SPI GPIO expanders:
+#
+# CONFIG_GPIO_MAX7301 is not set
+# CONFIG_GPIO_MCP23S08 is not set
+# CONFIG_GPIO_MC33880 is not set
+
+#
+# AC97 GPIO expanders:
+#
+# CONFIG_W1 is not set
+# CONFIG_POWER_SUPPLY is not set
+CONFIG_HWMON=y
+# CONFIG_HWMON_VID is not set
+# CONFIG_HWMON_DEBUG_CHIP is not set
+
+#
+# Native drivers
+#
+# CONFIG_SENSORS_ADCXX is not set
+# CONFIG_SENSORS_F71805F is not set
+# CONFIG_SENSORS_F71882FG is not set
+# CONFIG_SENSORS_IT87 is not set
+# CONFIG_SENSORS_LM70 is not set
+CONFIG_SENSORS_MAX1111=y
+# CONFIG_SENSORS_PC87360 is not set
+# CONFIG_SENSORS_PC87427 is not set
+# CONFIG_SENSORS_SHT15 is not set
+# CONFIG_SENSORS_SMSC47M1 is not set
+# CONFIG_SENSORS_SMSC47B397 is not set
+# CONFIG_SENSORS_VT1211 is not set
+# CONFIG_SENSORS_W83627HF is not set
+# CONFIG_SENSORS_W83627EHF is not set
+# CONFIG_SENSORS_LIS3_SPI is not set
+# CONFIG_THERMAL is not set
+# CONFIG_WATCHDOG is not set
+CONFIG_SSB_POSSIBLE=y
+
+#
+# Sonics Silicon Backplane
+#
+CONFIG_SSB=y
+CONFIG_SSB_PCMCIAHOST_POSSIBLE=y
+# CONFIG_SSB_PCMCIAHOST is not set
+CONFIG_SSB_SDIOHOST_POSSIBLE=y
+# CONFIG_SSB_SDIOHOST is not set
+# CONFIG_SSB_SILENT is not set
+# CONFIG_SSB_DEBUG is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_CORE is not set
+# CONFIG_MFD_SM501 is not set
+# CONFIG_MFD_ASIC3 is not set
+# CONFIG_HTC_EGPIO is not set
+# CONFIG_HTC_PASIC3 is not set
+# CONFIG_MFD_TMIO is not set
+# CONFIG_MFD_T7L66XB is not set
+# CONFIG_MFD_TC6387XB is not set
+# CONFIG_MFD_TC6393XB is not set
+# CONFIG_MFD_MC13783 is not set
+# CONFIG_EZX_PCAP is not set
+# CONFIG_REGULATOR is not set
+# CONFIG_MEDIA_SUPPORT is not set
+
+#
+# Graphics support
+#
+# CONFIG_VGASTATE is not set
+# CONFIG_VIDEO_OUTPUT_CONTROL is not set
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+# CONFIG_FB_BOOT_VESA_SUPPORT is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
+# CONFIG_FB_SYS_FILLRECT is not set
+# CONFIG_FB_SYS_COPYAREA is not set
+# CONFIG_FB_SYS_IMAGEBLIT is not set
+# CONFIG_FB_FOREIGN_ENDIAN is not set
+# CONFIG_FB_SYS_FOPS is not set
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_S1D13XXX is not set
+CONFIG_FB_PXA=y
+# CONFIG_FB_PXA_SMARTPANEL is not set
+# CONFIG_FB_PXA_PARAMETERS is not set
+# CONFIG_FB_MBX is not set
+CONFIG_FB_W100=y
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_METRONOME is not set
+# CONFIG_FB_MB862XX is not set
+# CONFIG_FB_BROADSHEET is not set
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_LCD_CLASS_DEVICE=y
+# CONFIG_LCD_CORGI is not set
+# CONFIG_LCD_LMS283GF05 is not set
+# CONFIG_LCD_LTV350QV is not set
+# CONFIG_LCD_ILI9320 is not set
+# CONFIG_LCD_TDO24M is not set
+# CONFIG_LCD_VGG2432A4 is not set
+# CONFIG_LCD_PLATFORM is not set
+CONFIG_BACKLIGHT_CLASS_DEVICE=y
+CONFIG_BACKLIGHT_GENERIC=y
+
+#
+# Display device support
+#
+# CONFIG_DISPLAY_SUPPORT is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
+CONFIG_FONTS=y
+# CONFIG_FONT_8x8 is not set
+CONFIG_FONT_8x16=y
+# CONFIG_FONT_6x11 is not set
+# CONFIG_FONT_7x14 is not set
+# CONFIG_FONT_PEARL_8x8 is not set
+# CONFIG_FONT_ACORN_8x8 is not set
+# CONFIG_FONT_MINI_4x6 is not set
+# CONFIG_FONT_SUN8x16 is not set
+# CONFIG_FONT_SUN12x22 is not set
+# CONFIG_FONT_10x18 is not set
+# CONFIG_LOGO is not set
+# CONFIG_SOUND is not set
+# CONFIG_HID_SUPPORT is not set
+# CONFIG_USB_SUPPORT is not set
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+CONFIG_MMC_UNSAFE_RESUME=y
+
+#
+# MMC/SD/SDIO Card Drivers
+#
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_BLOCK_BOUNCE=y
+# CONFIG_SDIO_UART is not set
+# CONFIG_MMC_TEST is not set
+
+#
+# MMC/SD/SDIO Host Controller Drivers
+#
+CONFIG_MMC_PXA=y
+# CONFIG_MMC_SDHCI is not set
+# CONFIG_MMC_AT91 is not set
+# CONFIG_MMC_ATMELMCI is not set
+# CONFIG_MMC_SPI is not set
+# CONFIG_MEMSTICK is not set
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+CONFIG_LEDS_GPIO=y
+CONFIG_LEDS_GPIO_PLATFORM=y
+# CONFIG_LEDS_DAC124S085 is not set
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+CONFIG_LEDS_TRIGGER_TIMER=y
+# CONFIG_LEDS_TRIGGER_HEARTBEAT is not set
+# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
+# CONFIG_LEDS_TRIGGER_GPIO is not set
+# CONFIG_LEDS_TRIGGER_DEFAULT_ON is not set
+
+#
+# iptables trigger is under Netfilter config (LED target)
+#
+# CONFIG_ACCESSIBILITY is not set
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+# CONFIG_RTC_DEBUG is not set
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+# CONFIG_RTC_DRV_TEST is not set
+
+#
+# SPI RTC drivers
+#
+# CONFIG_RTC_DRV_M41T94 is not set
+# CONFIG_RTC_DRV_DS1305 is not set
+# CONFIG_RTC_DRV_DS1390 is not set
+# CONFIG_RTC_DRV_MAX6902 is not set
+# CONFIG_RTC_DRV_R9701 is not set
+# CONFIG_RTC_DRV_RS5C348 is not set
+# CONFIG_RTC_DRV_DS3234 is not set
+# CONFIG_RTC_DRV_PCF2123 is not set
+
+#
+# Platform RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1286 is not set
+# CONFIG_RTC_DRV_DS1511 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_STK17TA8 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_M48T35 is not set
+# CONFIG_RTC_DRV_M48T59 is not set
+# CONFIG_RTC_DRV_BQ4802 is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# on-CPU RTC drivers
+#
+CONFIG_RTC_DRV_SA1100=y
+# CONFIG_RTC_DRV_PXA is not set
+# CONFIG_DMADEVICES is not set
+# CONFIG_AUXDISPLAY is not set
+# CONFIG_UIO is not set
+
+#
+# TI VLYNQ
+#
+# CONFIG_STAGING is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=y
+# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
+# CONFIG_EXT3_FS_XATTR is not set
+CONFIG_EXT4_FS=y
+# CONFIG_EXT4_FS_XATTR is not set
+# CONFIG_EXT4_DEBUG is not set
+CONFIG_JBD=y
+CONFIG_JBD2=y
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_BTRFS_FS is not set
+# CONFIG_NILFS2_FS is not set
+# CONFIG_FILE_LOCKING is not set
+# CONFIG_FSNOTIFY is not set
+# CONFIG_DNOTIFY is not set
+# CONFIG_INOTIFY is not set
+# CONFIG_INOTIFY_USER is not set
+# CONFIG_QUOTA is not set
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# Caches
+#
+# CONFIG_FSCACHE is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+# CONFIG_MSDOS_FS is not set
+# CONFIG_VFAT_FS is not set
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+# CONFIG_PROC_PAGE_MONITOR is not set
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+# CONFIG_CONFIGFS_FS is not set
+CONFIG_MISC_FILESYSTEMS=y
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
+CONFIG_JFFS2_SUMMARY=y
+# CONFIG_JFFS2_FS_XATTR is not set
+CONFIG_JFFS2_COMPRESSION_OPTIONS=y
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_LZO=y
+CONFIG_JFFS2_RTIME=y
+CONFIG_JFFS2_RUBIN=y
+# CONFIG_JFFS2_CMODE_NONE is not set
+CONFIG_JFFS2_CMODE_PRIORITY=y
+# CONFIG_JFFS2_CMODE_SIZE is not set
+# CONFIG_JFFS2_CMODE_FAVOURLZO is not set
+CONFIG_UBIFS_FS=y
+# CONFIG_UBIFS_FS_XATTR is not set
+CONFIG_UBIFS_FS_ADVANCED_COMPR=y
+CONFIG_UBIFS_FS_LZO=y
+CONFIG_UBIFS_FS_ZLIB=y
+# CONFIG_UBIFS_FS_DEBUG is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_SQUASHFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_OMFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_ROMFS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+CONFIG_MSDOS_PARTITION=y
+# CONFIG_BSD_DISKLABEL is not set
+# CONFIG_MINIX_SUBPARTITION is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_KARMA_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+# CONFIG_SYSV68_PARTITION is not set
+# CONFIG_NLS is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+# CONFIG_ENABLE_WARN_DEPRECATED is not set
+# CONFIG_ENABLE_MUST_CHECK is not set
+CONFIG_FRAME_WARN=2048
+# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_STRIP_ASM_SYMS is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+# CONFIG_DEBUG_FS is not set
+# CONFIG_HEADERS_CHECK is not set
+# CONFIG_DEBUG_KERNEL is not set
+# CONFIG_DEBUG_BUGVERBOSE is not set
+# CONFIG_DEBUG_MEMORY_INIT is not set
+CONFIG_FRAME_POINTER=y
+# CONFIG_RCU_CPU_STALL_DETECTOR is not set
+# CONFIG_LATENCYTOP is not set
+# CONFIG_SYSCTL_SYSCALL_CHECK is not set
+CONFIG_HAVE_FUNCTION_TRACER=y
+CONFIG_TRACING_SUPPORT=y
+# CONFIG_FTRACE is not set
+# CONFIG_SAMPLES is not set
+CONFIG_HAVE_ARCH_KGDB=y
+# CONFIG_ARM_UNWIND is not set
+# CONFIG_DEBUG_USER is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+# CONFIG_SECURITYFS is not set
+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
+CONFIG_CRYPTO=y
+
+#
+# Crypto core or helper
+#
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_ALGAPI2=y
+# CONFIG_CRYPTO_MANAGER is not set
+# CONFIG_CRYPTO_MANAGER2 is not set
+# CONFIG_CRYPTO_GF128MUL is not set
+# CONFIG_CRYPTO_NULL is not set
+# CONFIG_CRYPTO_CRYPTD is not set
+# CONFIG_CRYPTO_AUTHENC is not set
+
+#
+# Authenticated Encryption with Associated Data
+#
+# CONFIG_CRYPTO_CCM is not set
+# CONFIG_CRYPTO_GCM is not set
+# CONFIG_CRYPTO_SEQIV is not set
+
+#
+# Block modes
+#
+# CONFIG_CRYPTO_CBC is not set
+# CONFIG_CRYPTO_CTR is not set
+# CONFIG_CRYPTO_CTS is not set
+# CONFIG_CRYPTO_ECB is not set
+# CONFIG_CRYPTO_LRW is not set
+# CONFIG_CRYPTO_PCBC is not set
+# CONFIG_CRYPTO_XTS is not set
+
+#
+# Hash modes
+#
+# CONFIG_CRYPTO_HMAC is not set
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_VMAC is not set
+
+#
+# Digest
+#
+# CONFIG_CRYPTO_CRC32C is not set
+# CONFIG_CRYPTO_GHASH is not set
+# CONFIG_CRYPTO_MD4 is not set
+# CONFIG_CRYPTO_MD5 is not set
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_RMD128 is not set
+# CONFIG_CRYPTO_RMD160 is not set
+# CONFIG_CRYPTO_RMD256 is not set
+# CONFIG_CRYPTO_RMD320 is not set
+# CONFIG_CRYPTO_SHA1 is not set
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_WP512 is not set
+
+#
+# Ciphers
+#
+# CONFIG_CRYPTO_AES is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+# CONFIG_CRYPTO_ARC4 is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+# CONFIG_CRYPTO_DES is not set
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_SALSA20 is not set
+# CONFIG_CRYPTO_SEED is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_TEA is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+
+#
+# Compression
+#
+CONFIG_CRYPTO_DEFLATE=y
+# CONFIG_CRYPTO_ZLIB is not set
+CONFIG_CRYPTO_LZO=y
+
+#
+# Random Number Generation
+#
+# CONFIG_CRYPTO_ANSI_CPRNG is not set
+# CONFIG_CRYPTO_HW is not set
+# CONFIG_BINARY_PRINTF is not set
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_GENERIC_FIND_LAST_BIT=y
+# CONFIG_CRC_CCITT is not set
+CONFIG_CRC16=y
+# CONFIG_CRC_T10DIF is not set
+# CONFIG_CRC_ITU_T is not set
+CONFIG_CRC32=y
+# CONFIG_CRC7 is not set
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_LZO_COMPRESS=y
+CONFIG_LZO_DECOMPRESS=y
+CONFIG_DECOMPRESS_GZIP=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
diff --git a/recipes/kexecboot/linux-kexecboot-2.6.32/v3-1-4-Add-support-for-LZO-compressed-kernels.patch b/recipes/kexecboot/linux-kexecboot-2.6.32/v3-1-4-Add-support-for-LZO-compressed-kernels.patch
new file mode 100644
index 0000000000..fad1b87466
--- /dev/null
+++ b/recipes/kexecboot/linux-kexecboot-2.6.32/v3-1-4-Add-support-for-LZO-compressed-kernels.patch
@@ -0,0 +1,321 @@
+diff --git a/include/linux/decompress/unlzo.h b/include/linux/decompress/unlzo.h
+new file mode 100644
+index 0000000..9872297
+--- /dev/null
++++ b/include/linux/decompress/unlzo.h
+@@ -0,0 +1,10 @@
++#ifndef DECOMPRESS_UNLZO_H
++#define DECOMPRESS_UNLZO_H
++
++int unlzo(unsigned char *inbuf, int len,
++ int(*fill)(void*, unsigned int),
++ int(*flush)(void*, unsigned int),
++ unsigned char *output,
++ int *pos,
++ void(*error)(char *x));
++#endif
+diff --git a/init/Kconfig b/init/Kconfig
+index f515864..eb65318 100644
+--- a/init/Kconfig
++++ b/init/Kconfig
+@@ -115,10 +115,13 @@ config HAVE_KERNEL_BZIP2
+ config HAVE_KERNEL_LZMA
+ bool
+
++config HAVE_KERNEL_LZO
++ bool
++
+ choice
+ prompt "Kernel compression mode"
+ default KERNEL_GZIP
+- depends on HAVE_KERNEL_GZIP || HAVE_KERNEL_BZIP2 || HAVE_KERNEL_LZMA
++ depends on HAVE_KERNEL_GZIP || HAVE_KERNEL_BZIP2 || HAVE_KERNEL_LZMA || HAVE_KERNEL_LZO
+ help
+ The linux kernel is a kind of self-extracting executable.
+ Several compression algorithms are available, which differ
+@@ -141,9 +144,8 @@ config KERNEL_GZIP
+ bool "Gzip"
+ depends on HAVE_KERNEL_GZIP
+ help
+- The old and tried gzip compression. Its compression ratio is
+- the poorest among the 3 choices; however its speed (both
+- compression and decompression) is the fastest.
++ The old and tried gzip compression. It provides a good balance
++ between compression ratio and decompression speed.
+
+ config KERNEL_BZIP2
+ bool "Bzip2"
+@@ -164,6 +166,14 @@ config KERNEL_LZMA
+ two. Compression is slowest. The kernel size is about 33%
+ smaller with LZMA in comparison to gzip.
+
++config KERNEL_LZO
++ bool "LZO"
++ depends on HAVE_KERNEL_LZO
++ help
++ Its compression ratio is the poorest among the 4. The kernel
++ size is about about 10% bigger than gzip; however its speed
++ (both compression and decompression) is the fastest.
++
+ endchoice
+
+ config SWAP
+diff --git a/lib/decompress_unlzo.c b/lib/decompress_unlzo.c
+new file mode 100644
+index 0000000..2bb736f
+--- /dev/null
++++ b/lib/decompress_unlzo.c
+@@ -0,0 +1,208 @@
++/*
++ * LZO decompressor for the Linux kernel. Code borrowed from the lzo
++ * implementation by Markus Franz Xaver Johannes Oberhumer.
++ *
++ * Linux kernel adaptation:
++ * Copyright (C) 2009
++ * Albin Tonnerre, Free Electrons <albin.tonnerre@free-electrons.com>
++ *
++ * Original code:
++ * Copyright (C) 1996-2005 Markus Franz Xaver Johannes Oberhumer
++ * All Rights Reserved.
++ *
++ * lzop and the LZO library are free software; you can redistribute them
++ * and/or modify them under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; see the file COPYING.
++ * If not, write to the Free Software Foundation, Inc.,
++ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
++ *
++ * Markus F.X.J. Oberhumer
++ * <markus@oberhumer.com>
++ * http://www.oberhumer.com/opensource/lzop/
++ */
++
++#ifdef STATIC
++#include "lzo/lzo1x_decompress.c"
++#else
++#include <linux/slab.h>
++#include <linux/decompress/unlzo.h>
++#endif
++
++#include <linux/types.h>
++#include <linux/lzo.h>
++#include <linux/decompress/mm.h>
++
++#include <linux/compiler.h>
++#include <asm/unaligned.h>
++
++static const unsigned char lzop_magic[] =
++ { 0x89, 0x4c, 0x5a, 0x4f, 0x00, 0x0d, 0x0a, 0x1a, 0x0a };
++
++#define LZO_BLOCK_SIZE (256*1024l)
++#define HEADER_HAS_FILTER 0x00000800L
++
++STATIC inline int INIT parse_header(u8 *input, u8 *skip)
++{
++ int l;
++ u8 *parse = input;
++ u8 level = 0;
++ u16 version;
++
++ /* read magic: 9 first bits */
++ for (l = 0; l < 9; l++) {
++ if (*parse++ != lzop_magic[l])
++ return 0;
++ }
++ /* get version (2bytes), skip library version (2),
++ * 'need to be extracted' version (2) and
++ * method (1) */
++ version = get_unaligned_be16(parse);
++ parse += 7;
++ if (version >= 0x0940)
++ level = *parse++;
++ if (get_unaligned_be32(parse) & HEADER_HAS_FILTER)
++ parse += 8; /* flags + filter info */
++ else
++ parse += 4; /* flags */
++
++ /* skip mode and mtime_low */
++ parse += 8;
++ if (version >= 0x0940)
++ parse += 4; /* skip mtime_high */
++
++ l = *parse++;
++ /* don't care about the file name, and skip checksum */
++ parse += l + 4;
++
++ *skip = parse - input;
++ return 1;
++}
++
++STATIC inline int INIT unlzo(u8 *input, int in_len,
++ int (*fill) (void *, unsigned int),
++ int (*flush) (void *, unsigned int),
++ u8 *output, int *posp,
++ void (*error_fn) (char *x))
++{
++ u8 skip = 0, r = 0;
++ u32 src_len, dst_len;
++ size_t tmp;
++ u8 *in_buf, *in_buf_save, *out_buf;
++ int obytes_processed = 0;
++
++ set_error_fn(error_fn);
++
++ if (output)
++ out_buf = output;
++ else if (!flush) {
++ error("NULL output pointer and no flush function provided");
++ goto exit;
++ } else {
++ out_buf = malloc(LZO_BLOCK_SIZE);
++ if (!out_buf) {
++ error("Could not allocate output buffer");
++ goto exit;
++ }
++ }
++
++ if (input && fill) {
++ error("Both input pointer and fill function provided, don't know what to do");
++ goto exit_1;
++ } else if (input)
++ in_buf = input;
++ else if (!fill || !posp) {
++ error("NULL input pointer and missing position pointer or fill function");
++ goto exit_1;
++ } else {
++ in_buf = malloc(lzo1x_worst_compress(LZO_BLOCK_SIZE));
++ if (!in_buf) {
++ error("Could not allocate input buffer");
++ goto exit_1;
++ }
++ }
++ in_buf_save = in_buf;
++
++ if (posp)
++ *posp = 0;
++
++ if (fill)
++ fill(in_buf, lzo1x_worst_compress(LZO_BLOCK_SIZE));
++
++ if (!parse_header(input, &skip)) {
++ error("invalid header");
++ goto exit_2;
++ }
++ in_buf += skip;
++
++ if (posp)
++ *posp = skip;
++
++ for (;;) {
++ /* read uncompressed block size */
++ dst_len = get_unaligned_be32(in_buf);
++ in_buf += 4;
++
++ /* exit if last block */
++ if (dst_len == 0) {
++ if (posp)
++ *posp += 4;
++ break;
++ }
++
++ if (dst_len > LZO_BLOCK_SIZE) {
++ error("dest len longer than block size");
++ goto exit_2;
++ }
++
++ /* read compressed block size, and skip block checksum info */
++ src_len = get_unaligned_be32(in_buf);
++ in_buf += 8;
++
++ if (src_len <= 0 || src_len > dst_len) {
++ error("file corrupted");
++ goto exit_2;
++ }
++
++ /* decompress */
++ tmp = dst_len;
++ r = lzo1x_decompress_safe((u8 *) in_buf, src_len, out_buf, &tmp);
++
++ if (r != LZO_E_OK || dst_len != tmp) {
++ error("Compressed data violation");
++ goto exit_2;
++ }
++
++ obytes_processed += dst_len;
++ if (flush)
++ flush(out_buf, dst_len);
++ if (output)
++ out_buf += dst_len;
++ if (posp)
++ *posp += src_len + 12;
++ if (fill) {
++ in_buf = in_buf_save;
++ fill(in_buf, lzo1x_worst_compress(LZO_BLOCK_SIZE));
++ } else
++ in_buf += src_len;
++ }
++
++exit_2:
++ if (!input)
++ free(in_buf);
++exit_1:
++ if (!output)
++ free(out_buf);
++exit:
++ return obytes_processed;
++}
++
++#define decompress unlzo
+diff --git a/lib/lzo/lzo1x_decompress.c b/lib/lzo/lzo1x_decompress.c
+index 5dc6b29..f2fd098 100644
+--- a/lib/lzo/lzo1x_decompress.c
++++ b/lib/lzo/lzo1x_decompress.c
+@@ -11,11 +11,13 @@
+ * Richard Purdie <rpurdie@openedhand.com>
+ */
+
++#ifndef STATIC
+ #include <linux/module.h>
+ #include <linux/kernel.h>
+-#include <linux/lzo.h>
+-#include <asm/byteorder.h>
++#endif
++
+ #include <asm/unaligned.h>
++#include <linux/lzo.h>
+ #include "lzodefs.h"
+
+ #define HAVE_IP(x, ip_end, ip) ((size_t)(ip_end - ip) < (x))
+@@ -244,9 +246,10 @@ lookbehind_overrun:
+ *out_len = op - out;
+ return LZO_E_LOOKBEHIND_OVERRUN;
+ }
+-
++#ifndef STATIC
+ EXPORT_SYMBOL_GPL(lzo1x_decompress_safe);
+
+ MODULE_LICENSE("GPL");
+ MODULE_DESCRIPTION("LZO1X Decompressor");
+
++#endif
+diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib
+index ffdafb2..39c3483 100644
+--- a/scripts/Makefile.lib
++++ b/scripts/Makefile.lib
+@@ -230,3 +230,8 @@ quiet_cmd_lzma = LZMA $@
+ cmd_lzma = (cat $(filter-out FORCE,$^) | \
+ lzma -9 && $(call size_append, $(filter-out FORCE,$^))) > $@ || \
+ (rm -f $@ ; false)
++
++quiet_cmd_lzo = LZO $@
++cmd_lzo = (cat $(filter-out FORCE,$^) | \
++ lzop -9 && $(call size_append, $(filter-out FORCE,$^))) > $@ || \
++ (rm -f $@ ; false)
diff --git a/recipes/kexecboot/linux-kexecboot-2.6.32/v3-2-4-Add-support-for-LZO-compressed-kernels-for-ARM.patch b/recipes/kexecboot/linux-kexecboot-2.6.32/v3-2-4-Add-support-for-LZO-compressed-kernels-for-ARM.patch
new file mode 100644
index 0000000000..f155c0a1b5
--- /dev/null
+++ b/recipes/kexecboot/linux-kexecboot-2.6.32/v3-2-4-Add-support-for-LZO-compressed-kernels-for-ARM.patch
@@ -0,0 +1,298 @@
+diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
+index 1c4119c..350921d 100644
+--- a/arch/arm/Kconfig
++++ b/arch/arm/Kconfig
+@@ -18,6 +18,8 @@ config ARM
+ select HAVE_KRETPROBES if (HAVE_KPROBES)
+ select HAVE_FUNCTION_TRACER if (!XIP_KERNEL)
+ select HAVE_GENERIC_DMA_COHERENT
++ select HAVE_KERNEL_GZIP
++ select HAVE_KERNEL_LZO
+ help
+ The ARM series is a line of low-power-consumption RISC chip designs
+ licensed by ARM Ltd and targeted at embedded applications and
+diff --git a/arch/arm/boot/compressed/Makefile b/arch/arm/boot/compressed/Makefile
+index ce39dc5..5b4629b 100644
+--- a/arch/arm/boot/compressed/Makefile
++++ b/arch/arm/boot/compressed/Makefile
+@@ -63,8 +63,12 @@ endif
+
+ SEDFLAGS = s/TEXT_START/$(ZTEXTADDR)/;s/BSS_START/$(ZBSSADDR)/
+
+-targets := vmlinux vmlinux.lds piggy.gz piggy.o font.o font.c \
+- head.o misc.o $(OBJS)
++suffix_$(CONFIG_KERNEL_GZIP) = gzip
++suffix_$(CONFIG_KERNEL_LZO) = lzo
++
++targets := vmlinux vmlinux.lds \
++ piggy.$(suffix_y) piggy.$(suffix_y).o \
++ font.o font.c head.o misc.o $(OBJS)
+
+ ifeq ($(CONFIG_FUNCTION_TRACER),y)
+ ORIG_CFLAGS := $(KBUILD_CFLAGS)
+@@ -87,22 +91,31 @@ endif
+ ifneq ($(PARAMS_PHYS),)
+ LDFLAGS_vmlinux += --defsym params_phys=$(PARAMS_PHYS)
+ endif
+-LDFLAGS_vmlinux += -p --no-undefined -X \
+- $(shell $(CC) $(KBUILD_CFLAGS) --print-libgcc-file-name) -T
++# ?
++LDFLAGS_vmlinux += -p
++# Report unresolved symbol references
++LDFLAGS_vmlinux += --no-undefined
++# Delete all temporary local symbols
++LDFLAGS_vmlinux += -X
++# Next argument is a linker script
++LDFLAGS_vmlinux += -T
++
++# For __aeabi_uidivmod
++lib1funcs = $(srctree)/arch/$(SRCARCH)/lib/lib1funcs.o
+
+ # Don't allow any static data in misc.o, which
+ # would otherwise mess up our GOT table
+ CFLAGS_misc.o := -Dstatic=
+
+-$(obj)/vmlinux: $(obj)/vmlinux.lds $(obj)/$(HEAD) $(obj)/piggy.o \
+- $(addprefix $(obj)/, $(OBJS)) FORCE
++$(obj)/vmlinux: $(obj)/vmlinux.lds $(obj)/$(HEAD) $(obj)/piggy.$(suffix_y).o \
++ $(addprefix $(obj)/, $(OBJS)) $(lib1funcs) FORCE
+ $(call if_changed,ld)
+ @:
+
+-$(obj)/piggy.gz: $(obj)/../Image FORCE
+- $(call if_changed,gzip)
++$(obj)/piggy.$(suffix_y): $(obj)/../Image FORCE
++ $(call if_changed,$(suffix_y))
+
+-$(obj)/piggy.o: $(obj)/piggy.gz FORCE
++$(obj)/piggy.$(suffix_y).o: $(obj)/piggy.$(suffix_y) FORCE
+
+ CFLAGS_font.o := -Dstatic=
+
+diff --git a/arch/arm/boot/compressed/misc.c b/arch/arm/boot/compressed/misc.c
+index 17153b5..7e0fe4d 100644
+--- a/arch/arm/boot/compressed/misc.c
++++ b/arch/arm/boot/compressed/misc.c
+@@ -18,10 +18,15 @@
+
+ unsigned int __machine_arch_type;
+
++#define _LINUX_STRING_H_
++
+ #include <linux/compiler.h> /* for inline */
+ #include <linux/types.h> /* for size_t */
+ #include <linux/stddef.h> /* for NULL */
+ #include <asm/string.h>
++#include <linux/linkage.h>
++
++#include <asm/unaligned.h>
+
+ #ifdef STANDALONE_DEBUG
+ #define putstr printf
+@@ -188,34 +193,8 @@ static inline __ptr_t memcpy(__ptr_t __dest, __const __ptr_t __src,
+ /*
+ * gzip delarations
+ */
+-#define OF(args) args
+ #define STATIC static
+
+-typedef unsigned char uch;
+-typedef unsigned short ush;
+-typedef unsigned long ulg;
+-
+-#define WSIZE 0x8000 /* Window size must be at least 32k, */
+- /* and a power of two */
+-
+-static uch *inbuf; /* input buffer */
+-static uch window[WSIZE]; /* Sliding window buffer */
+-
+-static unsigned insize; /* valid bytes in inbuf */
+-static unsigned inptr; /* index of next byte to be processed in inbuf */
+-static unsigned outcnt; /* bytes in output buffer */
+-
+-/* gzip flag byte */
+-#define ASCII_FLAG 0x01 /* bit 0 set: file probably ascii text */
+-#define CONTINUATION 0x02 /* bit 1 set: continuation of multi-part gzip file */
+-#define EXTRA_FIELD 0x04 /* bit 2 set: extra field present */
+-#define ORIG_NAME 0x08 /* bit 3 set: original file name present */
+-#define COMMENT 0x10 /* bit 4 set: file comment present */
+-#define ENCRYPTED 0x20 /* bit 5 set: file is encrypted */
+-#define RESERVED 0xC0 /* bit 6,7: reserved */
+-
+-#define get_byte() (inptr < insize ? inbuf[inptr++] : fill_inbuf())
+-
+ /* Diagnostic functions */
+ #ifdef DEBUG
+ # define Assert(cond,msg) {if(!(cond)) error(msg);}
+@@ -233,24 +212,20 @@ static unsigned outcnt; /* bytes in output buffer */
+ # define Tracecv(c,x)
+ #endif
+
+-static int fill_inbuf(void);
+-static void flush_window(void);
+ static void error(char *m);
+
+ extern char input_data[];
+ extern char input_data_end[];
+
+-static uch *output_data;
+-static ulg output_ptr;
+-static ulg bytes_out;
++static unsigned char *output_data;
++static unsigned long output_ptr;
+
+ static void error(char *m);
+
+ static void putstr(const char *);
+
+-extern int end;
+-static ulg free_mem_ptr;
+-static ulg free_mem_end_ptr;
++static unsigned long free_mem_ptr;
++static unsigned long free_mem_end_ptr;
+
+ #ifdef STANDALONE_DEBUG
+ #define NO_INFLATE_MALLOC
+@@ -258,46 +233,13 @@ static ulg free_mem_end_ptr;
+
+ #define ARCH_HAS_DECOMP_WDOG
+
+-#include "../../../../lib/inflate.c"
+-
+-/* ===========================================================================
+- * Fill the input buffer. This is called only when the buffer is empty
+- * and at least one byte is really needed.
+- */
+-int fill_inbuf(void)
+-{
+- if (insize != 0)
+- error("ran out of input data");
+-
+- inbuf = input_data;
+- insize = &input_data_end[0] - &input_data[0];
+-
+- inptr = 1;
+- return inbuf[0];
+-}
++#ifdef CONFIG_KERNEL_GZIP
++#include "../../../../lib/decompress_inflate.c"
++#endif
+
+-/* ===========================================================================
+- * Write the output window window[0..outcnt-1] and update crc and bytes_out.
+- * (Used for the decompressed data only.)
+- */
+-void flush_window(void)
+-{
+- ulg c = crc;
+- unsigned n;
+- uch *in, *out, ch;
+-
+- in = window;
+- out = &output_data[output_ptr];
+- for (n = 0; n < outcnt; n++) {
+- ch = *out++ = *in++;
+- c = crc_32_tab[((int)c ^ ch) & 0xff] ^ (c >> 8);
+- }
+- crc = c;
+- bytes_out += (ulg)outcnt;
+- output_ptr += (ulg)outcnt;
+- outcnt = 0;
+- putstr(".");
+-}
++#ifdef CONFIG_KERNEL_LZO
++#include "../../../../lib/decompress_unlzo.c"
++#endif
+
+ #ifndef arch_error
+ #define arch_error(x)
+@@ -314,22 +256,33 @@ static void error(char *x)
+ while(1); /* Halt */
+ }
+
++asmlinkage void __div0(void)
++{
++ error("Attempting division by 0!");
++}
++
+ #ifndef STANDALONE_DEBUG
+
+-ulg
+-decompress_kernel(ulg output_start, ulg free_mem_ptr_p, ulg free_mem_ptr_end_p,
+- int arch_id)
++unsigned long
++decompress_kernel(unsigned long output_start, unsigned long free_mem_ptr_p,
++ unsigned long free_mem_ptr_end_p,
++ int arch_id)
+ {
+- output_data = (uch *)output_start; /* Points to kernel start */
++ unsigned char *tmp;
++
++ output_data = (unsigned char *)output_start;
+ free_mem_ptr = free_mem_ptr_p;
+ free_mem_end_ptr = free_mem_ptr_end_p;
+ __machine_arch_type = arch_id;
+
+ arch_decomp_setup();
+
+- makecrc();
++ tmp = (unsigned char *) (((unsigned long)input_data_end) - 4);
++ output_ptr = get_unaligned_le32(tmp);
++
+ putstr("Uncompressing Linux...");
+- gunzip();
++ decompress(input_data, input_data_end - input_data,
++ NULL, NULL, output_data, NULL, error);
+ putstr(" done, booting the kernel.\n");
+ return output_ptr;
+ }
+@@ -341,11 +294,10 @@ int main()
+ {
+ output_data = output_buffer;
+
+- makecrc();
+ putstr("Uncompressing Linux...");
+- gunzip();
++ decompress(input_data, input_data_end - input_data,
++ NULL, NULL, output_data, NULL, error);
+ putstr("done.\n");
+ return 0;
+ }
+ #endif
+-
+diff --git a/arch/arm/boot/compressed/piggy.S b/arch/arm/boot/compressed/piggy.S
+deleted file mode 100644
+index 54c9518..0000000
+--- a/arch/arm/boot/compressed/piggy.S
++++ /dev/null
+@@ -1,6 +0,0 @@
+- .section .piggydata,#alloc
+- .globl input_data
+-input_data:
+- .incbin "arch/arm/boot/compressed/piggy.gz"
+- .globl input_data_end
+-input_data_end:
+diff --git a/arch/arm/boot/compressed/piggy.gzip.S b/arch/arm/boot/compressed/piggy.gzip.S
+new file mode 100644
+index 0000000..a68adf9
+--- /dev/null
++++ b/arch/arm/boot/compressed/piggy.gzip.S
+@@ -0,0 +1,6 @@
++ .section .piggydata,#alloc
++ .globl input_data
++input_data:
++ .incbin "arch/arm/boot/compressed/piggy.gzip"
++ .globl input_data_end
++input_data_end:
+diff --git a/arch/arm/boot/compressed/piggy.lzo.S b/arch/arm/boot/compressed/piggy.lzo.S
+new file mode 100644
+index 0000000..a425ad9
+--- /dev/null
++++ b/arch/arm/boot/compressed/piggy.lzo.S
+@@ -0,0 +1,6 @@
++ .section .piggydata,#alloc
++ .globl input_data
++input_data:
++ .incbin "arch/arm/boot/compressed/piggy.lzo"
++ .globl input_data_end
++input_data_end:
diff --git a/recipes/kexecboot/linux-kexecboot-2.6.32/v3-3-4-Add-support-for-LZO-compressed-kernels-on-x86.patch b/recipes/kexecboot/linux-kexecboot-2.6.32/v3-3-4-Add-support-for-LZO-compressed-kernels-on-x86.patch
new file mode 100644
index 0000000000..bfefe8bfde
--- /dev/null
+++ b/recipes/kexecboot/linux-kexecboot-2.6.32/v3-3-4-Add-support-for-LZO-compressed-kernels-on-x86.patch
@@ -0,0 +1,54 @@
+diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
+index 72ace95..89f7771 100644
+--- a/arch/x86/Kconfig
++++ b/arch/x86/Kconfig
+@@ -49,6 +49,7 @@ config X86
+ select HAVE_KERNEL_GZIP
+ select HAVE_KERNEL_BZIP2
+ select HAVE_KERNEL_LZMA
++ select HAVE_KERNEL_LZO
+ select HAVE_ARCH_KMEMCHECK
+
+ config OUTPUT_FORMAT
+diff --git a/arch/x86/boot/compressed/Makefile b/arch/x86/boot/compressed/Makefile
+index f8ed065..0e835d0 100644
+--- a/arch/x86/boot/compressed/Makefile
++++ b/arch/x86/boot/compressed/Makefile
+@@ -4,7 +4,7 @@
+ # create a compressed vmlinux image from the original vmlinux
+ #
+
+-targets := vmlinux.lds vmlinux vmlinux.bin vmlinux.bin.gz vmlinux.bin.bz2 vmlinux.bin.lzma head_$(BITS).o misc.o piggy.o
++targets := vmlinux.lds vmlinux vmlinux.bin vmlinux.bin.gz vmlinux.bin.bz2 vmlinux.bin.lzma vmlinux.bin.lzo head_$(BITS).o misc.o piggy.o
+
+ KBUILD_CFLAGS := -m$(BITS) -D__KERNEL__ $(LINUX_INCLUDE) -O2
+ KBUILD_CFLAGS += -fno-strict-aliasing -fPIC
+@@ -48,10 +48,13 @@ $(obj)/vmlinux.bin.bz2: $(vmlinux.bin.all-y) FORCE
+ $(call if_changed,bzip2)
+ $(obj)/vmlinux.bin.lzma: $(vmlinux.bin.all-y) FORCE
+ $(call if_changed,lzma)
++$(obj)/vmlinux.bin.lzo: $(vmlinux.bin.all-y) FORCE
++ $(call if_changed,lzo)
+
+ suffix-$(CONFIG_KERNEL_GZIP) := gz
+ suffix-$(CONFIG_KERNEL_BZIP2) := bz2
+ suffix-$(CONFIG_KERNEL_LZMA) := lzma
++suffix-$(CONFIG_KERNEL_LZO) := lzo
+
+ quiet_cmd_mkpiggy = MKPIGGY $@
+ cmd_mkpiggy = $(obj)/mkpiggy $< > $@ || ( rm -f $@ ; false )
+diff --git a/arch/x86/boot/compressed/misc.c b/arch/x86/boot/compressed/misc.c
+index 842b2a3..3b22fe8 100644
+--- a/arch/x86/boot/compressed/misc.c
++++ b/arch/x86/boot/compressed/misc.c
+@@ -162,6 +162,10 @@ static int lines, cols;
+ #include "../../../../lib/decompress_unlzma.c"
+ #endif
+
++#ifdef CONFIG_KERNEL_LZO
++#include "../../../../lib/decompress_unlzo.c"
++#endif
++
+ static void scroll(void)
+ {
+ int i;
diff --git a/recipes/kexecboot/linux-kexecboot-2.6.32/v3-4-4-Add-LZO-compression-support-for-initramfs-and-old-style-initrd.patch b/recipes/kexecboot/linux-kexecboot-2.6.32/v3-4-4-Add-LZO-compression-support-for-initramfs-and-old-style-initrd.patch
new file mode 100644
index 0000000000..f0d8ff39f9
--- /dev/null
+++ b/recipes/kexecboot/linux-kexecboot-2.6.32/v3-4-4-Add-LZO-compression-support-for-initramfs-and-old-style-initrd.patch
@@ -0,0 +1,114 @@
+diff --git a/lib/Kconfig b/lib/Kconfig
+index bb1326d..8639349 100644
+--- a/lib/Kconfig
++++ b/lib/Kconfig
+@@ -117,6 +117,10 @@ config DECOMPRESS_BZIP2
+ config DECOMPRESS_LZMA
+ tristate
+
++config DECOMPRESS_LZO
++ select LZO_DECOMPRESS
++ tristate
++
+ #
+ # Generic allocator support is selected if needed
+ #
+diff --git a/lib/Makefile b/lib/Makefile
+index 2e78277..cfa4041 100644
+--- a/lib/Makefile
++++ b/lib/Makefile
+@@ -69,6 +69,7 @@ obj-$(CONFIG_LZO_DECOMPRESS) += lzo/
+ lib-$(CONFIG_DECOMPRESS_GZIP) += decompress_inflate.o
+ lib-$(CONFIG_DECOMPRESS_BZIP2) += decompress_bunzip2.o
+ lib-$(CONFIG_DECOMPRESS_LZMA) += decompress_unlzma.o
++lib-$(CONFIG_DECOMPRESS_LZO) += decompress_unlzo.o
+
+ obj-$(CONFIG_TEXTSEARCH) += textsearch.o
+ obj-$(CONFIG_TEXTSEARCH_KMP) += ts_kmp.o
+diff --git a/lib/decompress.c b/lib/decompress.c
+index d2842f5..a760681 100644
+--- a/lib/decompress.c
++++ b/lib/decompress.c
+@@ -9,6 +9,7 @@
+ #include <linux/decompress/bunzip2.h>
+ #include <linux/decompress/unlzma.h>
+ #include <linux/decompress/inflate.h>
++#include <linux/decompress/unlzo.h>
+
+ #include <linux/types.h>
+ #include <linux/string.h>
+@@ -22,6 +23,9 @@
+ #ifndef CONFIG_DECOMPRESS_LZMA
+ # define unlzma NULL
+ #endif
++#ifndef CONFIG_DECOMPRESS_LZO
++# define unlzo NULL
++#endif
+
+ static const struct compress_format {
+ unsigned char magic[2];
+@@ -32,6 +36,7 @@ static const struct compress_format {
+ { {037, 0236}, "gzip", gunzip },
+ { {0x42, 0x5a}, "bzip2", bunzip2 },
+ { {0x5d, 0x00}, "lzma", unlzma },
++ { {0x89, 0x4c}, "lzo", unlzo },
+ { {0, 0}, NULL, NULL }
+ };
+
+diff --git a/usr/Kconfig b/usr/Kconfig
+index 1c3039f..e2721f5 100644
+--- a/usr/Kconfig
++++ b/usr/Kconfig
+@@ -72,6 +72,15 @@ config RD_LZMA
+ Support loading of a LZMA encoded initial ramdisk or cpio buffer
+ If unsure, say N.
+
++config RD_LZO
++ bool "Support initial ramdisks compressed using LZO" if EMBEDDED
++ default !EMBEDDED
++ depends on BLK_DEV_INITRD
++ select DECOMPRESS_LZO
++ help
++ Support loading of a LZO encoded initial ramdisk or cpio buffer
++ If unsure, say N.
++
+ choice
+ prompt "Built-in initramfs compression mode" if INITRAMFS_SOURCE!=""
+ help
+@@ -108,16 +117,15 @@ config INITRAMFS_COMPRESSION_GZIP
+ bool "Gzip"
+ depends on RD_GZIP
+ help
+- The old and tried gzip compression. Its compression ratio is
+- the poorest among the 3 choices; however its speed (both
+- compression and decompression) is the fastest.
++ The old and tried gzip compression. It provides a good balance
++ between compression ratio and decompression speed.
+
+ config INITRAMFS_COMPRESSION_BZIP2
+ bool "Bzip2"
+ depends on RD_BZIP2
+ help
+ Its compression ratio and speed is intermediate.
+- Decompression speed is slowest among the three. The initramfs
++ Decompression speed is slowest among the four. The initramfs
+ size is about 10% smaller with bzip2, in comparison to gzip.
+ Bzip2 uses a large amount of memory. For modern kernels you
+ will need at least 8MB RAM or more for booting.
+@@ -128,7 +136,15 @@ config INITRAMFS_COMPRESSION_LZMA
+ help
+ The most recent compression algorithm.
+ Its ratio is best, decompression speed is between the other
+- two. Compression is slowest. The initramfs size is about 33%
++ three. Compression is slowest. The initramfs size is about 33%
+ smaller with LZMA in comparison to gzip.
+
++config INITRAMFS_COMPRESSION_LZO
++ bool "LZO"
++ depends on RD_LZO
++ help
++ Its compression ratio is the poorest among the four. The kernel
++ size is about about 10% bigger than gzip; however its speed
++ (both compression and decompression) is the fastest.
++
+ endchoice
diff --git a/recipes/kexecboot/linux-kexecboot_2.6.32.bb b/recipes/kexecboot/linux-kexecboot_2.6.32.bb
new file mode 100644
index 0000000000..b876e91988
--- /dev/null
+++ b/recipes/kexecboot/linux-kexecboot_2.6.32.bb
@@ -0,0 +1,37 @@
+require linux-kexecboot.inc
+
+S = "${WORKDIR}/linux-${PV}"
+
+# Mark archs/machines that this kernel supports
+DEFAULT_PREFERENCE = "-1"
+DEFAULT_PREFERENCE_akita = "-1"
+DEFAULT_PREFERENCE_c7x0 = "-1"
+DEFAULT_PREFERENCE_collie = "-1"
+DEFAULT_PREFERENCE_poodle = "-1"
+DEFAULT_PREFERENCE_spitz = "-1"
+DEFAULT_PREFERENCE_tosa = "-1"
+
+SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${PV}.tar.bz2;name=kernel \
+# file://v3-1-4-Add-support-for-LZO-compressed-kernels.patch;patch=1;status=pending \
+# file://v3-2-4-Add-support-for-LZO-compressed-kernels-for-ARM.patch;patch=1;status=pending \
+# file://v3-3-4-Add-support-for-LZO-compressed-kernels-on-x86.patch;patch=1;status=pending \
+# file://v3-4-4-Add-LZO-compression-support-for-initramfs-and-old-style-initrd.patch;patch=1;status=pending \
+# file://ARM-Add-support-for-LZMA-compressed-kernel-images.patch;patch=1;status=pending \
+ file://defconfig"
+
+SRC_URI[kernel.md5sum] = "260551284ac224c3a43c4adac7df4879"
+SRC_URI[kernel.sha256sum] = "5099786d80b8407d98a619df00209c2353517f22d804fdd9533b362adcb4504e"
+
+# Zaurus family bootloader patches
+RPSRC = "http://www.rpsys.net/openzaurus/patches/archive"
+ZAURUSPATCHES = " ${RPSRC}/pxa-linking-bug-r1.patch;patch=1;status=unmergable;name=pxa-linking-bug-r1 "
+SRC_URI[pxa-linking-bug-r1.md5sum] = "1e2a99787260c3566033e7f41180e2c8"
+SRC_URI[pxa-linking-bug-r1.sha256sum] = "785d2680022325ad54c1593082dce902f5fee31dae4c1922ba43956b1dcfcd8b"
+
+# Machine specific patches
+SRC_URI_append_akita = "${ZAURUSPATCHES}"
+SRC_URI_append_c7x0 = "${ZAURUSPATCHES}"
+SRC_URI_append_collie = "${ZAURUSPATCHES}"
+SRC_URI_append_poodle = "${ZAURUSPATCHES}"
+SRC_URI_append_spitz = "${ZAURUSPATCHES}"
+SRC_URI_append_tosa = "${ZAURUSPATCHES}"
diff --git a/recipes/klibc/klibc-1.5.15/isystem.patch b/recipes/klibc/klibc-1.5.15/isystem.patch
new file mode 100644
index 0000000000..2ec40c16c2
--- /dev/null
+++ b/recipes/klibc/klibc-1.5.15/isystem.patch
@@ -0,0 +1,13 @@
+Index: klibc-1.5.15/klcc/klcc.in
+===================================================================
+--- klibc-1.5.15.orig/klcc/klcc.in 2009-12-14 00:32:41.373661102 +0100
++++ klibc-1.5.15/klcc/klcc.in 2009-12-14 00:34:20.855735356 +0100
+@@ -147,7 +147,7 @@
+ } elsif ( $a =~ /^-([fmwWQdO]|std=|ansi|pedantic|M[GPD]|MMD)/ ) {
+ # Options to gcc
+ push(@ccopt, $a);
+- } elsif ( $a =~ /^-([DUI]|M[FQT])(.*)$/ ) {
++ } elsif ( $a =~ /^-([DUI]|M[FQT]|isystem)(.*)$/ ) {
+ # Options to gcc, which can take either a conjoined argument
+ # (-DFOO) or a disjoint argument (-D FOO)
+ push(@ccopt, $a);
diff --git a/recipes/klibc/klibc_1.5.15.bb b/recipes/klibc/klibc_1.5.15.bb
index 777dcd2c3c..97898f2b8e 100644
--- a/recipes/klibc/klibc_1.5.15.bb
+++ b/recipes/klibc/klibc_1.5.15.bb
@@ -1,4 +1,4 @@
require klibc_1.5.15.inc
-PR = "r4"
+PR = "r5"
KLIBC_FETCHDIR = "Testing"
diff --git a/recipes/klibc/klibc_1.5.15.inc b/recipes/klibc/klibc_1.5.15.inc
index f6f5b879ef..6615ac2899 100644
--- a/recipes/klibc/klibc_1.5.15.inc
+++ b/recipes/klibc/klibc_1.5.15.inc
@@ -4,7 +4,8 @@ SRC_URI += "file://staging.patch;patch=1 \
file://klibc_kexecsyscall.patch;patch=1 \
file://mntproc-definitions.patch;patch=1 \
file://signal-cleanup.patch;patch=1 \
- "
+ file://isystem.patch;patch=1 \
+ "
# we want only the shared programms and the lib so we chose them manually
do_install() {
diff --git a/recipes/libc-client/libc-client_2007a1.bb b/recipes/libc-client/libc-client_2007b.bb
index b337a344a7..bacc910a13 100644
--- a/recipes/libc-client/libc-client_2007a1.bb
+++ b/recipes/libc-client/libc-client_2007b.bb
@@ -1,13 +1,13 @@
DESCRIPTION = "UW c-client library for mail protocols"
SECTION = "devel"
PRIORITY = "optional"
-LICENSE = "University of Washington's Free-Fork License"
-DEPENDS = "libpam openssl"
+LICENSE = "University of Washingtons Free-Fork License"
+DEPENDS = "libpam openssl libpam"
SRC_URI = "ftp://ftp.cac.washington.edu/imap/imap-${PV}.tar.Z \
file://quote_cctype.patch;patch=1"
-S = "${WORKDIR}/imap-2007a"
+S = "${WORKDIR}/imap-${PV}"
EXTRA_OEMAKE = "CC='${CC}'"
@@ -18,9 +18,10 @@ do_compile() {
oe_runmake lnp
}
-do_stage() {
- install -d ${STAGING_INCDIR}/c-client
- install ${HEADERS} ${STAGING_INCDIR}/c-client
- install c-client/c-client.a ${STAGING_LIBDIR}/libc-client.a
+do_install() {
+ install -d ${D}${includedir}/c-client
+ install ${HEADERS} ${D}${includedir}/c-client
+ install -d ${D}${libdir}
+ install c-client/c-client.a ${D}${libdir}/libc-client.a
}
diff --git a/recipes/libcli/files/autotools.patch b/recipes/libcli/files/autotools.patch
new file mode 100644
index 0000000000..de578a4e17
--- /dev/null
+++ b/recipes/libcli/files/autotools.patch
@@ -0,0 +1,88 @@
+Index: libcli-1.9.4/Makefile.am
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libcli-1.9.4/Makefile.am 2009-12-08 11:04:42.788208125 +0100
+@@ -0,0 +1,24 @@
++
++ACLOCAL_AMFLAGS = -I m4 --install
++
++AM_CFLAGS = -Wall -Wformat-security -Wno-format-zero-length
++
++lib_LTLIBRARIES = libcli.la
++
++libcli_la_SOURCES = libcli.c
++
++libcli_la_LIBADD = @LIBCRYPT@
++
++libcli_la_LDFLAGS = -version-number @LIBCLI_LIBRARY_VERSION@
++
++include_HEADERS = libcli.h
++
++bin_PROGRAMS = clitest
++
++clitest_SOURCES = clitest.c
++
++clitest_LDADD = libcli.la
++
++pkgconfigdir = $(libdir)/pkgconfig
++pkgconfig_DATA = libcli.pc
++
+Index: libcli-1.9.4/configure.ac
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libcli-1.9.4/configure.ac 2009-12-08 11:04:04.341128615 +0100
+@@ -0,0 +1,39 @@
++# -*- Autoconf -*-
++# Process this file with autoconf to produce a configure script.
++
++AC_PREREQ([2.61])
++AC_INIT([libcli], [1.9.4], [heinold@inf.fu-berlin.de])
++AM_INIT_AUTOMAKE([-Wall foreign])
++AC_CONFIG_SRCDIR([clitest.c])
++AC_CONFIG_HEADERS([config.h])
++AC_CONFIG_MACRO_DIR([m4])
++
++LIBCLI_LIBRARY_VERSION=1:9:0
++AC_SUBST([LIBCLI_LIBRARY_VERSION])
++
++# Checks for programs.
++AC_PROG_CC
++AC_PROG_INSTALL
++AC_PROG_LN_S
++
++AC_PROG_LIBTOOL
++
++# Checks for header files.
++AC_CHECK_HEADERS([arpa/inet.h malloc.h memory.h stdlib.h string.h sys/socket.h unistd.h])
++
++# Checks fro library
++AC_CHECK_LIB([crypt], [crypt_r],[LIBCRYPT=-lcrypt],AC_MSG_ERROR(["libcrypt not found"]))
++AC_SUBST([LIBCRYPT])
++
++# Checks for typedefs, structures, and compiler characteristics.
++
++# Checks for library functions.
++AC_FUNC_FORK
++AC_FUNC_MALLOC
++AC_FUNC_REALLOC
++AC_CHECK_FUNCS([inet_ntoa memmove memset regcomp select socket strcasecmp strchr strdup strerror strncasecmp strpbrk strspn strstr])
++
++AC_CONFIG_FILES([Makefile
++ libcli.pc
++])
++AC_OUTPUT
+Index: libcli-1.9.4/libcli.pc.in
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libcli-1.9.4/libcli.pc.in 2009-12-08 10:35:05.115463492 +0100
+@@ -0,0 +1,10 @@
++prefix=@prefix@
++exec_prefix=@exec_prefix@
++libdir=@libdir@
++includedir=@includedir@
++
++Name: libcli
++Description: shared library for including a Cisco-like command-line interface into other software
++Version: @VERSION@
++Libs: -L${libdir} -lcli
++Cflags: -I${includedir}
diff --git a/recipes/libcli/libcli_1.9.4.bb b/recipes/libcli/libcli_1.9.4.bb
new file mode 100644
index 0000000000..e6d3d4fd45
--- /dev/null
+++ b/recipes/libcli/libcli_1.9.4.bb
@@ -0,0 +1,11 @@
+DESCRIPTION = "shared library for including a Cisco-like command-line interface into other software"
+HOMEPAGE = "http://code.google.com/p/libcli/"
+SECTION = "devel"
+LICENSE = "LGPL"
+PR = "r1"
+
+SRC_URI = "http://libcli.googlecode.com/files/${PN}-${PV}.tar.gz \
+ file://autotools.patch;patch=1 \
+ "
+
+inherit autotools lib_package
diff --git a/recipes/libdessert/files/0001-big-fat-autotools-patch.patch b/recipes/libdessert/files/0001-big-fat-autotools-patch.patch
new file mode 100644
index 0000000000..619cdbf0b0
--- /dev/null
+++ b/recipes/libdessert/files/0001-big-fat-autotools-patch.patch
@@ -0,0 +1,87483 @@
+From eeae8079cf05426a957adca46f3fc6d0a985509e Mon Sep 17 00:00:00 2001
+From: woglinde <woglinde@rhein.zuhause.netz>
+Date: Sat, 5 Dec 2009 01:09:35 +0100
+Subject: [PATCH] *big fat autotools patch
+
+---
+ AUTHORS | 2 +
+ COPYING | 674 ++
+ ChangeLog | 7 +
+ DES-SERT.doxyfile | 2 +-
+ INSTALL | 302 +
+ Intro.txt | 270 -
+ Makefile | 154 -
+ Makefile.am | 11 +
+ Makefile.in | 925 ++
+ NEWS | 1 +
+ README | 270 +
+ autogen.sh | 22 +
+ changelog.gz | Bin 260 -> 0 bytes
+ config.guess | 1533 +++
+ config.h.in | 208 +
+ config.sub | 1693 +++
+ configure |16280 ++++++++++++++++++++++++++
+ configure.ac | 97 +
+ depcomp | 630 +
+ dessert.h | 1334 ---
+ dessert_agentx.c | 563 -
+ dessert_cli.c | 255 -
+ dessert_core.c | 241 -
+ dessert_internal.h | 219 -
+ dessert_log.c | 417 -
+ dessert_meshiface.c | 1220 --
+ dessert_msg.c | 876 --
+ dessert_periodic.c | 326 -
+ dessert_sysiface.c | 487 -
+ doxygen-include.am | 203 +
+ include/Makefile.am | 3 +
+ include/Makefile.in | 490 +
+ include/dessert/dessert.h | 1334 +++
+ include/dessert/utlist.h | 349 +
+ install-sh | 520 +
+ libdessert.pc.in | 11 +
+ ltmain.sh | 8413 +++++++++++++
+ m4/ac_doxygen.m4 | 324 +
+ m4/ax_pthread.m4 | 272 +
+ m4/libtool.m4 | 7376 ++++++++++++
+ m4/ltoptions.m4 | 368 +
+ m4/ltsugar.m4 | 123 +
+ m4/ltversion.m4 | 23 +
+ m4/lt~obsolete.m4 | 92 +
+ m4/net-snmp.m4 | 10 +
+ m4/pcap.m4 | 10 +
+ missing | 376 +
+ snmp/dessertAppParamsTable.c | 231 -
+ snmp/dessertAppParamsTable.h | 252 -
+ snmp/dessertAppParamsTable_data_access.c | 352 -
+ snmp/dessertAppParamsTable_data_access.h | 93 -
+ snmp/dessertAppParamsTable_data_get.c | 731 --
+ snmp/dessertAppParamsTable_data_get.h | 136 -
+ snmp/dessertAppParamsTable_data_set.c | 1241 --
+ snmp/dessertAppParamsTable_data_set.h | 168 -
+ snmp/dessertAppParamsTable_enums.h | 93 -
+ snmp/dessertAppParamsTable_interface.c | 1843 ---
+ snmp/dessertAppParamsTable_interface.h | 101 -
+ snmp/dessertAppParamsTable_oids.h | 56 -
+ snmp/dessertAppStatsTable.c | 173 -
+ snmp/dessertAppStatsTable.h | 251 -
+ snmp/dessertAppStatsTable_data_access.c | 407 -
+ snmp/dessertAppStatsTable_data_access.h | 93 -
+ snmp/dessertAppStatsTable_data_get.c | 1088 --
+ snmp/dessertAppStatsTable_data_get.h | 174 -
+ snmp/dessertAppStatsTable_data_set.c | 28 -
+ snmp/dessertAppStatsTable_data_set.h | 28 -
+ snmp/dessertAppStatsTable_enums.h | 118 -
+ snmp/dessertAppStatsTable_interface.c | 1069 --
+ snmp/dessertAppStatsTable_interface.h | 98 -
+ snmp/dessertAppStatsTable_oids.h | 64 -
+ snmp/dessertMeshifTable.c | 214 -
+ snmp/dessertMeshifTable.h | 222 -
+ snmp/dessertMeshifTable_data_access.c | 377 -
+ snmp/dessertMeshifTable_data_access.h | 77 -
+ snmp/dessertMeshifTable_data_get.c | 522 -
+ snmp/dessertMeshifTable_data_get.h | 109 -
+ snmp/dessertMeshifTable_data_set.c | 28 -
+ snmp/dessertMeshifTable_data_set.h | 28 -
+ snmp/dessertMeshifTable_enums.h | 39 -
+ snmp/dessertMeshifTable_interface.c | 944 --
+ snmp/dessertMeshifTable_interface.h | 98 -
+ snmp/dessertMeshifTable_oids.h | 43 -
+ snmp/dessertObjects.c | 164 -
+ snmp/dessertObjects.h | 17 -
+ snmp/dessertSysifTable.c | 215 -
+ snmp/dessertSysifTable.h | 230 -
+ snmp/dessertSysifTable_data_access.c | 342 -
+ snmp/dessertSysifTable_data_access.h | 90 -
+ snmp/dessertSysifTable_data_get.c | 507 -
+ snmp/dessertSysifTable_data_get.h | 105 -
+ snmp/dessertSysifTable_data_set.c | 28 -
+ snmp/dessertSysifTable_data_set.h | 28 -
+ snmp/dessertSysifTable_enums.h | 39 -
+ snmp/dessertSysifTable_interface.c | 936 --
+ snmp/dessertSysifTable_interface.h | 97 -
+ snmp/dessertSysifTable_oids.h | 43 -
+ snmp/dessertSysifTable_subagent.c | 202 -
+ src/Makefile.am | 3 +
+ src/Makefile.in | 591 +
+ src/libdessert/Makefile.am | 26 +
+ src/libdessert/Makefile.in | 586 +
+ src/libdessert/dessert_agentx.c | 563 +
+ src/libdessert/dessert_cli.c | 257 +
+ src/libdessert/dessert_core.c | 241 +
+ src/libdessert/dessert_internal.h | 219 +
+ src/libdessert/dessert_log.c | 417 +
+ src/libdessert/dessert_meshiface.c | 1221 ++
+ src/libdessert/dessert_msg.c | 876 ++
+ src/libdessert/dessert_periodic.c | 326 +
+ src/libdessert/dessert_sysiface.c | 487 +
+ src/snmp/Makefile.am | 60 +
+ src/snmp/Makefile.in | 598 +
+ src/snmp/dessertAppParamsTable.c | 231 +
+ src/snmp/dessertAppParamsTable.h | 252 +
+ src/snmp/dessertAppParamsTable_data_access.c | 352 +
+ src/snmp/dessertAppParamsTable_data_access.h | 93 +
+ src/snmp/dessertAppParamsTable_data_get.c | 731 ++
+ src/snmp/dessertAppParamsTable_data_get.h | 136 +
+ src/snmp/dessertAppParamsTable_data_set.c | 1241 ++
+ src/snmp/dessertAppParamsTable_data_set.h | 168 +
+ src/snmp/dessertAppParamsTable_enums.h | 93 +
+ src/snmp/dessertAppParamsTable_interface.c | 1843 +++
+ src/snmp/dessertAppParamsTable_interface.h | 101 +
+ src/snmp/dessertAppParamsTable_oids.h | 56 +
+ src/snmp/dessertAppStatsTable.c | 173 +
+ src/snmp/dessertAppStatsTable.h | 251 +
+ src/snmp/dessertAppStatsTable_data_access.c | 407 +
+ src/snmp/dessertAppStatsTable_data_access.h | 93 +
+ src/snmp/dessertAppStatsTable_data_get.c | 1088 ++
+ src/snmp/dessertAppStatsTable_data_get.h | 174 +
+ src/snmp/dessertAppStatsTable_data_set.c | 28 +
+ src/snmp/dessertAppStatsTable_data_set.h | 28 +
+ src/snmp/dessertAppStatsTable_enums.h | 118 +
+ src/snmp/dessertAppStatsTable_interface.c | 1069 ++
+ src/snmp/dessertAppStatsTable_interface.h | 98 +
+ src/snmp/dessertAppStatsTable_oids.h | 64 +
+ src/snmp/dessertMeshifTable.c | 214 +
+ src/snmp/dessertMeshifTable.h | 222 +
+ src/snmp/dessertMeshifTable_data_access.c | 371 +
+ src/snmp/dessertMeshifTable_data_access.h | 77 +
+ src/snmp/dessertMeshifTable_data_get.c | 522 +
+ src/snmp/dessertMeshifTable_data_get.h | 109 +
+ src/snmp/dessertMeshifTable_data_set.c | 28 +
+ src/snmp/dessertMeshifTable_data_set.h | 28 +
+ src/snmp/dessertMeshifTable_enums.h | 39 +
+ src/snmp/dessertMeshifTable_interface.c | 944 ++
+ src/snmp/dessertMeshifTable_interface.h | 98 +
+ src/snmp/dessertMeshifTable_oids.h | 43 +
+ src/snmp/dessertObjects.c | 165 +
+ src/snmp/dessertObjects.h | 17 +
+ src/snmp/dessertSysifTable.c | 215 +
+ src/snmp/dessertSysifTable.h | 230 +
+ src/snmp/dessertSysifTable_data_access.c | 336 +
+ src/snmp/dessertSysifTable_data_access.h | 90 +
+ src/snmp/dessertSysifTable_data_get.c | 507 +
+ src/snmp/dessertSysifTable_data_get.h | 105 +
+ src/snmp/dessertSysifTable_data_set.c | 28 +
+ src/snmp/dessertSysifTable_data_set.h | 28 +
+ src/snmp/dessertSysifTable_enums.h | 39 +
+ src/snmp/dessertSysifTable_interface.c | 936 ++
+ src/snmp/dessertSysifTable_interface.h | 97 +
+ src/snmp/dessertSysifTable_oids.h | 43 +
+ src/snmp/dessertSysifTable_subagent.c | 202 +
+ utlist.h | 349 -
+ 165 files changed, 64045 insertions(+), 21344 deletions(-)
+ create mode 100644 COPYING
+ create mode 100644 ChangeLog
+ create mode 100644 INSTALL
+ delete mode 100644 Intro.txt
+ delete mode 100644 Makefile
+ create mode 100644 Makefile.am
+ create mode 100644 Makefile.in
+ create mode 100644 NEWS
+ create mode 100644 README
+ create mode 100755 autogen.sh
+ delete mode 100644 changelog.gz
+ create mode 100755 config.guess
+ create mode 100644 config.h.in
+ create mode 100755 config.sub
+ create mode 100755 configure
+ create mode 100644 configure.ac
+ create mode 100755 depcomp
+ delete mode 100644 dessert.h
+ delete mode 100644 dessert_agentx.c
+ delete mode 100644 dessert_cli.c
+ delete mode 100644 dessert_core.c
+ delete mode 100644 dessert_internal.h
+ delete mode 100644 dessert_log.c
+ delete mode 100644 dessert_meshiface.c
+ delete mode 100644 dessert_msg.c
+ delete mode 100644 dessert_periodic.c
+ delete mode 100644 dessert_sysiface.c
+ create mode 100644 doxygen-include.am
+ create mode 100644 include/Makefile.am
+ create mode 100644 include/Makefile.in
+ create mode 100644 include/dessert/dessert.h
+ create mode 100644 include/dessert/utlist.h
+ create mode 100755 install-sh
+ create mode 100644 libdessert.pc.in
+ create mode 100755 ltmain.sh
+ create mode 100644 m4/ac_doxygen.m4
+ create mode 100644 m4/ax_pthread.m4
+ create mode 100644 m4/libtool.m4
+ create mode 100644 m4/ltoptions.m4
+ create mode 100644 m4/ltsugar.m4
+ create mode 100644 m4/ltversion.m4
+ create mode 100644 m4/lt~obsolete.m4
+ create mode 100644 m4/net-snmp.m4
+ create mode 100644 m4/pcap.m4
+ create mode 100755 missing
+ delete mode 100644 snmp/dessertAppParamsTable.c
+ delete mode 100644 snmp/dessertAppParamsTable.h
+ delete mode 100644 snmp/dessertAppParamsTable_data_access.c
+ delete mode 100644 snmp/dessertAppParamsTable_data_access.h
+ delete mode 100644 snmp/dessertAppParamsTable_data_get.c
+ delete mode 100644 snmp/dessertAppParamsTable_data_get.h
+ delete mode 100644 snmp/dessertAppParamsTable_data_set.c
+ delete mode 100644 snmp/dessertAppParamsTable_data_set.h
+ delete mode 100644 snmp/dessertAppParamsTable_enums.h
+ delete mode 100644 snmp/dessertAppParamsTable_interface.c
+ delete mode 100644 snmp/dessertAppParamsTable_interface.h
+ delete mode 100644 snmp/dessertAppParamsTable_oids.h
+ delete mode 100644 snmp/dessertAppStatsTable.c
+ delete mode 100644 snmp/dessertAppStatsTable.h
+ delete mode 100644 snmp/dessertAppStatsTable_data_access.c
+ delete mode 100644 snmp/dessertAppStatsTable_data_access.h
+ delete mode 100644 snmp/dessertAppStatsTable_data_get.c
+ delete mode 100644 snmp/dessertAppStatsTable_data_get.h
+ delete mode 100644 snmp/dessertAppStatsTable_data_set.c
+ delete mode 100644 snmp/dessertAppStatsTable_data_set.h
+ delete mode 100644 snmp/dessertAppStatsTable_enums.h
+ delete mode 100644 snmp/dessertAppStatsTable_interface.c
+ delete mode 100644 snmp/dessertAppStatsTable_interface.h
+ delete mode 100644 snmp/dessertAppStatsTable_oids.h
+ delete mode 100644 snmp/dessertMeshifTable.c
+ delete mode 100644 snmp/dessertMeshifTable.h
+ delete mode 100644 snmp/dessertMeshifTable_data_access.c
+ delete mode 100644 snmp/dessertMeshifTable_data_access.h
+ delete mode 100644 snmp/dessertMeshifTable_data_get.c
+ delete mode 100644 snmp/dessertMeshifTable_data_get.h
+ delete mode 100644 snmp/dessertMeshifTable_data_set.c
+ delete mode 100644 snmp/dessertMeshifTable_data_set.h
+ delete mode 100644 snmp/dessertMeshifTable_enums.h
+ delete mode 100644 snmp/dessertMeshifTable_interface.c
+ delete mode 100644 snmp/dessertMeshifTable_interface.h
+ delete mode 100644 snmp/dessertMeshifTable_oids.h
+ delete mode 100644 snmp/dessertObjects.c
+ delete mode 100644 snmp/dessertObjects.h
+ delete mode 100644 snmp/dessertSysifTable.c
+ delete mode 100644 snmp/dessertSysifTable.h
+ delete mode 100644 snmp/dessertSysifTable_data_access.c
+ delete mode 100644 snmp/dessertSysifTable_data_access.h
+ delete mode 100644 snmp/dessertSysifTable_data_get.c
+ delete mode 100644 snmp/dessertSysifTable_data_get.h
+ delete mode 100644 snmp/dessertSysifTable_data_set.c
+ delete mode 100644 snmp/dessertSysifTable_data_set.h
+ delete mode 100644 snmp/dessertSysifTable_enums.h
+ delete mode 100644 snmp/dessertSysifTable_interface.c
+ delete mode 100644 snmp/dessertSysifTable_interface.h
+ delete mode 100644 snmp/dessertSysifTable_oids.h
+ delete mode 100644 snmp/dessertSysifTable_subagent.c
+ create mode 100644 src/Makefile.am
+ create mode 100644 src/Makefile.in
+ create mode 100644 src/libdessert/Makefile.am
+ create mode 100644 src/libdessert/Makefile.in
+ create mode 100644 src/libdessert/dessert_agentx.c
+ create mode 100644 src/libdessert/dessert_cli.c
+ create mode 100644 src/libdessert/dessert_core.c
+ create mode 100644 src/libdessert/dessert_internal.h
+ create mode 100644 src/libdessert/dessert_log.c
+ create mode 100644 src/libdessert/dessert_meshiface.c
+ create mode 100644 src/libdessert/dessert_msg.c
+ create mode 100644 src/libdessert/dessert_periodic.c
+ create mode 100644 src/libdessert/dessert_sysiface.c
+ create mode 100644 src/snmp/Makefile.am
+ create mode 100644 src/snmp/Makefile.in
+ create mode 100644 src/snmp/dessertAppParamsTable.c
+ create mode 100644 src/snmp/dessertAppParamsTable.h
+ create mode 100644 src/snmp/dessertAppParamsTable_data_access.c
+ create mode 100644 src/snmp/dessertAppParamsTable_data_access.h
+ create mode 100644 src/snmp/dessertAppParamsTable_data_get.c
+ create mode 100644 src/snmp/dessertAppParamsTable_data_get.h
+ create mode 100644 src/snmp/dessertAppParamsTable_data_set.c
+ create mode 100644 src/snmp/dessertAppParamsTable_data_set.h
+ create mode 100644 src/snmp/dessertAppParamsTable_enums.h
+ create mode 100644 src/snmp/dessertAppParamsTable_interface.c
+ create mode 100644 src/snmp/dessertAppParamsTable_interface.h
+ create mode 100644 src/snmp/dessertAppParamsTable_oids.h
+ create mode 100644 src/snmp/dessertAppStatsTable.c
+ create mode 100644 src/snmp/dessertAppStatsTable.h
+ create mode 100644 src/snmp/dessertAppStatsTable_data_access.c
+ create mode 100644 src/snmp/dessertAppStatsTable_data_access.h
+ create mode 100644 src/snmp/dessertAppStatsTable_data_get.c
+ create mode 100644 src/snmp/dessertAppStatsTable_data_get.h
+ create mode 100644 src/snmp/dessertAppStatsTable_data_set.c
+ create mode 100644 src/snmp/dessertAppStatsTable_data_set.h
+ create mode 100644 src/snmp/dessertAppStatsTable_enums.h
+ create mode 100644 src/snmp/dessertAppStatsTable_interface.c
+ create mode 100644 src/snmp/dessertAppStatsTable_interface.h
+ create mode 100644 src/snmp/dessertAppStatsTable_oids.h
+ create mode 100644 src/snmp/dessertMeshifTable.c
+ create mode 100644 src/snmp/dessertMeshifTable.h
+ create mode 100644 src/snmp/dessertMeshifTable_data_access.c
+ create mode 100644 src/snmp/dessertMeshifTable_data_access.h
+ create mode 100644 src/snmp/dessertMeshifTable_data_get.c
+ create mode 100644 src/snmp/dessertMeshifTable_data_get.h
+ create mode 100644 src/snmp/dessertMeshifTable_data_set.c
+ create mode 100644 src/snmp/dessertMeshifTable_data_set.h
+ create mode 100644 src/snmp/dessertMeshifTable_enums.h
+ create mode 100644 src/snmp/dessertMeshifTable_interface.c
+ create mode 100644 src/snmp/dessertMeshifTable_interface.h
+ create mode 100644 src/snmp/dessertMeshifTable_oids.h
+ create mode 100644 src/snmp/dessertObjects.c
+ create mode 100644 src/snmp/dessertObjects.h
+ create mode 100644 src/snmp/dessertSysifTable.c
+ create mode 100644 src/snmp/dessertSysifTable.h
+ create mode 100644 src/snmp/dessertSysifTable_data_access.c
+ create mode 100644 src/snmp/dessertSysifTable_data_access.h
+ create mode 100644 src/snmp/dessertSysifTable_data_get.c
+ create mode 100644 src/snmp/dessertSysifTable_data_get.h
+ create mode 100644 src/snmp/dessertSysifTable_data_set.c
+ create mode 100644 src/snmp/dessertSysifTable_data_set.h
+ create mode 100644 src/snmp/dessertSysifTable_enums.h
+ create mode 100644 src/snmp/dessertSysifTable_interface.c
+ create mode 100644 src/snmp/dessertSysifTable_interface.h
+ create mode 100644 src/snmp/dessertSysifTable_oids.h
+ create mode 100644 src/snmp/dessertSysifTable_subagent.c
+ delete mode 100644 utlist.h
+
+Index: libdessert0.86-0.86.14/AUTHORS
+===================================================================
+--- libdessert0.86-0.86.14.orig/AUTHORS 2009-11-26 18:56:56.000000000 +0100
++++ libdessert0.86-0.86.14/AUTHORS 2009-12-09 16:38:27.215595120 +0100
+@@ -15,6 +15,8 @@
+ Wladimir Degtjarew <degtjare@inf.fu-berlin.de>
+ Sebastian Hofmann <shof@inf.fu-berlin.de>
+
++Autotools:
++ Henning Heinold <heinold@inf.fu-berlin.de>
+
+ DES-SERT is under development at Freie Universitaet Berlin, Germany
+ Distributed, Embedded Systems (DES) research group, Prof Mesut Guenes
+Index: libdessert0.86-0.86.14/COPYING
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/COPYING 2009-12-09 16:38:27.215595120 +0100
+@@ -0,0 +1,674 @@
++ GNU GENERAL PUBLIC LICENSE
++ Version 3, 29 June 2007
++
++ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
++ Everyone is permitted to copy and distribute verbatim copies
++ of this license document, but changing it is not allowed.
++
++ Preamble
++
++ The GNU General Public License is a free, copyleft license for
++software and other kinds of works.
++
++ The licenses for most software and other practical works are designed
++to take away your freedom to share and change the works. By contrast,
++the GNU General Public License is intended to guarantee your freedom to
++share and change all versions of a program--to make sure it remains free
++software for all its users. We, the Free Software Foundation, use the
++GNU General Public License for most of our software; it applies also to
++any other work released this way by its authors. You can apply it to
++your programs, too.
++
++ When we speak of free software, we are referring to freedom, not
++price. Our General Public Licenses are designed to make sure that you
++have the freedom to distribute copies of free software (and charge for
++them if you wish), that you receive source code or can get it if you
++want it, that you can change the software or use pieces of it in new
++free programs, and that you know you can do these things.
++
++ To protect your rights, we need to prevent others from denying you
++these rights or asking you to surrender the rights. Therefore, you have
++certain responsibilities if you distribute copies of the software, or if
++you modify it: responsibilities to respect the freedom of others.
++
++ For example, if you distribute copies of such a program, whether
++gratis or for a fee, you must pass on to the recipients the same
++freedoms that you received. You must make sure that they, too, receive
++or can get the source code. And you must show them these terms so they
++know their rights.
++
++ Developers that use the GNU GPL protect your rights with two steps:
++(1) assert copyright on the software, and (2) offer you this License
++giving you legal permission to copy, distribute and/or modify it.
++
++ For the developers' and authors' protection, the GPL clearly explains
++that there is no warranty for this free software. For both users' and
++authors' sake, the GPL requires that modified versions be marked as
++changed, so that their problems will not be attributed erroneously to
++authors of previous versions.
++
++ Some devices are designed to deny users access to install or run
++modified versions of the software inside them, although the manufacturer
++can do so. This is fundamentally incompatible with the aim of
++protecting users' freedom to change the software. The systematic
++pattern of such abuse occurs in the area of products for individuals to
++use, which is precisely where it is most unacceptable. Therefore, we
++have designed this version of the GPL to prohibit the practice for those
++products. If such problems arise substantially in other domains, we
++stand ready to extend this provision to those domains in future versions
++of the GPL, as needed to protect the freedom of users.
++
++ Finally, every program is threatened constantly by software patents.
++States should not allow patents to restrict development and use of
++software on general-purpose computers, but in those that do, we wish to
++avoid the special danger that patents applied to a free program could
++make it effectively proprietary. To prevent this, the GPL assures that
++patents cannot be used to render the program non-free.
++
++ The precise terms and conditions for copying, distribution and
++modification follow.
++
++ TERMS AND CONDITIONS
++
++ 0. Definitions.
++
++ "This License" refers to version 3 of the GNU General Public License.
++
++ "Copyright" also means copyright-like laws that apply to other kinds of
++works, such as semiconductor masks.
++
++ "The Program" refers to any copyrightable work licensed under this
++License. Each licensee is addressed as "you". "Licensees" and
++"recipients" may be individuals or organizations.
++
++ To "modify" a work means to copy from or adapt all or part of the work
++in a fashion requiring copyright permission, other than the making of an
++exact copy. The resulting work is called a "modified version" of the
++earlier work or a work "based on" the earlier work.
++
++ A "covered work" means either the unmodified Program or a work based
++on the Program.
++
++ To "propagate" a work means to do anything with it that, without
++permission, would make you directly or secondarily liable for
++infringement under applicable copyright law, except executing it on a
++computer or modifying a private copy. Propagation includes copying,
++distribution (with or without modification), making available to the
++public, and in some countries other activities as well.
++
++ To "convey" a work means any kind of propagation that enables other
++parties to make or receive copies. Mere interaction with a user through
++a computer network, with no transfer of a copy, is not conveying.
++
++ An interactive user interface displays "Appropriate Legal Notices"
++to the extent that it includes a convenient and prominently visible
++feature that (1) displays an appropriate copyright notice, and (2)
++tells the user that there is no warranty for the work (except to the
++extent that warranties are provided), that licensees may convey the
++work under this License, and how to view a copy of this License. If
++the interface presents a list of user commands or options, such as a
++menu, a prominent item in the list meets this criterion.
++
++ 1. Source Code.
++
++ The "source code" for a work means the preferred form of the work
++for making modifications to it. "Object code" means any non-source
++form of a work.
++
++ A "Standard Interface" means an interface that either is an official
++standard defined by a recognized standards body, or, in the case of
++interfaces specified for a particular programming language, one that
++is widely used among developers working in that language.
++
++ The "System Libraries" of an executable work include anything, other
++than the work as a whole, that (a) is included in the normal form of
++packaging a Major Component, but which is not part of that Major
++Component, and (b) serves only to enable use of the work with that
++Major Component, or to implement a Standard Interface for which an
++implementation is available to the public in source code form. A
++"Major Component", in this context, means a major essential component
++(kernel, window system, and so on) of the specific operating system
++(if any) on which the executable work runs, or a compiler used to
++produce the work, or an object code interpreter used to run it.
++
++ The "Corresponding Source" for a work in object code form means all
++the source code needed to generate, install, and (for an executable
++work) run the object code and to modify the work, including scripts to
++control those activities. However, it does not include the work's
++System Libraries, or general-purpose tools or generally available free
++programs which are used unmodified in performing those activities but
++which are not part of the work. For example, Corresponding Source
++includes interface definition files associated with source files for
++the work, and the source code for shared libraries and dynamically
++linked subprograms that the work is specifically designed to require,
++such as by intimate data communication or control flow between those
++subprograms and other parts of the work.
++
++ The Corresponding Source need not include anything that users
++can regenerate automatically from other parts of the Corresponding
++Source.
++
++ The Corresponding Source for a work in source code form is that
++same work.
++
++ 2. Basic Permissions.
++
++ All rights granted under this License are granted for the term of
++copyright on the Program, and are irrevocable provided the stated
++conditions are met. This License explicitly affirms your unlimited
++permission to run the unmodified Program. The output from running a
++covered work is covered by this License only if the output, given its
++content, constitutes a covered work. This License acknowledges your
++rights of fair use or other equivalent, as provided by copyright law.
++
++ You may make, run and propagate covered works that you do not
++convey, without conditions so long as your license otherwise remains
++in force. You may convey covered works to others for the sole purpose
++of having them make modifications exclusively for you, or provide you
++with facilities for running those works, provided that you comply with
++the terms of this License in conveying all material for which you do
++not control copyright. Those thus making or running the covered works
++for you must do so exclusively on your behalf, under your direction
++and control, on terms that prohibit them from making any copies of
++your copyrighted material outside their relationship with you.
++
++ Conveying under any other circumstances is permitted solely under
++the conditions stated below. Sublicensing is not allowed; section 10
++makes it unnecessary.
++
++ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
++
++ No covered work shall be deemed part of an effective technological
++measure under any applicable law fulfilling obligations under article
++11 of the WIPO copyright treaty adopted on 20 December 1996, or
++similar laws prohibiting or restricting circumvention of such
++measures.
++
++ When you convey a covered work, you waive any legal power to forbid
++circumvention of technological measures to the extent such circumvention
++is effected by exercising rights under this License with respect to
++the covered work, and you disclaim any intention to limit operation or
++modification of the work as a means of enforcing, against the work's
++users, your or third parties' legal rights to forbid circumvention of
++technological measures.
++
++ 4. Conveying Verbatim Copies.
++
++ You may convey verbatim copies of the Program's source code as you
++receive it, in any medium, provided that you conspicuously and
++appropriately publish on each copy an appropriate copyright notice;
++keep intact all notices stating that this License and any
++non-permissive terms added in accord with section 7 apply to the code;
++keep intact all notices of the absence of any warranty; and give all
++recipients a copy of this License along with the Program.
++
++ You may charge any price or no price for each copy that you convey,
++and you may offer support or warranty protection for a fee.
++
++ 5. Conveying Modified Source Versions.
++
++ You may convey a work based on the Program, or the modifications to
++produce it from the Program, in the form of source code under the
++terms of section 4, provided that you also meet all of these conditions:
++
++ a) The work must carry prominent notices stating that you modified
++ it, and giving a relevant date.
++
++ b) The work must carry prominent notices stating that it is
++ released under this License and any conditions added under section
++ 7. This requirement modifies the requirement in section 4 to
++ "keep intact all notices".
++
++ c) You must license the entire work, as a whole, under this
++ License to anyone who comes into possession of a copy. This
++ License will therefore apply, along with any applicable section 7
++ additional terms, to the whole of the work, and all its parts,
++ regardless of how they are packaged. This License gives no
++ permission to license the work in any other way, but it does not
++ invalidate such permission if you have separately received it.
++
++ d) If the work has interactive user interfaces, each must display
++ Appropriate Legal Notices; however, if the Program has interactive
++ interfaces that do not display Appropriate Legal Notices, your
++ work need not make them do so.
++
++ A compilation of a covered work with other separate and independent
++works, which are not by their nature extensions of the covered work,
++and which are not combined with it such as to form a larger program,
++in or on a volume of a storage or distribution medium, is called an
++"aggregate" if the compilation and its resulting copyright are not
++used to limit the access or legal rights of the compilation's users
++beyond what the individual works permit. Inclusion of a covered work
++in an aggregate does not cause this License to apply to the other
++parts of the aggregate.
++
++ 6. Conveying Non-Source Forms.
++
++ You may convey a covered work in object code form under the terms
++of sections 4 and 5, provided that you also convey the
++machine-readable Corresponding Source under the terms of this License,
++in one of these ways:
++
++ a) Convey the object code in, or embodied in, a physical product
++ (including a physical distribution medium), accompanied by the
++ Corresponding Source fixed on a durable physical medium
++ customarily used for software interchange.
++
++ b) Convey the object code in, or embodied in, a physical product
++ (including a physical distribution medium), accompanied by a
++ written offer, valid for at least three years and valid for as
++ long as you offer spare parts or customer support for that product
++ model, to give anyone who possesses the object code either (1) a
++ copy of the Corresponding Source for all the software in the
++ product that is covered by this License, on a durable physical
++ medium customarily used for software interchange, for a price no
++ more than your reasonable cost of physically performing this
++ conveying of source, or (2) access to copy the
++ Corresponding Source from a network server at no charge.
++
++ c) Convey individual copies of the object code with a copy of the
++ written offer to provide the Corresponding Source. This
++ alternative is allowed only occasionally and noncommercially, and
++ only if you received the object code with such an offer, in accord
++ with subsection 6b.
++
++ d) Convey the object code by offering access from a designated
++ place (gratis or for a charge), and offer equivalent access to the
++ Corresponding Source in the same way through the same place at no
++ further charge. You need not require recipients to copy the
++ Corresponding Source along with the object code. If the place to
++ copy the object code is a network server, the Corresponding Source
++ may be on a different server (operated by you or a third party)
++ that supports equivalent copying facilities, provided you maintain
++ clear directions next to the object code saying where to find the
++ Corresponding Source. Regardless of what server hosts the
++ Corresponding Source, you remain obligated to ensure that it is
++ available for as long as needed to satisfy these requirements.
++
++ e) Convey the object code using peer-to-peer transmission, provided
++ you inform other peers where the object code and Corresponding
++ Source of the work are being offered to the general public at no
++ charge under subsection 6d.
++
++ A separable portion of the object code, whose source code is excluded
++from the Corresponding Source as a System Library, need not be
++included in conveying the object code work.
++
++ A "User Product" is either (1) a "consumer product", which means any
++tangible personal property which is normally used for personal, family,
++or household purposes, or (2) anything designed or sold for incorporation
++into a dwelling. In determining whether a product is a consumer product,
++doubtful cases shall be resolved in favor of coverage. For a particular
++product received by a particular user, "normally used" refers to a
++typical or common use of that class of product, regardless of the status
++of the particular user or of the way in which the particular user
++actually uses, or expects or is expected to use, the product. A product
++is a consumer product regardless of whether the product has substantial
++commercial, industrial or non-consumer uses, unless such uses represent
++the only significant mode of use of the product.
++
++ "Installation Information" for a User Product means any methods,
++procedures, authorization keys, or other information required to install
++and execute modified versions of a covered work in that User Product from
++a modified version of its Corresponding Source. The information must
++suffice to ensure that the continued functioning of the modified object
++code is in no case prevented or interfered with solely because
++modification has been made.
++
++ If you convey an object code work under this section in, or with, or
++specifically for use in, a User Product, and the conveying occurs as
++part of a transaction in which the right of possession and use of the
++User Product is transferred to the recipient in perpetuity or for a
++fixed term (regardless of how the transaction is characterized), the
++Corresponding Source conveyed under this section must be accompanied
++by the Installation Information. But this requirement does not apply
++if neither you nor any third party retains the ability to install
++modified object code on the User Product (for example, the work has
++been installed in ROM).
++
++ The requirement to provide Installation Information does not include a
++requirement to continue to provide support service, warranty, or updates
++for a work that has been modified or installed by the recipient, or for
++the User Product in which it has been modified or installed. Access to a
++network may be denied when the modification itself materially and
++adversely affects the operation of the network or violates the rules and
++protocols for communication across the network.
++
++ Corresponding Source conveyed, and Installation Information provided,
++in accord with this section must be in a format that is publicly
++documented (and with an implementation available to the public in
++source code form), and must require no special password or key for
++unpacking, reading or copying.
++
++ 7. Additional Terms.
++
++ "Additional permissions" are terms that supplement the terms of this
++License by making exceptions from one or more of its conditions.
++Additional permissions that are applicable to the entire Program shall
++be treated as though they were included in this License, to the extent
++that they are valid under applicable law. If additional permissions
++apply only to part of the Program, that part may be used separately
++under those permissions, but the entire Program remains governed by
++this License without regard to the additional permissions.
++
++ When you convey a copy of a covered work, you may at your option
++remove any additional permissions from that copy, or from any part of
++it. (Additional permissions may be written to require their own
++removal in certain cases when you modify the work.) You may place
++additional permissions on material, added by you to a covered work,
++for which you have or can give appropriate copyright permission.
++
++ Notwithstanding any other provision of this License, for material you
++add to a covered work, you may (if authorized by the copyright holders of
++that material) supplement the terms of this License with terms:
++
++ a) Disclaiming warranty or limiting liability differently from the
++ terms of sections 15 and 16 of this License; or
++
++ b) Requiring preservation of specified reasonable legal notices or
++ author attributions in that material or in the Appropriate Legal
++ Notices displayed by works containing it; or
++
++ c) Prohibiting misrepresentation of the origin of that material, or
++ requiring that modified versions of such material be marked in
++ reasonable ways as different from the original version; or
++
++ d) Limiting the use for publicity purposes of names of licensors or
++ authors of the material; or
++
++ e) Declining to grant rights under trademark law for use of some
++ trade names, trademarks, or service marks; or
++
++ f) Requiring indemnification of licensors and authors of that
++ material by anyone who conveys the material (or modified versions of
++ it) with contractual assumptions of liability to the recipient, for
++ any liability that these contractual assumptions directly impose on
++ those licensors and authors.
++
++ All other non-permissive additional terms are considered "further
++restrictions" within the meaning of section 10. If the Program as you
++received it, or any part of it, contains a notice stating that it is
++governed by this License along with a term that is a further
++restriction, you may remove that term. If a license document contains
++a further restriction but permits relicensing or conveying under this
++License, you may add to a covered work material governed by the terms
++of that license document, provided that the further restriction does
++not survive such relicensing or conveying.
++
++ If you add terms to a covered work in accord with this section, you
++must place, in the relevant source files, a statement of the
++additional terms that apply to those files, or a notice indicating
++where to find the applicable terms.
++
++ Additional terms, permissive or non-permissive, may be stated in the
++form of a separately written license, or stated as exceptions;
++the above requirements apply either way.
++
++ 8. Termination.
++
++ You may not propagate or modify a covered work except as expressly
++provided under this License. Any attempt otherwise to propagate or
++modify it is void, and will automatically terminate your rights under
++this License (including any patent licenses granted under the third
++paragraph of section 11).
++
++ However, if you cease all violation of this License, then your
++license from a particular copyright holder is reinstated (a)
++provisionally, unless and until the copyright holder explicitly and
++finally terminates your license, and (b) permanently, if the copyright
++holder fails to notify you of the violation by some reasonable means
++prior to 60 days after the cessation.
++
++ Moreover, your license from a particular copyright holder is
++reinstated permanently if the copyright holder notifies you of the
++violation by some reasonable means, this is the first time you have
++received notice of violation of this License (for any work) from that
++copyright holder, and you cure the violation prior to 30 days after
++your receipt of the notice.
++
++ Termination of your rights under this section does not terminate the
++licenses of parties who have received copies or rights from you under
++this License. If your rights have been terminated and not permanently
++reinstated, you do not qualify to receive new licenses for the same
++material under section 10.
++
++ 9. Acceptance Not Required for Having Copies.
++
++ You are not required to accept this License in order to receive or
++run a copy of the Program. Ancillary propagation of a covered work
++occurring solely as a consequence of using peer-to-peer transmission
++to receive a copy likewise does not require acceptance. However,
++nothing other than this License grants you permission to propagate or
++modify any covered work. These actions infringe copyright if you do
++not accept this License. Therefore, by modifying or propagating a
++covered work, you indicate your acceptance of this License to do so.
++
++ 10. Automatic Licensing of Downstream Recipients.
++
++ Each time you convey a covered work, the recipient automatically
++receives a license from the original licensors, to run, modify and
++propagate that work, subject to this License. You are not responsible
++for enforcing compliance by third parties with this License.
++
++ An "entity transaction" is a transaction transferring control of an
++organization, or substantially all assets of one, or subdividing an
++organization, or merging organizations. If propagation of a covered
++work results from an entity transaction, each party to that
++transaction who receives a copy of the work also receives whatever
++licenses to the work the party's predecessor in interest had or could
++give under the previous paragraph, plus a right to possession of the
++Corresponding Source of the work from the predecessor in interest, if
++the predecessor has it or can get it with reasonable efforts.
++
++ You may not impose any further restrictions on the exercise of the
++rights granted or affirmed under this License. For example, you may
++not impose a license fee, royalty, or other charge for exercise of
++rights granted under this License, and you may not initiate litigation
++(including a cross-claim or counterclaim in a lawsuit) alleging that
++any patent claim is infringed by making, using, selling, offering for
++sale, or importing the Program or any portion of it.
++
++ 11. Patents.
++
++ A "contributor" is a copyright holder who authorizes use under this
++License of the Program or a work on which the Program is based. The
++work thus licensed is called the contributor's "contributor version".
++
++ A contributor's "essential patent claims" are all patent claims
++owned or controlled by the contributor, whether already acquired or
++hereafter acquired, that would be infringed by some manner, permitted
++by this License, of making, using, or selling its contributor version,
++but do not include claims that would be infringed only as a
++consequence of further modification of the contributor version. For
++purposes of this definition, "control" includes the right to grant
++patent sublicenses in a manner consistent with the requirements of
++this License.
++
++ Each contributor grants you a non-exclusive, worldwide, royalty-free
++patent license under the contributor's essential patent claims, to
++make, use, sell, offer for sale, import and otherwise run, modify and
++propagate the contents of its contributor version.
++
++ In the following three paragraphs, a "patent license" is any express
++agreement or commitment, however denominated, not to enforce a patent
++(such as an express permission to practice a patent or covenant not to
++sue for patent infringement). To "grant" such a patent license to a
++party means to make such an agreement or commitment not to enforce a
++patent against the party.
++
++ If you convey a covered work, knowingly relying on a patent license,
++and the Corresponding Source of the work is not available for anyone
++to copy, free of charge and under the terms of this License, through a
++publicly available network server or other readily accessible means,
++then you must either (1) cause the Corresponding Source to be so
++available, or (2) arrange to deprive yourself of the benefit of the
++patent license for this particular work, or (3) arrange, in a manner
++consistent with the requirements of this License, to extend the patent
++license to downstream recipients. "Knowingly relying" means you have
++actual knowledge that, but for the patent license, your conveying the
++covered work in a country, or your recipient's use of the covered work
++in a country, would infringe one or more identifiable patents in that
++country that you have reason to believe are valid.
++
++ If, pursuant to or in connection with a single transaction or
++arrangement, you convey, or propagate by procuring conveyance of, a
++covered work, and grant a patent license to some of the parties
++receiving the covered work authorizing them to use, propagate, modify
++or convey a specific copy of the covered work, then the patent license
++you grant is automatically extended to all recipients of the covered
++work and works based on it.
++
++ A patent license is "discriminatory" if it does not include within
++the scope of its coverage, prohibits the exercise of, or is
++conditioned on the non-exercise of one or more of the rights that are
++specifically granted under this License. You may not convey a covered
++work if you are a party to an arrangement with a third party that is
++in the business of distributing software, under which you make payment
++to the third party based on the extent of your activity of conveying
++the work, and under which the third party grants, to any of the
++parties who would receive the covered work from you, a discriminatory
++patent license (a) in connection with copies of the covered work
++conveyed by you (or copies made from those copies), or (b) primarily
++for and in connection with specific products or compilations that
++contain the covered work, unless you entered into that arrangement,
++or that patent license was granted, prior to 28 March 2007.
++
++ Nothing in this License shall be construed as excluding or limiting
++any implied license or other defenses to infringement that may
++otherwise be available to you under applicable patent law.
++
++ 12. No Surrender of Others' Freedom.
++
++ If conditions are imposed on you (whether by court order, agreement or
++otherwise) that contradict the conditions of this License, they do not
++excuse you from the conditions of this License. If you cannot convey a
++covered work so as to satisfy simultaneously your obligations under this
++License and any other pertinent obligations, then as a consequence you may
++not convey it at all. For example, if you agree to terms that obligate you
++to collect a royalty for further conveying from those to whom you convey
++the Program, the only way you could satisfy both those terms and this
++License would be to refrain entirely from conveying the Program.
++
++ 13. Use with the GNU Affero General Public License.
++
++ Notwithstanding any other provision of this License, you have
++permission to link or combine any covered work with a work licensed
++under version 3 of the GNU Affero General Public License into a single
++combined work, and to convey the resulting work. The terms of this
++License will continue to apply to the part which is the covered work,
++but the special requirements of the GNU Affero General Public License,
++section 13, concerning interaction through a network will apply to the
++combination as such.
++
++ 14. Revised Versions of this License.
++
++ The Free Software Foundation may publish revised and/or new versions of
++the GNU General Public License from time to time. Such new versions will
++be similar in spirit to the present version, but may differ in detail to
++address new problems or concerns.
++
++ Each version is given a distinguishing version number. If the
++Program specifies that a certain numbered version of the GNU General
++Public License "or any later version" applies to it, you have the
++option of following the terms and conditions either of that numbered
++version or of any later version published by the Free Software
++Foundation. If the Program does not specify a version number of the
++GNU General Public License, you may choose any version ever published
++by the Free Software Foundation.
++
++ If the Program specifies that a proxy can decide which future
++versions of the GNU General Public License can be used, that proxy's
++public statement of acceptance of a version permanently authorizes you
++to choose that version for the Program.
++
++ Later license versions may give you additional or different
++permissions. However, no additional obligations are imposed on any
++author or copyright holder as a result of your choosing to follow a
++later version.
++
++ 15. Disclaimer of Warranty.
++
++ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
++APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
++HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
++OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
++THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
++PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
++IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
++ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
++
++ 16. Limitation of Liability.
++
++ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
++WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
++THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
++GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
++USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
++DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
++PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
++EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
++SUCH DAMAGES.
++
++ 17. Interpretation of Sections 15 and 16.
++
++ If the disclaimer of warranty and limitation of liability provided
++above cannot be given local legal effect according to their terms,
++reviewing courts shall apply local law that most closely approximates
++an absolute waiver of all civil liability in connection with the
++Program, unless a warranty or assumption of liability accompanies a
++copy of the Program in return for a fee.
++
++ END OF TERMS AND CONDITIONS
++
++ How to Apply These Terms to Your New Programs
++
++ If you develop a new program, and you want it to be of the greatest
++possible use to the public, the best way to achieve this is to make it
++free software which everyone can redistribute and change under these terms.
++
++ To do so, attach the following notices to the program. It is safest
++to attach them to the start of each source file to most effectively
++state the exclusion of warranty; and each file should have at least
++the "copyright" line and a pointer to where the full notice is found.
++
++ <one line to give the program's name and a brief idea of what it does.>
++ Copyright (C) <year> <name of author>
++
++ This program is free software: you can redistribute it and/or modify
++ it under the terms of the GNU General Public License as published by
++ the Free Software Foundation, either version 3 of the License, or
++ (at your option) any later version.
++
++ This program is distributed in the hope that it will be useful,
++ but WITHOUT ANY WARRANTY; without even the implied warranty of
++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License
++ along with this program. If not, see <http://www.gnu.org/licenses/>.
++
++Also add information on how to contact you by electronic and paper mail.
++
++ If the program does terminal interaction, make it output a short
++notice like this when it starts in an interactive mode:
++
++ <program> Copyright (C) <year> <name of author>
++ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
++ This is free software, and you are welcome to redistribute it
++ under certain conditions; type `show c' for details.
++
++The hypothetical commands `show w' and `show c' should show the appropriate
++parts of the General Public License. Of course, your program's commands
++might be different; for a GUI interface, you would use an "about box".
++
++ You should also get your employer (if you work as a programmer) or school,
++if any, to sign a "copyright disclaimer" for the program, if necessary.
++For more information on this, and how to apply and follow the GNU GPL, see
++<http://www.gnu.org/licenses/>.
++
++ The GNU General Public License does not permit incorporating your program
++into proprietary programs. If your program is a subroutine library, you
++may consider it more useful to permit linking proprietary applications with
++the library. If this is what you want to do, use the GNU Lesser General
++Public License instead of this License. But first, please read
++<http://www.gnu.org/philosophy/why-not-lgpl.html>.
+Index: libdessert0.86-0.86.14/ChangeLog
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/ChangeLog 2009-12-09 16:38:27.215595120 +0100
+@@ -0,0 +1,7 @@
++20091126 - 0.86.13
++ - The sysrxpipeline now properly destroys the passed message on DESSERT_MSG_DROP.
++ Developers, make sure to NOT destroy the msg by yourselves anymore!
++
++20091126 - 0.86.12
++ - Added int dessert_msg_getpayload(dessert_msg_t *msg, void **payload) to
++ retrieve the length of the payload and a pointer to the payload, if any.
+\ No newline at end of file
+Index: libdessert0.86-0.86.14/DES-SERT.doxyfile
+===================================================================
+--- libdessert0.86-0.86.14.orig/DES-SERT.doxyfile 2009-11-26 18:56:56.000000000 +0100
++++ libdessert0.86-0.86.14/DES-SERT.doxyfile 2009-12-09 16:38:27.215595120 +0100
+@@ -568,7 +568,7 @@
+ # directories like "/usr/src/myproject". Separate the files or directories
+ # with spaces.
+
+-INPUT = .
++INPUT = include/dessert src/libdessert
+
+ # This tag can be used to specify the character encoding of the source files
+ # that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
+Index: libdessert0.86-0.86.14/INSTALL
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/INSTALL 2009-12-09 16:38:27.215595120 +0100
+@@ -0,0 +1,302 @@
++Installation Instructions
++*************************
++
++Copyright (C) 1994, 1995, 1996, 1999, 2000, 2001, 2002, 2004, 2005,
++2006, 2007, 2008, 2009 Free Software Foundation, Inc.
++
++ This file is free documentation; the Free Software Foundation gives
++unlimited permission to copy, distribute and modify it.
++
++Basic Installation
++==================
++
++ Briefly, the shell commands `./configure; make; make install' should
++configure, build, and install this package. The following
++more-detailed instructions are generic; see the `README' file for
++instructions specific to this package.
++
++ The `configure' shell script attempts to guess correct values for
++various system-dependent variables used during compilation. It uses
++those values to create a `Makefile' in each directory of the package.
++It may also create one or more `.h' files containing system-dependent
++definitions. Finally, it creates a shell script `config.status' that
++you can run in the future to recreate the current configuration, and a
++file `config.log' containing compiler output (useful mainly for
++debugging `configure').
++
++ It can also use an optional file (typically called `config.cache'
++and enabled with `--cache-file=config.cache' or simply `-C') that saves
++the results of its tests to speed up reconfiguring. Caching is
++disabled by default to prevent problems with accidental use of stale
++cache files.
++
++ If you need to do unusual things to compile the package, please try
++to figure out how `configure' could check whether to do them, and mail
++diffs or instructions to the address given in the `README' so they can
++be considered for the next release. If you are using the cache, and at
++some point `config.cache' contains results you don't want to keep, you
++may remove or edit it.
++
++ The file `configure.ac' (or `configure.in') is used to create
++`configure' by a program called `autoconf'. You need `configure.ac' if
++you want to change it or regenerate `configure' using a newer version
++of `autoconf'.
++
++The simplest way to compile this package is:
++
++ 1. `cd' to the directory containing the package's source code and type
++ `./configure' to configure the package for your system.
++
++ Running `configure' might take a while. While running, it prints
++ some messages telling which features it is checking for.
++
++ 2. Type `make' to compile the package.
++
++ 3. Optionally, type `make check' to run any self-tests that come with
++ the package.
++
++ 4. Type `make install' to install the programs and any data files and
++ documentation.
++
++ 5. You can remove the program binaries and object files from the
++ source code directory by typing `make clean'. To also remove the
++ files that `configure' created (so you can compile the package for
++ a different kind of computer), type `make distclean'. There is
++ also a `make maintainer-clean' target, but that is intended mainly
++ for the package's developers. If you use it, you may have to get
++ all sorts of other programs in order to regenerate files that came
++ with the distribution.
++
++ 6. Often, you can also type `make uninstall' to remove the installed
++ files again.
++
++Compilers and Options
++=====================
++
++ Some systems require unusual options for compilation or linking that
++the `configure' script does not know about. Run `./configure --help'
++for details on some of the pertinent environment variables.
++
++ You can give `configure' initial values for configuration parameters
++by setting variables in the command line or in the environment. Here
++is an example:
++
++ ./configure CC=c99 CFLAGS=-g LIBS=-lposix
++
++ *Note Defining Variables::, for more details.
++
++Compiling For Multiple Architectures
++====================================
++
++ You can compile the package for more than one kind of computer at the
++same time, by placing the object files for each architecture in their
++own directory. To do this, you can use GNU `make'. `cd' to the
++directory where you want the object files and executables to go and run
++the `configure' script. `configure' automatically checks for the
++source code in the directory that `configure' is in and in `..'.
++
++ With a non-GNU `make', it is safer to compile the package for one
++architecture at a time in the source code directory. After you have
++installed the package for one architecture, use `make distclean' before
++reconfiguring for another architecture.
++
++ On MacOS X 10.5 and later systems, you can create libraries and
++executables that work on multiple system types--known as "fat" or
++"universal" binaries--by specifying multiple `-arch' options to the
++compiler but only a single `-arch' option to the preprocessor. Like
++this:
++
++ ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
++ CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
++ CPP="gcc -E" CXXCPP="g++ -E"
++
++ This is not guaranteed to produce working output in all cases, you
++may have to build one architecture at a time and combine the results
++using the `lipo' tool if you have problems.
++
++Installation Names
++==================
++
++ By default, `make install' installs the package's commands under
++`/usr/local/bin', include files under `/usr/local/include', etc. You
++can specify an installation prefix other than `/usr/local' by giving
++`configure' the option `--prefix=PREFIX'.
++
++ You can specify separate installation prefixes for
++architecture-specific files and architecture-independent files. If you
++pass the option `--exec-prefix=PREFIX' to `configure', the package uses
++PREFIX as the prefix for installing programs and libraries.
++Documentation and other data files still use the regular prefix.
++
++ In addition, if you use an unusual directory layout you can give
++options like `--bindir=DIR' to specify different values for particular
++kinds of files. Run `configure --help' for a list of the directories
++you can set and what kinds of files go in them.
++
++ If the package supports it, you can cause programs to be installed
++with an extra prefix or suffix on their names by giving `configure' the
++option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
++
++Optional Features
++=================
++
++ Some packages pay attention to `--enable-FEATURE' options to
++`configure', where FEATURE indicates an optional part of the package.
++They may also pay attention to `--with-PACKAGE' options, where PACKAGE
++is something like `gnu-as' or `x' (for the X Window System). The
++`README' should mention any `--enable-' and `--with-' options that the
++package recognizes.
++
++ For packages that use the X Window System, `configure' can usually
++find the X include and library files automatically, but if it doesn't,
++you can use the `configure' options `--x-includes=DIR' and
++`--x-libraries=DIR' to specify their locations.
++
++Particular systems
++==================
++
++ On HP-UX, the default C compiler is not ANSI C compatible. If GNU
++CC is not installed, it is recommended to use the following options in
++order to use an ANSI C compiler:
++
++ ./configure CC="cc -Ae -D_XOPEN_SOURCE=500"
++
++and if that doesn't work, install pre-built binaries of GCC for HP-UX.
++
++ On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot
++parse its `<wchar.h>' header file. The option `-nodtk' can be used as
++a workaround. If GNU CC is not installed, it is therefore recommended
++to try
++
++ ./configure CC="cc"
++
++and if that doesn't work, try
++
++ ./configure CC="cc -nodtk"
++
++ On Solaris, don't put `/usr/ucb' early in your `PATH'. This
++directory contains several dysfunctional programs; working variants of
++these programs are available in `/usr/bin'. So, if you need `/usr/ucb'
++in your `PATH', put it _after_ `/usr/bin'.
++
++ On Haiku, software installed for all users goes in `/boot/common',
++not `/usr/local'. It is recommended to use the following options:
++
++ ./configure --prefix=/boot/common
++
++Specifying the System Type
++==========================
++
++ There may be some features `configure' cannot figure out
++automatically, but needs to determine by the type of machine the package
++will run on. Usually, assuming the package is built to be run on the
++_same_ architectures, `configure' can figure that out, but if it prints
++a message saying it cannot guess the machine type, give it the
++`--build=TYPE' option. TYPE can either be a short name for the system
++type, such as `sun4', or a canonical name which has the form:
++
++ CPU-COMPANY-SYSTEM
++
++where SYSTEM can have one of these forms:
++
++ OS
++ KERNEL-OS
++
++ See the file `config.sub' for the possible values of each field. If
++`config.sub' isn't included in this package, then this package doesn't
++need to know the machine type.
++
++ If you are _building_ compiler tools for cross-compiling, you should
++use the option `--target=TYPE' to select the type of system they will
++produce code for.
++
++ If you want to _use_ a cross compiler, that generates code for a
++platform different from the build platform, you should specify the
++"host" platform (i.e., that on which the generated programs will
++eventually be run) with `--host=TYPE'.
++
++Sharing Defaults
++================
++
++ If you want to set default values for `configure' scripts to share,
++you can create a site shell script called `config.site' that gives
++default values for variables like `CC', `cache_file', and `prefix'.
++`configure' looks for `PREFIX/share/config.site' if it exists, then
++`PREFIX/etc/config.site' if it exists. Or, you can set the
++`CONFIG_SITE' environment variable to the location of the site script.
++A warning: not all `configure' scripts look for a site script.
++
++Defining Variables
++==================
++
++ Variables not defined in a site shell script can be set in the
++environment passed to `configure'. However, some packages may run
++configure again during the build, and the customized values of these
++variables may be lost. In order to avoid this problem, you should set
++them in the `configure' command line, using `VAR=value'. For example:
++
++ ./configure CC=/usr/local2/bin/gcc
++
++causes the specified `gcc' to be used as the C compiler (unless it is
++overridden in the site shell script).
++
++Unfortunately, this technique does not work for `CONFIG_SHELL' due to
++an Autoconf bug. Until the bug is fixed you can use this workaround:
++
++ CONFIG_SHELL=/bin/bash /bin/bash ./configure CONFIG_SHELL=/bin/bash
++
++`configure' Invocation
++======================
++
++ `configure' recognizes the following options to control how it
++operates.
++
++`--help'
++`-h'
++ Print a summary of all of the options to `configure', and exit.
++
++`--help=short'
++`--help=recursive'
++ Print a summary of the options unique to this package's
++ `configure', and exit. The `short' variant lists options used
++ only in the top level, while the `recursive' variant lists options
++ also present in any nested packages.
++
++`--version'
++`-V'
++ Print the version of Autoconf used to generate the `configure'
++ script, and exit.
++
++`--cache-file=FILE'
++ Enable the cache: use and save the results of the tests in FILE,
++ traditionally `config.cache'. FILE defaults to `/dev/null' to
++ disable caching.
++
++`--config-cache'
++`-C'
++ Alias for `--cache-file=config.cache'.
++
++`--quiet'
++`--silent'
++`-q'
++ Do not print messages saying which checks are being made. To
++ suppress all normal output, redirect it to `/dev/null' (any error
++ messages will still be shown).
++
++`--srcdir=DIR'
++ Look for the package's source code in directory DIR. Usually
++ `configure' can determine that directory automatically.
++
++`--prefix=DIR'
++ Use DIR as the installation prefix. *Note Installation Names::
++ for more details, including other options available for fine-tuning
++ the installation locations.
++
++`--no-create'
++`-n'
++ Run the configure checks, but stop before creating any output
++ files.
++
++`configure' also accepts some other, not widely useful, options. Run
++`configure --help' for more details.
++
+Index: libdessert0.86-0.86.14/Intro.txt
+===================================================================
+--- libdessert0.86-0.86.14.orig/Intro.txt 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,270 +0,0 @@
+-
+- DES-SERT - an Extensible Routing-Framework for Testbeds
+-
+-
+-Copyright
+-
+- Copyright Philipp Schmidt <phils@inf.fu-berlin.de>,
+- Computer Systems and Telematics / Distributed, Embedded Systems (DES) group,
+- Freie Universitaet Berlin
+-
+- This document has been published under GNU Free Documentation License.
+- All rights reserved.
+-
+-
+-1. Introduction
+-
+- DES-SERT, the DES Simple and Extensible Routing-Framework for Testbeds,
+- is a framework designed to assist researchers implementing routing
+- protocols for testbeds.
+-
+- DES-SERT enables the implementation of routing protocols on top of
+- Ethernet via an underlay (Layer 2.5) in user space.
+- It introduces an abstraction from OS specific issues and provides
+- functionality and data structures to implement proactive, reactive,
+- and hybrid routing protocols.
+-
+- While generally usable in many application scenarios, it is primarily
+- used in DES-Mesh (http://www.des-testbed.net/), the multi-transceiver
+- wireless mesh network testbed part of the DES-Testbed.
+-
+-
+-2. DES-SERT Architecture
+-
+- DES-SERT introduces some concepts to implement routing protocols.
+- When implementing a routing protocol with DES-SERT, you should be
+- familiar with these concepts to structure and tailor your implementation.
+-
+-
+-2.1. messages
+-
+- Every packet you send or receive on the mesh is represented as a
+- DES-SERT message. From a programmers point of view, a DES-SERT message
+- is just a C-structure:
+-
+- typedef struct dessert_msg {
+- /** the layer2 header on the wire */
+- struct ether_header l2h;
+- /** short name of the protocol as passed to dessert_init() */
+- char proto[DESSERT_PROTO_STRLEN];
+- /** version of the app as passed to dessert_init() */
+- uint8_t ver;
+- /** flags - bits 1-4 reserved for dessert, bits 5-8 for app usage */
+- uint8_t flags;
+- /** ttl or hopcount field for app usage - 0xff if not used*/
+- uint8_t ttl;
+- /** reserved for app usage - 0x00 if not used */
+- uint8_t u8;
+- /** reserved for app usage - 0xbeef if not used */
+- uint16_t u16;
+- /** header length incl. extensions */
+- uint16_t hlen;
+- /** payload length */
+- uint16_t plen;
+- } dessert_msg_t;
+-
+- Every message sent via the underlay carries this structure as a packet
+- header. All data in a "dessert_msg" is stored in network byte order.
+- DES-SERT tries to care as automatically as possible of this structure.
+- Nevertheless you will have to care at least about: "l2h.ether_dhost" and
+- "ttl".
+-
+- If you need to send some data along with every packet, e.g. some kind of
+- metric or cost your routing protocol uses, you should try to fit this
+- data into the "u8", "u16" and the upper 4 bits of the "flags" field.
+- These fields will never be touched by DES-SERT except on initialization
+- via "dessert_msg_new".
+-
+- Because just a C-structure is not really usable as a packet, there are some
+- utility functions around - please have a look around in "dessert.h" and the
+- doxygen doku. The most important ones are: "dessert_msg_new" and
+- "dessert_msg_destroy", which do not simply allocate memory for a DES-SERT
+- message, but for a whole packet of maximum size and initialize the
+- structures for further packet construction/processing.
+-
+- int dessert_msg_new(dessert_msg_t **msgout);
+-
+- void dessert_msg_destroy(dessert_msg_t* msg);
+-
+-
+-2.1.2 DES-SERT extensions
+-
+- A DES-SERT extension is some structure used to piggyback data on a
+- DES-SERT message. It consists of a 8-bit user supplied type field (with
+- some reserved values), an 8-bit length field and user supplied data of
+- arbitrary length of 253 bytes at most.
+-
+- It can be added to a message via "dessert_msg_addext", retrieved via
+- "dessert_msg_getext" and removed via "dessert_msg_delext".
+-
+- int dessert_msg_addext(dessert_msg_t* msg,
+- dessert_ext_t** ext, uint8_t type, size_t len);
+-
+- int dessert_msg_getext(const dessert_msg_t* msg,
+- dessert_ext_t** ext, uint8_t type, int index);
+-
+- int dessert_msg_delext(dessert_msg_t *msg, dessert_ext_t *ext);
+-
+- It is recommended not to put single data fields in extensions, but
+- combine semantically related data in a struct and attach this struct
+- as an extension because every extension carried introduces an 16-bit
+- overhead to the packet.
+-
+-
+-2.2. Processing pipelines
+-
+- Routing algorithms are often split up in several parts like packet
+- validation, loop-detection or routing table lookup.
+- To implement these as independent and clear as possible, DES-SERT enables
+- you to split up your packet processing in as many parts as you like.
+-
+- There are two separate processing pipelines - one for packets received
+- from the kernel via a TUN or TAP interface and one for packets received
+- via an interface used on the mesh network.
+-
+- You can register callbacks to be added to one of these pipelines with
+- "dessert_sysrxcb_add" or "dessert_meshrxcb_add". Both take an additional
+- integer argument ("priority") specifying the order the callbacks should
+- be called. Higher "priority" value results in being called later
+- within the pipeline.
+-
+- int dessert_sysrxcb_add(dessert_sysrxcb_t* c, int prio);
+-
+- int dessert_meshrxcb_add(dessert_meshrxcb_t* c, int prio);
+-
+- If a callback returns "DESSERT_MSG_KEEP" the packed will be processed by
+- further callbacks, if it returns "DESSERT_MSG_DROP" the message will be
+- dropped and no further callbacks will be called.
+-
+- You do not need to care about the management of the buffers for incoming
+- messages - DES-SERT does this for you. Nevertheless if you need to add
+- extensions or enlarge the payload of a message, you need to tell DES-SERT
+- to enlarge the buffer for you if the flag "DESSERT_FLAG_SPARSE" is set on
+- the message. You can do this by returning "DESSERT_MSG_NEEDNOSPARSE" from
+- within a callback. The callback will be called again with a larger buffer
+- and no "DESSERT_FLAG_SPARSE" flag being set.
+-
+-
+-2.2.1. Processing buffer
+-
+- If you need to pass information along several callbacks, you can do this
+- in the processing buffer passed to the the callbacks. This buffer contains
+- some local processing flags ("lflags") set by the builtin callback
+- "dessert_msg_ifaceflags_cb" (e.g. telling you about packet origin or if
+- the packet is multicast) and 1KB of space for your callbacks to pass
+- along arbitrary data.
+-
+- This buffer might only be allocated after you explicitly request it - in
+- this case the proc argument is NULL and you can return the value
+- "DESSERT_MSG_NEEDMSGPROC" from within your callback. The callback will
+- be called again with a valid processing buffer.
+-
+-
+-2.3. Using interfaces
+-
+-
+-2.3.1. Using a TUN/TAP interface
+-
+- First you have to choose whether to use a TUN or TAP interface. TUN
+- interfaces are used to exchange IPv4 / IPv6 datagrams with the kernel
+- network stack. TAP interfaces are used to exchange Ethernet frames
+- with the kernel network stack. If you want to route Ethernet frames,
+- you should choose a TAP interface. If you intend to implement
+- a custom layer 2 to layer 3 mapping, you should use a TUN interface.
+-
+- Currently, you can only initialize and use a single sys (TUN/TAP) interface.
+- This is done by "dessert_sysif_init". You must then set up the interface
+- config in the kernel yourself e.g. by calling "ifconfig".
+-
+- int dessert_sysif_init(char* name, uint8_t flags);
+-
+- In either case, frames you receive from a TUN/TAP interface will be
+- passed along the callbacks added by "dessert_sysrxcb_add" to the
+- processing pipeline. Each of them will be called with a pointer to an
+- Ethernet frame. In case of a TUN interface, "ether_shost" and "ether_dhost"
+- are set to "00:00:00:00:00:00", and ether_type reflects whether the packet
+- received is IPv4 oder IPv6.
+-
+- Packets are sent to the kernel network stack with "dessert_syssend".
+- In case of a TUN Interface "ether_shost" and "ether_dhost" will be
+- ignored.
+-
+- int dessert_syssend(const struct ether_header *eth, size_t len);
+-
+-
+-2.3.2. Using a mesh interface
+-
+- Mesh interfaces are used similar to the TUN/TAP interface with two major
+- differences: You can have multiple mesh interfaces and they send and
+- receive DES-SERT messages instead of Ethernet frames.
+-
+- You add an mesh interface using "dessert_meshif_add" and can send to it
+- by calling "dessert_meshsend". If the interface parameter is NULL, the
+- packet will be transmitted over every interface (good for flooding).
+-
+- int dessert_meshif_add(const char* dev, uint8_t flags);
+-
+- int dessert_meshsend(const dessert_msg_t* msg,
+- const dessert_meshif_t *iface);
+-
+-
+-2.4. Logging
+-
+- You can write log messages easily with a bunch of macros provided
+- by DES-SERT ("dessert_debug", "dessert_info" ,"dessert_notice",
+- "dessert_warn", "dessert_warning", "dessert_err", "dessert_crit",
+- "dessert_alert" and "dessert_emerg"). Each of them can be used like
+- "printf" and logs to Syslog, STDERR, file or a ringbuffer depending
+- on your configuration.
+-
+- DES-SERT also ships with a custom "assert" macro which acts like
+- the original macro from the standard C library and uses the logging
+- mechanism described above.
+-
+-
+-2.5. Periodics
+-
+- Periodics help you to perform maintenance or delayed tasks. A task
+- consists of a callback, which will be called at the time you requested,
+- and a void pointer the callback is passed. You can add these tasks by
+- calling "dessert_periodic_add" or "dessert_periodic_add_delayed".
+-
+-
+-2.6. CLI
+-
+- DES-SERT supports simple configuration and debugging of your routing
+- protocol implementation by providing a Cisco like command line interface
+- (cli) and a config file parser based upon it.
+- This cli is realized through libcli (http://code.google.com/p/libcli/).
+-
+- DES-SERT does some of the initialization of libcli. Therefore, it provides
+- the main cli anchor "dessert_cli" and some anchors to add commands below
+- "dessert_cli_.*". Because DES-SERT only loosely wraps libcli, you should
+- make yourself familiar with libcli itself. This may be improved in further
+- DES-SERT releases.
+-
+- You can evaluate a config file by calling "cli_file" and start a thread
+- enabling a telnet-interface for DES-SERT by calling "dessert_cli_run".
+-
+-
+-2.7. Putting all together
+-
+- Now you have learned about the most important aspects of DES-SERT.
+- To write your own routing protocol implementation, you need to know
+- how to put all this together.
+-
+- You should start with a main() program parsing the command line options
+- and then calling "dessert_init()". This is needed to set up DES-SERT
+- correctly. Afterwards you can register callbacks, read the config file
+- and do what you like. If everything is set up, you call "dessert_run()"
+- and let the event based framework do its job.
+-
+- If you would like to see a complete protocol implementation sample,
+- have a look at the "gossiping" directory.
+-
+-
+-3. Contact & Feedback
+-
+- We love feedback - if you have patches, comments or questions,
+- please contact us! Recent contact information is available on
+- http://www.des-testbed.net/des-sert/
+Index: libdessert0.86-0.86.14/Makefile
+===================================================================
+--- libdessert0.86-0.86.14.orig/Makefile 2009-11-26 18:56:56.000000000 +0100
++++ libdessert0.86-0.86.14/Makefile 2009-12-09 16:38:56.609342119 +0100
+@@ -1,154 +1,925 @@
+-SHLIB_VERSION = 0.86.14
+-SHLIB_COMPAT_VERSION = 0.86
++# Makefile.in generated by automake 1.11 from Makefile.am.
++# Makefile. Generated from Makefile.in by configure.
+
+-MODULES=dessert_core.o dessert_log.o dessert_sysiface.o dessert_meshiface.o dessert_msg.o dessert_cli.o dessert_periodic.o dessert_agentx.o
+-
+-UNAME = $(shell uname | tr 'a-z' 'A-Z')
+-TARFILES = *.c *.h Makefile Intro.txt DES-SERT.doxyfile AUTHORS
+-
+-PREFIX ?= $(DESTDIR)/usr
+-DIR_LIB=$(PREFIX)/lib
+-DIR_INCLUDE=$(PREFIX)/include/dessert
+-
+-ifeq ($(UNAME),LINUX)
+- LIBS = pthread pcap cli
+- CFLAGS += -ggdb -Wall -fPIC -DTARGET_$(UNAME) -D_GNU_SOURCE -DSHLIB_VERSION=\"$(SHLIB_VERSION)\"
+- LDFLAGS += -dy -static-libgcc $(addprefix -l,$(LIBS))
+- SHLIB = libdessert.so.$(SHLIB_VERSION)
+- SHLIB_COMPAT = libdessert.so.$(SHLIB_COMPAT_VERSION)
+- SHLIB_DEFAULT = libdessert.so
+- SHLIB_LDFLAGS = -shared -Wl,-soname,$(SHLIB_COMPAT) -o $(SHLIB)
+-else ifeq ($(UNAME),DARWIN)
+- LIBS = pthread pcap cli
+- CFLAGS += -ggdb -Wall -fPIC -DTARGET_$(UNAME) -DTARGET_BSD -DSHLIB_VERSION=\"$(SHLIB_VERSION)\"
+- LDFLAGS += $(addprefix -l,$(LIBS))
+- SHLIB = libdessert.$(SHLIB_VERSION).dylib
+- SHLIB_COMPAT = libdessert.$(SHLIB_COMPAT_VERSION).dylib
+- SHLIB_DEFAULT = libdessert.dylib
+- SHLIB_LDFLAGS = -dynamiclib -compatibility_version $(SHLIB_COMPAT_VERSION) -current_version $(SHLIB_VERSION) -o $(SHLIB)
+-else ifeq ($(UNAME),FREEBSD)
+- LIBS = pcap cli
+- CFLAGS += -ggdb -Wall -fPIC -DTARGET_$(UNAME) -DTARGET_BSD -DSHLIB_VERSION=\"$(SHLIB_VERSION)\" -pthread -I/usr/local/include -I/usr/include
+- LDFLAGS += -dy -L/usr/local/lib -L/usr/lib $(addprefix -l,$(LIBS))
+- SHLIB = libdessert.so.$(SHLIB_VERSION)
+- SHLIB_COMPAT = libdessert.so.$(SHLIB_COMPAT_VERSION)
+- SHLIB_DEFAULT = libdessert.so
+- SHLIB_LDFLAGS = -shared -Wl,-soname,$(SHLIB_COMPAT) -o $(SHLIB)
+-endif
+-
+-## >>> SNMP ##
+-NETSNMPCONFIG=net-snmp-config
+-
+-STRICT_FLAGS = -Wstrict-prototypes
+-NETSNMPCFLAGS := $(shell $(NETSNMPCONFIG) --base-cflags) $(STRICT_FLAGS)
+-NETSNMPLIBS := $(shell $(NETSNMPCONFIG) --agent-libs)
+-
+-SNMPMODULES = snmp/dessertObjects \
+- snmp/dessertMeshifTable \
+- snmp/dessertMeshifTable_data_get \
+- snmp/dessertMeshifTable_data_set \
+- snmp/dessertMeshifTable_data_access \
+- snmp/dessertMeshifTable_interface \
+- snmp/dessertSysifTable \
+- snmp/dessertSysifTable_data_get \
+- snmp/dessertSysifTable_data_set \
+- snmp/dessertSysifTable_data_access \
+- snmp/dessertSysifTable_interface \
+- snmp/dessertAppStatsTable \
+- snmp/dessertAppStatsTable_data_get \
+- snmp/dessertAppStatsTable_data_set \
+- snmp/dessertAppStatsTable_data_access \
+- snmp/dessertAppStatsTable_interface \
+- snmp/dessertAppParamsTable \
+- snmp/dessertAppParamsTable_data_get \
+- snmp/dessertAppParamsTable_data_set \
+- snmp/dessertAppParamsTable_data_access \
+- snmp/dessertAppParamsTable_interface
+-
+-CFLAGS += $(NETSNMPCFLAGS)
+-LDFLAGS += $(NETSNMPLIBS)
+-MODULES += $(addsuffix .o,$(SNMPMODULES))
+-SNMPTARFILES = snmp/*.c snmp/*.h
+-## <<< SNMP ##
+-
+-DOXYGEN = /usr/bin/doxygen
+-DOXYFILE = DES-SERT.doxyfile
+-DOXYGENTARFILES = doxygen/html/*
+-
+-
+-CFLAGS +=
+-LDFLAGS +=
+-
+-all: doxygen libdessert.a $(SHLIB)
+-
+-clean:
+- rm -r *.o *.a *.so *.so.* *.dylib *.tar.gz || true
+- rm snmp/*.o || true
+- rm test/*.o || true
+- rm test-periodic_add || true
+- rm test-periodic_add-delete-modify-add || true
+- rm test-periodic_wladimir || true
+- rm test-meshif-iterator || true
+- rm test-agentx-appstats || true
+- rm test-agentx-appparams || true
+- rm test-agentx || true
+- rm -rf doxygen || true
+- rm Manual.pdf || true
+-
+-install:
+- echo "ECHO:: $(DIR_LIB) $(SHLIB)"
+- install -d $(DIR_LIB) $(DIR_INCLUDE)
+- install -m755 $(SHLIB) $(DIR_LIB)
+- (cd $(DIR_LIB) ; ln -fs $(SHLIB) $(SHLIB_COMPAT))
+- (cd $(DIR_LIB) ; ln -fs $(SHLIB) $(SHLIB_DEFAULT))
+- install -m644 dessert.h $(DIR_INCLUDE)
+- install -m644 utlist.h $(DIR_INCLUDE)
+-
+-
+-libdessert.a: $(MODULES)
+- $(AR) -r libdessert.a $(MODULES)
+- ranlib libdessert.a
+-
+-$(SHLIB): $(MODULES)
+- $(CC) $(CFLAGS) $(LDFLAGS) $(SHLIB_LDFLAGS) $(MODULES)
+- ln -fs $(SHLIB) $(SHLIB_COMPAT)
+- ln -fs $(SHLIB) $(SHLIB_DEFAULT)
+-
+-tarball: clean doxygen
+- mkdir libdessert$(SHLIB_COMPAT_VERSION)-$(SHLIB_VERSION)
+- cp -R $(TARFILES) libdessert$(SHLIB_COMPAT_VERSION)-$(SHLIB_VERSION)
+- mkdir libdessert$(SHLIB_COMPAT_VERSION)-$(SHLIB_VERSION)/snmp
+- cp -R $(SNMPTARFILES) libdessert$(SHLIB_COMPAT_VERSION)-$(SHLIB_VERSION)/snmp
+- mkdir libdessert$(SHLIB_COMPAT_VERSION)-$(SHLIB_VERSION)/doxygen
+- mkdir libdessert$(SHLIB_COMPAT_VERSION)-$(SHLIB_VERSION)/doxygen/html
+- cp -R $(DOXYGENTARFILES) libdessert$(SHLIB_COMPAT_VERSION)-$(SHLIB_VERSION)/doxygen/html
+- gzip -9 -c changelog > libdessert$(SHLIB_COMPAT_VERSION)-$(SHLIB_VERSION)/changelog.gz
+- tar -czf libdessert$(SHLIB_COMPAT_VERSION)-$(SHLIB_VERSION).tar.gz libdessert$(SHLIB_COMPAT_VERSION)-$(SHLIB_VERSION)
+- rm -rf libdessert$(SHLIB_COMPAT_VERSION)-$(SHLIB_VERSION)
+-
+-doxygen:
+- (cat $(DOXYFILE); echo "PROJECT_NUMBER=$(SHLIB_VERSION)") | $(DOXYGEN) -
+-
+-manual: doxygen
+- cd doxygen/latex; $(MAKE) pdf
+- cp doxygen/latex/refman.pdf Manual.pdf
+-
+-test-periodic_add: test/test-periodic_add.o $(MODULES)
+- $(CC) -ggdb -Wall -DTARGET_$(UNAME) -D_GNU_SOURCE $(NETSNMPCFLAGS) $(LDFLAGS) -o test-periodic_add test/test-periodic_add.o $(MODULES)
+-
+-test-periodic_add-delete-modify-add: test/test-periodic_add-delete-modify-add.o $(MODULES)
+- $(CC) -ggdb -Wall -DTARGET_$(UNAME) -D_GNU_SOURCE $(NETSNMPCFLAGS) $(LDFLAGS) -o test-periodic_add-delete-modify-add test/test-periodic_add-delete-modify-add.o $(MODULES)
+-
+-test-periodic_wladimir: test/test-periodic_wladimir.o $(MODULES)
+- $(CC) -ggdb -Wall -DTARGET_$(UNAME) -D_GNU_SOURCE $(NETSNMPCFLAGS) $(LDFLAGS) -o test-periodic_wladimir test/test-periodic_wladimir.o $(MODULES)
+-
+-
+-test-agentx-appparams: test/test-agentx-appparams.o $(MODULES)
+- $(CC) -ggdb -Wall -DTARGET_$(UNAME) -D_GNU_SOURCE $(NETSNMPCFLAGS) $(LDFLAGS) -o test-agentx-appparams test/test-agentx-appparams.o $(MODULES)
+-
+-test-agentx-appstats: test/test-agentx-appstats.o $(MODULES)
+- $(CC) -ggdb -Wall -DTARGET_$(UNAME) -D_GNU_SOURCE $(NETSNMPCFLAGS) $(LDFLAGS) -o test-agentx-appstats test/test-agentx-appstats.o $(MODULES)
+-
+-test-meshif-iterator: test/test-meshif-iterator.o $(MODULES)
+- $(CC) -ggdb -Wall -DTARGET_$(UNAME) -D_GNU_SOURCE $(NETSNMPCFLAGS) $(LDFLAGS) -o test-meshif-iterator test/test-meshif-iterator.o $(MODULES)
+-
+\ No newline at end of file
++# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
++# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
++# Inc.
++# This Makefile.in is free software; the Free Software Foundation
++# gives unlimited permission to copy and/or distribute it,
++# with or without modifications, as long as this notice is preserved.
++
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
++# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
++# PARTICULAR PURPOSE.
++
++
++
++# ---------------------------------------------------------------------------
++# Licensed to the Apache Software Foundation (ASF) under one or more
++# contributor license agreements. See the NOTICE file distributed with
++# this work for additional information regarding copyright ownership.
++# The ASF licenses this file to You under the Apache License, Version 2.0
++# (the "License"); you may not use this file except in compliance with
++# the License. You may obtain a copy of the License at
++#
++# http://www.apache.org/licenses/LICENSE-2.0
++#
++# Unless required by applicable law or agreed to in writing, software
++# distributed under the License is distributed on an "AS IS" BASIS,
++# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++# See the License for the specific language governing permissions and
++# limitations under the License.
++# ---------------------------------------------------------------------------
++
++# Copyright (C) 2004 Oren Ben-Kiki
++# This file is distributed under the same terms as the Automake macro files.
++
++# Generate automatic documentation using Doxygen. Goals and variables values
++# are controlled by the various DX_COND_??? conditionals set by autoconf.
++#
++# The provided goals are:
++# doxygen-doc: Generate all doxygen documentation.
++# doxygen-run: Run doxygen, which will generate some of the documentation
++# (HTML, CHM, CHI, MAN, RTF, XML) but will not do the post
++# processing required for the rest of it (PS, PDF, and some MAN).
++# doxygen-man: Rename some doxygen generated man pages.
++# doxygen-ps: Generate doxygen PostScript documentation.
++# doxygen-pdf: Generate doxygen PDF documentation.
++#
++# Note that by default these are not integrated into the automake goals. If
++# doxygen is used to generate man pages, you can achieve this integration by
++# setting man3_MANS to the list of man pages generated and then adding the
++# dependency:
++#
++# $(man3_MANS): doxygen-doc
++#
++# This will cause make to run doxygen and generate all the documentation.
++#
++# The following variable is intended for use in Makefile.am:
++#
++# DX_CLEANFILES = everything to clean.
++#
++# This is usually added to MOSTLYCLEANFILES.
++
++
++pkgdatadir = $(datadir)/libdessert
++pkgincludedir = $(includedir)/libdessert
++pkglibdir = $(libdir)/libdessert
++pkglibexecdir = $(libexecdir)/libdessert
++am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
++install_sh_DATA = $(install_sh) -c -m 644
++install_sh_PROGRAM = $(install_sh) -c
++install_sh_SCRIPT = $(install_sh) -c
++INSTALL_HEADER = $(INSTALL_DATA)
++transform = $(program_transform_name)
++NORMAL_INSTALL = :
++PRE_INSTALL = :
++POST_INSTALL = :
++NORMAL_UNINSTALL = :
++PRE_UNINSTALL = :
++POST_UNINSTALL = :
++build_triplet = i686-pc-linux-gnu
++host_triplet = i686-pc-linux-gnu
++DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
++ $(srcdir)/Makefile.in $(srcdir)/config.h.in \
++ $(srcdir)/doxygen-include.am $(srcdir)/libdessert.pc.in \
++ $(top_srcdir)/configure AUTHORS COPYING ChangeLog INSTALL NEWS \
++ config.guess config.sub depcomp install-sh ltmain.sh missing
++subdir = .
++ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
++am__aclocal_m4_deps = $(top_srcdir)/m4/ac_doxygen.m4 \
++ $(top_srcdir)/m4/ax_pthread.m4 $(top_srcdir)/m4/libtool.m4 \
++ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
++ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
++ $(top_srcdir)/m4/net-snmp.m4 $(top_srcdir)/m4/pcap.m4 \
++ $(top_srcdir)/configure.ac
++am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
++ $(ACLOCAL_M4)
++am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
++ configure.lineno config.status.lineno
++mkinstalldirs = $(install_sh) -d
++CONFIG_HEADER = config.h
++CONFIG_CLEAN_FILES = libdessert.pc
++CONFIG_CLEAN_VPATH_FILES =
++SOURCES =
++DIST_SOURCES =
++RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
++ html-recursive info-recursive install-data-recursive \
++ install-dvi-recursive install-exec-recursive \
++ install-html-recursive install-info-recursive \
++ install-pdf-recursive install-ps-recursive install-recursive \
++ installcheck-recursive installdirs-recursive pdf-recursive \
++ ps-recursive uninstall-recursive
++am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
++am__vpath_adj = case $$p in \
++ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
++ *) f=$$p;; \
++ esac;
++am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
++am__install_max = 40
++am__nobase_strip_setup = \
++ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
++am__nobase_strip = \
++ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
++am__nobase_list = $(am__nobase_strip_setup); \
++ for p in $$list; do echo "$$p $$p"; done | \
++ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
++ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
++ if (++n[$$2] == $(am__install_max)) \
++ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
++ END { for (dir in files) print dir, files[dir] }'
++am__base_list = \
++ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
++ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
++am__installdirs = "$(DESTDIR)$(pkgconfigdir)"
++DATA = $(pkgconfig_DATA)
++RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
++ distclean-recursive maintainer-clean-recursive
++AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
++ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
++ distdir dist dist-all distcheck
++ETAGS = etags
++CTAGS = ctags
++DIST_SUBDIRS = $(SUBDIRS)
++DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
++distdir = $(PACKAGE)-$(VERSION)
++top_distdir = $(distdir)
++am__remove_distdir = \
++ { test ! -d "$(distdir)" \
++ || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
++ && rm -fr "$(distdir)"; }; }
++am__relativize = \
++ dir0=`pwd`; \
++ sed_first='s,^\([^/]*\)/.*$$,\1,'; \
++ sed_rest='s,^[^/]*/*,,'; \
++ sed_last='s,^.*/\([^/]*\)$$,\1,'; \
++ sed_butlast='s,/*[^/]*$$,,'; \
++ while test -n "$$dir1"; do \
++ first=`echo "$$dir1" | sed -e "$$sed_first"`; \
++ if test "$$first" != "."; then \
++ if test "$$first" = ".."; then \
++ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
++ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
++ else \
++ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
++ if test "$$first2" = "$$first"; then \
++ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
++ else \
++ dir2="../$$dir2"; \
++ fi; \
++ dir0="$$dir0"/"$$first"; \
++ fi; \
++ fi; \
++ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
++ done; \
++ reldir="$$dir2"
++DIST_ARCHIVES = $(distdir).tar.gz $(distdir).tar.bz2
++GZIP_ENV = --best
++distuninstallcheck_listfiles = find . -type f -print
++distcleancheck_listfiles = find . -type f -print
++ACLOCAL = ${SHELL} /devel/archive/test/libdessert0.86-0.86.14/missing --run aclocal-1.11
++AMTAR = ${SHELL} /devel/archive/test/libdessert0.86-0.86.14/missing --run tar
++AR = ar
++AUTOCONF = ${SHELL} /devel/archive/test/libdessert0.86-0.86.14/missing --run autoconf
++AUTOHEADER = ${SHELL} /devel/archive/test/libdessert0.86-0.86.14/missing --run autoheader
++AUTOMAKE = ${SHELL} /devel/archive/test/libdessert0.86-0.86.14/missing --run automake-1.11
++AWK = gawk
++CC = gcc
++CCDEPMODE = depmode=gcc3
++CFLAGS = -g -O2
++CLI_LIBS =
++CPP = gcc -E
++CPPFLAGS =
++CYGPATH_W = echo
++DEFS = -DHAVE_CONFIG_H
++DEPDIR = .deps
++DOXYGEN_PAPER_SIZE =
++DSYMUTIL =
++DUMPBIN =
++DX_CONFIG = DES-SERT.doxyfile
++DX_DOCDIR = doxygen
++DX_DOT = /usr/bin/dot
++DX_DOXYGEN = /usr/bin/doxygen
++DX_DVIPS =
++DX_EGREP = /bin/egrep
++DX_ENV = SRCDIR='.' PROJECT='libdessert' DOCDIR='doxygen' VERSION='0.86.14' PERL_PATH='/usr/bin/perl' HAVE_DOT='YES' DOT_PATH='/usr/bin' GENERATE_MAN='NO' GENERATE_RTF='NO' GENERATE_XML='NO' GENERATE_HTMLHELP='NO' GENERATE_CHI='NO' GENERATE_HTML='YES' GENERATE_LATEX='YES'
++DX_FLAG_chi = 0
++DX_FLAG_chm = 0
++DX_FLAG_doc = 1
++DX_FLAG_dot = 1
++DX_FLAG_html = 1
++DX_FLAG_man = 0
++DX_FLAG_pdf = 1
++DX_FLAG_ps = 0
++DX_FLAG_rtf = 0
++DX_FLAG_xml = 0
++DX_HHC =
++DX_LATEX =
++DX_MAKEINDEX = /usr/bin/makeindex
++DX_PDFLATEX = /usr/bin/pdflatex
++DX_PERL = /usr/bin/perl
++DX_PROJECT = libdessert
++ECHO_C =
++ECHO_N = -n
++ECHO_T =
++EGREP = /bin/grep -E
++EXEEXT =
++FGREP = /bin/grep -F
++GREP = /bin/grep
++INSTALL = /usr/bin/install -c
++INSTALL_DATA = ${INSTALL} -m 644
++INSTALL_PROGRAM = ${INSTALL}
++INSTALL_SCRIPT = ${INSTALL}
++INSTALL_STRIP_PROGRAM = $(install_sh) -c -s
++LD = /usr/bin/ld
++LDFLAGS =
++LIBDESSERT_LIBRARY_VERSION = 0:86:14
++LIBOBJS =
++LIBS = -lcli
++LIBTOOL = $(SHELL) $(top_builddir)/libtool
++LIPO =
++LN_S = ln -s
++LTLIBOBJS =
++MAKEINFO = ${SHELL} /devel/archive/test/libdessert0.86-0.86.14/missing --run makeinfo
++MKDIR_P = /bin/mkdir -p
++NM = /usr/bin/nm -B
++NMEDIT =
++OBJDUMP = objdump
++OBJEXT = o
++OTOOL =
++OTOOL64 =
++PACKAGE = libdessert
++PACKAGE_BUGREPORT = des-sert@spline.inf.fu-berlin.de
++PACKAGE_NAME = libdessert
++PACKAGE_STRING = libdessert 0.86.14
++PACKAGE_TARNAME = libdessert
++PACKAGE_URL =
++PACKAGE_VERSION = 0.86.14
++PATH_SEPARATOR = :
++PCAP_CFLAGS =
++PCAP_CFLGAS = -I/usr/include
++PCAP_LIBS = -L/usr/lib -lpcap
++PTHREAD_CC = gcc
++PTHREAD_CFLAGS =
++PTHREAD_LIBS = -lpthread
++RANLIB = ranlib
++SED = /bin/sed
++SET_MAKE =
++SHELL = /bin/sh
++SNMP_CFLAGS =
++SNMP_CFLGAS = -DNETSNMP_ENABLE_IPV6 -g -O2 -DNETSNMP_USE_INLINE -Ulinux -Dlinux=linux -D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -I/usr/lib/perl/5.10/CORE -I. -I/usr/include
++SNMP_LIBS = -L/usr/lib -lnetsnmpagent -lnetsnmphelpers -lnetsnmpmibs -lnetsnmp -Wl,-E
++STRIP = strip
++VERSION = 0.86.14
++abs_builddir = /devel/archive/test/libdessert0.86-0.86.14
++abs_srcdir = /devel/archive/test/libdessert0.86-0.86.14
++abs_top_builddir = /devel/archive/test/libdessert0.86-0.86.14
++abs_top_srcdir = /devel/archive/test/libdessert0.86-0.86.14
++ac_ct_CC = gcc
++ac_ct_DUMPBIN =
++am__include = include
++am__leading_dot = .
++am__quote =
++am__tar = ${AMTAR} chof - "$$tardir"
++am__untar = ${AMTAR} xf -
++ax_pthread_config =
++bindir = ${exec_prefix}/bin
++build = i686-pc-linux-gnu
++build_alias =
++build_cpu = i686
++build_os = linux-gnu
++build_vendor = pc
++builddir = .
++datadir = ${datarootdir}
++datarootdir = ${prefix}/share
++docdir = ${datarootdir}/doc/${PACKAGE_TARNAME}
++dvidir = ${docdir}
++exec_prefix = ${prefix}
++host = i686-pc-linux-gnu
++host_alias =
++host_cpu = i686
++host_os = linux-gnu
++host_vendor = pc
++htmldir = ${docdir}
++includedir = ${prefix}/include
++infodir = ${datarootdir}/info
++install_sh = ${SHELL} /devel/archive/test/libdessert0.86-0.86.14/install-sh
++libdir = ${exec_prefix}/lib
++libexecdir = ${exec_prefix}/libexec
++localedir = ${datarootdir}/locale
++localstatedir = ${prefix}/var
++lt_ECHO = echo
++mandir = ${datarootdir}/man
++mkdir_p = /bin/mkdir -p
++oldincludedir = /usr/include
++pdfdir = ${docdir}
++prefix = /usr/local
++program_transform_name = s,x,x,
++psdir = ${docdir}
++sbindir = ${exec_prefix}/sbin
++sharedstatedir = ${prefix}/com
++srcdir = .
++sysconfdir = ${prefix}/etc
++target_alias =
++top_build_prefix =
++top_builddir = .
++top_srcdir = .
++ACLOCAL_AMFLAGS = -I m4
++SUBDIRS = include src
++pkgconfigdir = $(libdir)/pkgconfig
++pkgconfig_DATA = libdessert.pc
++DX_CLEAN_HTML = doxygen/html
++#DX_CLEAN_CHM = doxygen/chm
++##DX_CLEAN_CHI = doxygen/libdessert.chi
++#DX_CLEAN_MAN = doxygen/man
++#DX_CLEAN_RTF = doxygen/rtf
++#DX_CLEAN_XML = doxygen/xml
++#DX_CLEAN_PS = doxygen/libdessert.ps
++#DX_PS_GOAL = doxygen-ps
++DX_CLEAN_PDF = doxygen/libdessert.pdf
++DX_PDF_GOAL = doxygen-pdf
++DX_CLEAN_LATEX = doxygen/latex
++DX_CLEANFILES = \
++ doxygen/libdessert.tag \
++ -r \
++ $(DX_CLEAN_HTML) \
++ $(DX_CLEAN_CHM) \
++ $(DX_CLEAN_CHI) \
++ $(DX_CLEAN_MAN) \
++ $(DX_CLEAN_RTF) \
++ $(DX_CLEAN_XML) \
++ $(DX_CLEAN_PS) \
++ $(DX_CLEAN_PDF) \
++ $(DX_CLEAN_LATEX)
++
++EXTRA_DIST = autogen.sh DES-SERT.doxyfile doxygen/html
++all: config.h
++ $(MAKE) $(AM_MAKEFLAGS) all-recursive
++
++.SUFFIXES:
++am--refresh:
++ @:
++$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(srcdir)/doxygen-include.am $(am__configure_deps)
++ @for dep in $?; do \
++ case '$(am__configure_deps)' in \
++ *$$dep*) \
++ echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \
++ $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \
++ && exit 0; \
++ exit 1;; \
++ esac; \
++ done; \
++ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \
++ $(am__cd) $(top_srcdir) && \
++ $(AUTOMAKE) --gnu Makefile
++.PRECIOUS: Makefile
++Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
++ @case '$?' in \
++ *config.status*) \
++ echo ' $(SHELL) ./config.status'; \
++ $(SHELL) ./config.status;; \
++ *) \
++ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
++ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
++ esac;
++
++$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
++ $(SHELL) ./config.status --recheck
++
++$(top_srcdir)/configure: $(am__configure_deps)
++ $(am__cd) $(srcdir) && $(AUTOCONF)
++$(ACLOCAL_M4): $(am__aclocal_m4_deps)
++ $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
++$(am__aclocal_m4_deps):
++
++config.h: stamp-h1
++ @if test ! -f $@; then \
++ rm -f stamp-h1; \
++ $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \
++ else :; fi
++
++stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
++ @rm -f stamp-h1
++ cd $(top_builddir) && $(SHELL) ./config.status config.h
++$(srcdir)/config.h.in: $(am__configure_deps)
++ ($(am__cd) $(top_srcdir) && $(AUTOHEADER))
++ rm -f stamp-h1
++ touch $@
++
++distclean-hdr:
++ -rm -f config.h stamp-h1
++libdessert.pc: $(top_builddir)/config.status $(srcdir)/libdessert.pc.in
++ cd $(top_builddir) && $(SHELL) ./config.status $@
++
++mostlyclean-libtool:
++ -rm -f *.lo
++
++clean-libtool:
++ -rm -rf .libs _libs
++
++distclean-libtool:
++ -rm -f libtool config.lt
++install-pkgconfigDATA: $(pkgconfig_DATA)
++ @$(NORMAL_INSTALL)
++ test -z "$(pkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)"
++ @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
++ for p in $$list; do \
++ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
++ echo "$$d$$p"; \
++ done | $(am__base_list) | \
++ while read files; do \
++ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \
++ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \
++ done
++
++uninstall-pkgconfigDATA:
++ @$(NORMAL_UNINSTALL)
++ @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
++ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
++ test -n "$$files" || exit 0; \
++ echo " ( cd '$(DESTDIR)$(pkgconfigdir)' && rm -f" $$files ")"; \
++ cd "$(DESTDIR)$(pkgconfigdir)" && rm -f $$files
++
++# This directory's subdirectories are mostly independent; you can cd
++# into them and run `make' without going through this Makefile.
++# To change the values of `make' variables: instead of editing Makefiles,
++# (1) if the variable is set in `config.status', edit `config.status'
++# (which will cause the Makefiles to be regenerated when you run `make');
++# (2) otherwise, pass the desired values on the `make' command line.
++$(RECURSIVE_TARGETS):
++ @failcom='exit 1'; \
++ for f in x $$MAKEFLAGS; do \
++ case $$f in \
++ *=* | --[!k]*);; \
++ *k*) failcom='fail=yes';; \
++ esac; \
++ done; \
++ dot_seen=no; \
++ target=`echo $@ | sed s/-recursive//`; \
++ list='$(SUBDIRS)'; 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; \
++ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
++ || eval $$failcom; \
++ done; \
++ if test "$$dot_seen" = "no"; then \
++ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
++ fi; test -z "$$fail"
++
++$(RECURSIVE_CLEAN_TARGETS):
++ @failcom='exit 1'; \
++ for f in x $$MAKEFLAGS; do \
++ case $$f in \
++ *=* | --[!k]*);; \
++ *k*) failcom='fail=yes';; \
++ esac; \
++ done; \
++ dot_seen=no; \
++ case "$@" in \
++ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
++ *) list='$(SUBDIRS)' ;; \
++ esac; \
++ rev=''; for subdir in $$list; do \
++ if test "$$subdir" = "."; then :; else \
++ rev="$$subdir $$rev"; \
++ fi; \
++ done; \
++ rev="$$rev ."; \
++ target=`echo $@ | sed s/-recursive//`; \
++ for subdir in $$rev; do \
++ echo "Making $$target in $$subdir"; \
++ if test "$$subdir" = "."; then \
++ local_target="$$target-am"; \
++ else \
++ local_target="$$target"; \
++ fi; \
++ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
++ || eval $$failcom; \
++ done && test -z "$$fail"
++tags-recursive:
++ list='$(SUBDIRS)'; for subdir in $$list; do \
++ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
++ done
++ctags-recursive:
++ list='$(SUBDIRS)'; for subdir in $$list; do \
++ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
++ done
++
++ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
++ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
++ unique=`for i in $$list; do \
++ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
++ done | \
++ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
++ END { if (nonempty) { for (i in files) print i; }; }'`; \
++ mkid -fID $$unique
++tags: TAGS
++
++TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
++ $(TAGS_FILES) $(LISP)
++ set x; \
++ here=`pwd`; \
++ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
++ include_option=--etags-include; \
++ empty_fix=.; \
++ else \
++ include_option=--include; \
++ empty_fix=; \
++ fi; \
++ list='$(SUBDIRS)'; for subdir in $$list; do \
++ if test "$$subdir" = .; then :; else \
++ test ! -f $$subdir/TAGS || \
++ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
++ fi; \
++ done; \
++ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
++ unique=`for i in $$list; do \
++ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
++ done | \
++ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
++ END { if (nonempty) { for (i in files) print i; }; }'`; \
++ shift; \
++ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
++ test -n "$$unique" || unique=$$empty_fix; \
++ if test $$# -gt 0; then \
++ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
++ "$$@" $$unique; \
++ else \
++ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
++ $$unique; \
++ fi; \
++ fi
++ctags: CTAGS
++CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
++ $(TAGS_FILES) $(LISP)
++ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
++ unique=`for i in $$list; do \
++ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
++ done | \
++ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
++ END { if (nonempty) { for (i in files) print i; }; }'`; \
++ test -z "$(CTAGS_ARGS)$$unique" \
++ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
++ $$unique
++
++GTAGS:
++ here=`$(am__cd) $(top_builddir) && pwd` \
++ && $(am__cd) $(top_srcdir) \
++ && gtags -i $(GTAGS_ARGS) "$$here"
++
++distclean-tags:
++ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
++
++distdir: $(DISTFILES)
++ $(am__remove_distdir)
++ test -d "$(distdir)" || mkdir "$(distdir)"
++ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
++ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
++ list='$(DISTFILES)'; \
++ dist_files=`for file in $$list; do echo $$file; done | \
++ sed -e "s|^$$srcdirstrip/||;t" \
++ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
++ case $$dist_files in \
++ */*) $(MKDIR_P) `echo "$$dist_files" | \
++ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
++ sort -u` ;; \
++ esac; \
++ for file in $$dist_files; do \
++ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
++ if test -d $$d/$$file; then \
++ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
++ if test -d "$(distdir)/$$file"; then \
++ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
++ fi; \
++ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
++ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
++ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
++ fi; \
++ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
++ else \
++ test -f "$(distdir)/$$file" \
++ || cp -p $$d/$$file "$(distdir)/$$file" \
++ || exit 1; \
++ fi; \
++ done
++ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
++ if test "$$subdir" = .; then :; else \
++ test -d "$(distdir)/$$subdir" \
++ || $(MKDIR_P) "$(distdir)/$$subdir" \
++ || exit 1; \
++ fi; \
++ done
++ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
++ if test "$$subdir" = .; then :; else \
++ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
++ $(am__relativize); \
++ new_distdir=$$reldir; \
++ dir1=$$subdir; dir2="$(top_distdir)"; \
++ $(am__relativize); \
++ new_top_distdir=$$reldir; \
++ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
++ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
++ ($(am__cd) $$subdir && \
++ $(MAKE) $(AM_MAKEFLAGS) \
++ top_distdir="$$new_top_distdir" \
++ distdir="$$new_distdir" \
++ am__remove_distdir=: \
++ am__skip_length_check=: \
++ am__skip_mode_fix=: \
++ distdir) \
++ || exit 1; \
++ fi; \
++ done
++ -test -n "$(am__skip_mode_fix)" \
++ || find "$(distdir)" -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
++ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
++ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
++ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
++ || chmod -R a+r "$(distdir)"
++dist-gzip: distdir
++ tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
++ $(am__remove_distdir)
++dist-bzip2: distdir
++ tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
++ $(am__remove_distdir)
++
++dist-lzma: distdir
++ tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma
++ $(am__remove_distdir)
++
++dist-xz: distdir
++ tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz
++ $(am__remove_distdir)
++
++dist-tarZ: distdir
++ tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
++ $(am__remove_distdir)
++
++dist-shar: distdir
++ shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
++ $(am__remove_distdir)
++
++dist-zip: distdir
++ -rm -f $(distdir).zip
++ zip -rq $(distdir).zip $(distdir)
++ $(am__remove_distdir)
++
++dist dist-all: distdir
++ tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
++ tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
++ $(am__remove_distdir)
++
++# This target untars the dist file and tries a VPATH configuration. Then
++# it guarantees that the distribution is self-contained by making another
++# tarfile.
++distcheck: dist
++ case '$(DIST_ARCHIVES)' in \
++ *.tar.gz*) \
++ GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\
++ *.tar.bz2*) \
++ bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\
++ *.tar.lzma*) \
++ unlzma -c $(distdir).tar.lzma | $(am__untar) ;;\
++ *.tar.xz*) \
++ xz -dc $(distdir).tar.xz | $(am__untar) ;;\
++ *.tar.Z*) \
++ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
++ *.shar.gz*) \
++ GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\
++ *.zip*) \
++ unzip $(distdir).zip ;;\
++ esac
++ chmod -R a-w $(distdir); chmod a+w $(distdir)
++ mkdir $(distdir)/_build
++ mkdir $(distdir)/_inst
++ chmod a-w $(distdir)
++ test -d $(distdir)/_build || exit 0; \
++ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
++ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
++ && am__cwd=`pwd` \
++ && $(am__cd) $(distdir)/_build \
++ && ../configure --srcdir=.. --prefix="$$dc_install_base" \
++ $(DISTCHECK_CONFIGURE_FLAGS) \
++ && $(MAKE) $(AM_MAKEFLAGS) \
++ && $(MAKE) $(AM_MAKEFLAGS) dvi \
++ && $(MAKE) $(AM_MAKEFLAGS) check \
++ && $(MAKE) $(AM_MAKEFLAGS) install \
++ && $(MAKE) $(AM_MAKEFLAGS) installcheck \
++ && $(MAKE) $(AM_MAKEFLAGS) uninstall \
++ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
++ distuninstallcheck \
++ && chmod -R a-w "$$dc_install_base" \
++ && ({ \
++ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
++ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
++ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
++ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
++ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
++ } || { rm -rf "$$dc_destdir"; exit 1; }) \
++ && rm -rf "$$dc_destdir" \
++ && $(MAKE) $(AM_MAKEFLAGS) dist \
++ && rm -rf $(DIST_ARCHIVES) \
++ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \
++ && cd "$$am__cwd" \
++ || exit 1
++ $(am__remove_distdir)
++ @(echo "$(distdir) archives ready for distribution: "; \
++ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
++ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
++distuninstallcheck:
++ @$(am__cd) '$(distuninstallcheck_dir)' \
++ && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
++ || { echo "ERROR: files left after uninstall:" ; \
++ if test -n "$(DESTDIR)"; then \
++ echo " (check DESTDIR support)"; \
++ fi ; \
++ $(distuninstallcheck_listfiles) ; \
++ exit 1; } >&2
++distcleancheck: distclean
++ @if test '$(srcdir)' = . ; then \
++ echo "ERROR: distcleancheck can only run from a VPATH build" ; \
++ exit 1 ; \
++ fi
++ @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
++ || { echo "ERROR: files left in build directory after distclean:" ; \
++ $(distcleancheck_listfiles) ; \
++ exit 1; } >&2
++check-am: all-am
++check: check-recursive
++all-am: Makefile $(DATA) config.h
++installdirs: installdirs-recursive
++installdirs-am:
++ for dir in "$(DESTDIR)$(pkgconfigdir)"; do \
++ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
++ done
++install: install-recursive
++install-exec: install-exec-recursive
++install-data: install-data-recursive
++uninstall: uninstall-recursive
++
++install-am: all-am
++ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
++
++installcheck: installcheck-recursive
++install-strip:
++ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
++ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
++ `test -z '$(STRIP)' || \
++ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
++mostlyclean-generic:
++
++clean-generic:
++
++distclean-generic:
++ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
++ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
++
++maintainer-clean-generic:
++ @echo "This command is intended for maintainers to use"
++ @echo "it deletes files that may require special tools to rebuild."
++clean: clean-recursive
++
++clean-am: clean-generic clean-libtool mostlyclean-am
++
++distclean: distclean-recursive
++ -rm -f $(am__CONFIG_DISTCLEAN_FILES)
++ -rm -f Makefile
++distclean-am: clean-am distclean-generic distclean-hdr \
++ distclean-libtool distclean-tags
++
++dvi: dvi-recursive
++
++dvi-am:
++
++html: html-recursive
++
++html-am:
++
++info: info-recursive
++
++info-am:
++
++install-data-am: install-pkgconfigDATA
++
++install-dvi: install-dvi-recursive
++
++install-dvi-am:
++
++install-exec-am:
++
++install-html: install-html-recursive
++
++install-html-am:
++
++install-info: install-info-recursive
++
++install-info-am:
++
++install-man:
++
++install-pdf: install-pdf-recursive
++
++install-pdf-am:
++
++install-ps: install-ps-recursive
++
++install-ps-am:
++
++installcheck-am:
++
++maintainer-clean: maintainer-clean-recursive
++ -rm -f $(am__CONFIG_DISTCLEAN_FILES)
++ -rm -rf $(top_srcdir)/autom4te.cache
++ -rm -f Makefile
++maintainer-clean-am: distclean-am maintainer-clean-generic
++
++mostlyclean: mostlyclean-recursive
++
++mostlyclean-am: mostlyclean-generic mostlyclean-libtool
++
++pdf: pdf-recursive
++
++pdf-am:
++
++ps: ps-recursive
++
++ps-am:
++
++uninstall-am: uninstall-pkgconfigDATA
++
++.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \
++ ctags-recursive install-am install-strip tags-recursive
++
++.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
++ all all-am am--refresh check check-am clean clean-generic \
++ clean-libtool ctags ctags-recursive dist dist-all dist-bzip2 \
++ dist-gzip dist-lzma dist-shar dist-tarZ dist-xz dist-zip \
++ distcheck distclean distclean-generic distclean-hdr \
++ distclean-libtool distclean-tags distcleancheck distdir \
++ distuninstallcheck dvi dvi-am html html-am info info-am \
++ install install-am install-data install-data-am install-dvi \
++ install-dvi-am install-exec install-exec-am install-html \
++ install-html-am install-info install-info-am install-man \
++ install-pdf install-pdf-am install-pkgconfigDATA install-ps \
++ install-ps-am install-strip installcheck installcheck-am \
++ installdirs installdirs-am maintainer-clean \
++ maintainer-clean-generic mostlyclean mostlyclean-generic \
++ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
++ uninstall uninstall-am uninstall-pkgconfigDATA
++
++
++#doxygen-ps: doxygen/libdessert.ps
++
++#doxygen/libdessert.ps: doxygen/libdessert.tag
++# cd doxygen/latex; \
++# rm -f *.aux *.toc *.idx *.ind *.ilg *.log *.out; \
++# $(DX_LATEX) refman.tex; \
++# $(MAKEINDEX_PATH) refman.idx; \
++# $(DX_LATEX) refman.tex; \
++# countdown=5; \
++# while $(DX_EGREP) 'Rerun (LaTeX|to get cross-references right)' \
++# refman.log > /dev/null 2>&1 \
++# && test $$countdown -gt 0; do \
++# $(DX_LATEX) refman.tex; \
++# countdown=`expr $$countdown - 1`; \
++# done; \
++# $(DX_DVIPS) -o ../libdessert.ps refman.dvi
++
++doxygen-pdf: doxygen/libdessert.pdf
++
++doxygen/libdessert.pdf: doxygen/libdessert.tag
++ cd doxygen/latex; \
++ rm -f *.aux *.toc *.idx *.ind *.ilg *.log *.out; \
++ $(DX_PDFLATEX) refman.tex; \
++ $(DX_MAKEINDEX) refman.idx; \
++ $(DX_PDFLATEX) refman.tex; \
++ countdown=5; \
++ while $(DX_EGREP) 'Rerun (LaTeX|to get cross-references right)' \
++ refman.log > /dev/null 2>&1 \
++ && test $$countdown -gt 0; do \
++ $(DX_PDFLATEX) refman.tex; \
++ countdown=`expr $$countdown - 1`; \
++ done; \
++ mv refman.pdf ../libdessert.pdf
++
++.PHONY: doxygen-run doxygen-doc $(DX_PS_GOAL) $(DX_PDF_GOAL)
++
++.INTERMEDIATE: doxygen-run $(DX_PS_GOAL) $(DX_PDF_GOAL)
++
++doxygen-run: doxygen/libdessert.tag
++
++doxygen-doc: doxygen-run $(DX_PS_GOAL) $(DX_PDF_GOAL)
++
++doxygen/libdessert.tag: $(DX_CONFIG) $(pkginclude_HEADERS)
++ rm -rf doxygen
++ $(DX_ENV) $(DX_DOXYGEN) $(srcdir)/$(DX_CONFIG)
++
++# Tell versions [3.59,3.63) of GNU make to not export all variables.
++# Otherwise a system limit (for SysV at least) may be exceeded.
++.NOEXPORT:
+Index: libdessert0.86-0.86.14/Makefile.am
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/Makefile.am 2009-12-09 16:38:27.215595120 +0100
+@@ -0,0 +1,11 @@
++
++ACLOCAL_AMFLAGS = -I m4
++
++SUBDIRS = include src
++
++pkgconfigdir = $(libdir)/pkgconfig
++pkgconfig_DATA = libdessert.pc
++
++include doxygen-include.am
++
++EXTRA_DIST = autogen.sh DES-SERT.doxyfile doxygen/html
+Index: libdessert0.86-0.86.14/Makefile.in
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/Makefile.in 2009-12-09 16:38:51.255169526 +0100
+@@ -0,0 +1,925 @@
++# Makefile.in generated by automake 1.11 from Makefile.am.
++# @configure_input@
++
++# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
++# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
++# Inc.
++# This Makefile.in is free software; the Free Software Foundation
++# gives unlimited permission to copy and/or distribute it,
++# with or without modifications, as long as this notice is preserved.
++
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
++# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
++# PARTICULAR PURPOSE.
++
++@SET_MAKE@
++
++# ---------------------------------------------------------------------------
++# Licensed to the Apache Software Foundation (ASF) under one or more
++# contributor license agreements. See the NOTICE file distributed with
++# this work for additional information regarding copyright ownership.
++# The ASF licenses this file to You under the Apache License, Version 2.0
++# (the "License"); you may not use this file except in compliance with
++# the License. You may obtain a copy of the License at
++#
++# http://www.apache.org/licenses/LICENSE-2.0
++#
++# Unless required by applicable law or agreed to in writing, software
++# distributed under the License is distributed on an "AS IS" BASIS,
++# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++# See the License for the specific language governing permissions and
++# limitations under the License.
++# ---------------------------------------------------------------------------
++
++# Copyright (C) 2004 Oren Ben-Kiki
++# This file is distributed under the same terms as the Automake macro files.
++
++# Generate automatic documentation using Doxygen. Goals and variables values
++# are controlled by the various DX_COND_??? conditionals set by autoconf.
++#
++# The provided goals are:
++# doxygen-doc: Generate all doxygen documentation.
++# doxygen-run: Run doxygen, which will generate some of the documentation
++# (HTML, CHM, CHI, MAN, RTF, XML) but will not do the post
++# processing required for the rest of it (PS, PDF, and some MAN).
++# doxygen-man: Rename some doxygen generated man pages.
++# doxygen-ps: Generate doxygen PostScript documentation.
++# doxygen-pdf: Generate doxygen PDF documentation.
++#
++# Note that by default these are not integrated into the automake goals. If
++# doxygen is used to generate man pages, you can achieve this integration by
++# setting man3_MANS to the list of man pages generated and then adding the
++# dependency:
++#
++# $(man3_MANS): doxygen-doc
++#
++# This will cause make to run doxygen and generate all the documentation.
++#
++# The following variable is intended for use in Makefile.am:
++#
++# DX_CLEANFILES = everything to clean.
++#
++# This is usually added to MOSTLYCLEANFILES.
++
++VPATH = @srcdir@
++pkgdatadir = $(datadir)/@PACKAGE@
++pkgincludedir = $(includedir)/@PACKAGE@
++pkglibdir = $(libdir)/@PACKAGE@
++pkglibexecdir = $(libexecdir)/@PACKAGE@
++am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
++install_sh_DATA = $(install_sh) -c -m 644
++install_sh_PROGRAM = $(install_sh) -c
++install_sh_SCRIPT = $(install_sh) -c
++INSTALL_HEADER = $(INSTALL_DATA)
++transform = $(program_transform_name)
++NORMAL_INSTALL = :
++PRE_INSTALL = :
++POST_INSTALL = :
++NORMAL_UNINSTALL = :
++PRE_UNINSTALL = :
++POST_UNINSTALL = :
++build_triplet = @build@
++host_triplet = @host@
++DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \
++ $(srcdir)/Makefile.in $(srcdir)/config.h.in \
++ $(srcdir)/doxygen-include.am $(srcdir)/libdessert.pc.in \
++ $(top_srcdir)/configure AUTHORS COPYING ChangeLog INSTALL NEWS \
++ config.guess config.sub depcomp install-sh ltmain.sh missing
++subdir = .
++ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
++am__aclocal_m4_deps = $(top_srcdir)/m4/ac_doxygen.m4 \
++ $(top_srcdir)/m4/ax_pthread.m4 $(top_srcdir)/m4/libtool.m4 \
++ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
++ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
++ $(top_srcdir)/m4/net-snmp.m4 $(top_srcdir)/m4/pcap.m4 \
++ $(top_srcdir)/configure.ac
++am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
++ $(ACLOCAL_M4)
++am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
++ configure.lineno config.status.lineno
++mkinstalldirs = $(install_sh) -d
++CONFIG_HEADER = config.h
++CONFIG_CLEAN_FILES = libdessert.pc
++CONFIG_CLEAN_VPATH_FILES =
++SOURCES =
++DIST_SOURCES =
++RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
++ html-recursive info-recursive install-data-recursive \
++ install-dvi-recursive install-exec-recursive \
++ install-html-recursive install-info-recursive \
++ install-pdf-recursive install-ps-recursive install-recursive \
++ installcheck-recursive installdirs-recursive pdf-recursive \
++ ps-recursive uninstall-recursive
++am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
++am__vpath_adj = case $$p in \
++ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
++ *) f=$$p;; \
++ esac;
++am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
++am__install_max = 40
++am__nobase_strip_setup = \
++ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
++am__nobase_strip = \
++ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
++am__nobase_list = $(am__nobase_strip_setup); \
++ for p in $$list; do echo "$$p $$p"; done | \
++ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
++ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
++ if (++n[$$2] == $(am__install_max)) \
++ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
++ END { for (dir in files) print dir, files[dir] }'
++am__base_list = \
++ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
++ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
++am__installdirs = "$(DESTDIR)$(pkgconfigdir)"
++DATA = $(pkgconfig_DATA)
++RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
++ distclean-recursive maintainer-clean-recursive
++AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
++ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
++ distdir dist dist-all distcheck
++ETAGS = etags
++CTAGS = ctags
++DIST_SUBDIRS = $(SUBDIRS)
++DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
++distdir = $(PACKAGE)-$(VERSION)
++top_distdir = $(distdir)
++am__remove_distdir = \
++ { test ! -d "$(distdir)" \
++ || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
++ && rm -fr "$(distdir)"; }; }
++am__relativize = \
++ dir0=`pwd`; \
++ sed_first='s,^\([^/]*\)/.*$$,\1,'; \
++ sed_rest='s,^[^/]*/*,,'; \
++ sed_last='s,^.*/\([^/]*\)$$,\1,'; \
++ sed_butlast='s,/*[^/]*$$,,'; \
++ while test -n "$$dir1"; do \
++ first=`echo "$$dir1" | sed -e "$$sed_first"`; \
++ if test "$$first" != "."; then \
++ if test "$$first" = ".."; then \
++ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
++ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
++ else \
++ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
++ if test "$$first2" = "$$first"; then \
++ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
++ else \
++ dir2="../$$dir2"; \
++ fi; \
++ dir0="$$dir0"/"$$first"; \
++ fi; \
++ fi; \
++ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
++ done; \
++ reldir="$$dir2"
++DIST_ARCHIVES = $(distdir).tar.gz $(distdir).tar.bz2
++GZIP_ENV = --best
++distuninstallcheck_listfiles = find . -type f -print
++distcleancheck_listfiles = find . -type f -print
++ACLOCAL = @ACLOCAL@
++AMTAR = @AMTAR@
++AR = @AR@
++AUTOCONF = @AUTOCONF@
++AUTOHEADER = @AUTOHEADER@
++AUTOMAKE = @AUTOMAKE@
++AWK = @AWK@
++CC = @CC@
++CCDEPMODE = @CCDEPMODE@
++CFLAGS = @CFLAGS@
++CLI_LIBS = @CLI_LIBS@
++CPP = @CPP@
++CPPFLAGS = @CPPFLAGS@
++CYGPATH_W = @CYGPATH_W@
++DEFS = @DEFS@
++DEPDIR = @DEPDIR@
++DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@
++DSYMUTIL = @DSYMUTIL@
++DUMPBIN = @DUMPBIN@
++DX_CONFIG = @DX_CONFIG@
++DX_DOCDIR = @DX_DOCDIR@
++DX_DOT = @DX_DOT@
++DX_DOXYGEN = @DX_DOXYGEN@
++DX_DVIPS = @DX_DVIPS@
++DX_EGREP = @DX_EGREP@
++DX_ENV = @DX_ENV@
++DX_FLAG_chi = @DX_FLAG_chi@
++DX_FLAG_chm = @DX_FLAG_chm@
++DX_FLAG_doc = @DX_FLAG_doc@
++DX_FLAG_dot = @DX_FLAG_dot@
++DX_FLAG_html = @DX_FLAG_html@
++DX_FLAG_man = @DX_FLAG_man@
++DX_FLAG_pdf = @DX_FLAG_pdf@
++DX_FLAG_ps = @DX_FLAG_ps@
++DX_FLAG_rtf = @DX_FLAG_rtf@
++DX_FLAG_xml = @DX_FLAG_xml@
++DX_HHC = @DX_HHC@
++DX_LATEX = @DX_LATEX@
++DX_MAKEINDEX = @DX_MAKEINDEX@
++DX_PDFLATEX = @DX_PDFLATEX@
++DX_PERL = @DX_PERL@
++DX_PROJECT = @DX_PROJECT@
++ECHO_C = @ECHO_C@
++ECHO_N = @ECHO_N@
++ECHO_T = @ECHO_T@
++EGREP = @EGREP@
++EXEEXT = @EXEEXT@
++FGREP = @FGREP@
++GREP = @GREP@
++INSTALL = @INSTALL@
++INSTALL_DATA = @INSTALL_DATA@
++INSTALL_PROGRAM = @INSTALL_PROGRAM@
++INSTALL_SCRIPT = @INSTALL_SCRIPT@
++INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
++LD = @LD@
++LDFLAGS = @LDFLAGS@
++LIBDESSERT_LIBRARY_VERSION = @LIBDESSERT_LIBRARY_VERSION@
++LIBOBJS = @LIBOBJS@
++LIBS = @LIBS@
++LIBTOOL = @LIBTOOL@
++LIPO = @LIPO@
++LN_S = @LN_S@
++LTLIBOBJS = @LTLIBOBJS@
++MAKEINFO = @MAKEINFO@
++MKDIR_P = @MKDIR_P@
++NM = @NM@
++NMEDIT = @NMEDIT@
++OBJDUMP = @OBJDUMP@
++OBJEXT = @OBJEXT@
++OTOOL = @OTOOL@
++OTOOL64 = @OTOOL64@
++PACKAGE = @PACKAGE@
++PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
++PACKAGE_NAME = @PACKAGE_NAME@
++PACKAGE_STRING = @PACKAGE_STRING@
++PACKAGE_TARNAME = @PACKAGE_TARNAME@
++PACKAGE_URL = @PACKAGE_URL@
++PACKAGE_VERSION = @PACKAGE_VERSION@
++PATH_SEPARATOR = @PATH_SEPARATOR@
++PCAP_CFLAGS = @PCAP_CFLAGS@
++PCAP_CFLGAS = @PCAP_CFLGAS@
++PCAP_LIBS = @PCAP_LIBS@
++PTHREAD_CC = @PTHREAD_CC@
++PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
++PTHREAD_LIBS = @PTHREAD_LIBS@
++RANLIB = @RANLIB@
++SED = @SED@
++SET_MAKE = @SET_MAKE@
++SHELL = @SHELL@
++SNMP_CFLAGS = @SNMP_CFLAGS@
++SNMP_CFLGAS = @SNMP_CFLGAS@
++SNMP_LIBS = @SNMP_LIBS@
++STRIP = @STRIP@
++VERSION = @VERSION@
++abs_builddir = @abs_builddir@
++abs_srcdir = @abs_srcdir@
++abs_top_builddir = @abs_top_builddir@
++abs_top_srcdir = @abs_top_srcdir@
++ac_ct_CC = @ac_ct_CC@
++ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
++am__include = @am__include@
++am__leading_dot = @am__leading_dot@
++am__quote = @am__quote@
++am__tar = @am__tar@
++am__untar = @am__untar@
++ax_pthread_config = @ax_pthread_config@
++bindir = @bindir@
++build = @build@
++build_alias = @build_alias@
++build_cpu = @build_cpu@
++build_os = @build_os@
++build_vendor = @build_vendor@
++builddir = @builddir@
++datadir = @datadir@
++datarootdir = @datarootdir@
++docdir = @docdir@
++dvidir = @dvidir@
++exec_prefix = @exec_prefix@
++host = @host@
++host_alias = @host_alias@
++host_cpu = @host_cpu@
++host_os = @host_os@
++host_vendor = @host_vendor@
++htmldir = @htmldir@
++includedir = @includedir@
++infodir = @infodir@
++install_sh = @install_sh@
++libdir = @libdir@
++libexecdir = @libexecdir@
++localedir = @localedir@
++localstatedir = @localstatedir@
++lt_ECHO = @lt_ECHO@
++mandir = @mandir@
++mkdir_p = @mkdir_p@
++oldincludedir = @oldincludedir@
++pdfdir = @pdfdir@
++prefix = @prefix@
++program_transform_name = @program_transform_name@
++psdir = @psdir@
++sbindir = @sbindir@
++sharedstatedir = @sharedstatedir@
++srcdir = @srcdir@
++sysconfdir = @sysconfdir@
++target_alias = @target_alias@
++top_build_prefix = @top_build_prefix@
++top_builddir = @top_builddir@
++top_srcdir = @top_srcdir@
++ACLOCAL_AMFLAGS = -I m4
++SUBDIRS = include src
++pkgconfigdir = $(libdir)/pkgconfig
++pkgconfig_DATA = libdessert.pc
++@DX_COND_doc_TRUE@@DX_COND_html_TRUE@DX_CLEAN_HTML = @DX_DOCDIR@/html
++@DX_COND_chm_TRUE@@DX_COND_doc_TRUE@DX_CLEAN_CHM = @DX_DOCDIR@/chm
++@DX_COND_chi_TRUE@@DX_COND_chm_TRUE@@DX_COND_doc_TRUE@DX_CLEAN_CHI = @DX_DOCDIR@/@PACKAGE@.chi
++@DX_COND_doc_TRUE@@DX_COND_man_TRUE@DX_CLEAN_MAN = @DX_DOCDIR@/man
++@DX_COND_doc_TRUE@@DX_COND_rtf_TRUE@DX_CLEAN_RTF = @DX_DOCDIR@/rtf
++@DX_COND_doc_TRUE@@DX_COND_xml_TRUE@DX_CLEAN_XML = @DX_DOCDIR@/xml
++@DX_COND_doc_TRUE@@DX_COND_ps_TRUE@DX_CLEAN_PS = @DX_DOCDIR@/@PACKAGE@.ps
++@DX_COND_doc_TRUE@@DX_COND_ps_TRUE@DX_PS_GOAL = doxygen-ps
++@DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@DX_CLEAN_PDF = @DX_DOCDIR@/@PACKAGE@.pdf
++@DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@DX_PDF_GOAL = doxygen-pdf
++@DX_COND_doc_TRUE@@DX_COND_latex_TRUE@DX_CLEAN_LATEX = @DX_DOCDIR@/latex
++@DX_COND_doc_TRUE@DX_CLEANFILES = \
++@DX_COND_doc_TRUE@ @DX_DOCDIR@/@PACKAGE@.tag \
++@DX_COND_doc_TRUE@ -r \
++@DX_COND_doc_TRUE@ $(DX_CLEAN_HTML) \
++@DX_COND_doc_TRUE@ $(DX_CLEAN_CHM) \
++@DX_COND_doc_TRUE@ $(DX_CLEAN_CHI) \
++@DX_COND_doc_TRUE@ $(DX_CLEAN_MAN) \
++@DX_COND_doc_TRUE@ $(DX_CLEAN_RTF) \
++@DX_COND_doc_TRUE@ $(DX_CLEAN_XML) \
++@DX_COND_doc_TRUE@ $(DX_CLEAN_PS) \
++@DX_COND_doc_TRUE@ $(DX_CLEAN_PDF) \
++@DX_COND_doc_TRUE@ $(DX_CLEAN_LATEX)
++
++EXTRA_DIST = autogen.sh DES-SERT.doxyfile doxygen/html
++all: config.h
++ $(MAKE) $(AM_MAKEFLAGS) all-recursive
++
++.SUFFIXES:
++am--refresh:
++ @:
++$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(srcdir)/doxygen-include.am $(am__configure_deps)
++ @for dep in $?; do \
++ case '$(am__configure_deps)' in \
++ *$$dep*) \
++ echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \
++ $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \
++ && exit 0; \
++ exit 1;; \
++ esac; \
++ done; \
++ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \
++ $(am__cd) $(top_srcdir) && \
++ $(AUTOMAKE) --gnu Makefile
++.PRECIOUS: Makefile
++Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
++ @case '$?' in \
++ *config.status*) \
++ echo ' $(SHELL) ./config.status'; \
++ $(SHELL) ./config.status;; \
++ *) \
++ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
++ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
++ esac;
++
++$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
++ $(SHELL) ./config.status --recheck
++
++$(top_srcdir)/configure: $(am__configure_deps)
++ $(am__cd) $(srcdir) && $(AUTOCONF)
++$(ACLOCAL_M4): $(am__aclocal_m4_deps)
++ $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
++$(am__aclocal_m4_deps):
++
++config.h: stamp-h1
++ @if test ! -f $@; then \
++ rm -f stamp-h1; \
++ $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \
++ else :; fi
++
++stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
++ @rm -f stamp-h1
++ cd $(top_builddir) && $(SHELL) ./config.status config.h
++$(srcdir)/config.h.in: $(am__configure_deps)
++ ($(am__cd) $(top_srcdir) && $(AUTOHEADER))
++ rm -f stamp-h1
++ touch $@
++
++distclean-hdr:
++ -rm -f config.h stamp-h1
++libdessert.pc: $(top_builddir)/config.status $(srcdir)/libdessert.pc.in
++ cd $(top_builddir) && $(SHELL) ./config.status $@
++
++mostlyclean-libtool:
++ -rm -f *.lo
++
++clean-libtool:
++ -rm -rf .libs _libs
++
++distclean-libtool:
++ -rm -f libtool config.lt
++install-pkgconfigDATA: $(pkgconfig_DATA)
++ @$(NORMAL_INSTALL)
++ test -z "$(pkgconfigdir)" || $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)"
++ @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
++ for p in $$list; do \
++ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
++ echo "$$d$$p"; \
++ done | $(am__base_list) | \
++ while read files; do \
++ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgconfigdir)'"; \
++ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgconfigdir)" || exit $$?; \
++ done
++
++uninstall-pkgconfigDATA:
++ @$(NORMAL_UNINSTALL)
++ @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \
++ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
++ test -n "$$files" || exit 0; \
++ echo " ( cd '$(DESTDIR)$(pkgconfigdir)' && rm -f" $$files ")"; \
++ cd "$(DESTDIR)$(pkgconfigdir)" && rm -f $$files
++
++# This directory's subdirectories are mostly independent; you can cd
++# into them and run `make' without going through this Makefile.
++# To change the values of `make' variables: instead of editing Makefiles,
++# (1) if the variable is set in `config.status', edit `config.status'
++# (which will cause the Makefiles to be regenerated when you run `make');
++# (2) otherwise, pass the desired values on the `make' command line.
++$(RECURSIVE_TARGETS):
++ @failcom='exit 1'; \
++ for f in x $$MAKEFLAGS; do \
++ case $$f in \
++ *=* | --[!k]*);; \
++ *k*) failcom='fail=yes';; \
++ esac; \
++ done; \
++ dot_seen=no; \
++ target=`echo $@ | sed s/-recursive//`; \
++ list='$(SUBDIRS)'; 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; \
++ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
++ || eval $$failcom; \
++ done; \
++ if test "$$dot_seen" = "no"; then \
++ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
++ fi; test -z "$$fail"
++
++$(RECURSIVE_CLEAN_TARGETS):
++ @failcom='exit 1'; \
++ for f in x $$MAKEFLAGS; do \
++ case $$f in \
++ *=* | --[!k]*);; \
++ *k*) failcom='fail=yes';; \
++ esac; \
++ done; \
++ dot_seen=no; \
++ case "$@" in \
++ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
++ *) list='$(SUBDIRS)' ;; \
++ esac; \
++ rev=''; for subdir in $$list; do \
++ if test "$$subdir" = "."; then :; else \
++ rev="$$subdir $$rev"; \
++ fi; \
++ done; \
++ rev="$$rev ."; \
++ target=`echo $@ | sed s/-recursive//`; \
++ for subdir in $$rev; do \
++ echo "Making $$target in $$subdir"; \
++ if test "$$subdir" = "."; then \
++ local_target="$$target-am"; \
++ else \
++ local_target="$$target"; \
++ fi; \
++ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
++ || eval $$failcom; \
++ done && test -z "$$fail"
++tags-recursive:
++ list='$(SUBDIRS)'; for subdir in $$list; do \
++ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
++ done
++ctags-recursive:
++ list='$(SUBDIRS)'; for subdir in $$list; do \
++ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
++ done
++
++ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
++ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
++ unique=`for i in $$list; do \
++ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
++ done | \
++ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
++ END { if (nonempty) { for (i in files) print i; }; }'`; \
++ mkid -fID $$unique
++tags: TAGS
++
++TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
++ $(TAGS_FILES) $(LISP)
++ set x; \
++ here=`pwd`; \
++ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
++ include_option=--etags-include; \
++ empty_fix=.; \
++ else \
++ include_option=--include; \
++ empty_fix=; \
++ fi; \
++ list='$(SUBDIRS)'; for subdir in $$list; do \
++ if test "$$subdir" = .; then :; else \
++ test ! -f $$subdir/TAGS || \
++ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
++ fi; \
++ done; \
++ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
++ unique=`for i in $$list; do \
++ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
++ done | \
++ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
++ END { if (nonempty) { for (i in files) print i; }; }'`; \
++ shift; \
++ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
++ test -n "$$unique" || unique=$$empty_fix; \
++ if test $$# -gt 0; then \
++ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
++ "$$@" $$unique; \
++ else \
++ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
++ $$unique; \
++ fi; \
++ fi
++ctags: CTAGS
++CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
++ $(TAGS_FILES) $(LISP)
++ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
++ unique=`for i in $$list; do \
++ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
++ done | \
++ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
++ END { if (nonempty) { for (i in files) print i; }; }'`; \
++ test -z "$(CTAGS_ARGS)$$unique" \
++ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
++ $$unique
++
++GTAGS:
++ here=`$(am__cd) $(top_builddir) && pwd` \
++ && $(am__cd) $(top_srcdir) \
++ && gtags -i $(GTAGS_ARGS) "$$here"
++
++distclean-tags:
++ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
++
++distdir: $(DISTFILES)
++ $(am__remove_distdir)
++ test -d "$(distdir)" || mkdir "$(distdir)"
++ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
++ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
++ list='$(DISTFILES)'; \
++ dist_files=`for file in $$list; do echo $$file; done | \
++ sed -e "s|^$$srcdirstrip/||;t" \
++ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
++ case $$dist_files in \
++ */*) $(MKDIR_P) `echo "$$dist_files" | \
++ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
++ sort -u` ;; \
++ esac; \
++ for file in $$dist_files; do \
++ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
++ if test -d $$d/$$file; then \
++ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
++ if test -d "$(distdir)/$$file"; then \
++ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
++ fi; \
++ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
++ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
++ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
++ fi; \
++ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
++ else \
++ test -f "$(distdir)/$$file" \
++ || cp -p $$d/$$file "$(distdir)/$$file" \
++ || exit 1; \
++ fi; \
++ done
++ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
++ if test "$$subdir" = .; then :; else \
++ test -d "$(distdir)/$$subdir" \
++ || $(MKDIR_P) "$(distdir)/$$subdir" \
++ || exit 1; \
++ fi; \
++ done
++ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
++ if test "$$subdir" = .; then :; else \
++ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
++ $(am__relativize); \
++ new_distdir=$$reldir; \
++ dir1=$$subdir; dir2="$(top_distdir)"; \
++ $(am__relativize); \
++ new_top_distdir=$$reldir; \
++ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
++ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
++ ($(am__cd) $$subdir && \
++ $(MAKE) $(AM_MAKEFLAGS) \
++ top_distdir="$$new_top_distdir" \
++ distdir="$$new_distdir" \
++ am__remove_distdir=: \
++ am__skip_length_check=: \
++ am__skip_mode_fix=: \
++ distdir) \
++ || exit 1; \
++ fi; \
++ done
++ -test -n "$(am__skip_mode_fix)" \
++ || find "$(distdir)" -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
++ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
++ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
++ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
++ || chmod -R a+r "$(distdir)"
++dist-gzip: distdir
++ tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
++ $(am__remove_distdir)
++dist-bzip2: distdir
++ tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
++ $(am__remove_distdir)
++
++dist-lzma: distdir
++ tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma
++ $(am__remove_distdir)
++
++dist-xz: distdir
++ tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz
++ $(am__remove_distdir)
++
++dist-tarZ: distdir
++ tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
++ $(am__remove_distdir)
++
++dist-shar: distdir
++ shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
++ $(am__remove_distdir)
++
++dist-zip: distdir
++ -rm -f $(distdir).zip
++ zip -rq $(distdir).zip $(distdir)
++ $(am__remove_distdir)
++
++dist dist-all: distdir
++ tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
++ tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2
++ $(am__remove_distdir)
++
++# This target untars the dist file and tries a VPATH configuration. Then
++# it guarantees that the distribution is self-contained by making another
++# tarfile.
++distcheck: dist
++ case '$(DIST_ARCHIVES)' in \
++ *.tar.gz*) \
++ GZIP=$(GZIP_ENV) gunzip -c $(distdir).tar.gz | $(am__untar) ;;\
++ *.tar.bz2*) \
++ bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\
++ *.tar.lzma*) \
++ unlzma -c $(distdir).tar.lzma | $(am__untar) ;;\
++ *.tar.xz*) \
++ xz -dc $(distdir).tar.xz | $(am__untar) ;;\
++ *.tar.Z*) \
++ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
++ *.shar.gz*) \
++ GZIP=$(GZIP_ENV) gunzip -c $(distdir).shar.gz | unshar ;;\
++ *.zip*) \
++ unzip $(distdir).zip ;;\
++ esac
++ chmod -R a-w $(distdir); chmod a+w $(distdir)
++ mkdir $(distdir)/_build
++ mkdir $(distdir)/_inst
++ chmod a-w $(distdir)
++ test -d $(distdir)/_build || exit 0; \
++ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
++ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
++ && am__cwd=`pwd` \
++ && $(am__cd) $(distdir)/_build \
++ && ../configure --srcdir=.. --prefix="$$dc_install_base" \
++ $(DISTCHECK_CONFIGURE_FLAGS) \
++ && $(MAKE) $(AM_MAKEFLAGS) \
++ && $(MAKE) $(AM_MAKEFLAGS) dvi \
++ && $(MAKE) $(AM_MAKEFLAGS) check \
++ && $(MAKE) $(AM_MAKEFLAGS) install \
++ && $(MAKE) $(AM_MAKEFLAGS) installcheck \
++ && $(MAKE) $(AM_MAKEFLAGS) uninstall \
++ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
++ distuninstallcheck \
++ && chmod -R a-w "$$dc_install_base" \
++ && ({ \
++ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
++ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
++ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
++ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
++ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
++ } || { rm -rf "$$dc_destdir"; exit 1; }) \
++ && rm -rf "$$dc_destdir" \
++ && $(MAKE) $(AM_MAKEFLAGS) dist \
++ && rm -rf $(DIST_ARCHIVES) \
++ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \
++ && cd "$$am__cwd" \
++ || exit 1
++ $(am__remove_distdir)
++ @(echo "$(distdir) archives ready for distribution: "; \
++ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
++ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
++distuninstallcheck:
++ @$(am__cd) '$(distuninstallcheck_dir)' \
++ && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
++ || { echo "ERROR: files left after uninstall:" ; \
++ if test -n "$(DESTDIR)"; then \
++ echo " (check DESTDIR support)"; \
++ fi ; \
++ $(distuninstallcheck_listfiles) ; \
++ exit 1; } >&2
++distcleancheck: distclean
++ @if test '$(srcdir)' = . ; then \
++ echo "ERROR: distcleancheck can only run from a VPATH build" ; \
++ exit 1 ; \
++ fi
++ @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
++ || { echo "ERROR: files left in build directory after distclean:" ; \
++ $(distcleancheck_listfiles) ; \
++ exit 1; } >&2
++check-am: all-am
++check: check-recursive
++all-am: Makefile $(DATA) config.h
++installdirs: installdirs-recursive
++installdirs-am:
++ for dir in "$(DESTDIR)$(pkgconfigdir)"; do \
++ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
++ done
++install: install-recursive
++install-exec: install-exec-recursive
++install-data: install-data-recursive
++uninstall: uninstall-recursive
++
++install-am: all-am
++ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
++
++installcheck: installcheck-recursive
++install-strip:
++ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
++ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
++ `test -z '$(STRIP)' || \
++ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
++mostlyclean-generic:
++
++clean-generic:
++
++distclean-generic:
++ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
++ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
++
++maintainer-clean-generic:
++ @echo "This command is intended for maintainers to use"
++ @echo "it deletes files that may require special tools to rebuild."
++clean: clean-recursive
++
++clean-am: clean-generic clean-libtool mostlyclean-am
++
++distclean: distclean-recursive
++ -rm -f $(am__CONFIG_DISTCLEAN_FILES)
++ -rm -f Makefile
++distclean-am: clean-am distclean-generic distclean-hdr \
++ distclean-libtool distclean-tags
++
++dvi: dvi-recursive
++
++dvi-am:
++
++html: html-recursive
++
++html-am:
++
++info: info-recursive
++
++info-am:
++
++install-data-am: install-pkgconfigDATA
++
++install-dvi: install-dvi-recursive
++
++install-dvi-am:
++
++install-exec-am:
++
++install-html: install-html-recursive
++
++install-html-am:
++
++install-info: install-info-recursive
++
++install-info-am:
++
++install-man:
++
++install-pdf: install-pdf-recursive
++
++install-pdf-am:
++
++install-ps: install-ps-recursive
++
++install-ps-am:
++
++installcheck-am:
++
++maintainer-clean: maintainer-clean-recursive
++ -rm -f $(am__CONFIG_DISTCLEAN_FILES)
++ -rm -rf $(top_srcdir)/autom4te.cache
++ -rm -f Makefile
++maintainer-clean-am: distclean-am maintainer-clean-generic
++
++mostlyclean: mostlyclean-recursive
++
++mostlyclean-am: mostlyclean-generic mostlyclean-libtool
++
++pdf: pdf-recursive
++
++pdf-am:
++
++ps: ps-recursive
++
++ps-am:
++
++uninstall-am: uninstall-pkgconfigDATA
++
++.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \
++ ctags-recursive install-am install-strip tags-recursive
++
++.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
++ all all-am am--refresh check check-am clean clean-generic \
++ clean-libtool ctags ctags-recursive dist dist-all dist-bzip2 \
++ dist-gzip dist-lzma dist-shar dist-tarZ dist-xz dist-zip \
++ distcheck distclean distclean-generic distclean-hdr \
++ distclean-libtool distclean-tags distcleancheck distdir \
++ distuninstallcheck dvi dvi-am html html-am info info-am \
++ install install-am install-data install-data-am install-dvi \
++ install-dvi-am install-exec install-exec-am install-html \
++ install-html-am install-info install-info-am install-man \
++ install-pdf install-pdf-am install-pkgconfigDATA install-ps \
++ install-ps-am install-strip installcheck installcheck-am \
++ installdirs installdirs-am maintainer-clean \
++ maintainer-clean-generic mostlyclean mostlyclean-generic \
++ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
++ uninstall uninstall-am uninstall-pkgconfigDATA
++
++
++@DX_COND_doc_TRUE@@DX_COND_ps_TRUE@doxygen-ps: @DX_DOCDIR@/@PACKAGE@.ps
++
++@DX_COND_doc_TRUE@@DX_COND_ps_TRUE@@DX_DOCDIR@/@PACKAGE@.ps: @DX_DOCDIR@/@PACKAGE@.tag
++@DX_COND_doc_TRUE@@DX_COND_ps_TRUE@ cd @DX_DOCDIR@/latex; \
++@DX_COND_doc_TRUE@@DX_COND_ps_TRUE@ rm -f *.aux *.toc *.idx *.ind *.ilg *.log *.out; \
++@DX_COND_doc_TRUE@@DX_COND_ps_TRUE@ $(DX_LATEX) refman.tex; \
++@DX_COND_doc_TRUE@@DX_COND_ps_TRUE@ $(MAKEINDEX_PATH) refman.idx; \
++@DX_COND_doc_TRUE@@DX_COND_ps_TRUE@ $(DX_LATEX) refman.tex; \
++@DX_COND_doc_TRUE@@DX_COND_ps_TRUE@ countdown=5; \
++@DX_COND_doc_TRUE@@DX_COND_ps_TRUE@ while $(DX_EGREP) 'Rerun (LaTeX|to get cross-references right)' \
++@DX_COND_doc_TRUE@@DX_COND_ps_TRUE@ refman.log > /dev/null 2>&1 \
++@DX_COND_doc_TRUE@@DX_COND_ps_TRUE@ && test $$countdown -gt 0; do \
++@DX_COND_doc_TRUE@@DX_COND_ps_TRUE@ $(DX_LATEX) refman.tex; \
++@DX_COND_doc_TRUE@@DX_COND_ps_TRUE@ countdown=`expr $$countdown - 1`; \
++@DX_COND_doc_TRUE@@DX_COND_ps_TRUE@ done; \
++@DX_COND_doc_TRUE@@DX_COND_ps_TRUE@ $(DX_DVIPS) -o ../@PACKAGE@.ps refman.dvi
++
++@DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@doxygen-pdf: @DX_DOCDIR@/@PACKAGE@.pdf
++
++@DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@@DX_DOCDIR@/@PACKAGE@.pdf: @DX_DOCDIR@/@PACKAGE@.tag
++@DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@ cd @DX_DOCDIR@/latex; \
++@DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@ rm -f *.aux *.toc *.idx *.ind *.ilg *.log *.out; \
++@DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@ $(DX_PDFLATEX) refman.tex; \
++@DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@ $(DX_MAKEINDEX) refman.idx; \
++@DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@ $(DX_PDFLATEX) refman.tex; \
++@DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@ countdown=5; \
++@DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@ while $(DX_EGREP) 'Rerun (LaTeX|to get cross-references right)' \
++@DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@ refman.log > /dev/null 2>&1 \
++@DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@ && test $$countdown -gt 0; do \
++@DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@ $(DX_PDFLATEX) refman.tex; \
++@DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@ countdown=`expr $$countdown - 1`; \
++@DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@ done; \
++@DX_COND_doc_TRUE@@DX_COND_pdf_TRUE@ mv refman.pdf ../@PACKAGE@.pdf
++
++@DX_COND_doc_TRUE@.PHONY: doxygen-run doxygen-doc $(DX_PS_GOAL) $(DX_PDF_GOAL)
++
++@DX_COND_doc_TRUE@.INTERMEDIATE: doxygen-run $(DX_PS_GOAL) $(DX_PDF_GOAL)
++
++@DX_COND_doc_TRUE@doxygen-run: @DX_DOCDIR@/@PACKAGE@.tag
++
++@DX_COND_doc_TRUE@doxygen-doc: doxygen-run $(DX_PS_GOAL) $(DX_PDF_GOAL)
++
++@DX_COND_doc_TRUE@@DX_DOCDIR@/@PACKAGE@.tag: $(DX_CONFIG) $(pkginclude_HEADERS)
++@DX_COND_doc_TRUE@ rm -rf @DX_DOCDIR@
++@DX_COND_doc_TRUE@ $(DX_ENV) $(DX_DOXYGEN) $(srcdir)/$(DX_CONFIG)
++
++# Tell versions [3.59,3.63) of GNU make to not export all variables.
++# Otherwise a system limit (for SysV at least) may be exceeded.
++.NOEXPORT:
+Index: libdessert0.86-0.86.14/NEWS
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/NEWS 2009-12-09 16:38:27.218928392 +0100
+@@ -0,0 +1 @@
++nothing yet
+Index: libdessert0.86-0.86.14/README
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/README 2009-12-09 16:38:27.218928392 +0100
+@@ -0,0 +1,270 @@
++
++ DES-SERT - an Extensible Routing-Framework for Testbeds
++
++
++Copyright
++
++ Copyright Philipp Schmidt <phils@inf.fu-berlin.de>,
++ Computer Systems and Telematics / Distributed, Embedded Systems (DES) group,
++ Freie Universitaet Berlin
++
++ This document has been published under GNU Free Documentation License.
++ All rights reserved.
++
++
++1. Introduction
++
++ DES-SERT, the DES Simple and Extensible Routing-Framework for Testbeds,
++ is a framework designed to assist researchers implementing routing
++ protocols for testbeds.
++
++ DES-SERT enables the implementation of routing protocols on top of
++ Ethernet via an underlay (Layer 2.5) in user space.
++ It introduces an abstraction from OS specific issues and provides
++ functionality and data structures to implement proactive, reactive,
++ and hybrid routing protocols.
++
++ While generally usable in many application scenarios, it is primarily
++ used in DES-Mesh (http://www.des-testbed.net/), the multi-transceiver
++ wireless mesh network testbed part of the DES-Testbed.
++
++
++2. DES-SERT Architecture
++
++ DES-SERT introduces some concepts to implement routing protocols.
++ When implementing a routing protocol with DES-SERT, you should be
++ familiar with these concepts to structure and tailor your implementation.
++
++
++2.1. messages
++
++ Every packet you send or receive on the mesh is represented as a
++ DES-SERT message. From a programmers point of view, a DES-SERT message
++ is just a C-structure:
++
++ typedef struct dessert_msg {
++ /** the layer2 header on the wire */
++ struct ether_header l2h;
++ /** short name of the protocol as passed to dessert_init() */
++ char proto[DESSERT_PROTO_STRLEN];
++ /** version of the app as passed to dessert_init() */
++ uint8_t ver;
++ /** flags - bits 1-4 reserved for dessert, bits 5-8 for app usage */
++ uint8_t flags;
++ /** ttl or hopcount field for app usage - 0xff if not used*/
++ uint8_t ttl;
++ /** reserved for app usage - 0x00 if not used */
++ uint8_t u8;
++ /** reserved for app usage - 0xbeef if not used */
++ uint16_t u16;
++ /** header length incl. extensions */
++ uint16_t hlen;
++ /** payload length */
++ uint16_t plen;
++ } dessert_msg_t;
++
++ Every message sent via the underlay carries this structure as a packet
++ header. All data in a "dessert_msg" is stored in network byte order.
++ DES-SERT tries to care as automatically as possible of this structure.
++ Nevertheless you will have to care at least about: "l2h.ether_dhost" and
++ "ttl".
++
++ If you need to send some data along with every packet, e.g. some kind of
++ metric or cost your routing protocol uses, you should try to fit this
++ data into the "u8", "u16" and the upper 4 bits of the "flags" field.
++ These fields will never be touched by DES-SERT except on initialization
++ via "dessert_msg_new".
++
++ Because just a C-structure is not really usable as a packet, there are some
++ utility functions around - please have a look around in "dessert.h" and the
++ doxygen doku. The most important ones are: "dessert_msg_new" and
++ "dessert_msg_destroy", which do not simply allocate memory for a DES-SERT
++ message, but for a whole packet of maximum size and initialize the
++ structures for further packet construction/processing.
++
++ int dessert_msg_new(dessert_msg_t **msgout);
++
++ void dessert_msg_destroy(dessert_msg_t* msg);
++
++
++2.1.2 DES-SERT extensions
++
++ A DES-SERT extension is some structure used to piggyback data on a
++ DES-SERT message. It consists of a 8-bit user supplied type field (with
++ some reserved values), an 8-bit length field and user supplied data of
++ arbitrary length of 253 bytes at most.
++
++ It can be added to a message via "dessert_msg_addext", retrieved via
++ "dessert_msg_getext" and removed via "dessert_msg_delext".
++
++ int dessert_msg_addext(dessert_msg_t* msg,
++ dessert_ext_t** ext, uint8_t type, size_t len);
++
++ int dessert_msg_getext(const dessert_msg_t* msg,
++ dessert_ext_t** ext, uint8_t type, int index);
++
++ int dessert_msg_delext(dessert_msg_t *msg, dessert_ext_t *ext);
++
++ It is recommended not to put single data fields in extensions, but
++ combine semantically related data in a struct and attach this struct
++ as an extension because every extension carried introduces an 16-bit
++ overhead to the packet.
++
++
++2.2. Processing pipelines
++
++ Routing algorithms are often split up in several parts like packet
++ validation, loop-detection or routing table lookup.
++ To implement these as independent and clear as possible, DES-SERT enables
++ you to split up your packet processing in as many parts as you like.
++
++ There are two separate processing pipelines - one for packets received
++ from the kernel via a TUN or TAP interface and one for packets received
++ via an interface used on the mesh network.
++
++ You can register callbacks to be added to one of these pipelines with
++ "dessert_sysrxcb_add" or "dessert_meshrxcb_add". Both take an additional
++ integer argument ("priority") specifying the order the callbacks should
++ be called. Higher "priority" value results in being called later
++ within the pipeline.
++
++ int dessert_sysrxcb_add(dessert_sysrxcb_t* c, int prio);
++
++ int dessert_meshrxcb_add(dessert_meshrxcb_t* c, int prio);
++
++ If a callback returns "DESSERT_MSG_KEEP" the packed will be processed by
++ further callbacks, if it returns "DESSERT_MSG_DROP" the message will be
++ dropped and no further callbacks will be called.
++
++ You do not need to care about the management of the buffers for incoming
++ messages - DES-SERT does this for you. Nevertheless if you need to add
++ extensions or enlarge the payload of a message, you need to tell DES-SERT
++ to enlarge the buffer for you if the flag "DESSERT_FLAG_SPARSE" is set on
++ the message. You can do this by returning "DESSERT_MSG_NEEDNOSPARSE" from
++ within a callback. The callback will be called again with a larger buffer
++ and no "DESSERT_FLAG_SPARSE" flag being set.
++
++
++2.2.1. Processing buffer
++
++ If you need to pass information along several callbacks, you can do this
++ in the processing buffer passed to the the callbacks. This buffer contains
++ some local processing flags ("lflags") set by the builtin callback
++ "dessert_msg_ifaceflags_cb" (e.g. telling you about packet origin or if
++ the packet is multicast) and 1KB of space for your callbacks to pass
++ along arbitrary data.
++
++ This buffer might only be allocated after you explicitly request it - in
++ this case the proc argument is NULL and you can return the value
++ "DESSERT_MSG_NEEDMSGPROC" from within your callback. The callback will
++ be called again with a valid processing buffer.
++
++
++2.3. Using interfaces
++
++
++2.3.1. Using a TUN/TAP interface
++
++ First you have to choose whether to use a TUN or TAP interface. TUN
++ interfaces are used to exchange IPv4 / IPv6 datagrams with the kernel
++ network stack. TAP interfaces are used to exchange Ethernet frames
++ with the kernel network stack. If you want to route Ethernet frames,
++ you should choose a TAP interface. If you intend to implement
++ a custom layer 2 to layer 3 mapping, you should use a TUN interface.
++
++ Currently, you can only initialize and use a single sys (TUN/TAP) interface.
++ This is done by "dessert_sysif_init". You must then set up the interface
++ config in the kernel yourself e.g. by calling "ifconfig".
++
++ int dessert_sysif_init(char* name, uint8_t flags);
++
++ In either case, frames you receive from a TUN/TAP interface will be
++ passed along the callbacks added by "dessert_sysrxcb_add" to the
++ processing pipeline. Each of them will be called with a pointer to an
++ Ethernet frame. In case of a TUN interface, "ether_shost" and "ether_dhost"
++ are set to "00:00:00:00:00:00", and ether_type reflects whether the packet
++ received is IPv4 oder IPv6.
++
++ Packets are sent to the kernel network stack with "dessert_syssend".
++ In case of a TUN Interface "ether_shost" and "ether_dhost" will be
++ ignored.
++
++ int dessert_syssend(const struct ether_header *eth, size_t len);
++
++
++2.3.2. Using a mesh interface
++
++ Mesh interfaces are used similar to the TUN/TAP interface with two major
++ differences: You can have multiple mesh interfaces and they send and
++ receive DES-SERT messages instead of Ethernet frames.
++
++ You add an mesh interface using "dessert_meshif_add" and can send to it
++ by calling "dessert_meshsend". If the interface parameter is NULL, the
++ packet will be transmitted over every interface (good for flooding).
++
++ int dessert_meshif_add(const char* dev, uint8_t flags);
++
++ int dessert_meshsend(const dessert_msg_t* msg,
++ const dessert_meshif_t *iface);
++
++
++2.4. Logging
++
++ You can write log messages easily with a bunch of macros provided
++ by DES-SERT ("dessert_debug", "dessert_info" ,"dessert_notice",
++ "dessert_warn", "dessert_warning", "dessert_err", "dessert_crit",
++ "dessert_alert" and "dessert_emerg"). Each of them can be used like
++ "printf" and logs to Syslog, STDERR, file or a ringbuffer depending
++ on your configuration.
++
++ DES-SERT also ships with a custom "assert" macro which acts like
++ the original macro from the standard C library and uses the logging
++ mechanism described above.
++
++
++2.5. Periodics
++
++ Periodics help you to perform maintenance or delayed tasks. A task
++ consists of a callback, which will be called at the time you requested,
++ and a void pointer the callback is passed. You can add these tasks by
++ calling "dessert_periodic_add" or "dessert_periodic_add_delayed".
++
++
++2.6. CLI
++
++ DES-SERT supports simple configuration and debugging of your routing
++ protocol implementation by providing a Cisco like command line interface
++ (cli) and a config file parser based upon it.
++ This cli is realized through libcli (http://code.google.com/p/libcli/).
++
++ DES-SERT does some of the initialization of libcli. Therefore, it provides
++ the main cli anchor "dessert_cli" and some anchors to add commands below
++ "dessert_cli_.*". Because DES-SERT only loosely wraps libcli, you should
++ make yourself familiar with libcli itself. This may be improved in further
++ DES-SERT releases.
++
++ You can evaluate a config file by calling "cli_file" and start a thread
++ enabling a telnet-interface for DES-SERT by calling "dessert_cli_run".
++
++
++2.7. Putting all together
++
++ Now you have learned about the most important aspects of DES-SERT.
++ To write your own routing protocol implementation, you need to know
++ how to put all this together.
++
++ You should start with a main() program parsing the command line options
++ and then calling "dessert_init()". This is needed to set up DES-SERT
++ correctly. Afterwards you can register callbacks, read the config file
++ and do what you like. If everything is set up, you call "dessert_run()"
++ and let the event based framework do its job.
++
++ If you would like to see a complete protocol implementation sample,
++ have a look at the "gossiping" directory.
++
++
++3. Contact & Feedback
++
++ We love feedback - if you have patches, comments or questions,
++ please contact us! Recent contact information is available on
++ http://www.des-testbed.net/des-sert/
+Index: libdessert0.86-0.86.14/autogen.sh
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/autogen.sh 2009-12-09 16:38:27.218928392 +0100
+@@ -0,0 +1,22 @@
++#!/bin/sh
++
++# ugly hack to get libtools major version
++LIBTOOL_MAJOR_VERSION=`libtool --version | head -n 1 | cut -d " " -f 4 | cut -c1`
++
++M4_PATH="m4"
++
++M4_FILES="libtool.m4 \
++ ltoptions.m4 \
++ ltsugar.m4 \
++ ltversion.m4 \
++ lt~obsolete.m4 \
++ "
++
++if test ${LIBTOOL_MAJOR_VERSION} -lt 2; then
++ for i in ${M4_FILES}
++ do
++ rm ${M4_PATH}/${i}
++ done
++fi
++
++autoreconf --force --install -I m4
+Index: libdessert0.86-0.86.14/config.guess
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/config.guess 2009-12-09 16:38:27.218928392 +0100
+@@ -0,0 +1,1533 @@
++#! /bin/sh
++# Attempt to guess a canonical system name.
++# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
++# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
++# Free Software Foundation, Inc.
++
++timestamp='2009-06-10'
++
++# This file is free software; you can redistribute it and/or modify it
++# under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2 of the License, or
++# (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful, but
++# WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++# General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
++# 02110-1301, USA.
++#
++# As a special exception to the GNU General Public License, if you
++# distribute this file as part of a program that contains a
++# configuration script generated by Autoconf, you may include it under
++# the same distribution terms that you use for the rest of that program.
++
++
++# Originally written by Per Bothner <per@bothner.com>.
++# Please send patches to <config-patches@gnu.org>. Submit a context
++# diff and a properly formatted ChangeLog entry.
++#
++# This script attempts to guess a canonical system name similar to
++# config.sub. If it succeeds, it prints the system name on stdout, and
++# exits with 0. Otherwise, it exits with 1.
++#
++# The plan is that this can be called by configure scripts if you
++# don't specify an explicit build system type.
++
++me=`echo "$0" | sed -e 's,.*/,,'`
++
++usage="\
++Usage: $0 [OPTION]
++
++Output the configuration name of the system \`$me' is run on.
++
++Operation modes:
++ -h, --help print this help, then exit
++ -t, --time-stamp print date of last modification, then exit
++ -v, --version print version number, then exit
++
++Report bugs and patches to <config-patches@gnu.org>."
++
++version="\
++GNU config.guess ($timestamp)
++
++Originally written by Per Bothner.
++Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
++2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
++
++This is free software; see the source for copying conditions. There is NO
++warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
++
++help="
++Try \`$me --help' for more information."
++
++# Parse command line
++while test $# -gt 0 ; do
++ case $1 in
++ --time-stamp | --time* | -t )
++ echo "$timestamp" ; exit ;;
++ --version | -v )
++ echo "$version" ; exit ;;
++ --help | --h* | -h )
++ echo "$usage"; exit ;;
++ -- ) # Stop option processing
++ shift; break ;;
++ - ) # Use stdin as input.
++ break ;;
++ -* )
++ echo "$me: invalid option $1$help" >&2
++ exit 1 ;;
++ * )
++ break ;;
++ esac
++done
++
++if test $# != 0; then
++ echo "$me: too many arguments$help" >&2
++ exit 1
++fi
++
++trap 'exit 1' 1 2 15
++
++# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
++# compiler to aid in system detection is discouraged as it requires
++# temporary files to be created and, as you can see below, it is a
++# headache to deal with in a portable fashion.
++
++# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
++# use `HOST_CC' if defined, but it is deprecated.
++
++# Portable tmp directory creation inspired by the Autoconf team.
++
++set_cc_for_build='
++trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
++trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
++: ${TMPDIR=/tmp} ;
++ { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
++ { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
++ { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
++ { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
++dummy=$tmp/dummy ;
++tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
++case $CC_FOR_BUILD,$HOST_CC,$CC in
++ ,,) echo "int x;" > $dummy.c ;
++ for c in cc gcc c89 c99 ; do
++ if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
++ CC_FOR_BUILD="$c"; break ;
++ fi ;
++ done ;
++ if test x"$CC_FOR_BUILD" = x ; then
++ CC_FOR_BUILD=no_compiler_found ;
++ fi
++ ;;
++ ,,*) CC_FOR_BUILD=$CC ;;
++ ,*,*) CC_FOR_BUILD=$HOST_CC ;;
++esac ; set_cc_for_build= ;'
++
++# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
++# (ghazi@noc.rutgers.edu 1994-08-24)
++if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
++ PATH=$PATH:/.attbin ; export PATH
++fi
++
++UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
++UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
++UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown
++UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
++
++# Note: order is significant - the case branches are not exclusive.
++
++case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
++ *:NetBSD:*:*)
++ # NetBSD (nbsd) targets should (where applicable) match one or
++ # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*,
++ # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently
++ # switched to ELF, *-*-netbsd* would select the old
++ # object file format. This provides both forward
++ # compatibility and a consistent mechanism for selecting the
++ # object file format.
++ #
++ # Note: NetBSD doesn't particularly care about the vendor
++ # portion of the name. We always set it to "unknown".
++ sysctl="sysctl -n hw.machine_arch"
++ UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
++ /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
++ case "${UNAME_MACHINE_ARCH}" in
++ armeb) machine=armeb-unknown ;;
++ arm*) machine=arm-unknown ;;
++ sh3el) machine=shl-unknown ;;
++ sh3eb) machine=sh-unknown ;;
++ sh5el) machine=sh5le-unknown ;;
++ *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
++ esac
++ # The Operating System including object format, if it has switched
++ # to ELF recently, or will in the future.
++ case "${UNAME_MACHINE_ARCH}" in
++ arm*|i386|m68k|ns32k|sh3*|sparc|vax)
++ eval $set_cc_for_build
++ if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
++ | grep -q __ELF__
++ then
++ # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
++ # Return netbsd for either. FIX?
++ os=netbsd
++ else
++ os=netbsdelf
++ fi
++ ;;
++ *)
++ os=netbsd
++ ;;
++ esac
++ # The OS release
++ # Debian GNU/NetBSD machines have a different userland, and
++ # thus, need a distinct triplet. However, they do not need
++ # kernel version information, so it can be replaced with a
++ # suitable tag, in the style of linux-gnu.
++ case "${UNAME_VERSION}" in
++ Debian*)
++ release='-gnu'
++ ;;
++ *)
++ release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
++ ;;
++ esac
++ # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
++ # contains redundant information, the shorter form:
++ # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
++ echo "${machine}-${os}${release}"
++ exit ;;
++ *:OpenBSD:*:*)
++ UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
++ echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
++ exit ;;
++ *:ekkoBSD:*:*)
++ echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
++ exit ;;
++ *:SolidBSD:*:*)
++ echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE}
++ exit ;;
++ macppc:MirBSD:*:*)
++ echo powerpc-unknown-mirbsd${UNAME_RELEASE}
++ exit ;;
++ *:MirBSD:*:*)
++ echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
++ exit ;;
++ alpha:OSF1:*:*)
++ case $UNAME_RELEASE in
++ *4.0)
++ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
++ ;;
++ *5.*)
++ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
++ ;;
++ esac
++ # According to Compaq, /usr/sbin/psrinfo has been available on
++ # OSF/1 and Tru64 systems produced since 1995. I hope that
++ # covers most systems running today. This code pipes the CPU
++ # types through head -n 1, so we only detect the type of CPU 0.
++ ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1`
++ case "$ALPHA_CPU_TYPE" in
++ "EV4 (21064)")
++ UNAME_MACHINE="alpha" ;;
++ "EV4.5 (21064)")
++ UNAME_MACHINE="alpha" ;;
++ "LCA4 (21066/21068)")
++ UNAME_MACHINE="alpha" ;;
++ "EV5 (21164)")
++ UNAME_MACHINE="alphaev5" ;;
++ "EV5.6 (21164A)")
++ UNAME_MACHINE="alphaev56" ;;
++ "EV5.6 (21164PC)")
++ UNAME_MACHINE="alphapca56" ;;
++ "EV5.7 (21164PC)")
++ UNAME_MACHINE="alphapca57" ;;
++ "EV6 (21264)")
++ UNAME_MACHINE="alphaev6" ;;
++ "EV6.7 (21264A)")
++ UNAME_MACHINE="alphaev67" ;;
++ "EV6.8CB (21264C)")
++ UNAME_MACHINE="alphaev68" ;;
++ "EV6.8AL (21264B)")
++ UNAME_MACHINE="alphaev68" ;;
++ "EV6.8CX (21264D)")
++ UNAME_MACHINE="alphaev68" ;;
++ "EV6.9A (21264/EV69A)")
++ UNAME_MACHINE="alphaev69" ;;
++ "EV7 (21364)")
++ UNAME_MACHINE="alphaev7" ;;
++ "EV7.9 (21364A)")
++ UNAME_MACHINE="alphaev79" ;;
++ esac
++ # A Pn.n version is a patched version.
++ # A Vn.n version is a released version.
++ # A Tn.n version is a released field test version.
++ # A Xn.n version is an unreleased experimental baselevel.
++ # 1.2 uses "1.2" for uname -r.
++ echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
++ exit ;;
++ Alpha\ *:Windows_NT*:*)
++ # How do we know it's Interix rather than the generic POSIX subsystem?
++ # Should we change UNAME_MACHINE based on the output of uname instead
++ # of the specific Alpha model?
++ echo alpha-pc-interix
++ exit ;;
++ 21064:Windows_NT:50:3)
++ echo alpha-dec-winnt3.5
++ exit ;;
++ Amiga*:UNIX_System_V:4.0:*)
++ echo m68k-unknown-sysv4
++ exit ;;
++ *:[Aa]miga[Oo][Ss]:*:*)
++ echo ${UNAME_MACHINE}-unknown-amigaos
++ exit ;;
++ *:[Mm]orph[Oo][Ss]:*:*)
++ echo ${UNAME_MACHINE}-unknown-morphos
++ exit ;;
++ *:OS/390:*:*)
++ echo i370-ibm-openedition
++ exit ;;
++ *:z/VM:*:*)
++ echo s390-ibm-zvmoe
++ exit ;;
++ *:OS400:*:*)
++ echo powerpc-ibm-os400
++ exit ;;
++ arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
++ echo arm-acorn-riscix${UNAME_RELEASE}
++ exit ;;
++ arm:riscos:*:*|arm:RISCOS:*:*)
++ echo arm-unknown-riscos
++ exit ;;
++ SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
++ echo hppa1.1-hitachi-hiuxmpp
++ exit ;;
++ Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
++ # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
++ if test "`(/bin/universe) 2>/dev/null`" = att ; then
++ echo pyramid-pyramid-sysv3
++ else
++ echo pyramid-pyramid-bsd
++ fi
++ exit ;;
++ NILE*:*:*:dcosx)
++ echo pyramid-pyramid-svr4
++ exit ;;
++ DRS?6000:unix:4.0:6*)
++ echo sparc-icl-nx6
++ exit ;;
++ DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
++ case `/usr/bin/uname -p` in
++ sparc) echo sparc-icl-nx7; exit ;;
++ esac ;;
++ s390x:SunOS:*:*)
++ echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
++ exit ;;
++ sun4H:SunOS:5.*:*)
++ echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
++ exit ;;
++ sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
++ echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
++ exit ;;
++ i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
++ eval $set_cc_for_build
++ SUN_ARCH="i386"
++ # If there is a compiler, see if it is configured for 64-bit objects.
++ # Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
++ # This test works for both compilers.
++ if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
++ if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
++ (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
++ grep IS_64BIT_ARCH >/dev/null
++ then
++ SUN_ARCH="x86_64"
++ fi
++ fi
++ echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
++ exit ;;
++ sun4*:SunOS:6*:*)
++ # According to config.sub, this is the proper way to canonicalize
++ # SunOS6. Hard to guess exactly what SunOS6 will be like, but
++ # it's likely to be more like Solaris than SunOS4.
++ echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
++ exit ;;
++ sun4*:SunOS:*:*)
++ case "`/usr/bin/arch -k`" in
++ Series*|S4*)
++ UNAME_RELEASE=`uname -v`
++ ;;
++ esac
++ # Japanese Language versions have a version number like `4.1.3-JL'.
++ echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
++ exit ;;
++ sun3*:SunOS:*:*)
++ echo m68k-sun-sunos${UNAME_RELEASE}
++ exit ;;
++ sun*:*:4.2BSD:*)
++ UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
++ test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
++ case "`/bin/arch`" in
++ sun3)
++ echo m68k-sun-sunos${UNAME_RELEASE}
++ ;;
++ sun4)
++ echo sparc-sun-sunos${UNAME_RELEASE}
++ ;;
++ esac
++ exit ;;
++ aushp:SunOS:*:*)
++ echo sparc-auspex-sunos${UNAME_RELEASE}
++ exit ;;
++ # The situation for MiNT is a little confusing. The machine name
++ # can be virtually everything (everything which is not
++ # "atarist" or "atariste" at least should have a processor
++ # > m68000). The system name ranges from "MiNT" over "FreeMiNT"
++ # to the lowercase version "mint" (or "freemint"). Finally
++ # the system name "TOS" denotes a system which is actually not
++ # MiNT. But MiNT is downward compatible to TOS, so this should
++ # be no problem.
++ atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
++ echo m68k-atari-mint${UNAME_RELEASE}
++ exit ;;
++ atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
++ echo m68k-atari-mint${UNAME_RELEASE}
++ exit ;;
++ *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
++ echo m68k-atari-mint${UNAME_RELEASE}
++ exit ;;
++ milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
++ echo m68k-milan-mint${UNAME_RELEASE}
++ exit ;;
++ hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
++ echo m68k-hades-mint${UNAME_RELEASE}
++ exit ;;
++ *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
++ echo m68k-unknown-mint${UNAME_RELEASE}
++ exit ;;
++ m68k:machten:*:*)
++ echo m68k-apple-machten${UNAME_RELEASE}
++ exit ;;
++ powerpc:machten:*:*)
++ echo powerpc-apple-machten${UNAME_RELEASE}
++ exit ;;
++ RISC*:Mach:*:*)
++ echo mips-dec-mach_bsd4.3
++ exit ;;
++ RISC*:ULTRIX:*:*)
++ echo mips-dec-ultrix${UNAME_RELEASE}
++ exit ;;
++ VAX*:ULTRIX*:*:*)
++ echo vax-dec-ultrix${UNAME_RELEASE}
++ exit ;;
++ 2020:CLIX:*:* | 2430:CLIX:*:*)
++ echo clipper-intergraph-clix${UNAME_RELEASE}
++ exit ;;
++ mips:*:*:UMIPS | mips:*:*:RISCos)
++ eval $set_cc_for_build
++ sed 's/^ //' << EOF >$dummy.c
++#ifdef __cplusplus
++#include <stdio.h> /* for printf() prototype */
++ int main (int argc, char *argv[]) {
++#else
++ int main (argc, argv) int argc; char *argv[]; {
++#endif
++ #if defined (host_mips) && defined (MIPSEB)
++ #if defined (SYSTYPE_SYSV)
++ printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
++ #endif
++ #if defined (SYSTYPE_SVR4)
++ printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
++ #endif
++ #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
++ printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
++ #endif
++ #endif
++ exit (-1);
++ }
++EOF
++ $CC_FOR_BUILD -o $dummy $dummy.c &&
++ dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` &&
++ SYSTEM_NAME=`$dummy $dummyarg` &&
++ { echo "$SYSTEM_NAME"; exit; }
++ echo mips-mips-riscos${UNAME_RELEASE}
++ exit ;;
++ Motorola:PowerMAX_OS:*:*)
++ echo powerpc-motorola-powermax
++ exit ;;
++ Motorola:*:4.3:PL8-*)
++ echo powerpc-harris-powermax
++ exit ;;
++ Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
++ echo powerpc-harris-powermax
++ exit ;;
++ Night_Hawk:Power_UNIX:*:*)
++ echo powerpc-harris-powerunix
++ exit ;;
++ m88k:CX/UX:7*:*)
++ echo m88k-harris-cxux7
++ exit ;;
++ m88k:*:4*:R4*)
++ echo m88k-motorola-sysv4
++ exit ;;
++ m88k:*:3*:R3*)
++ echo m88k-motorola-sysv3
++ exit ;;
++ AViiON:dgux:*:*)
++ # DG/UX returns AViiON for all architectures
++ UNAME_PROCESSOR=`/usr/bin/uname -p`
++ if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
++ then
++ if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
++ [ ${TARGET_BINARY_INTERFACE}x = x ]
++ then
++ echo m88k-dg-dgux${UNAME_RELEASE}
++ else
++ echo m88k-dg-dguxbcs${UNAME_RELEASE}
++ fi
++ else
++ echo i586-dg-dgux${UNAME_RELEASE}
++ fi
++ exit ;;
++ M88*:DolphinOS:*:*) # DolphinOS (SVR3)
++ echo m88k-dolphin-sysv3
++ exit ;;
++ M88*:*:R3*:*)
++ # Delta 88k system running SVR3
++ echo m88k-motorola-sysv3
++ exit ;;
++ XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
++ echo m88k-tektronix-sysv3
++ exit ;;
++ Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
++ echo m68k-tektronix-bsd
++ exit ;;
++ *:IRIX*:*:*)
++ echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
++ exit ;;
++ ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
++ echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id
++ exit ;; # Note that: echo "'`uname -s`'" gives 'AIX '
++ i*86:AIX:*:*)
++ echo i386-ibm-aix
++ exit ;;
++ ia64:AIX:*:*)
++ if [ -x /usr/bin/oslevel ] ; then
++ IBM_REV=`/usr/bin/oslevel`
++ else
++ IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
++ fi
++ echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
++ exit ;;
++ *:AIX:2:3)
++ if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
++ eval $set_cc_for_build
++ sed 's/^ //' << EOF >$dummy.c
++ #include <sys/systemcfg.h>
++
++ main()
++ {
++ if (!__power_pc())
++ exit(1);
++ puts("powerpc-ibm-aix3.2.5");
++ exit(0);
++ }
++EOF
++ if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy`
++ then
++ echo "$SYSTEM_NAME"
++ else
++ echo rs6000-ibm-aix3.2.5
++ fi
++ elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
++ echo rs6000-ibm-aix3.2.4
++ else
++ echo rs6000-ibm-aix3.2
++ fi
++ exit ;;
++ *:AIX:*:[456])
++ IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
++ if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
++ IBM_ARCH=rs6000
++ else
++ IBM_ARCH=powerpc
++ fi
++ if [ -x /usr/bin/oslevel ] ; then
++ IBM_REV=`/usr/bin/oslevel`
++ else
++ IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
++ fi
++ echo ${IBM_ARCH}-ibm-aix${IBM_REV}
++ exit ;;
++ *:AIX:*:*)
++ echo rs6000-ibm-aix
++ exit ;;
++ ibmrt:4.4BSD:*|romp-ibm:BSD:*)
++ echo romp-ibm-bsd4.4
++ exit ;;
++ ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and
++ echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to
++ exit ;; # report: romp-ibm BSD 4.3
++ *:BOSX:*:*)
++ echo rs6000-bull-bosx
++ exit ;;
++ DPX/2?00:B.O.S.:*:*)
++ echo m68k-bull-sysv3
++ exit ;;
++ 9000/[34]??:4.3bsd:1.*:*)
++ echo m68k-hp-bsd
++ exit ;;
++ hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
++ echo m68k-hp-bsd4.4
++ exit ;;
++ 9000/[34678]??:HP-UX:*:*)
++ HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
++ case "${UNAME_MACHINE}" in
++ 9000/31? ) HP_ARCH=m68000 ;;
++ 9000/[34]?? ) HP_ARCH=m68k ;;
++ 9000/[678][0-9][0-9])
++ if [ -x /usr/bin/getconf ]; then
++ sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
++ sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
++ case "${sc_cpu_version}" in
++ 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
++ 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
++ 532) # CPU_PA_RISC2_0
++ case "${sc_kernel_bits}" in
++ 32) HP_ARCH="hppa2.0n" ;;
++ 64) HP_ARCH="hppa2.0w" ;;
++ '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20
++ esac ;;
++ esac
++ fi
++ if [ "${HP_ARCH}" = "" ]; then
++ eval $set_cc_for_build
++ sed 's/^ //' << EOF >$dummy.c
++
++ #define _HPUX_SOURCE
++ #include <stdlib.h>
++ #include <unistd.h>
++
++ int main ()
++ {
++ #if defined(_SC_KERNEL_BITS)
++ long bits = sysconf(_SC_KERNEL_BITS);
++ #endif
++ long cpu = sysconf (_SC_CPU_VERSION);
++
++ switch (cpu)
++ {
++ case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
++ case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
++ case CPU_PA_RISC2_0:
++ #if defined(_SC_KERNEL_BITS)
++ switch (bits)
++ {
++ case 64: puts ("hppa2.0w"); break;
++ case 32: puts ("hppa2.0n"); break;
++ default: puts ("hppa2.0"); break;
++ } break;
++ #else /* !defined(_SC_KERNEL_BITS) */
++ puts ("hppa2.0"); break;
++ #endif
++ default: puts ("hppa1.0"); break;
++ }
++ exit (0);
++ }
++EOF
++ (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
++ test -z "$HP_ARCH" && HP_ARCH=hppa
++ fi ;;
++ esac
++ if [ ${HP_ARCH} = "hppa2.0w" ]
++ then
++ eval $set_cc_for_build
++
++ # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
++ # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler
++ # generating 64-bit code. GNU and HP use different nomenclature:
++ #
++ # $ CC_FOR_BUILD=cc ./config.guess
++ # => hppa2.0w-hp-hpux11.23
++ # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
++ # => hppa64-hp-hpux11.23
++
++ if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
++ grep -q __LP64__
++ then
++ HP_ARCH="hppa2.0w"
++ else
++ HP_ARCH="hppa64"
++ fi
++ fi
++ echo ${HP_ARCH}-hp-hpux${HPUX_REV}
++ exit ;;
++ ia64:HP-UX:*:*)
++ HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
++ echo ia64-hp-hpux${HPUX_REV}
++ exit ;;
++ 3050*:HI-UX:*:*)
++ eval $set_cc_for_build
++ sed 's/^ //' << EOF >$dummy.c
++ #include <unistd.h>
++ int
++ main ()
++ {
++ long cpu = sysconf (_SC_CPU_VERSION);
++ /* The order matters, because CPU_IS_HP_MC68K erroneously returns
++ true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct
++ results, however. */
++ if (CPU_IS_PA_RISC (cpu))
++ {
++ switch (cpu)
++ {
++ case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
++ case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
++ case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
++ default: puts ("hppa-hitachi-hiuxwe2"); break;
++ }
++ }
++ else if (CPU_IS_HP_MC68K (cpu))
++ puts ("m68k-hitachi-hiuxwe2");
++ else puts ("unknown-hitachi-hiuxwe2");
++ exit (0);
++ }
++EOF
++ $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` &&
++ { echo "$SYSTEM_NAME"; exit; }
++ echo unknown-hitachi-hiuxwe2
++ exit ;;
++ 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
++ echo hppa1.1-hp-bsd
++ exit ;;
++ 9000/8??:4.3bsd:*:*)
++ echo hppa1.0-hp-bsd
++ exit ;;
++ *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
++ echo hppa1.0-hp-mpeix
++ exit ;;
++ hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
++ echo hppa1.1-hp-osf
++ exit ;;
++ hp8??:OSF1:*:*)
++ echo hppa1.0-hp-osf
++ exit ;;
++ i*86:OSF1:*:*)
++ if [ -x /usr/sbin/sysversion ] ; then
++ echo ${UNAME_MACHINE}-unknown-osf1mk
++ else
++ echo ${UNAME_MACHINE}-unknown-osf1
++ fi
++ exit ;;
++ parisc*:Lites*:*:*)
++ echo hppa1.1-hp-lites
++ exit ;;
++ C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
++ echo c1-convex-bsd
++ exit ;;
++ C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
++ if getsysinfo -f scalar_acc
++ then echo c32-convex-bsd
++ else echo c2-convex-bsd
++ fi
++ exit ;;
++ C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
++ echo c34-convex-bsd
++ exit ;;
++ C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
++ echo c38-convex-bsd
++ exit ;;
++ C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
++ echo c4-convex-bsd
++ exit ;;
++ CRAY*Y-MP:*:*:*)
++ echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
++ exit ;;
++ CRAY*[A-Z]90:*:*:*)
++ echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
++ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
++ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
++ -e 's/\.[^.]*$/.X/'
++ exit ;;
++ CRAY*TS:*:*:*)
++ echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
++ exit ;;
++ CRAY*T3E:*:*:*)
++ echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
++ exit ;;
++ CRAY*SV1:*:*:*)
++ echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
++ exit ;;
++ *:UNICOS/mp:*:*)
++ echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
++ exit ;;
++ F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
++ FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
++ FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
++ FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
++ echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
++ exit ;;
++ 5000:UNIX_System_V:4.*:*)
++ FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
++ FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
++ echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
++ exit ;;
++ i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
++ echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
++ exit ;;
++ sparc*:BSD/OS:*:*)
++ echo sparc-unknown-bsdi${UNAME_RELEASE}
++ exit ;;
++ *:BSD/OS:*:*)
++ echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
++ exit ;;
++ *:FreeBSD:*:*)
++ case ${UNAME_MACHINE} in
++ pc98)
++ echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
++ amd64)
++ echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
++ *)
++ echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
++ esac
++ exit ;;
++ i*:CYGWIN*:*)
++ echo ${UNAME_MACHINE}-pc-cygwin
++ exit ;;
++ *:MINGW*:*)
++ echo ${UNAME_MACHINE}-pc-mingw32
++ exit ;;
++ i*:windows32*:*)
++ # uname -m includes "-pc" on this system.
++ echo ${UNAME_MACHINE}-mingw32
++ exit ;;
++ i*:PW*:*)
++ echo ${UNAME_MACHINE}-pc-pw32
++ exit ;;
++ *:Interix*:[3456]*)
++ case ${UNAME_MACHINE} in
++ x86)
++ echo i586-pc-interix${UNAME_RELEASE}
++ exit ;;
++ EM64T | authenticamd | genuineintel)
++ echo x86_64-unknown-interix${UNAME_RELEASE}
++ exit ;;
++ IA64)
++ echo ia64-unknown-interix${UNAME_RELEASE}
++ exit ;;
++ esac ;;
++ [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
++ echo i${UNAME_MACHINE}-pc-mks
++ exit ;;
++ 8664:Windows_NT:*)
++ echo x86_64-pc-mks
++ exit ;;
++ i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
++ # How do we know it's Interix rather than the generic POSIX subsystem?
++ # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
++ # UNAME_MACHINE based on the output of uname instead of i386?
++ echo i586-pc-interix
++ exit ;;
++ i*:UWIN*:*)
++ echo ${UNAME_MACHINE}-pc-uwin
++ exit ;;
++ amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
++ echo x86_64-unknown-cygwin
++ exit ;;
++ p*:CYGWIN*:*)
++ echo powerpcle-unknown-cygwin
++ exit ;;
++ prep*:SunOS:5.*:*)
++ echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
++ exit ;;
++ *:GNU:*:*)
++ # the GNU system
++ echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
++ exit ;;
++ *:GNU/*:*:*)
++ # other systems with GNU libc and userland
++ echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu
++ exit ;;
++ i*86:Minix:*:*)
++ echo ${UNAME_MACHINE}-pc-minix
++ exit ;;
++ arm*:Linux:*:*)
++ eval $set_cc_for_build
++ if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
++ | grep -q __ARM_EABI__
++ then
++ echo ${UNAME_MACHINE}-unknown-linux-gnu
++ else
++ echo ${UNAME_MACHINE}-unknown-linux-gnueabi
++ fi
++ exit ;;
++ avr32*:Linux:*:*)
++ echo ${UNAME_MACHINE}-unknown-linux-gnu
++ exit ;;
++ cris:Linux:*:*)
++ echo cris-axis-linux-gnu
++ exit ;;
++ crisv32:Linux:*:*)
++ echo crisv32-axis-linux-gnu
++ exit ;;
++ frv:Linux:*:*)
++ echo frv-unknown-linux-gnu
++ exit ;;
++ ia64:Linux:*:*)
++ echo ${UNAME_MACHINE}-unknown-linux-gnu
++ exit ;;
++ m32r*:Linux:*:*)
++ echo ${UNAME_MACHINE}-unknown-linux-gnu
++ exit ;;
++ m68*:Linux:*:*)
++ echo ${UNAME_MACHINE}-unknown-linux-gnu
++ exit ;;
++ mips:Linux:*:* | mips64:Linux:*:*)
++ eval $set_cc_for_build
++ sed 's/^ //' << EOF >$dummy.c
++ #undef CPU
++ #undef ${UNAME_MACHINE}
++ #undef ${UNAME_MACHINE}el
++ #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
++ CPU=${UNAME_MACHINE}el
++ #else
++ #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
++ CPU=${UNAME_MACHINE}
++ #else
++ CPU=
++ #endif
++ #endif
++EOF
++ eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
++ /^CPU/{
++ s: ::g
++ p
++ }'`"
++ test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; }
++ ;;
++ or32:Linux:*:*)
++ echo or32-unknown-linux-gnu
++ exit ;;
++ ppc:Linux:*:*)
++ echo powerpc-unknown-linux-gnu
++ exit ;;
++ ppc64:Linux:*:*)
++ echo powerpc64-unknown-linux-gnu
++ exit ;;
++ alpha:Linux:*:*)
++ case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
++ EV5) UNAME_MACHINE=alphaev5 ;;
++ EV56) UNAME_MACHINE=alphaev56 ;;
++ PCA56) UNAME_MACHINE=alphapca56 ;;
++ PCA57) UNAME_MACHINE=alphapca56 ;;
++ EV6) UNAME_MACHINE=alphaev6 ;;
++ EV67) UNAME_MACHINE=alphaev67 ;;
++ EV68*) UNAME_MACHINE=alphaev68 ;;
++ esac
++ objdump --private-headers /bin/sh | grep -q ld.so.1
++ if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi
++ echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC}
++ exit ;;
++ padre:Linux:*:*)
++ echo sparc-unknown-linux-gnu
++ exit ;;
++ parisc:Linux:*:* | hppa:Linux:*:*)
++ # Look for CPU level
++ case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
++ PA7*) echo hppa1.1-unknown-linux-gnu ;;
++ PA8*) echo hppa2.0-unknown-linux-gnu ;;
++ *) echo hppa-unknown-linux-gnu ;;
++ esac
++ exit ;;
++ parisc64:Linux:*:* | hppa64:Linux:*:*)
++ echo hppa64-unknown-linux-gnu
++ exit ;;
++ s390:Linux:*:* | s390x:Linux:*:*)
++ echo ${UNAME_MACHINE}-ibm-linux
++ exit ;;
++ sh64*:Linux:*:*)
++ echo ${UNAME_MACHINE}-unknown-linux-gnu
++ exit ;;
++ sh*:Linux:*:*)
++ echo ${UNAME_MACHINE}-unknown-linux-gnu
++ exit ;;
++ sparc:Linux:*:* | sparc64:Linux:*:*)
++ echo ${UNAME_MACHINE}-unknown-linux-gnu
++ exit ;;
++ vax:Linux:*:*)
++ echo ${UNAME_MACHINE}-dec-linux-gnu
++ exit ;;
++ x86_64:Linux:*:*)
++ echo x86_64-unknown-linux-gnu
++ exit ;;
++ xtensa*:Linux:*:*)
++ echo ${UNAME_MACHINE}-unknown-linux-gnu
++ exit ;;
++ i*86:Linux:*:*)
++ # The BFD linker knows what the default object file format is, so
++ # first see if it will tell us. cd to the root directory to prevent
++ # problems with other programs or directories called `ld' in the path.
++ # Set LC_ALL=C to ensure ld outputs messages in English.
++ ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \
++ | sed -ne '/supported targets:/!d
++ s/[ ][ ]*/ /g
++ s/.*supported targets: *//
++ s/ .*//
++ p'`
++ case "$ld_supported_targets" in
++ elf32-i386)
++ TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu"
++ ;;
++ esac
++ # Determine whether the default compiler is a.out or elf
++ eval $set_cc_for_build
++ sed 's/^ //' << EOF >$dummy.c
++ #include <features.h>
++ #ifdef __ELF__
++ # ifdef __GLIBC__
++ # if __GLIBC__ >= 2
++ LIBC=gnu
++ # else
++ LIBC=gnulibc1
++ # endif
++ # else
++ LIBC=gnulibc1
++ # endif
++ #else
++ #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC)
++ LIBC=gnu
++ #else
++ LIBC=gnuaout
++ #endif
++ #endif
++ #ifdef __dietlibc__
++ LIBC=dietlibc
++ #endif
++EOF
++ eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n '
++ /^LIBC/{
++ s: ::g
++ p
++ }'`"
++ test x"${LIBC}" != x && {
++ echo "${UNAME_MACHINE}-pc-linux-${LIBC}"
++ exit
++ }
++ test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; }
++ ;;
++ i*86:DYNIX/ptx:4*:*)
++ # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
++ # earlier versions are messed up and put the nodename in both
++ # sysname and nodename.
++ echo i386-sequent-sysv4
++ exit ;;
++ i*86:UNIX_SV:4.2MP:2.*)
++ # Unixware is an offshoot of SVR4, but it has its own version
++ # number series starting with 2...
++ # I am not positive that other SVR4 systems won't match this,
++ # I just have to hope. -- rms.
++ # Use sysv4.2uw... so that sysv4* matches it.
++ echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
++ exit ;;
++ i*86:OS/2:*:*)
++ # If we were able to find `uname', then EMX Unix compatibility
++ # is probably installed.
++ echo ${UNAME_MACHINE}-pc-os2-emx
++ exit ;;
++ i*86:XTS-300:*:STOP)
++ echo ${UNAME_MACHINE}-unknown-stop
++ exit ;;
++ i*86:atheos:*:*)
++ echo ${UNAME_MACHINE}-unknown-atheos
++ exit ;;
++ i*86:syllable:*:*)
++ echo ${UNAME_MACHINE}-pc-syllable
++ exit ;;
++ i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*)
++ echo i386-unknown-lynxos${UNAME_RELEASE}
++ exit ;;
++ i*86:*DOS:*:*)
++ echo ${UNAME_MACHINE}-pc-msdosdjgpp
++ exit ;;
++ i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
++ UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
++ if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
++ echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
++ else
++ echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
++ fi
++ exit ;;
++ i*86:*:5:[678]*)
++ # UnixWare 7.x, OpenUNIX and OpenServer 6.
++ case `/bin/uname -X | grep "^Machine"` in
++ *486*) UNAME_MACHINE=i486 ;;
++ *Pentium) UNAME_MACHINE=i586 ;;
++ *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
++ esac
++ echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
++ exit ;;
++ i*86:*:3.2:*)
++ if test -f /usr/options/cb.name; then
++ UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
++ echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
++ elif /bin/uname -X 2>/dev/null >/dev/null ; then
++ UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
++ (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
++ (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
++ && UNAME_MACHINE=i586
++ (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
++ && UNAME_MACHINE=i686
++ (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
++ && UNAME_MACHINE=i686
++ echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
++ else
++ echo ${UNAME_MACHINE}-pc-sysv32
++ fi
++ exit ;;
++ pc:*:*:*)
++ # Left here for compatibility:
++ # uname -m prints for DJGPP always 'pc', but it prints nothing about
++ # the processor, so we play safe by assuming i586.
++ # Note: whatever this is, it MUST be the same as what config.sub
++ # prints for the "djgpp" host, or else GDB configury will decide that
++ # this is a cross-build.
++ echo i586-pc-msdosdjgpp
++ exit ;;
++ Intel:Mach:3*:*)
++ echo i386-pc-mach3
++ exit ;;
++ paragon:*:*:*)
++ echo i860-intel-osf1
++ exit ;;
++ i860:*:4.*:*) # i860-SVR4
++ if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
++ echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
++ else # Add other i860-SVR4 vendors below as they are discovered.
++ echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4
++ fi
++ exit ;;
++ mini*:CTIX:SYS*5:*)
++ # "miniframe"
++ echo m68010-convergent-sysv
++ exit ;;
++ mc68k:UNIX:SYSTEM5:3.51m)
++ echo m68k-convergent-sysv
++ exit ;;
++ M680?0:D-NIX:5.3:*)
++ echo m68k-diab-dnix
++ exit ;;
++ M68*:*:R3V[5678]*:*)
++ test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
++ 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
++ OS_REL=''
++ test -r /etc/.relid \
++ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
++ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
++ && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
++ /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
++ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
++ 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
++ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
++ && { echo i486-ncr-sysv4; exit; } ;;
++ NCR*:*:4.2:* | MPRAS*:*:4.2:*)
++ OS_REL='.3'
++ test -r /etc/.relid \
++ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
++ /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
++ && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
++ /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
++ && { echo i586-ncr-sysv4.3${OS_REL}; exit; }
++ /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \
++ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
++ m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
++ echo m68k-unknown-lynxos${UNAME_RELEASE}
++ exit ;;
++ mc68030:UNIX_System_V:4.*:*)
++ echo m68k-atari-sysv4
++ exit ;;
++ TSUNAMI:LynxOS:2.*:*)
++ echo sparc-unknown-lynxos${UNAME_RELEASE}
++ exit ;;
++ rs6000:LynxOS:2.*:*)
++ echo rs6000-unknown-lynxos${UNAME_RELEASE}
++ exit ;;
++ PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*)
++ echo powerpc-unknown-lynxos${UNAME_RELEASE}
++ exit ;;
++ SM[BE]S:UNIX_SV:*:*)
++ echo mips-dde-sysv${UNAME_RELEASE}
++ exit ;;
++ RM*:ReliantUNIX-*:*:*)
++ echo mips-sni-sysv4
++ exit ;;
++ RM*:SINIX-*:*:*)
++ echo mips-sni-sysv4
++ exit ;;
++ *:SINIX-*:*:*)
++ if uname -p 2>/dev/null >/dev/null ; then
++ UNAME_MACHINE=`(uname -p) 2>/dev/null`
++ echo ${UNAME_MACHINE}-sni-sysv4
++ else
++ echo ns32k-sni-sysv
++ fi
++ exit ;;
++ PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
++ # says <Richard.M.Bartel@ccMail.Census.GOV>
++ echo i586-unisys-sysv4
++ exit ;;
++ *:UNIX_System_V:4*:FTX*)
++ # From Gerald Hewes <hewes@openmarket.com>.
++ # How about differentiating between stratus architectures? -djm
++ echo hppa1.1-stratus-sysv4
++ exit ;;
++ *:*:*:FTX*)
++ # From seanf@swdc.stratus.com.
++ echo i860-stratus-sysv4
++ exit ;;
++ i*86:VOS:*:*)
++ # From Paul.Green@stratus.com.
++ echo ${UNAME_MACHINE}-stratus-vos
++ exit ;;
++ *:VOS:*:*)
++ # From Paul.Green@stratus.com.
++ echo hppa1.1-stratus-vos
++ exit ;;
++ mc68*:A/UX:*:*)
++ echo m68k-apple-aux${UNAME_RELEASE}
++ exit ;;
++ news*:NEWS-OS:6*:*)
++ echo mips-sony-newsos6
++ exit ;;
++ R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
++ if [ -d /usr/nec ]; then
++ echo mips-nec-sysv${UNAME_RELEASE}
++ else
++ echo mips-unknown-sysv${UNAME_RELEASE}
++ fi
++ exit ;;
++ BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only.
++ echo powerpc-be-beos
++ exit ;;
++ BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only.
++ echo powerpc-apple-beos
++ exit ;;
++ BePC:BeOS:*:*) # BeOS running on Intel PC compatible.
++ echo i586-pc-beos
++ exit ;;
++ BePC:Haiku:*:*) # Haiku running on Intel PC compatible.
++ echo i586-pc-haiku
++ exit ;;
++ SX-4:SUPER-UX:*:*)
++ echo sx4-nec-superux${UNAME_RELEASE}
++ exit ;;
++ SX-5:SUPER-UX:*:*)
++ echo sx5-nec-superux${UNAME_RELEASE}
++ exit ;;
++ SX-6:SUPER-UX:*:*)
++ echo sx6-nec-superux${UNAME_RELEASE}
++ exit ;;
++ SX-7:SUPER-UX:*:*)
++ echo sx7-nec-superux${UNAME_RELEASE}
++ exit ;;
++ SX-8:SUPER-UX:*:*)
++ echo sx8-nec-superux${UNAME_RELEASE}
++ exit ;;
++ SX-8R:SUPER-UX:*:*)
++ echo sx8r-nec-superux${UNAME_RELEASE}
++ exit ;;
++ Power*:Rhapsody:*:*)
++ echo powerpc-apple-rhapsody${UNAME_RELEASE}
++ exit ;;
++ *:Rhapsody:*:*)
++ echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
++ exit ;;
++ *:Darwin:*:*)
++ UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
++ case $UNAME_PROCESSOR in
++ unknown) UNAME_PROCESSOR=powerpc ;;
++ esac
++ echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
++ exit ;;
++ *:procnto*:*:* | *:QNX:[0123456789]*:*)
++ UNAME_PROCESSOR=`uname -p`
++ if test "$UNAME_PROCESSOR" = "x86"; then
++ UNAME_PROCESSOR=i386
++ UNAME_MACHINE=pc
++ fi
++ echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
++ exit ;;
++ *:QNX:*:4*)
++ echo i386-pc-qnx
++ exit ;;
++ NSE-?:NONSTOP_KERNEL:*:*)
++ echo nse-tandem-nsk${UNAME_RELEASE}
++ exit ;;
++ NSR-?:NONSTOP_KERNEL:*:*)
++ echo nsr-tandem-nsk${UNAME_RELEASE}
++ exit ;;
++ *:NonStop-UX:*:*)
++ echo mips-compaq-nonstopux
++ exit ;;
++ BS2000:POSIX*:*:*)
++ echo bs2000-siemens-sysv
++ exit ;;
++ DS/*:UNIX_System_V:*:*)
++ echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
++ exit ;;
++ *:Plan9:*:*)
++ # "uname -m" is not consistent, so use $cputype instead. 386
++ # is converted to i386 for consistency with other x86
++ # operating systems.
++ if test "$cputype" = "386"; then
++ UNAME_MACHINE=i386
++ else
++ UNAME_MACHINE="$cputype"
++ fi
++ echo ${UNAME_MACHINE}-unknown-plan9
++ exit ;;
++ *:TOPS-10:*:*)
++ echo pdp10-unknown-tops10
++ exit ;;
++ *:TENEX:*:*)
++ echo pdp10-unknown-tenex
++ exit ;;
++ KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
++ echo pdp10-dec-tops20
++ exit ;;
++ XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
++ echo pdp10-xkl-tops20
++ exit ;;
++ *:TOPS-20:*:*)
++ echo pdp10-unknown-tops20
++ exit ;;
++ *:ITS:*:*)
++ echo pdp10-unknown-its
++ exit ;;
++ SEI:*:*:SEIUX)
++ echo mips-sei-seiux${UNAME_RELEASE}
++ exit ;;
++ *:DragonFly:*:*)
++ echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
++ exit ;;
++ *:*VMS:*:*)
++ UNAME_MACHINE=`(uname -p) 2>/dev/null`
++ case "${UNAME_MACHINE}" in
++ A*) echo alpha-dec-vms ; exit ;;
++ I*) echo ia64-dec-vms ; exit ;;
++ V*) echo vax-dec-vms ; exit ;;
++ esac ;;
++ *:XENIX:*:SysV)
++ echo i386-pc-xenix
++ exit ;;
++ i*86:skyos:*:*)
++ echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//'
++ exit ;;
++ i*86:rdos:*:*)
++ echo ${UNAME_MACHINE}-pc-rdos
++ exit ;;
++ i*86:AROS:*:*)
++ echo ${UNAME_MACHINE}-pc-aros
++ exit ;;
++esac
++
++#echo '(No uname command or uname output not recognized.)' 1>&2
++#echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2
++
++eval $set_cc_for_build
++cat >$dummy.c <<EOF
++#ifdef _SEQUENT_
++# include <sys/types.h>
++# include <sys/utsname.h>
++#endif
++main ()
++{
++#if defined (sony)
++#if defined (MIPSEB)
++ /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed,
++ I don't know.... */
++ printf ("mips-sony-bsd\n"); exit (0);
++#else
++#include <sys/param.h>
++ printf ("m68k-sony-newsos%s\n",
++#ifdef NEWSOS4
++ "4"
++#else
++ ""
++#endif
++ ); exit (0);
++#endif
++#endif
++
++#if defined (__arm) && defined (__acorn) && defined (__unix)
++ printf ("arm-acorn-riscix\n"); exit (0);
++#endif
++
++#if defined (hp300) && !defined (hpux)
++ printf ("m68k-hp-bsd\n"); exit (0);
++#endif
++
++#if defined (NeXT)
++#if !defined (__ARCHITECTURE__)
++#define __ARCHITECTURE__ "m68k"
++#endif
++ int version;
++ version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`;
++ if (version < 4)
++ printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version);
++ else
++ printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version);
++ exit (0);
++#endif
++
++#if defined (MULTIMAX) || defined (n16)
++#if defined (UMAXV)
++ printf ("ns32k-encore-sysv\n"); exit (0);
++#else
++#if defined (CMU)
++ printf ("ns32k-encore-mach\n"); exit (0);
++#else
++ printf ("ns32k-encore-bsd\n"); exit (0);
++#endif
++#endif
++#endif
++
++#if defined (__386BSD__)
++ printf ("i386-pc-bsd\n"); exit (0);
++#endif
++
++#if defined (sequent)
++#if defined (i386)
++ printf ("i386-sequent-dynix\n"); exit (0);
++#endif
++#if defined (ns32000)
++ printf ("ns32k-sequent-dynix\n"); exit (0);
++#endif
++#endif
++
++#if defined (_SEQUENT_)
++ struct utsname un;
++
++ uname(&un);
++
++ if (strncmp(un.version, "V2", 2) == 0) {
++ printf ("i386-sequent-ptx2\n"); exit (0);
++ }
++ if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */
++ printf ("i386-sequent-ptx1\n"); exit (0);
++ }
++ printf ("i386-sequent-ptx\n"); exit (0);
++
++#endif
++
++#if defined (vax)
++# if !defined (ultrix)
++# include <sys/param.h>
++# if defined (BSD)
++# if BSD == 43
++ printf ("vax-dec-bsd4.3\n"); exit (0);
++# else
++# if BSD == 199006
++ printf ("vax-dec-bsd4.3reno\n"); exit (0);
++# else
++ printf ("vax-dec-bsd\n"); exit (0);
++# endif
++# endif
++# else
++ printf ("vax-dec-bsd\n"); exit (0);
++# endif
++# else
++ printf ("vax-dec-ultrix\n"); exit (0);
++# endif
++#endif
++
++#if defined (alliant) && defined (i860)
++ printf ("i860-alliant-bsd\n"); exit (0);
++#endif
++
++ exit (1);
++}
++EOF
++
++$CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` &&
++ { echo "$SYSTEM_NAME"; exit; }
++
++# Apollos put the system type in the environment.
++
++test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; }
++
++# Convex versions that predate uname can use getsysinfo(1)
++
++if [ -x /usr/convex/getsysinfo ]
++then
++ case `getsysinfo -f cpu_type` in
++ c1*)
++ echo c1-convex-bsd
++ exit ;;
++ c2*)
++ if getsysinfo -f scalar_acc
++ then echo c32-convex-bsd
++ else echo c2-convex-bsd
++ fi
++ exit ;;
++ c34*)
++ echo c34-convex-bsd
++ exit ;;
++ c38*)
++ echo c38-convex-bsd
++ exit ;;
++ c4*)
++ echo c4-convex-bsd
++ exit ;;
++ esac
++fi
++
++cat >&2 <<EOF
++$0: unable to guess system type
++
++This script, last modified $timestamp, has failed to recognize
++the operating system you are using. It is advised that you
++download the most up to date version of the config scripts from
++
++ http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
++and
++ http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
++
++If the version you run ($0) is already up to date, please
++send the following data and any information you think might be
++pertinent to <config-patches@gnu.org> in order to provide the needed
++information to handle your system.
++
++config.guess timestamp = $timestamp
++
++uname -m = `(uname -m) 2>/dev/null || echo unknown`
++uname -r = `(uname -r) 2>/dev/null || echo unknown`
++uname -s = `(uname -s) 2>/dev/null || echo unknown`
++uname -v = `(uname -v) 2>/dev/null || echo unknown`
++
++/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
++/bin/uname -X = `(/bin/uname -X) 2>/dev/null`
++
++hostinfo = `(hostinfo) 2>/dev/null`
++/bin/universe = `(/bin/universe) 2>/dev/null`
++/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null`
++/bin/arch = `(/bin/arch) 2>/dev/null`
++/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null`
++/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
++
++UNAME_MACHINE = ${UNAME_MACHINE}
++UNAME_RELEASE = ${UNAME_RELEASE}
++UNAME_SYSTEM = ${UNAME_SYSTEM}
++UNAME_VERSION = ${UNAME_VERSION}
++EOF
++
++exit 1
++
++# Local variables:
++# eval: (add-hook 'write-file-hooks 'time-stamp)
++# time-stamp-start: "timestamp='"
++# time-stamp-format: "%:y-%02m-%02d"
++# time-stamp-end: "'"
++# End:
+Index: libdessert0.86-0.86.14/config.h.in
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/config.h.in 2009-12-09 16:38:57.005169762 +0100
+@@ -0,0 +1,208 @@
++/* config.h.in. Generated from configure.ac by autoheader. */
++
++/* defines linkoption for libcli */
++#undef CLI_LIBS
++
++/* Define to 1 if you have the <arpa/inet.h> header file. */
++#undef HAVE_ARPA_INET_H
++
++/* Define to 1 if you have the <dlfcn.h> header file. */
++#undef HAVE_DLFCN_H
++
++/* Define to 1 if you have the <fcntl.h> header file. */
++#undef HAVE_FCNTL_H
++
++/* Define to 1 if you have the `fork' function. */
++#undef HAVE_FORK
++
++/* Define to 1 if you have the `gethostname' function. */
++#undef HAVE_GETHOSTNAME
++
++/* Define to 1 if you have the `gettimeofday' function. */
++#undef HAVE_GETTIMEOFDAY
++
++/* Define to 1 if you have the <inttypes.h> header file. */
++#undef HAVE_INTTYPES_H
++
++/* Define to 1 if you have the <libcli.h> header file. */
++#undef HAVE_LIBCLI_H
++
++/* Define to 1 if you have the `localtime_r' function. */
++#undef HAVE_LOCALTIME_R
++
++/* Define to 1 if your system has a GNU libc compatible `malloc' function, and
++ to 0 otherwise. */
++#undef HAVE_MALLOC
++
++/* Define to 1 if you have the `memmove' function. */
++#undef HAVE_MEMMOVE
++
++/* Define to 1 if you have the <memory.h> header file. */
++#undef HAVE_MEMORY_H
++
++/* Define to 1 if you have the `memset' function. */
++#undef HAVE_MEMSET
++
++/* Define to 1 if you have the <netinet/in.h> header file. */
++#undef HAVE_NETINET_IN_H
++
++/* Define if you have POSIX threads libraries and header files. */
++#undef HAVE_PTHREAD
++
++/* Define to 1 if your system has a GNU libc compatible `realloc' function,
++ and to 0 otherwise. */
++#undef HAVE_REALLOC
++
++/* Define to 1 if you have the `socket' function. */
++#undef HAVE_SOCKET
++
++/* Define to 1 if stdbool.h conforms to C99. */
++#undef HAVE_STDBOOL_H
++
++/* Define to 1 if you have the <stdint.h> header file. */
++#undef HAVE_STDINT_H
++
++/* Define to 1 if you have the <stdlib.h> header file. */
++#undef HAVE_STDLIB_H
++
++/* Define to 1 if you have the `strdup' function. */
++#undef HAVE_STRDUP
++
++/* Define to 1 if you have the `strerror' function. */
++#undef HAVE_STRERROR
++
++/* Define to 1 if you have the <strings.h> header file. */
++#undef HAVE_STRINGS_H
++
++/* Define to 1 if you have the <string.h> header file. */
++#undef HAVE_STRING_H
++
++/* Define to 1 if you have the `strtol' function. */
++#undef HAVE_STRTOL
++
++/* Define to 1 if you have the <syslog.h> header file. */
++#undef HAVE_SYSLOG_H
++
++/* Define to 1 if you have the <sys/ioctl.h> header file. */
++#undef HAVE_SYS_IOCTL_H
++
++/* Define to 1 if you have the <sys/socket.h> header file. */
++#undef HAVE_SYS_SOCKET_H
++
++/* Define to 1 if you have the <sys/stat.h> header file. */
++#undef HAVE_SYS_STAT_H
++
++/* Define to 1 if you have the <sys/types.h> header file. */
++#undef HAVE_SYS_TYPES_H
++
++/* Define to 1 if you have the <unistd.h> header file. */
++#undef HAVE_UNISTD_H
++
++/* Define to 1 if you have the `vfork' function. */
++#undef HAVE_VFORK
++
++/* Define to 1 if you have the <vfork.h> header file. */
++#undef HAVE_VFORK_H
++
++/* Define to 1 if `fork' works. */
++#undef HAVE_WORKING_FORK
++
++/* Define to 1 if `vfork' works. */
++#undef HAVE_WORKING_VFORK
++
++/* Define to 1 if the system has the type `_Bool'. */
++#undef HAVE__BOOL
++
++/* Define to the sub-directory in which libtool stores uninstalled libraries.
++ */
++#undef LT_OBJDIR
++
++/* Name of package */
++#undef PACKAGE
++
++/* Define to the address where bug reports for this package should be sent. */
++#undef PACKAGE_BUGREPORT
++
++/* Define to the full name of this package. */
++#undef PACKAGE_NAME
++
++/* Define to the full name and version of this package. */
++#undef PACKAGE_STRING
++
++/* Define to the one symbol short name of this package. */
++#undef PACKAGE_TARNAME
++
++/* Define to the home page for this package. */
++#undef PACKAGE_URL
++
++/* Define to the version of this package. */
++#undef PACKAGE_VERSION
++
++/* Define to necessary symbol if this constant uses a non-standard name on
++ your system. */
++#undef PTHREAD_CREATE_JOINABLE
++
++/* Define to 1 if you have the ANSI C header files. */
++#undef STDC_HEADERS
++
++/* Version number of package */
++#undef VERSION
++
++/* Define for Solaris 2.5.1 so the uint32_t typedef from <sys/synch.h>,
++ <pthread.h>, or <semaphore.h> is not used. If the typedef were allowed, the
++ #define below would cause a syntax error. */
++#undef _UINT32_T
++
++/* Define for Solaris 2.5.1 so the uint64_t typedef from <sys/synch.h>,
++ <pthread.h>, or <semaphore.h> is not used. If the typedef were allowed, the
++ #define below would cause a syntax error. */
++#undef _UINT64_T
++
++/* Define for Solaris 2.5.1 so the uint8_t typedef from <sys/synch.h>,
++ <pthread.h>, or <semaphore.h> is not used. If the typedef were allowed, the
++ #define below would cause a syntax error. */
++#undef _UINT8_T
++
++/* Define to `__inline__' or `__inline' if that's what the C compiler
++ calls it, or to nothing if 'inline' is not supported under any name. */
++#ifndef __cplusplus
++#undef inline
++#endif
++
++/* Define to the type of a signed integer type of width exactly 32 bits if
++ such a type exists and the standard includes do not define it. */
++#undef int32_t
++
++/* Define to rpl_malloc if the replacement function should be used. */
++#undef malloc
++
++/* Define to `int' if <sys/types.h> does not define. */
++#undef pid_t
++
++/* Define to rpl_realloc if the replacement function should be used. */
++#undef realloc
++
++/* Define to `unsigned int' if <sys/types.h> does not define. */
++#undef size_t
++
++/* Define to `int' if <sys/types.h> does not define. */
++#undef ssize_t
++
++/* Define to the type of an unsigned integer type of width exactly 16 bits if
++ such a type exists and the standard includes do not define it. */
++#undef uint16_t
++
++/* Define to the type of an unsigned integer type of width exactly 32 bits if
++ such a type exists and the standard includes do not define it. */
++#undef uint32_t
++
++/* Define to the type of an unsigned integer type of width exactly 64 bits if
++ such a type exists and the standard includes do not define it. */
++#undef uint64_t
++
++/* Define to the type of an unsigned integer type of width exactly 8 bits if
++ such a type exists and the standard includes do not define it. */
++#undef uint8_t
++
++/* Define as `fork' if `vfork' does not work. */
++#undef vfork
+Index: libdessert0.86-0.86.14/config.sub
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/config.sub 2009-12-09 16:38:27.222261696 +0100
+@@ -0,0 +1,1693 @@
++#! /bin/sh
++# Configuration validation subroutine script.
++# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999,
++# 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009
++# Free Software Foundation, Inc.
++
++timestamp='2009-06-11'
++
++# This file is (in principle) common to ALL GNU software.
++# The presence of a machine in this file suggests that SOME GNU software
++# can handle that machine. It does not imply ALL GNU software can.
++#
++# This file is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2 of the License, or
++# (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA
++# 02110-1301, USA.
++#
++# As a special exception to the GNU General Public License, if you
++# distribute this file as part of a program that contains a
++# configuration script generated by Autoconf, you may include it under
++# the same distribution terms that you use for the rest of that program.
++
++
++# Please send patches to <config-patches@gnu.org>. Submit a context
++# diff and a properly formatted ChangeLog entry.
++#
++# Configuration subroutine to validate and canonicalize a configuration type.
++# Supply the specified configuration type as an argument.
++# If it is invalid, we print an error message on stderr and exit with code 1.
++# Otherwise, we print the canonical config type on stdout and succeed.
++
++# This file is supposed to be the same for all GNU packages
++# and recognize all the CPU types, system types and aliases
++# that are meaningful with *any* GNU software.
++# Each package is responsible for reporting which valid configurations
++# it does not support. The user should be able to distinguish
++# a failure to support a valid configuration from a meaningless
++# configuration.
++
++# The goal of this file is to map all the various variations of a given
++# machine specification into a single specification in the form:
++# CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
++# or in some cases, the newer four-part form:
++# CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
++# It is wrong to echo any other type of specification.
++
++me=`echo "$0" | sed -e 's,.*/,,'`
++
++usage="\
++Usage: $0 [OPTION] CPU-MFR-OPSYS
++ $0 [OPTION] ALIAS
++
++Canonicalize a configuration name.
++
++Operation modes:
++ -h, --help print this help, then exit
++ -t, --time-stamp print date of last modification, then exit
++ -v, --version print version number, then exit
++
++Report bugs and patches to <config-patches@gnu.org>."
++
++version="\
++GNU config.sub ($timestamp)
++
++Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001,
++2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
++
++This is free software; see the source for copying conditions. There is NO
++warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
++
++help="
++Try \`$me --help' for more information."
++
++# Parse command line
++while test $# -gt 0 ; do
++ case $1 in
++ --time-stamp | --time* | -t )
++ echo "$timestamp" ; exit ;;
++ --version | -v )
++ echo "$version" ; exit ;;
++ --help | --h* | -h )
++ echo "$usage"; exit ;;
++ -- ) # Stop option processing
++ shift; break ;;
++ - ) # Use stdin as input.
++ break ;;
++ -* )
++ echo "$me: invalid option $1$help"
++ exit 1 ;;
++
++ *local*)
++ # First pass through any local machine types.
++ echo $1
++ exit ;;
++
++ * )
++ break ;;
++ esac
++done
++
++case $# in
++ 0) echo "$me: missing argument$help" >&2
++ exit 1;;
++ 1) ;;
++ *) echo "$me: too many arguments$help" >&2
++ exit 1;;
++esac
++
++# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
++# Here we must recognize all the valid KERNEL-OS combinations.
++maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
++case $maybe_os in
++ nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \
++ uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \
++ kopensolaris*-gnu* | \
++ storm-chaos* | os2-emx* | rtmk-nova*)
++ os=-$maybe_os
++ basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
++ ;;
++ *)
++ basic_machine=`echo $1 | sed 's/-[^-]*$//'`
++ if [ $basic_machine != $1 ]
++ then os=`echo $1 | sed 's/.*-/-/'`
++ else os=; fi
++ ;;
++esac
++
++### Let's recognize common machines as not being operating systems so
++### that things like config.sub decstation-3100 work. We also
++### recognize some manufacturers as not being operating systems, so we
++### can provide default operating systems below.
++case $os in
++ -sun*os*)
++ # Prevent following clause from handling this invalid input.
++ ;;
++ -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
++ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
++ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
++ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
++ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
++ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
++ -apple | -axis | -knuth | -cray)
++ os=
++ basic_machine=$1
++ ;;
++ -bluegene*)
++ os=-cnk
++ ;;
++ -sim | -cisco | -oki | -wec | -winbond)
++ os=
++ basic_machine=$1
++ ;;
++ -scout)
++ ;;
++ -wrs)
++ os=-vxworks
++ basic_machine=$1
++ ;;
++ -chorusos*)
++ os=-chorusos
++ basic_machine=$1
++ ;;
++ -chorusrdb)
++ os=-chorusrdb
++ basic_machine=$1
++ ;;
++ -hiux*)
++ os=-hiuxwe2
++ ;;
++ -sco6)
++ os=-sco5v6
++ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
++ ;;
++ -sco5)
++ os=-sco3.2v5
++ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
++ ;;
++ -sco4)
++ os=-sco3.2v4
++ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
++ ;;
++ -sco3.2.[4-9]*)
++ os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
++ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
++ ;;
++ -sco3.2v[4-9]*)
++ # Don't forget version if it is 3.2v4 or newer.
++ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
++ ;;
++ -sco5v6*)
++ # Don't forget version if it is 3.2v4 or newer.
++ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
++ ;;
++ -sco*)
++ os=-sco3.2v2
++ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
++ ;;
++ -udk*)
++ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
++ ;;
++ -isc)
++ os=-isc2.2
++ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
++ ;;
++ -clix*)
++ basic_machine=clipper-intergraph
++ ;;
++ -isc*)
++ basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
++ ;;
++ -lynx*)
++ os=-lynxos
++ ;;
++ -ptx*)
++ basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
++ ;;
++ -windowsnt*)
++ os=`echo $os | sed -e 's/windowsnt/winnt/'`
++ ;;
++ -psos*)
++ os=-psos
++ ;;
++ -mint | -mint[0-9]*)
++ basic_machine=m68k-atari
++ os=-mint
++ ;;
++esac
++
++# Decode aliases for certain CPU-COMPANY combinations.
++case $basic_machine in
++ # Recognize the basic CPU types without company name.
++ # Some are omitted here because they have special meanings below.
++ 1750a | 580 \
++ | a29k \
++ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
++ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
++ | am33_2.0 \
++ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \
++ | bfin \
++ | c4x | clipper \
++ | d10v | d30v | dlx | dsp16xx \
++ | fido | fr30 | frv \
++ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
++ | i370 | i860 | i960 | ia64 \
++ | ip2k | iq2000 \
++ | lm32 \
++ | m32c | m32r | m32rle | m68000 | m68k | m88k \
++ | maxq | mb | microblaze | mcore | mep | metag \
++ | mips | mipsbe | mipseb | mipsel | mipsle \
++ | mips16 \
++ | mips64 | mips64el \
++ | mips64octeon | mips64octeonel \
++ | mips64orion | mips64orionel \
++ | mips64r5900 | mips64r5900el \
++ | mips64vr | mips64vrel \
++ | mips64vr4100 | mips64vr4100el \
++ | mips64vr4300 | mips64vr4300el \
++ | mips64vr5000 | mips64vr5000el \
++ | mips64vr5900 | mips64vr5900el \
++ | mipsisa32 | mipsisa32el \
++ | mipsisa32r2 | mipsisa32r2el \
++ | mipsisa64 | mipsisa64el \
++ | mipsisa64r2 | mipsisa64r2el \
++ | mipsisa64sb1 | mipsisa64sb1el \
++ | mipsisa64sr71k | mipsisa64sr71kel \
++ | mipstx39 | mipstx39el \
++ | mn10200 | mn10300 \
++ | moxie \
++ | mt \
++ | msp430 \
++ | nios | nios2 \
++ | ns16k | ns32k \
++ | or32 \
++ | pdp10 | pdp11 | pj | pjl \
++ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \
++ | pyramid \
++ | score \
++ | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
++ | sh64 | sh64le \
++ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
++ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \
++ | spu | strongarm \
++ | tahoe | thumb | tic4x | tic80 | tron \
++ | v850 | v850e \
++ | we32k \
++ | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \
++ | z8k | z80)
++ basic_machine=$basic_machine-unknown
++ ;;
++ m6811 | m68hc11 | m6812 | m68hc12)
++ # Motorola 68HC11/12.
++ basic_machine=$basic_machine-unknown
++ os=-none
++ ;;
++ m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
++ ;;
++ ms1)
++ basic_machine=mt-unknown
++ ;;
++
++ # We use `pc' rather than `unknown'
++ # because (1) that's what they normally are, and
++ # (2) the word "unknown" tends to confuse beginning users.
++ i*86 | x86_64)
++ basic_machine=$basic_machine-pc
++ ;;
++ # Object if more than one company name word.
++ *-*-*)
++ echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
++ exit 1
++ ;;
++ # Recognize the basic CPU types with company name.
++ 580-* \
++ | a29k-* \
++ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
++ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
++ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \
++ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \
++ | avr-* | avr32-* \
++ | bfin-* | bs2000-* \
++ | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \
++ | clipper-* | craynv-* | cydra-* \
++ | d10v-* | d30v-* | dlx-* \
++ | elxsi-* \
++ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
++ | h8300-* | h8500-* \
++ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
++ | i*86-* | i860-* | i960-* | ia64-* \
++ | ip2k-* | iq2000-* \
++ | lm32-* \
++ | m32c-* | m32r-* | m32rle-* \
++ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
++ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \
++ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
++ | mips16-* \
++ | mips64-* | mips64el-* \
++ | mips64octeon-* | mips64octeonel-* \
++ | mips64orion-* | mips64orionel-* \
++ | mips64r5900-* | mips64r5900el-* \
++ | mips64vr-* | mips64vrel-* \
++ | mips64vr4100-* | mips64vr4100el-* \
++ | mips64vr4300-* | mips64vr4300el-* \
++ | mips64vr5000-* | mips64vr5000el-* \
++ | mips64vr5900-* | mips64vr5900el-* \
++ | mipsisa32-* | mipsisa32el-* \
++ | mipsisa32r2-* | mipsisa32r2el-* \
++ | mipsisa64-* | mipsisa64el-* \
++ | mipsisa64r2-* | mipsisa64r2el-* \
++ | mipsisa64sb1-* | mipsisa64sb1el-* \
++ | mipsisa64sr71k-* | mipsisa64sr71kel-* \
++ | mipstx39-* | mipstx39el-* \
++ | mmix-* \
++ | mt-* \
++ | msp430-* \
++ | nios-* | nios2-* \
++ | none-* | np1-* | ns16k-* | ns32k-* \
++ | orion-* \
++ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
++ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \
++ | pyramid-* \
++ | romp-* | rs6000-* \
++ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
++ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
++ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
++ | sparclite-* \
++ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \
++ | tahoe-* | thumb-* \
++ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* | tile-* \
++ | tron-* \
++ | v850-* | v850e-* | vax-* \
++ | we32k-* \
++ | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \
++ | xstormy16-* | xtensa*-* \
++ | ymp-* \
++ | z8k-* | z80-*)
++ ;;
++ # Recognize the basic CPU types without company name, with glob match.
++ xtensa*)
++ basic_machine=$basic_machine-unknown
++ ;;
++ # Recognize the various machine names and aliases which stand
++ # for a CPU type and a company and sometimes even an OS.
++ 386bsd)
++ basic_machine=i386-unknown
++ os=-bsd
++ ;;
++ 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
++ basic_machine=m68000-att
++ ;;
++ 3b*)
++ basic_machine=we32k-att
++ ;;
++ a29khif)
++ basic_machine=a29k-amd
++ os=-udi
++ ;;
++ abacus)
++ basic_machine=abacus-unknown
++ ;;
++ adobe68k)
++ basic_machine=m68010-adobe
++ os=-scout
++ ;;
++ alliant | fx80)
++ basic_machine=fx80-alliant
++ ;;
++ altos | altos3068)
++ basic_machine=m68k-altos
++ ;;
++ am29k)
++ basic_machine=a29k-none
++ os=-bsd
++ ;;
++ amd64)
++ basic_machine=x86_64-pc
++ ;;
++ amd64-*)
++ basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
++ ;;
++ amdahl)
++ basic_machine=580-amdahl
++ os=-sysv
++ ;;
++ amiga | amiga-*)
++ basic_machine=m68k-unknown
++ ;;
++ amigaos | amigados)
++ basic_machine=m68k-unknown
++ os=-amigaos
++ ;;
++ amigaunix | amix)
++ basic_machine=m68k-unknown
++ os=-sysv4
++ ;;
++ apollo68)
++ basic_machine=m68k-apollo
++ os=-sysv
++ ;;
++ apollo68bsd)
++ basic_machine=m68k-apollo
++ os=-bsd
++ ;;
++ aros)
++ basic_machine=i386-pc
++ os=-aros
++ ;;
++ aux)
++ basic_machine=m68k-apple
++ os=-aux
++ ;;
++ balance)
++ basic_machine=ns32k-sequent
++ os=-dynix
++ ;;
++ blackfin)
++ basic_machine=bfin-unknown
++ os=-linux
++ ;;
++ blackfin-*)
++ basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'`
++ os=-linux
++ ;;
++ bluegene*)
++ basic_machine=powerpc-ibm
++ os=-cnk
++ ;;
++ c90)
++ basic_machine=c90-cray
++ os=-unicos
++ ;;
++ cegcc)
++ basic_machine=arm-unknown
++ os=-cegcc
++ ;;
++ convex-c1)
++ basic_machine=c1-convex
++ os=-bsd
++ ;;
++ convex-c2)
++ basic_machine=c2-convex
++ os=-bsd
++ ;;
++ convex-c32)
++ basic_machine=c32-convex
++ os=-bsd
++ ;;
++ convex-c34)
++ basic_machine=c34-convex
++ os=-bsd
++ ;;
++ convex-c38)
++ basic_machine=c38-convex
++ os=-bsd
++ ;;
++ cray | j90)
++ basic_machine=j90-cray
++ os=-unicos
++ ;;
++ craynv)
++ basic_machine=craynv-cray
++ os=-unicosmp
++ ;;
++ cr16)
++ basic_machine=cr16-unknown
++ os=-elf
++ ;;
++ crds | unos)
++ basic_machine=m68k-crds
++ ;;
++ crisv32 | crisv32-* | etraxfs*)
++ basic_machine=crisv32-axis
++ ;;
++ cris | cris-* | etrax*)
++ basic_machine=cris-axis
++ ;;
++ crx)
++ basic_machine=crx-unknown
++ os=-elf
++ ;;
++ da30 | da30-*)
++ basic_machine=m68k-da30
++ ;;
++ decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
++ basic_machine=mips-dec
++ ;;
++ decsystem10* | dec10*)
++ basic_machine=pdp10-dec
++ os=-tops10
++ ;;
++ decsystem20* | dec20*)
++ basic_machine=pdp10-dec
++ os=-tops20
++ ;;
++ delta | 3300 | motorola-3300 | motorola-delta \
++ | 3300-motorola | delta-motorola)
++ basic_machine=m68k-motorola
++ ;;
++ delta88)
++ basic_machine=m88k-motorola
++ os=-sysv3
++ ;;
++ dicos)
++ basic_machine=i686-pc
++ os=-dicos
++ ;;
++ djgpp)
++ basic_machine=i586-pc
++ os=-msdosdjgpp
++ ;;
++ dpx20 | dpx20-*)
++ basic_machine=rs6000-bull
++ os=-bosx
++ ;;
++ dpx2* | dpx2*-bull)
++ basic_machine=m68k-bull
++ os=-sysv3
++ ;;
++ ebmon29k)
++ basic_machine=a29k-amd
++ os=-ebmon
++ ;;
++ elxsi)
++ basic_machine=elxsi-elxsi
++ os=-bsd
++ ;;
++ encore | umax | mmax)
++ basic_machine=ns32k-encore
++ ;;
++ es1800 | OSE68k | ose68k | ose | OSE)
++ basic_machine=m68k-ericsson
++ os=-ose
++ ;;
++ fx2800)
++ basic_machine=i860-alliant
++ ;;
++ genix)
++ basic_machine=ns32k-ns
++ ;;
++ gmicro)
++ basic_machine=tron-gmicro
++ os=-sysv
++ ;;
++ go32)
++ basic_machine=i386-pc
++ os=-go32
++ ;;
++ h3050r* | hiux*)
++ basic_machine=hppa1.1-hitachi
++ os=-hiuxwe2
++ ;;
++ h8300hms)
++ basic_machine=h8300-hitachi
++ os=-hms
++ ;;
++ h8300xray)
++ basic_machine=h8300-hitachi
++ os=-xray
++ ;;
++ h8500hms)
++ basic_machine=h8500-hitachi
++ os=-hms
++ ;;
++ harris)
++ basic_machine=m88k-harris
++ os=-sysv3
++ ;;
++ hp300-*)
++ basic_machine=m68k-hp
++ ;;
++ hp300bsd)
++ basic_machine=m68k-hp
++ os=-bsd
++ ;;
++ hp300hpux)
++ basic_machine=m68k-hp
++ os=-hpux
++ ;;
++ hp3k9[0-9][0-9] | hp9[0-9][0-9])
++ basic_machine=hppa1.0-hp
++ ;;
++ hp9k2[0-9][0-9] | hp9k31[0-9])
++ basic_machine=m68000-hp
++ ;;
++ hp9k3[2-9][0-9])
++ basic_machine=m68k-hp
++ ;;
++ hp9k6[0-9][0-9] | hp6[0-9][0-9])
++ basic_machine=hppa1.0-hp
++ ;;
++ hp9k7[0-79][0-9] | hp7[0-79][0-9])
++ basic_machine=hppa1.1-hp
++ ;;
++ hp9k78[0-9] | hp78[0-9])
++ # FIXME: really hppa2.0-hp
++ basic_machine=hppa1.1-hp
++ ;;
++ hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
++ # FIXME: really hppa2.0-hp
++ basic_machine=hppa1.1-hp
++ ;;
++ hp9k8[0-9][13679] | hp8[0-9][13679])
++ basic_machine=hppa1.1-hp
++ ;;
++ hp9k8[0-9][0-9] | hp8[0-9][0-9])
++ basic_machine=hppa1.0-hp
++ ;;
++ hppa-next)
++ os=-nextstep3
++ ;;
++ hppaosf)
++ basic_machine=hppa1.1-hp
++ os=-osf
++ ;;
++ hppro)
++ basic_machine=hppa1.1-hp
++ os=-proelf
++ ;;
++ i370-ibm* | ibm*)
++ basic_machine=i370-ibm
++ ;;
++# I'm not sure what "Sysv32" means. Should this be sysv3.2?
++ i*86v32)
++ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
++ os=-sysv32
++ ;;
++ i*86v4*)
++ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
++ os=-sysv4
++ ;;
++ i*86v)
++ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
++ os=-sysv
++ ;;
++ i*86sol2)
++ basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
++ os=-solaris2
++ ;;
++ i386mach)
++ basic_machine=i386-mach
++ os=-mach
++ ;;
++ i386-vsta | vsta)
++ basic_machine=i386-unknown
++ os=-vsta
++ ;;
++ iris | iris4d)
++ basic_machine=mips-sgi
++ case $os in
++ -irix*)
++ ;;
++ *)
++ os=-irix4
++ ;;
++ esac
++ ;;
++ isi68 | isi)
++ basic_machine=m68k-isi
++ os=-sysv
++ ;;
++ m68knommu)
++ basic_machine=m68k-unknown
++ os=-linux
++ ;;
++ m68knommu-*)
++ basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'`
++ os=-linux
++ ;;
++ m88k-omron*)
++ basic_machine=m88k-omron
++ ;;
++ magnum | m3230)
++ basic_machine=mips-mips
++ os=-sysv
++ ;;
++ merlin)
++ basic_machine=ns32k-utek
++ os=-sysv
++ ;;
++ mingw32)
++ basic_machine=i386-pc
++ os=-mingw32
++ ;;
++ mingw32ce)
++ basic_machine=arm-unknown
++ os=-mingw32ce
++ ;;
++ miniframe)
++ basic_machine=m68000-convergent
++ ;;
++ *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
++ basic_machine=m68k-atari
++ os=-mint
++ ;;
++ mips3*-*)
++ basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
++ ;;
++ mips3*)
++ basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
++ ;;
++ monitor)
++ basic_machine=m68k-rom68k
++ os=-coff
++ ;;
++ morphos)
++ basic_machine=powerpc-unknown
++ os=-morphos
++ ;;
++ msdos)
++ basic_machine=i386-pc
++ os=-msdos
++ ;;
++ ms1-*)
++ basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
++ ;;
++ mvs)
++ basic_machine=i370-ibm
++ os=-mvs
++ ;;
++ ncr3000)
++ basic_machine=i486-ncr
++ os=-sysv4
++ ;;
++ netbsd386)
++ basic_machine=i386-unknown
++ os=-netbsd
++ ;;
++ netwinder)
++ basic_machine=armv4l-rebel
++ os=-linux
++ ;;
++ news | news700 | news800 | news900)
++ basic_machine=m68k-sony
++ os=-newsos
++ ;;
++ news1000)
++ basic_machine=m68030-sony
++ os=-newsos
++ ;;
++ news-3600 | risc-news)
++ basic_machine=mips-sony
++ os=-newsos
++ ;;
++ necv70)
++ basic_machine=v70-nec
++ os=-sysv
++ ;;
++ next | m*-next )
++ basic_machine=m68k-next
++ case $os in
++ -nextstep* )
++ ;;
++ -ns2*)
++ os=-nextstep2
++ ;;
++ *)
++ os=-nextstep3
++ ;;
++ esac
++ ;;
++ nh3000)
++ basic_machine=m68k-harris
++ os=-cxux
++ ;;
++ nh[45]000)
++ basic_machine=m88k-harris
++ os=-cxux
++ ;;
++ nindy960)
++ basic_machine=i960-intel
++ os=-nindy
++ ;;
++ mon960)
++ basic_machine=i960-intel
++ os=-mon960
++ ;;
++ nonstopux)
++ basic_machine=mips-compaq
++ os=-nonstopux
++ ;;
++ np1)
++ basic_machine=np1-gould
++ ;;
++ nsr-tandem)
++ basic_machine=nsr-tandem
++ ;;
++ op50n-* | op60c-*)
++ basic_machine=hppa1.1-oki
++ os=-proelf
++ ;;
++ openrisc | openrisc-*)
++ basic_machine=or32-unknown
++ ;;
++ os400)
++ basic_machine=powerpc-ibm
++ os=-os400
++ ;;
++ OSE68000 | ose68000)
++ basic_machine=m68000-ericsson
++ os=-ose
++ ;;
++ os68k)
++ basic_machine=m68k-none
++ os=-os68k
++ ;;
++ pa-hitachi)
++ basic_machine=hppa1.1-hitachi
++ os=-hiuxwe2
++ ;;
++ paragon)
++ basic_machine=i860-intel
++ os=-osf
++ ;;
++ parisc)
++ basic_machine=hppa-unknown
++ os=-linux
++ ;;
++ parisc-*)
++ basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'`
++ os=-linux
++ ;;
++ pbd)
++ basic_machine=sparc-tti
++ ;;
++ pbb)
++ basic_machine=m68k-tti
++ ;;
++ pc532 | pc532-*)
++ basic_machine=ns32k-pc532
++ ;;
++ pc98)
++ basic_machine=i386-pc
++ ;;
++ pc98-*)
++ basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'`
++ ;;
++ pentium | p5 | k5 | k6 | nexgen | viac3)
++ basic_machine=i586-pc
++ ;;
++ pentiumpro | p6 | 6x86 | athlon | athlon_*)
++ basic_machine=i686-pc
++ ;;
++ pentiumii | pentium2 | pentiumiii | pentium3)
++ basic_machine=i686-pc
++ ;;
++ pentium4)
++ basic_machine=i786-pc
++ ;;
++ pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
++ basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
++ ;;
++ pentiumpro-* | p6-* | 6x86-* | athlon-*)
++ basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
++ ;;
++ pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
++ basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
++ ;;
++ pentium4-*)
++ basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
++ ;;
++ pn)
++ basic_machine=pn-gould
++ ;;
++ power) basic_machine=power-ibm
++ ;;
++ ppc) basic_machine=powerpc-unknown
++ ;;
++ ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
++ ;;
++ ppcle | powerpclittle | ppc-le | powerpc-little)
++ basic_machine=powerpcle-unknown
++ ;;
++ ppcle-* | powerpclittle-*)
++ basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
++ ;;
++ ppc64) basic_machine=powerpc64-unknown
++ ;;
++ ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
++ ;;
++ ppc64le | powerpc64little | ppc64-le | powerpc64-little)
++ basic_machine=powerpc64le-unknown
++ ;;
++ ppc64le-* | powerpc64little-*)
++ basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
++ ;;
++ ps2)
++ basic_machine=i386-ibm
++ ;;
++ pw32)
++ basic_machine=i586-unknown
++ os=-pw32
++ ;;
++ rdos)
++ basic_machine=i386-pc
++ os=-rdos
++ ;;
++ rom68k)
++ basic_machine=m68k-rom68k
++ os=-coff
++ ;;
++ rm[46]00)
++ basic_machine=mips-siemens
++ ;;
++ rtpc | rtpc-*)
++ basic_machine=romp-ibm
++ ;;
++ s390 | s390-*)
++ basic_machine=s390-ibm
++ ;;
++ s390x | s390x-*)
++ basic_machine=s390x-ibm
++ ;;
++ sa29200)
++ basic_machine=a29k-amd
++ os=-udi
++ ;;
++ sb1)
++ basic_machine=mipsisa64sb1-unknown
++ ;;
++ sb1el)
++ basic_machine=mipsisa64sb1el-unknown
++ ;;
++ sde)
++ basic_machine=mipsisa32-sde
++ os=-elf
++ ;;
++ sei)
++ basic_machine=mips-sei
++ os=-seiux
++ ;;
++ sequent)
++ basic_machine=i386-sequent
++ ;;
++ sh)
++ basic_machine=sh-hitachi
++ os=-hms
++ ;;
++ sh5el)
++ basic_machine=sh5le-unknown
++ ;;
++ sh64)
++ basic_machine=sh64-unknown
++ ;;
++ sparclite-wrs | simso-wrs)
++ basic_machine=sparclite-wrs
++ os=-vxworks
++ ;;
++ sps7)
++ basic_machine=m68k-bull
++ os=-sysv2
++ ;;
++ spur)
++ basic_machine=spur-unknown
++ ;;
++ st2000)
++ basic_machine=m68k-tandem
++ ;;
++ stratus)
++ basic_machine=i860-stratus
++ os=-sysv4
++ ;;
++ sun2)
++ basic_machine=m68000-sun
++ ;;
++ sun2os3)
++ basic_machine=m68000-sun
++ os=-sunos3
++ ;;
++ sun2os4)
++ basic_machine=m68000-sun
++ os=-sunos4
++ ;;
++ sun3os3)
++ basic_machine=m68k-sun
++ os=-sunos3
++ ;;
++ sun3os4)
++ basic_machine=m68k-sun
++ os=-sunos4
++ ;;
++ sun4os3)
++ basic_machine=sparc-sun
++ os=-sunos3
++ ;;
++ sun4os4)
++ basic_machine=sparc-sun
++ os=-sunos4
++ ;;
++ sun4sol2)
++ basic_machine=sparc-sun
++ os=-solaris2
++ ;;
++ sun3 | sun3-*)
++ basic_machine=m68k-sun
++ ;;
++ sun4)
++ basic_machine=sparc-sun
++ ;;
++ sun386 | sun386i | roadrunner)
++ basic_machine=i386-sun
++ ;;
++ sv1)
++ basic_machine=sv1-cray
++ os=-unicos
++ ;;
++ symmetry)
++ basic_machine=i386-sequent
++ os=-dynix
++ ;;
++ t3e)
++ basic_machine=alphaev5-cray
++ os=-unicos
++ ;;
++ t90)
++ basic_machine=t90-cray
++ os=-unicos
++ ;;
++ tic54x | c54x*)
++ basic_machine=tic54x-unknown
++ os=-coff
++ ;;
++ tic55x | c55x*)
++ basic_machine=tic55x-unknown
++ os=-coff
++ ;;
++ tic6x | c6x*)
++ basic_machine=tic6x-unknown
++ os=-coff
++ ;;
++ tile*)
++ basic_machine=tile-unknown
++ os=-linux-gnu
++ ;;
++ tx39)
++ basic_machine=mipstx39-unknown
++ ;;
++ tx39el)
++ basic_machine=mipstx39el-unknown
++ ;;
++ toad1)
++ basic_machine=pdp10-xkl
++ os=-tops20
++ ;;
++ tower | tower-32)
++ basic_machine=m68k-ncr
++ ;;
++ tpf)
++ basic_machine=s390x-ibm
++ os=-tpf
++ ;;
++ udi29k)
++ basic_machine=a29k-amd
++ os=-udi
++ ;;
++ ultra3)
++ basic_machine=a29k-nyu
++ os=-sym1
++ ;;
++ v810 | necv810)
++ basic_machine=v810-nec
++ os=-none
++ ;;
++ vaxv)
++ basic_machine=vax-dec
++ os=-sysv
++ ;;
++ vms)
++ basic_machine=vax-dec
++ os=-vms
++ ;;
++ vpp*|vx|vx-*)
++ basic_machine=f301-fujitsu
++ ;;
++ vxworks960)
++ basic_machine=i960-wrs
++ os=-vxworks
++ ;;
++ vxworks68)
++ basic_machine=m68k-wrs
++ os=-vxworks
++ ;;
++ vxworks29k)
++ basic_machine=a29k-wrs
++ os=-vxworks
++ ;;
++ w65*)
++ basic_machine=w65-wdc
++ os=-none
++ ;;
++ w89k-*)
++ basic_machine=hppa1.1-winbond
++ os=-proelf
++ ;;
++ xbox)
++ basic_machine=i686-pc
++ os=-mingw32
++ ;;
++ xps | xps100)
++ basic_machine=xps100-honeywell
++ ;;
++ ymp)
++ basic_machine=ymp-cray
++ os=-unicos
++ ;;
++ z8k-*-coff)
++ basic_machine=z8k-unknown
++ os=-sim
++ ;;
++ z80-*-coff)
++ basic_machine=z80-unknown
++ os=-sim
++ ;;
++ none)
++ basic_machine=none-none
++ os=-none
++ ;;
++
++# Here we handle the default manufacturer of certain CPU types. It is in
++# some cases the only manufacturer, in others, it is the most popular.
++ w89k)
++ basic_machine=hppa1.1-winbond
++ ;;
++ op50n)
++ basic_machine=hppa1.1-oki
++ ;;
++ op60c)
++ basic_machine=hppa1.1-oki
++ ;;
++ romp)
++ basic_machine=romp-ibm
++ ;;
++ mmix)
++ basic_machine=mmix-knuth
++ ;;
++ rs6000)
++ basic_machine=rs6000-ibm
++ ;;
++ vax)
++ basic_machine=vax-dec
++ ;;
++ pdp10)
++ # there are many clones, so DEC is not a safe bet
++ basic_machine=pdp10-unknown
++ ;;
++ pdp11)
++ basic_machine=pdp11-dec
++ ;;
++ we32k)
++ basic_machine=we32k-att
++ ;;
++ sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele)
++ basic_machine=sh-unknown
++ ;;
++ sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v)
++ basic_machine=sparc-sun
++ ;;
++ cydra)
++ basic_machine=cydra-cydrome
++ ;;
++ orion)
++ basic_machine=orion-highlevel
++ ;;
++ orion105)
++ basic_machine=clipper-highlevel
++ ;;
++ mac | mpw | mac-mpw)
++ basic_machine=m68k-apple
++ ;;
++ pmac | pmac-mpw)
++ basic_machine=powerpc-apple
++ ;;
++ *-unknown)
++ # Make sure to match an already-canonicalized machine name.
++ ;;
++ *)
++ echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
++ exit 1
++ ;;
++esac
++
++# Here we canonicalize certain aliases for manufacturers.
++case $basic_machine in
++ *-digital*)
++ basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
++ ;;
++ *-commodore*)
++ basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
++ ;;
++ *)
++ ;;
++esac
++
++# Decode manufacturer-specific aliases for certain operating systems.
++
++if [ x"$os" != x"" ]
++then
++case $os in
++ # First match some system type aliases
++ # that might get confused with valid system types.
++ # -solaris* is a basic system type, with this one exception.
++ -solaris1 | -solaris1.*)
++ os=`echo $os | sed -e 's|solaris1|sunos4|'`
++ ;;
++ -solaris)
++ os=-solaris2
++ ;;
++ -svr4*)
++ os=-sysv4
++ ;;
++ -unixware*)
++ os=-sysv4.2uw
++ ;;
++ -gnu/linux*)
++ os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
++ ;;
++ # First accept the basic system types.
++ # The portable systems comes first.
++ # Each alternative MUST END IN A *, to match a version number.
++ # -sysv* is not here because it comes later, after sysvr4.
++ -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
++ | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
++ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
++ | -kopensolaris* \
++ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
++ | -aos* | -aros* \
++ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
++ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
++ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
++ | -openbsd* | -solidbsd* \
++ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
++ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
++ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
++ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
++ | -chorusos* | -chorusrdb* | -cegcc* \
++ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
++ | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \
++ | -uxpv* | -beos* | -mpeix* | -udk* \
++ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
++ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
++ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
++ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
++ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
++ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
++ | -skyos* | -haiku* | -rdos* | -toppers* | -drops*)
++ # Remember, each alternative MUST END IN *, to match a version number.
++ ;;
++ -qnx*)
++ case $basic_machine in
++ x86-* | i*86-*)
++ ;;
++ *)
++ os=-nto$os
++ ;;
++ esac
++ ;;
++ -nto-qnx*)
++ ;;
++ -nto*)
++ os=`echo $os | sed -e 's|nto|nto-qnx|'`
++ ;;
++ -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
++ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \
++ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
++ ;;
++ -mac*)
++ os=`echo $os | sed -e 's|mac|macos|'`
++ ;;
++ -linux-dietlibc)
++ os=-linux-dietlibc
++ ;;
++ -linux*)
++ os=`echo $os | sed -e 's|linux|linux-gnu|'`
++ ;;
++ -sunos5*)
++ os=`echo $os | sed -e 's|sunos5|solaris2|'`
++ ;;
++ -sunos6*)
++ os=`echo $os | sed -e 's|sunos6|solaris3|'`
++ ;;
++ -opened*)
++ os=-openedition
++ ;;
++ -os400*)
++ os=-os400
++ ;;
++ -wince*)
++ os=-wince
++ ;;
++ -osfrose*)
++ os=-osfrose
++ ;;
++ -osf*)
++ os=-osf
++ ;;
++ -utek*)
++ os=-bsd
++ ;;
++ -dynix*)
++ os=-bsd
++ ;;
++ -acis*)
++ os=-aos
++ ;;
++ -atheos*)
++ os=-atheos
++ ;;
++ -syllable*)
++ os=-syllable
++ ;;
++ -386bsd)
++ os=-bsd
++ ;;
++ -ctix* | -uts*)
++ os=-sysv
++ ;;
++ -nova*)
++ os=-rtmk-nova
++ ;;
++ -ns2 )
++ os=-nextstep2
++ ;;
++ -nsk*)
++ os=-nsk
++ ;;
++ # Preserve the version number of sinix5.
++ -sinix5.*)
++ os=`echo $os | sed -e 's|sinix|sysv|'`
++ ;;
++ -sinix*)
++ os=-sysv4
++ ;;
++ -tpf*)
++ os=-tpf
++ ;;
++ -triton*)
++ os=-sysv3
++ ;;
++ -oss*)
++ os=-sysv3
++ ;;
++ -svr4)
++ os=-sysv4
++ ;;
++ -svr3)
++ os=-sysv3
++ ;;
++ -sysvr4)
++ os=-sysv4
++ ;;
++ # This must come after -sysvr4.
++ -sysv*)
++ ;;
++ -ose*)
++ os=-ose
++ ;;
++ -es1800*)
++ os=-ose
++ ;;
++ -xenix)
++ os=-xenix
++ ;;
++ -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
++ os=-mint
++ ;;
++ -aros*)
++ os=-aros
++ ;;
++ -kaos*)
++ os=-kaos
++ ;;
++ -zvmoe)
++ os=-zvmoe
++ ;;
++ -dicos*)
++ os=-dicos
++ ;;
++ -none)
++ ;;
++ *)
++ # Get rid of the `-' at the beginning of $os.
++ os=`echo $os | sed 's/[^-]*-//'`
++ echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
++ exit 1
++ ;;
++esac
++else
++
++# Here we handle the default operating systems that come with various machines.
++# The value should be what the vendor currently ships out the door with their
++# machine or put another way, the most popular os provided with the machine.
++
++# Note that if you're going to try to match "-MANUFACTURER" here (say,
++# "-sun"), then you have to tell the case statement up towards the top
++# that MANUFACTURER isn't an operating system. Otherwise, code above
++# will signal an error saying that MANUFACTURER isn't an operating
++# system, and we'll never get to this point.
++
++case $basic_machine in
++ score-*)
++ os=-elf
++ ;;
++ spu-*)
++ os=-elf
++ ;;
++ *-acorn)
++ os=-riscix1.2
++ ;;
++ arm*-rebel)
++ os=-linux
++ ;;
++ arm*-semi)
++ os=-aout
++ ;;
++ c4x-* | tic4x-*)
++ os=-coff
++ ;;
++ # This must come before the *-dec entry.
++ pdp10-*)
++ os=-tops20
++ ;;
++ pdp11-*)
++ os=-none
++ ;;
++ *-dec | vax-*)
++ os=-ultrix4.2
++ ;;
++ m68*-apollo)
++ os=-domain
++ ;;
++ i386-sun)
++ os=-sunos4.0.2
++ ;;
++ m68000-sun)
++ os=-sunos3
++ # This also exists in the configure program, but was not the
++ # default.
++ # os=-sunos4
++ ;;
++ m68*-cisco)
++ os=-aout
++ ;;
++ mep-*)
++ os=-elf
++ ;;
++ mips*-cisco)
++ os=-elf
++ ;;
++ mips*-*)
++ os=-elf
++ ;;
++ or32-*)
++ os=-coff
++ ;;
++ *-tti) # must be before sparc entry or we get the wrong os.
++ os=-sysv3
++ ;;
++ sparc-* | *-sun)
++ os=-sunos4.1.1
++ ;;
++ *-be)
++ os=-beos
++ ;;
++ *-haiku)
++ os=-haiku
++ ;;
++ *-ibm)
++ os=-aix
++ ;;
++ *-knuth)
++ os=-mmixware
++ ;;
++ *-wec)
++ os=-proelf
++ ;;
++ *-winbond)
++ os=-proelf
++ ;;
++ *-oki)
++ os=-proelf
++ ;;
++ *-hp)
++ os=-hpux
++ ;;
++ *-hitachi)
++ os=-hiux
++ ;;
++ i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
++ os=-sysv
++ ;;
++ *-cbm)
++ os=-amigaos
++ ;;
++ *-dg)
++ os=-dgux
++ ;;
++ *-dolphin)
++ os=-sysv3
++ ;;
++ m68k-ccur)
++ os=-rtu
++ ;;
++ m88k-omron*)
++ os=-luna
++ ;;
++ *-next )
++ os=-nextstep
++ ;;
++ *-sequent)
++ os=-ptx
++ ;;
++ *-crds)
++ os=-unos
++ ;;
++ *-ns)
++ os=-genix
++ ;;
++ i370-*)
++ os=-mvs
++ ;;
++ *-next)
++ os=-nextstep3
++ ;;
++ *-gould)
++ os=-sysv
++ ;;
++ *-highlevel)
++ os=-bsd
++ ;;
++ *-encore)
++ os=-bsd
++ ;;
++ *-sgi)
++ os=-irix
++ ;;
++ *-siemens)
++ os=-sysv4
++ ;;
++ *-masscomp)
++ os=-rtu
++ ;;
++ f30[01]-fujitsu | f700-fujitsu)
++ os=-uxpv
++ ;;
++ *-rom68k)
++ os=-coff
++ ;;
++ *-*bug)
++ os=-coff
++ ;;
++ *-apple)
++ os=-macos
++ ;;
++ *-atari*)
++ os=-mint
++ ;;
++ *)
++ os=-none
++ ;;
++esac
++fi
++
++# Here we handle the case where we know the os, and the CPU type, but not the
++# manufacturer. We pick the logical manufacturer.
++vendor=unknown
++case $basic_machine in
++ *-unknown)
++ case $os in
++ -riscix*)
++ vendor=acorn
++ ;;
++ -sunos*)
++ vendor=sun
++ ;;
++ -cnk*|-aix*)
++ vendor=ibm
++ ;;
++ -beos*)
++ vendor=be
++ ;;
++ -hpux*)
++ vendor=hp
++ ;;
++ -mpeix*)
++ vendor=hp
++ ;;
++ -hiux*)
++ vendor=hitachi
++ ;;
++ -unos*)
++ vendor=crds
++ ;;
++ -dgux*)
++ vendor=dg
++ ;;
++ -luna*)
++ vendor=omron
++ ;;
++ -genix*)
++ vendor=ns
++ ;;
++ -mvs* | -opened*)
++ vendor=ibm
++ ;;
++ -os400*)
++ vendor=ibm
++ ;;
++ -ptx*)
++ vendor=sequent
++ ;;
++ -tpf*)
++ vendor=ibm
++ ;;
++ -vxsim* | -vxworks* | -windiss*)
++ vendor=wrs
++ ;;
++ -aux*)
++ vendor=apple
++ ;;
++ -hms*)
++ vendor=hitachi
++ ;;
++ -mpw* | -macos*)
++ vendor=apple
++ ;;
++ -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
++ vendor=atari
++ ;;
++ -vos*)
++ vendor=stratus
++ ;;
++ esac
++ basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
++ ;;
++esac
++
++echo $basic_machine$os
++exit
++
++# Local variables:
++# eval: (add-hook 'write-file-hooks 'time-stamp)
++# time-stamp-start: "timestamp='"
++# time-stamp-format: "%:y-%02m-%02d"
++# time-stamp-end: "'"
++# End:
+Index: libdessert0.86-0.86.14/configure
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/configure 2009-12-09 16:38:51.722669417 +0100
+@@ -0,0 +1,16280 @@
++#! /bin/sh
++# Guess values for system-dependent variables and create Makefiles.
++# Generated by GNU Autoconf 2.65 for libdessert 0.86.14.
++#
++# Report bugs to <des-sert@spline.inf.fu-berlin.de>.
++#
++#
++# Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
++# 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
++# Inc.
++#
++#
++# This configure script is free software; the Free Software Foundation
++# gives unlimited permission to copy, distribute and modify it.
++## -------------------- ##
++## M4sh Initialization. ##
++## -------------------- ##
++
++# Be more Bourne compatible
++DUALCASE=1; export DUALCASE # for MKS sh
++if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
++ emulate sh
++ NULLCMD=:
++ # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
++ # is contrary to our usage. Disable this feature.
++ alias -g '${1+"$@"}'='"$@"'
++ setopt NO_GLOB_SUBST
++else
++ case `(set -o) 2>/dev/null` in #(
++ *posix*) :
++ set -o posix ;; #(
++ *) :
++ ;;
++esac
++fi
++
++
++as_nl='
++'
++export as_nl
++# Printing a long string crashes Solaris 7 /usr/bin/printf.
++as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
++as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
++as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
++# Prefer a ksh shell builtin over an external printf program on Solaris,
++# but without wasting forks for bash or zsh.
++if test -z "$BASH_VERSION$ZSH_VERSION" \
++ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
++ as_echo='print -r --'
++ as_echo_n='print -rn --'
++elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
++ as_echo='printf %s\n'
++ as_echo_n='printf %s'
++else
++ if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
++ as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
++ as_echo_n='/usr/ucb/echo -n'
++ else
++ as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
++ as_echo_n_body='eval
++ arg=$1;
++ case $arg in #(
++ *"$as_nl"*)
++ expr "X$arg" : "X\\(.*\\)$as_nl";
++ arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
++ esac;
++ expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
++ '
++ export as_echo_n_body
++ as_echo_n='sh -c $as_echo_n_body as_echo'
++ fi
++ export as_echo_body
++ as_echo='sh -c $as_echo_body as_echo'
++fi
++
++# The user is always right.
++if test "${PATH_SEPARATOR+set}" != set; then
++ PATH_SEPARATOR=:
++ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
++ (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
++ PATH_SEPARATOR=';'
++ }
++fi
++
++
++# IFS
++# We need space, tab and new line, in precisely that order. Quoting is
++# there to prevent editors from complaining about space-tab.
++# (If _AS_PATH_WALK were called with IFS unset, it would disable word
++# splitting by setting IFS to empty value.)
++IFS=" "" $as_nl"
++
++# Find who we are. Look in the path if we contain no directory separator.
++case $0 in #((
++ *[\\/]* ) as_myself=$0 ;;
++ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
++ done
++IFS=$as_save_IFS
++
++ ;;
++esac
++# We did not find ourselves, most probably we were run as `sh COMMAND'
++# in which case we are not to be found in the path.
++if test "x$as_myself" = x; then
++ as_myself=$0
++fi
++if test ! -f "$as_myself"; then
++ $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
++ exit 1
++fi
++
++# Unset variables that we do not need and which cause bugs (e.g. in
++# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
++# suppresses any "Segmentation fault" message there. '((' could
++# trigger a bug in pdksh 5.2.14.
++for as_var in BASH_ENV ENV MAIL MAILPATH
++do eval test x\${$as_var+set} = xset \
++ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
++done
++PS1='$ '
++PS2='> '
++PS4='+ '
++
++# NLS nuisances.
++LC_ALL=C
++export LC_ALL
++LANGUAGE=C
++export LANGUAGE
++
++# CDPATH.
++(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
++
++if test "x$CONFIG_SHELL" = x; then
++ as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
++ emulate sh
++ NULLCMD=:
++ # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
++ # is contrary to our usage. Disable this feature.
++ alias -g '\${1+\"\$@\"}'='\"\$@\"'
++ setopt NO_GLOB_SUBST
++else
++ case \`(set -o) 2>/dev/null\` in #(
++ *posix*) :
++ set -o posix ;; #(
++ *) :
++ ;;
++esac
++fi
++"
++ as_required="as_fn_return () { (exit \$1); }
++as_fn_success () { as_fn_return 0; }
++as_fn_failure () { as_fn_return 1; }
++as_fn_ret_success () { return 0; }
++as_fn_ret_failure () { return 1; }
++
++exitcode=0
++as_fn_success || { exitcode=1; echo as_fn_success failed.; }
++as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
++as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
++as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
++if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
++
++else
++ exitcode=1; echo positional parameters were not saved.
++fi
++test x\$exitcode = x0 || exit 1"
++ as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
++ as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
++ eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
++ test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
++test \$(( 1 + 1 )) = 2 || exit 1"
++ if (eval "$as_required") 2>/dev/null; then :
++ as_have_required=yes
++else
++ as_have_required=no
++fi
++ if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
++
++else
++ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++as_found=false
++for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ as_found=:
++ case $as_dir in #(
++ /*)
++ for as_base in sh bash ksh sh5; do
++ # Try only shells that exist, to save several forks.
++ as_shell=$as_dir/$as_base
++ if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
++ { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
++ CONFIG_SHELL=$as_shell as_have_required=yes
++ if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
++ break 2
++fi
++fi
++ done;;
++ esac
++ as_found=false
++done
++$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
++ { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
++ CONFIG_SHELL=$SHELL as_have_required=yes
++fi; }
++IFS=$as_save_IFS
++
++
++ if test "x$CONFIG_SHELL" != x; then :
++ # We cannot yet assume a decent shell, so we have to provide a
++ # neutralization value for shells without unset; and this also
++ # works around shells that cannot unset nonexistent variables.
++ BASH_ENV=/dev/null
++ ENV=/dev/null
++ (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
++ export CONFIG_SHELL
++ exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"}
++fi
++
++ if test x$as_have_required = xno; then :
++ $as_echo "$0: This script requires a shell more modern than all"
++ $as_echo "$0: the shells that I found on your system."
++ if test x${ZSH_VERSION+set} = xset ; then
++ $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
++ $as_echo "$0: be upgraded to zsh 4.3.4 or later."
++ else
++ $as_echo "$0: Please tell bug-autoconf@gnu.org and
++$0: des-sert@spline.inf.fu-berlin.de about your system,
++$0: including any error possibly output before this
++$0: message. Then install a modern shell, or manually run
++$0: the script under such a shell if you do have one."
++ fi
++ exit 1
++fi
++fi
++fi
++SHELL=${CONFIG_SHELL-/bin/sh}
++export SHELL
++# Unset more variables known to interfere with behavior of common tools.
++CLICOLOR_FORCE= GREP_OPTIONS=
++unset CLICOLOR_FORCE GREP_OPTIONS
++
++## --------------------- ##
++## M4sh Shell Functions. ##
++## --------------------- ##
++# as_fn_unset VAR
++# ---------------
++# Portably unset VAR.
++as_fn_unset ()
++{
++ { eval $1=; unset $1;}
++}
++as_unset=as_fn_unset
++
++# as_fn_set_status STATUS
++# -----------------------
++# Set $? to STATUS, without forking.
++as_fn_set_status ()
++{
++ return $1
++} # as_fn_set_status
++
++# as_fn_exit STATUS
++# -----------------
++# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
++as_fn_exit ()
++{
++ set +e
++ as_fn_set_status $1
++ exit $1
++} # as_fn_exit
++
++# as_fn_mkdir_p
++# -------------
++# Create "$as_dir" as a directory, including parents if necessary.
++as_fn_mkdir_p ()
++{
++
++ case $as_dir in #(
++ -*) as_dir=./$as_dir;;
++ esac
++ test -d "$as_dir" || eval $as_mkdir_p || {
++ as_dirs=
++ while :; do
++ case $as_dir in #(
++ *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
++ *) as_qdir=$as_dir;;
++ esac
++ as_dirs="'$as_qdir' $as_dirs"
++ as_dir=`$as_dirname -- "$as_dir" ||
++$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
++ X"$as_dir" : 'X\(//\)[^/]' \| \
++ X"$as_dir" : 'X\(//\)$' \| \
++ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
++$as_echo X"$as_dir" |
++ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
++ s//\1/
++ q
++ }
++ /^X\(\/\/\)[^/].*/{
++ s//\1/
++ q
++ }
++ /^X\(\/\/\)$/{
++ s//\1/
++ q
++ }
++ /^X\(\/\).*/{
++ s//\1/
++ q
++ }
++ s/.*/./; q'`
++ test -d "$as_dir" && break
++ done
++ test -z "$as_dirs" || eval "mkdir $as_dirs"
++ } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir"
++
++
++} # as_fn_mkdir_p
++# as_fn_append VAR VALUE
++# ----------------------
++# Append the text in VALUE to the end of the definition contained in VAR. Take
++# advantage of any shell optimizations that allow amortized linear growth over
++# repeated appends, instead of the typical quadratic growth present in naive
++# implementations.
++if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
++ eval 'as_fn_append ()
++ {
++ eval $1+=\$2
++ }'
++else
++ as_fn_append ()
++ {
++ eval $1=\$$1\$2
++ }
++fi # as_fn_append
++
++# as_fn_arith ARG...
++# ------------------
++# Perform arithmetic evaluation on the ARGs, and store the result in the
++# global $as_val. Take advantage of shells that can avoid forks. The arguments
++# must be portable across $(()) and expr.
++if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
++ eval 'as_fn_arith ()
++ {
++ as_val=$(( $* ))
++ }'
++else
++ as_fn_arith ()
++ {
++ as_val=`expr "$@" || test $? -eq 1`
++ }
++fi # as_fn_arith
++
++
++# as_fn_error ERROR [LINENO LOG_FD]
++# ---------------------------------
++# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
++# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
++# script with status $?, using 1 if that was 0.
++as_fn_error ()
++{
++ as_status=$?; test $as_status -eq 0 && as_status=1
++ if test "$3"; then
++ as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
++ $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3
++ fi
++ $as_echo "$as_me: error: $1" >&2
++ as_fn_exit $as_status
++} # as_fn_error
++
++if expr a : '\(a\)' >/dev/null 2>&1 &&
++ test "X`expr 00001 : '.*\(...\)'`" = X001; then
++ as_expr=expr
++else
++ as_expr=false
++fi
++
++if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
++ as_basename=basename
++else
++ as_basename=false
++fi
++
++if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
++ as_dirname=dirname
++else
++ as_dirname=false
++fi
++
++as_me=`$as_basename -- "$0" ||
++$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
++ X"$0" : 'X\(//\)$' \| \
++ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
++$as_echo X/"$0" |
++ sed '/^.*\/\([^/][^/]*\)\/*$/{
++ s//\1/
++ q
++ }
++ /^X\/\(\/\/\)$/{
++ s//\1/
++ q
++ }
++ /^X\/\(\/\).*/{
++ s//\1/
++ q
++ }
++ s/.*/./; q'`
++
++# Avoid depending upon Character Ranges.
++as_cr_letters='abcdefghijklmnopqrstuvwxyz'
++as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
++as_cr_Letters=$as_cr_letters$as_cr_LETTERS
++as_cr_digits='0123456789'
++as_cr_alnum=$as_cr_Letters$as_cr_digits
++
++
++ as_lineno_1=$LINENO as_lineno_1a=$LINENO
++ as_lineno_2=$LINENO as_lineno_2a=$LINENO
++ eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
++ test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
++ # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-)
++ sed -n '
++ p
++ /[$]LINENO/=
++ ' <$as_myself |
++ sed '
++ s/[$]LINENO.*/&-/
++ t lineno
++ b
++ :lineno
++ N
++ :loop
++ s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
++ t loop
++ s/-\n.*//
++ ' >$as_me.lineno &&
++ chmod +x "$as_me.lineno" ||
++ { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
++
++ # Don't try to exec as it changes $[0], causing all sort of problems
++ # (the dirname of $[0] is not the place where we might find the
++ # original and so on. Autoconf is especially sensitive to this).
++ . "./$as_me.lineno"
++ # Exit status is that of the last command.
++ exit
++}
++
++ECHO_C= ECHO_N= ECHO_T=
++case `echo -n x` in #(((((
++-n*)
++ case `echo 'xy\c'` in
++ *c*) ECHO_T=' ';; # ECHO_T is single tab character.
++ xy) ECHO_C='\c';;
++ *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
++ ECHO_T=' ';;
++ esac;;
++*)
++ ECHO_N='-n';;
++esac
++
++rm -f conf$$ conf$$.exe conf$$.file
++if test -d conf$$.dir; then
++ rm -f conf$$.dir/conf$$.file
++else
++ rm -f conf$$.dir
++ mkdir conf$$.dir 2>/dev/null
++fi
++if (echo >conf$$.file) 2>/dev/null; then
++ if ln -s conf$$.file conf$$ 2>/dev/null; then
++ as_ln_s='ln -s'
++ # ... but there are two gotchas:
++ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
++ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
++ # In both cases, we have to default to `cp -p'.
++ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
++ as_ln_s='cp -p'
++ elif ln conf$$.file conf$$ 2>/dev/null; then
++ as_ln_s=ln
++ else
++ as_ln_s='cp -p'
++ fi
++else
++ as_ln_s='cp -p'
++fi
++rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
++rmdir conf$$.dir 2>/dev/null
++
++if mkdir -p . 2>/dev/null; then
++ as_mkdir_p='mkdir -p "$as_dir"'
++else
++ test -d ./-p && rmdir ./-p
++ as_mkdir_p=false
++fi
++
++if test -x / >/dev/null 2>&1; then
++ as_test_x='test -x'
++else
++ if ls -dL / >/dev/null 2>&1; then
++ as_ls_L_option=L
++ else
++ as_ls_L_option=
++ fi
++ as_test_x='
++ eval sh -c '\''
++ if test -d "$1"; then
++ test -d "$1/.";
++ else
++ case $1 in #(
++ -*)set "./$1";;
++ esac;
++ case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
++ ???[sx]*):;;*)false;;esac;fi
++ '\'' sh
++ '
++fi
++as_executable_p=$as_test_x
++
++# Sed expression to map a string onto a valid CPP name.
++as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
++
++# Sed expression to map a string onto a valid variable name.
++as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
++
++
++
++# Check that we are running under the correct shell.
++SHELL=${CONFIG_SHELL-/bin/sh}
++
++case X$lt_ECHO in
++X*--fallback-echo)
++ # Remove one level of quotation (which was required for Make).
++ ECHO=`echo "$lt_ECHO" | sed 's,\\\\\$\\$0,'$0','`
++ ;;
++esac
++
++ECHO=${lt_ECHO-echo}
++if test "X$1" = X--no-reexec; then
++ # Discard the --no-reexec flag, and continue.
++ shift
++elif test "X$1" = X--fallback-echo; then
++ # Avoid inline document here, it may be left over
++ :
++elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then
++ # Yippee, $ECHO works!
++ :
++else
++ # Restart under the correct shell.
++ exec $SHELL "$0" --no-reexec ${1+"$@"}
++fi
++
++if test "X$1" = X--fallback-echo; then
++ # used as fallback echo
++ shift
++ cat <<_LT_EOF
++$*
++_LT_EOF
++ exit 0
++fi
++
++# The HP-UX ksh and POSIX shell print the target directory to stdout
++# if CDPATH is set.
++(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
++
++if test -z "$lt_ECHO"; then
++ if test "X${echo_test_string+set}" != Xset; then
++ # find a string as large as possible, as long as the shell can cope with it
++ for cmd in 'sed 50q "$0"' 'sed 20q "$0"' 'sed 10q "$0"' 'sed 2q "$0"' 'echo test'; do
++ # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
++ if { echo_test_string=`eval $cmd`; } 2>/dev/null &&
++ { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null
++ then
++ break
++ fi
++ done
++ fi
++
++ if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
++ echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
++ test "X$echo_testing_string" = "X$echo_test_string"; then
++ :
++ else
++ # The Solaris, AIX, and Digital Unix default echo programs unquote
++ # backslashes. This makes it impossible to quote backslashes using
++ # echo "$something" | sed 's/\\/\\\\/g'
++ #
++ # So, first we look for a working echo in the user's PATH.
++
++ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
++ for dir in $PATH /usr/ucb; do
++ IFS="$lt_save_ifs"
++ if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
++ test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
++ echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
++ test "X$echo_testing_string" = "X$echo_test_string"; then
++ ECHO="$dir/echo"
++ break
++ fi
++ done
++ IFS="$lt_save_ifs"
++
++ if test "X$ECHO" = Xecho; then
++ # We didn't find a better echo, so look for alternatives.
++ if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' &&
++ echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` &&
++ test "X$echo_testing_string" = "X$echo_test_string"; then
++ # This shell has a builtin print -r that does the trick.
++ ECHO='print -r'
++ elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } &&
++ test "X$CONFIG_SHELL" != X/bin/ksh; then
++ # If we have ksh, try running configure again with it.
++ ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
++ export ORIGINAL_CONFIG_SHELL
++ CONFIG_SHELL=/bin/ksh
++ export CONFIG_SHELL
++ exec $CONFIG_SHELL "$0" --no-reexec ${1+"$@"}
++ else
++ # Try using printf.
++ ECHO='printf %s\n'
++ if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
++ echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
++ test "X$echo_testing_string" = "X$echo_test_string"; then
++ # Cool, printf works
++ :
++ elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
++ test "X$echo_testing_string" = 'X\t' &&
++ echo_testing_string=`($ORIGINAL_CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
++ test "X$echo_testing_string" = "X$echo_test_string"; then
++ CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
++ export CONFIG_SHELL
++ SHELL="$CONFIG_SHELL"
++ export SHELL
++ ECHO="$CONFIG_SHELL $0 --fallback-echo"
++ elif echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo '\t') 2>/dev/null` &&
++ test "X$echo_testing_string" = 'X\t' &&
++ echo_testing_string=`($CONFIG_SHELL "$0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
++ test "X$echo_testing_string" = "X$echo_test_string"; then
++ ECHO="$CONFIG_SHELL $0 --fallback-echo"
++ else
++ # maybe with a smaller string...
++ prev=:
++
++ for cmd in 'echo test' 'sed 2q "$0"' 'sed 10q "$0"' 'sed 20q "$0"' 'sed 50q "$0"'; do
++ if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null
++ then
++ break
++ fi
++ prev="$cmd"
++ done
++
++ if test "$prev" != 'sed 50q "$0"'; then
++ echo_test_string=`eval $prev`
++ export echo_test_string
++ exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "$0" ${1+"$@"}
++ else
++ # Oops. We lost completely, so just stick with echo.
++ ECHO=echo
++ fi
++ fi
++ fi
++ fi
++ fi
++fi
++
++# Copy echo and quote the copy suitably for passing to libtool from
++# the Makefile, instead of quoting the original, which is used later.
++lt_ECHO=$ECHO
++if test "X$lt_ECHO" = "X$CONFIG_SHELL $0 --fallback-echo"; then
++ lt_ECHO="$CONFIG_SHELL \\\$\$0 --fallback-echo"
++fi
++
++
++
++
++test -n "$DJDIR" || exec 7<&0 </dev/null
++exec 6>&1
++
++# Name of the host.
++# hostname on some systems (SVR3.2, Linux) returns a bogus exit status,
++# so uname gets run too.
++ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
++
++#
++# Initializations.
++#
++ac_default_prefix=/usr/local
++ac_clean_files=
++ac_config_libobj_dir=.
++LIBOBJS=
++cross_compiling=no
++subdirs=
++MFLAGS=
++MAKEFLAGS=
++
++# Identity of this package.
++PACKAGE_NAME='libdessert'
++PACKAGE_TARNAME='libdessert'
++PACKAGE_VERSION='0.86.14'
++PACKAGE_STRING='libdessert 0.86.14'
++PACKAGE_BUGREPORT='des-sert@spline.inf.fu-berlin.de'
++PACKAGE_URL=''
++
++ac_unique_file="src/libdessert/dessert_core.c"
++# Factoring default headers for most tests.
++ac_includes_default="\
++#include <stdio.h>
++#ifdef HAVE_SYS_TYPES_H
++# include <sys/types.h>
++#endif
++#ifdef HAVE_SYS_STAT_H
++# include <sys/stat.h>
++#endif
++#ifdef STDC_HEADERS
++# include <stdlib.h>
++# include <stddef.h>
++#else
++# ifdef HAVE_STDLIB_H
++# include <stdlib.h>
++# endif
++#endif
++#ifdef HAVE_STRING_H
++# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
++# include <memory.h>
++# endif
++# include <string.h>
++#endif
++#ifdef HAVE_STRINGS_H
++# include <strings.h>
++#endif
++#ifdef HAVE_INTTYPES_H
++# include <inttypes.h>
++#endif
++#ifdef HAVE_STDINT_H
++# include <stdint.h>
++#endif
++#ifdef HAVE_UNISTD_H
++# include <unistd.h>
++#endif"
++
++ac_subst_vars='am__EXEEXT_FALSE
++am__EXEEXT_TRUE
++LTLIBOBJS
++DOXYGEN_PAPER_SIZE
++DX_COND_latex_FALSE
++DX_COND_latex_TRUE
++DX_COND_pdf_FALSE
++DX_COND_pdf_TRUE
++DX_PDFLATEX
++DX_FLAG_pdf
++DX_COND_ps_FALSE
++DX_COND_ps_TRUE
++DX_EGREP
++DX_DVIPS
++DX_MAKEINDEX
++DX_LATEX
++DX_FLAG_ps
++DX_COND_html_FALSE
++DX_COND_html_TRUE
++DX_FLAG_html
++DX_COND_chi_FALSE
++DX_COND_chi_TRUE
++DX_FLAG_chi
++DX_COND_chm_FALSE
++DX_COND_chm_TRUE
++DX_HHC
++DX_FLAG_chm
++DX_COND_xml_FALSE
++DX_COND_xml_TRUE
++DX_FLAG_xml
++DX_COND_rtf_FALSE
++DX_COND_rtf_TRUE
++DX_FLAG_rtf
++DX_COND_man_FALSE
++DX_COND_man_TRUE
++DX_FLAG_man
++DX_COND_dot_FALSE
++DX_COND_dot_TRUE
++DX_DOT
++DX_FLAG_dot
++DX_COND_doc_FALSE
++DX_COND_doc_TRUE
++DX_PERL
++DX_DOXYGEN
++DX_FLAG_doc
++DX_ENV
++DX_DOCDIR
++DX_CONFIG
++DX_PROJECT
++LIBOBJS
++PTHREAD_CFLAGS
++PTHREAD_LIBS
++PTHREAD_CC
++ax_pthread_config
++CLI_LIBS
++PCAP_CFLAGS
++PCAP_CFLGAS
++PCAP_LIBS
++SNMP_CFLAGS
++SNMP_CFLGAS
++SNMP_LIBS
++CPP
++OTOOL64
++OTOOL
++LIPO
++NMEDIT
++DSYMUTIL
++lt_ECHO
++RANLIB
++AR
++OBJDUMP
++NM
++ac_ct_DUMPBIN
++DUMPBIN
++LD
++FGREP
++EGREP
++GREP
++SED
++host_os
++host_vendor
++host_cpu
++host
++build_os
++build_vendor
++build_cpu
++build
++LIBTOOL
++LN_S
++am__fastdepCC_FALSE
++am__fastdepCC_TRUE
++CCDEPMODE
++AMDEPBACKSLASH
++AMDEP_FALSE
++AMDEP_TRUE
++am__quote
++am__include
++DEPDIR
++OBJEXT
++EXEEXT
++ac_ct_CC
++CPPFLAGS
++LDFLAGS
++CFLAGS
++CC
++LIBDESSERT_LIBRARY_VERSION
++am__untar
++am__tar
++AMTAR
++am__leading_dot
++SET_MAKE
++AWK
++mkdir_p
++MKDIR_P
++INSTALL_STRIP_PROGRAM
++STRIP
++install_sh
++MAKEINFO
++AUTOHEADER
++AUTOMAKE
++AUTOCONF
++ACLOCAL
++VERSION
++PACKAGE
++CYGPATH_W
++am__isrc
++INSTALL_DATA
++INSTALL_SCRIPT
++INSTALL_PROGRAM
++target_alias
++host_alias
++build_alias
++LIBS
++ECHO_T
++ECHO_N
++ECHO_C
++DEFS
++mandir
++localedir
++libdir
++psdir
++pdfdir
++dvidir
++htmldir
++infodir
++docdir
++oldincludedir
++includedir
++localstatedir
++sharedstatedir
++sysconfdir
++datadir
++datarootdir
++libexecdir
++sbindir
++bindir
++program_transform_name
++prefix
++exec_prefix
++PACKAGE_URL
++PACKAGE_BUGREPORT
++PACKAGE_STRING
++PACKAGE_VERSION
++PACKAGE_TARNAME
++PACKAGE_NAME
++PATH_SEPARATOR
++SHELL'
++ac_subst_files=''
++ac_user_opts='
++enable_option_checking
++enable_dependency_tracking
++enable_shared
++enable_static
++with_pic
++enable_fast_install
++with_gnu_ld
++enable_libtool_lock
++enable_doxygen_doc
++enable_doxygen_dot
++enable_doxygen_man
++enable_doxygen_rtf
++enable_doxygen_xml
++enable_doxygen_chm
++enable_doxygen_chi
++enable_doxygen_html
++enable_doxygen_ps
++enable_doxygen_pdf
++'
++ ac_precious_vars='build_alias
++host_alias
++target_alias
++CC
++CFLAGS
++LDFLAGS
++LIBS
++CPPFLAGS
++CPP
++DOXYGEN_PAPER_SIZE'
++
++
++# Initialize some variables set by options.
++ac_init_help=
++ac_init_version=false
++ac_unrecognized_opts=
++ac_unrecognized_sep=
++# The variables have the same names as the options, with
++# dashes changed to underlines.
++cache_file=/dev/null
++exec_prefix=NONE
++no_create=
++no_recursion=
++prefix=NONE
++program_prefix=NONE
++program_suffix=NONE
++program_transform_name=s,x,x,
++silent=
++site=
++srcdir=
++verbose=
++x_includes=NONE
++x_libraries=NONE
++
++# Installation directory options.
++# These are left unexpanded so users can "make install exec_prefix=/foo"
++# and all the variables that are supposed to be based on exec_prefix
++# by default will actually change.
++# Use braces instead of parens because sh, perl, etc. also accept them.
++# (The list follows the same order as the GNU Coding Standards.)
++bindir='${exec_prefix}/bin'
++sbindir='${exec_prefix}/sbin'
++libexecdir='${exec_prefix}/libexec'
++datarootdir='${prefix}/share'
++datadir='${datarootdir}'
++sysconfdir='${prefix}/etc'
++sharedstatedir='${prefix}/com'
++localstatedir='${prefix}/var'
++includedir='${prefix}/include'
++oldincludedir='/usr/include'
++docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
++infodir='${datarootdir}/info'
++htmldir='${docdir}'
++dvidir='${docdir}'
++pdfdir='${docdir}'
++psdir='${docdir}'
++libdir='${exec_prefix}/lib'
++localedir='${datarootdir}/locale'
++mandir='${datarootdir}/man'
++
++ac_prev=
++ac_dashdash=
++for ac_option
++do
++ # If the previous option needs an argument, assign it.
++ if test -n "$ac_prev"; then
++ eval $ac_prev=\$ac_option
++ ac_prev=
++ continue
++ fi
++
++ case $ac_option in
++ *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
++ *) ac_optarg=yes ;;
++ esac
++
++ # Accept the important Cygnus configure options, so we can diagnose typos.
++
++ case $ac_dashdash$ac_option in
++ --)
++ ac_dashdash=yes ;;
++
++ -bindir | --bindir | --bindi | --bind | --bin | --bi)
++ ac_prev=bindir ;;
++ -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
++ bindir=$ac_optarg ;;
++
++ -build | --build | --buil | --bui | --bu)
++ ac_prev=build_alias ;;
++ -build=* | --build=* | --buil=* | --bui=* | --bu=*)
++ build_alias=$ac_optarg ;;
++
++ -cache-file | --cache-file | --cache-fil | --cache-fi \
++ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
++ ac_prev=cache_file ;;
++ -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
++ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
++ cache_file=$ac_optarg ;;
++
++ --config-cache | -C)
++ cache_file=config.cache ;;
++
++ -datadir | --datadir | --datadi | --datad)
++ ac_prev=datadir ;;
++ -datadir=* | --datadir=* | --datadi=* | --datad=*)
++ datadir=$ac_optarg ;;
++
++ -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
++ | --dataroo | --dataro | --datar)
++ ac_prev=datarootdir ;;
++ -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
++ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
++ datarootdir=$ac_optarg ;;
++
++ -disable-* | --disable-*)
++ ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
++ # Reject names that are not valid shell variable names.
++ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
++ as_fn_error "invalid feature name: $ac_useropt"
++ ac_useropt_orig=$ac_useropt
++ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
++ case $ac_user_opts in
++ *"
++"enable_$ac_useropt"
++"*) ;;
++ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
++ ac_unrecognized_sep=', ';;
++ esac
++ eval enable_$ac_useropt=no ;;
++
++ -docdir | --docdir | --docdi | --doc | --do)
++ ac_prev=docdir ;;
++ -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
++ docdir=$ac_optarg ;;
++
++ -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
++ ac_prev=dvidir ;;
++ -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
++ dvidir=$ac_optarg ;;
++
++ -enable-* | --enable-*)
++ ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
++ # Reject names that are not valid shell variable names.
++ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
++ as_fn_error "invalid feature name: $ac_useropt"
++ ac_useropt_orig=$ac_useropt
++ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
++ case $ac_user_opts in
++ *"
++"enable_$ac_useropt"
++"*) ;;
++ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
++ ac_unrecognized_sep=', ';;
++ esac
++ eval enable_$ac_useropt=\$ac_optarg ;;
++
++ -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
++ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
++ | --exec | --exe | --ex)
++ ac_prev=exec_prefix ;;
++ -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
++ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
++ | --exec=* | --exe=* | --ex=*)
++ exec_prefix=$ac_optarg ;;
++
++ -gas | --gas | --ga | --g)
++ # Obsolete; use --with-gas.
++ with_gas=yes ;;
++
++ -help | --help | --hel | --he | -h)
++ ac_init_help=long ;;
++ -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
++ ac_init_help=recursive ;;
++ -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
++ ac_init_help=short ;;
++
++ -host | --host | --hos | --ho)
++ ac_prev=host_alias ;;
++ -host=* | --host=* | --hos=* | --ho=*)
++ host_alias=$ac_optarg ;;
++
++ -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
++ ac_prev=htmldir ;;
++ -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
++ | --ht=*)
++ htmldir=$ac_optarg ;;
++
++ -includedir | --includedir | --includedi | --included | --include \
++ | --includ | --inclu | --incl | --inc)
++ ac_prev=includedir ;;
++ -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
++ | --includ=* | --inclu=* | --incl=* | --inc=*)
++ includedir=$ac_optarg ;;
++
++ -infodir | --infodir | --infodi | --infod | --info | --inf)
++ ac_prev=infodir ;;
++ -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
++ infodir=$ac_optarg ;;
++
++ -libdir | --libdir | --libdi | --libd)
++ ac_prev=libdir ;;
++ -libdir=* | --libdir=* | --libdi=* | --libd=*)
++ libdir=$ac_optarg ;;
++
++ -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
++ | --libexe | --libex | --libe)
++ ac_prev=libexecdir ;;
++ -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
++ | --libexe=* | --libex=* | --libe=*)
++ libexecdir=$ac_optarg ;;
++
++ -localedir | --localedir | --localedi | --localed | --locale)
++ ac_prev=localedir ;;
++ -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
++ localedir=$ac_optarg ;;
++
++ -localstatedir | --localstatedir | --localstatedi | --localstated \
++ | --localstate | --localstat | --localsta | --localst | --locals)
++ ac_prev=localstatedir ;;
++ -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
++ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
++ localstatedir=$ac_optarg ;;
++
++ -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
++ ac_prev=mandir ;;
++ -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
++ mandir=$ac_optarg ;;
++
++ -nfp | --nfp | --nf)
++ # Obsolete; use --without-fp.
++ with_fp=no ;;
++
++ -no-create | --no-create | --no-creat | --no-crea | --no-cre \
++ | --no-cr | --no-c | -n)
++ no_create=yes ;;
++
++ -no-recursion | --no-recursion | --no-recursio | --no-recursi \
++ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
++ no_recursion=yes ;;
++
++ -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
++ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
++ | --oldin | --oldi | --old | --ol | --o)
++ ac_prev=oldincludedir ;;
++ -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
++ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
++ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
++ oldincludedir=$ac_optarg ;;
++
++ -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
++ ac_prev=prefix ;;
++ -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
++ prefix=$ac_optarg ;;
++
++ -program-prefix | --program-prefix | --program-prefi | --program-pref \
++ | --program-pre | --program-pr | --program-p)
++ ac_prev=program_prefix ;;
++ -program-prefix=* | --program-prefix=* | --program-prefi=* \
++ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
++ program_prefix=$ac_optarg ;;
++
++ -program-suffix | --program-suffix | --program-suffi | --program-suff \
++ | --program-suf | --program-su | --program-s)
++ ac_prev=program_suffix ;;
++ -program-suffix=* | --program-suffix=* | --program-suffi=* \
++ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
++ program_suffix=$ac_optarg ;;
++
++ -program-transform-name | --program-transform-name \
++ | --program-transform-nam | --program-transform-na \
++ | --program-transform-n | --program-transform- \
++ | --program-transform | --program-transfor \
++ | --program-transfo | --program-transf \
++ | --program-trans | --program-tran \
++ | --progr-tra | --program-tr | --program-t)
++ ac_prev=program_transform_name ;;
++ -program-transform-name=* | --program-transform-name=* \
++ | --program-transform-nam=* | --program-transform-na=* \
++ | --program-transform-n=* | --program-transform-=* \
++ | --program-transform=* | --program-transfor=* \
++ | --program-transfo=* | --program-transf=* \
++ | --program-trans=* | --program-tran=* \
++ | --progr-tra=* | --program-tr=* | --program-t=*)
++ program_transform_name=$ac_optarg ;;
++
++ -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
++ ac_prev=pdfdir ;;
++ -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
++ pdfdir=$ac_optarg ;;
++
++ -psdir | --psdir | --psdi | --psd | --ps)
++ ac_prev=psdir ;;
++ -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
++ psdir=$ac_optarg ;;
++
++ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
++ | -silent | --silent | --silen | --sile | --sil)
++ silent=yes ;;
++
++ -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
++ ac_prev=sbindir ;;
++ -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
++ | --sbi=* | --sb=*)
++ sbindir=$ac_optarg ;;
++
++ -sharedstatedir | --sharedstatedir | --sharedstatedi \
++ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
++ | --sharedst | --shareds | --shared | --share | --shar \
++ | --sha | --sh)
++ ac_prev=sharedstatedir ;;
++ -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
++ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
++ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
++ | --sha=* | --sh=*)
++ sharedstatedir=$ac_optarg ;;
++
++ -site | --site | --sit)
++ ac_prev=site ;;
++ -site=* | --site=* | --sit=*)
++ site=$ac_optarg ;;
++
++ -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
++ ac_prev=srcdir ;;
++ -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
++ srcdir=$ac_optarg ;;
++
++ -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
++ | --syscon | --sysco | --sysc | --sys | --sy)
++ ac_prev=sysconfdir ;;
++ -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
++ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
++ sysconfdir=$ac_optarg ;;
++
++ -target | --target | --targe | --targ | --tar | --ta | --t)
++ ac_prev=target_alias ;;
++ -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
++ target_alias=$ac_optarg ;;
++
++ -v | -verbose | --verbose | --verbos | --verbo | --verb)
++ verbose=yes ;;
++
++ -version | --version | --versio | --versi | --vers | -V)
++ ac_init_version=: ;;
++
++ -with-* | --with-*)
++ ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
++ # Reject names that are not valid shell variable names.
++ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
++ as_fn_error "invalid package name: $ac_useropt"
++ ac_useropt_orig=$ac_useropt
++ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
++ case $ac_user_opts in
++ *"
++"with_$ac_useropt"
++"*) ;;
++ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
++ ac_unrecognized_sep=', ';;
++ esac
++ eval with_$ac_useropt=\$ac_optarg ;;
++
++ -without-* | --without-*)
++ ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
++ # Reject names that are not valid shell variable names.
++ expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
++ as_fn_error "invalid package name: $ac_useropt"
++ ac_useropt_orig=$ac_useropt
++ ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
++ case $ac_user_opts in
++ *"
++"with_$ac_useropt"
++"*) ;;
++ *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
++ ac_unrecognized_sep=', ';;
++ esac
++ eval with_$ac_useropt=no ;;
++
++ --x)
++ # Obsolete; use --with-x.
++ with_x=yes ;;
++
++ -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
++ | --x-incl | --x-inc | --x-in | --x-i)
++ ac_prev=x_includes ;;
++ -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
++ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
++ x_includes=$ac_optarg ;;
++
++ -x-libraries | --x-libraries | --x-librarie | --x-librari \
++ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
++ ac_prev=x_libraries ;;
++ -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
++ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
++ x_libraries=$ac_optarg ;;
++
++ -*) as_fn_error "unrecognized option: \`$ac_option'
++Try \`$0 --help' for more information."
++ ;;
++
++ *=*)
++ ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
++ # Reject names that are not valid shell variable names.
++ case $ac_envvar in #(
++ '' | [0-9]* | *[!_$as_cr_alnum]* )
++ as_fn_error "invalid variable name: \`$ac_envvar'" ;;
++ esac
++ eval $ac_envvar=\$ac_optarg
++ export $ac_envvar ;;
++
++ *)
++ # FIXME: should be removed in autoconf 3.0.
++ $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
++ expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
++ $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
++ : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}
++ ;;
++
++ esac
++done
++
++if test -n "$ac_prev"; then
++ ac_option=--`echo $ac_prev | sed 's/_/-/g'`
++ as_fn_error "missing argument to $ac_option"
++fi
++
++if test -n "$ac_unrecognized_opts"; then
++ case $enable_option_checking in
++ no) ;;
++ fatal) as_fn_error "unrecognized options: $ac_unrecognized_opts" ;;
++ *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
++ esac
++fi
++
++# Check all directory arguments for consistency.
++for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \
++ datadir sysconfdir sharedstatedir localstatedir includedir \
++ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
++ libdir localedir mandir
++do
++ eval ac_val=\$$ac_var
++ # Remove trailing slashes.
++ case $ac_val in
++ */ )
++ ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
++ eval $ac_var=\$ac_val;;
++ esac
++ # Be sure to have absolute directory names.
++ case $ac_val in
++ [\\/$]* | ?:[\\/]* ) continue;;
++ NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
++ esac
++ as_fn_error "expected an absolute directory name for --$ac_var: $ac_val"
++done
++
++# There might be people who depend on the old broken behavior: `$host'
++# used to hold the argument of --host etc.
++# FIXME: To remove some day.
++build=$build_alias
++host=$host_alias
++target=$target_alias
++
++# FIXME: To remove some day.
++if test "x$host_alias" != x; then
++ if test "x$build_alias" = x; then
++ cross_compiling=maybe
++ $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host.
++ If a cross compiler is detected then cross compile mode will be used." >&2
++ elif test "x$build_alias" != "x$host_alias"; then
++ cross_compiling=yes
++ fi
++fi
++
++ac_tool_prefix=
++test -n "$host_alias" && ac_tool_prefix=$host_alias-
++
++test "$silent" = yes && exec 6>/dev/null
++
++
++ac_pwd=`pwd` && test -n "$ac_pwd" &&
++ac_ls_di=`ls -di .` &&
++ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
++ as_fn_error "working directory cannot be determined"
++test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
++ as_fn_error "pwd does not report name of working directory"
++
++
++# Find the source files, if location was not specified.
++if test -z "$srcdir"; then
++ ac_srcdir_defaulted=yes
++ # Try the directory containing this script, then the parent directory.
++ ac_confdir=`$as_dirname -- "$as_myself" ||
++$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
++ X"$as_myself" : 'X\(//\)[^/]' \| \
++ X"$as_myself" : 'X\(//\)$' \| \
++ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
++$as_echo X"$as_myself" |
++ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
++ s//\1/
++ q
++ }
++ /^X\(\/\/\)[^/].*/{
++ s//\1/
++ q
++ }
++ /^X\(\/\/\)$/{
++ s//\1/
++ q
++ }
++ /^X\(\/\).*/{
++ s//\1/
++ q
++ }
++ s/.*/./; q'`
++ srcdir=$ac_confdir
++ if test ! -r "$srcdir/$ac_unique_file"; then
++ srcdir=..
++ fi
++else
++ ac_srcdir_defaulted=no
++fi
++if test ! -r "$srcdir/$ac_unique_file"; then
++ test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
++ as_fn_error "cannot find sources ($ac_unique_file) in $srcdir"
++fi
++ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
++ac_abs_confdir=`(
++ cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error "$ac_msg"
++ pwd)`
++# When building in place, set srcdir=.
++if test "$ac_abs_confdir" = "$ac_pwd"; then
++ srcdir=.
++fi
++# Remove unnecessary trailing slashes from srcdir.
++# Double slashes in file names in object file debugging info
++# mess up M-x gdb in Emacs.
++case $srcdir in
++*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
++esac
++for ac_var in $ac_precious_vars; do
++ eval ac_env_${ac_var}_set=\${${ac_var}+set}
++ eval ac_env_${ac_var}_value=\$${ac_var}
++ eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
++ eval ac_cv_env_${ac_var}_value=\$${ac_var}
++done
++
++#
++# Report the --help message.
++#
++if test "$ac_init_help" = "long"; then
++ # Omit some internal or obsolete options to make the list less imposing.
++ # This message is too long to be a string in the A/UX 3.1 sh.
++ cat <<_ACEOF
++\`configure' configures libdessert 0.86.14 to adapt to many kinds of systems.
++
++Usage: $0 [OPTION]... [VAR=VALUE]...
++
++To assign environment variables (e.g., CC, CFLAGS...), specify them as
++VAR=VALUE. See below for descriptions of some of the useful variables.
++
++Defaults for the options are specified in brackets.
++
++Configuration:
++ -h, --help display this help and exit
++ --help=short display options specific to this package
++ --help=recursive display the short help of all the included packages
++ -V, --version display version information and exit
++ -q, --quiet, --silent do not print \`checking...' messages
++ --cache-file=FILE cache test results in FILE [disabled]
++ -C, --config-cache alias for \`--cache-file=config.cache'
++ -n, --no-create do not create output files
++ --srcdir=DIR find the sources in DIR [configure dir or \`..']
++
++Installation directories:
++ --prefix=PREFIX install architecture-independent files in PREFIX
++ [$ac_default_prefix]
++ --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
++ [PREFIX]
++
++By default, \`make install' will install all the files in
++\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify
++an installation prefix other than \`$ac_default_prefix' using \`--prefix',
++for instance \`--prefix=\$HOME'.
++
++For better control, use the options below.
++
++Fine tuning of the installation directories:
++ --bindir=DIR user executables [EPREFIX/bin]
++ --sbindir=DIR system admin executables [EPREFIX/sbin]
++ --libexecdir=DIR program executables [EPREFIX/libexec]
++ --sysconfdir=DIR read-only single-machine data [PREFIX/etc]
++ --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com]
++ --localstatedir=DIR modifiable single-machine data [PREFIX/var]
++ --libdir=DIR object code libraries [EPREFIX/lib]
++ --includedir=DIR C header files [PREFIX/include]
++ --oldincludedir=DIR C header files for non-gcc [/usr/include]
++ --datarootdir=DIR read-only arch.-independent data root [PREFIX/share]
++ --datadir=DIR read-only architecture-independent data [DATAROOTDIR]
++ --infodir=DIR info documentation [DATAROOTDIR/info]
++ --localedir=DIR locale-dependent data [DATAROOTDIR/locale]
++ --mandir=DIR man documentation [DATAROOTDIR/man]
++ --docdir=DIR documentation root [DATAROOTDIR/doc/libdessert]
++ --htmldir=DIR html documentation [DOCDIR]
++ --dvidir=DIR dvi documentation [DOCDIR]
++ --pdfdir=DIR pdf documentation [DOCDIR]
++ --psdir=DIR ps documentation [DOCDIR]
++_ACEOF
++
++ cat <<\_ACEOF
++
++Program names:
++ --program-prefix=PREFIX prepend PREFIX to installed program names
++ --program-suffix=SUFFIX append SUFFIX to installed program names
++ --program-transform-name=PROGRAM run sed PROGRAM on installed program names
++
++System types:
++ --build=BUILD configure for building on BUILD [guessed]
++ --host=HOST cross-compile to build programs to run on HOST [BUILD]
++_ACEOF
++fi
++
++if test -n "$ac_init_help"; then
++ case $ac_init_help in
++ short | recursive ) echo "Configuration of libdessert 0.86.14:";;
++ esac
++ cat <<\_ACEOF
++
++Optional Features:
++ --disable-option-checking ignore unrecognized --enable/--with options
++ --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
++ --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
++ --disable-dependency-tracking speeds up one-time build
++ --enable-dependency-tracking do not reject slow dependency extractors
++ --enable-shared[=PKGS] build shared libraries [default=yes]
++ --enable-static[=PKGS] build static libraries [default=yes]
++ --enable-fast-install[=PKGS]
++ optimize for fast installation [default=yes]
++ --disable-libtool-lock avoid locking (might break parallel builds)
++ --disable-doxygen-doc don't generate any doxygen documentation
++ --disable-doxygen-dot don't generate graphics for doxygen documentation
++ --enable-doxygen-man generate doxygen manual pages
++ --enable-doxygen-rtf generate doxygen RTF documentation
++ --enable-doxygen-xml generate doxygen XML documentation
++ --enable-doxygen-chm generate doxygen compressed HTML help documentation
++ --enable-doxygen-chi generate doxygen seperate compressed HTML help index
++ file
++ --disable-doxygen-html don't generate doxygen plain HTML documentation
++ --enable-doxygen-ps generate doxygen PostScript documentation
++ --disable-doxygen-pdf don't generate doxygen PDF documentation
++
++Optional Packages:
++ --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
++ --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
++ --with-pic try to use only PIC/non-PIC objects [default=use
++ both]
++ --with-gnu-ld assume the C compiler uses GNU ld [default=no]
++
++Some influential environment variables:
++ CC C compiler command
++ CFLAGS C compiler flags
++ LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a
++ nonstandard directory <lib dir>
++ LIBS libraries to pass to the linker, e.g. -l<library>
++ CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
++ you have headers in a nonstandard directory <include dir>
++ CPP C preprocessor
++ DOXYGEN_PAPER_SIZE
++ a4wide (default), a4, letter, legal or executive
++
++Use these variables to override the choices made by `configure' or to help
++it to find libraries and programs with nonstandard names/locations.
++
++Report bugs to <des-sert@spline.inf.fu-berlin.de>.
++_ACEOF
++ac_status=$?
++fi
++
++if test "$ac_init_help" = "recursive"; then
++ # If there are subdirs, report their specific --help.
++ for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
++ test -d "$ac_dir" ||
++ { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
++ continue
++ ac_builddir=.
++
++case "$ac_dir" in
++.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
++*)
++ ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
++ # A ".." for each directory in $ac_dir_suffix.
++ ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
++ case $ac_top_builddir_sub in
++ "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
++ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
++ esac ;;
++esac
++ac_abs_top_builddir=$ac_pwd
++ac_abs_builddir=$ac_pwd$ac_dir_suffix
++# for backward compatibility:
++ac_top_builddir=$ac_top_build_prefix
++
++case $srcdir in
++ .) # We are building in place.
++ ac_srcdir=.
++ ac_top_srcdir=$ac_top_builddir_sub
++ ac_abs_top_srcdir=$ac_pwd ;;
++ [\\/]* | ?:[\\/]* ) # Absolute name.
++ ac_srcdir=$srcdir$ac_dir_suffix;
++ ac_top_srcdir=$srcdir
++ ac_abs_top_srcdir=$srcdir ;;
++ *) # Relative name.
++ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
++ ac_top_srcdir=$ac_top_build_prefix$srcdir
++ ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
++esac
++ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
++
++ cd "$ac_dir" || { ac_status=$?; continue; }
++ # Check for guested configure.
++ if test -f "$ac_srcdir/configure.gnu"; then
++ echo &&
++ $SHELL "$ac_srcdir/configure.gnu" --help=recursive
++ elif test -f "$ac_srcdir/configure"; then
++ echo &&
++ $SHELL "$ac_srcdir/configure" --help=recursive
++ else
++ $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
++ fi || ac_status=$?
++ cd "$ac_pwd" || { ac_status=$?; break; }
++ done
++fi
++
++test -n "$ac_init_help" && exit $ac_status
++if $ac_init_version; then
++ cat <<\_ACEOF
++libdessert configure 0.86.14
++generated by GNU Autoconf 2.65
++
++Copyright (C) 2009 Free Software Foundation, Inc.
++This configure script is free software; the Free Software Foundation
++gives unlimited permission to copy, distribute and modify it.
++_ACEOF
++ exit
++fi
++
++## ------------------------ ##
++## Autoconf initialization. ##
++## ------------------------ ##
++
++# ac_fn_c_try_compile LINENO
++# --------------------------
++# Try to compile conftest.$ac_ext, and return whether this succeeded.
++ac_fn_c_try_compile ()
++{
++ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
++ rm -f conftest.$ac_objext
++ if { { ac_try="$ac_compile"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
++$as_echo "$ac_try_echo"; } >&5
++ (eval "$ac_compile") 2>conftest.err
++ ac_status=$?
++ if test -s conftest.err; then
++ grep -v '^ *+' conftest.err >conftest.er1
++ cat conftest.er1 >&5
++ mv -f conftest.er1 conftest.err
++ fi
++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++ test $ac_status = 0; } && {
++ test -z "$ac_c_werror_flag" ||
++ test ! -s conftest.err
++ } && test -s conftest.$ac_objext; then :
++ ac_retval=0
++else
++ $as_echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++ ac_retval=1
++fi
++ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
++ as_fn_set_status $ac_retval
++
++} # ac_fn_c_try_compile
++
++# ac_fn_c_try_link LINENO
++# -----------------------
++# Try to link conftest.$ac_ext, and return whether this succeeded.
++ac_fn_c_try_link ()
++{
++ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
++ rm -f conftest.$ac_objext conftest$ac_exeext
++ if { { ac_try="$ac_link"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
++$as_echo "$ac_try_echo"; } >&5
++ (eval "$ac_link") 2>conftest.err
++ ac_status=$?
++ if test -s conftest.err; then
++ grep -v '^ *+' conftest.err >conftest.er1
++ cat conftest.er1 >&5
++ mv -f conftest.er1 conftest.err
++ fi
++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++ test $ac_status = 0; } && {
++ test -z "$ac_c_werror_flag" ||
++ test ! -s conftest.err
++ } && test -s conftest$ac_exeext && {
++ test "$cross_compiling" = yes ||
++ $as_test_x conftest$ac_exeext
++ }; then :
++ ac_retval=0
++else
++ $as_echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++ ac_retval=1
++fi
++ # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
++ # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
++ # interfere with the next link command; also delete a directory that is
++ # left behind by Apple's compiler. We do this before executing the actions.
++ rm -rf conftest.dSYM conftest_ipa8_conftest.oo
++ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
++ as_fn_set_status $ac_retval
++
++} # ac_fn_c_try_link
++
++# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
++# -------------------------------------------------------
++# Tests whether HEADER exists and can be compiled using the include files in
++# INCLUDES, setting the cache variable VAR accordingly.
++ac_fn_c_check_header_compile ()
++{
++ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
++$as_echo_n "checking for $2... " >&6; }
++if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
++ $as_echo_n "(cached) " >&6
++else
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++$4
++#include <$2>
++_ACEOF
++if ac_fn_c_try_compile "$LINENO"; then :
++ eval "$3=yes"
++else
++ eval "$3=no"
++fi
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++fi
++eval ac_res=\$$3
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
++$as_echo "$ac_res" >&6; }
++ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
++
++} # ac_fn_c_check_header_compile
++
++# ac_fn_c_try_cpp LINENO
++# ----------------------
++# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
++ac_fn_c_try_cpp ()
++{
++ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
++ if { { ac_try="$ac_cpp conftest.$ac_ext"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
++$as_echo "$ac_try_echo"; } >&5
++ (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
++ ac_status=$?
++ if test -s conftest.err; then
++ grep -v '^ *+' conftest.err >conftest.er1
++ cat conftest.er1 >&5
++ mv -f conftest.er1 conftest.err
++ fi
++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++ test $ac_status = 0; } >/dev/null && {
++ test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
++ test ! -s conftest.err
++ }; then :
++ ac_retval=0
++else
++ $as_echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++ ac_retval=1
++fi
++ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
++ as_fn_set_status $ac_retval
++
++} # ac_fn_c_try_cpp
++
++# ac_fn_c_try_run LINENO
++# ----------------------
++# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
++# that executables *can* be run.
++ac_fn_c_try_run ()
++{
++ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
++ if { { ac_try="$ac_link"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
++$as_echo "$ac_try_echo"; } >&5
++ (eval "$ac_link") 2>&5
++ ac_status=$?
++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++ test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
++ { { case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
++$as_echo "$ac_try_echo"; } >&5
++ (eval "$ac_try") 2>&5
++ ac_status=$?
++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++ test $ac_status = 0; }; }; then :
++ ac_retval=0
++else
++ $as_echo "$as_me: program exited with status $ac_status" >&5
++ $as_echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++ ac_retval=$ac_status
++fi
++ rm -rf conftest.dSYM conftest_ipa8_conftest.oo
++ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
++ as_fn_set_status $ac_retval
++
++} # ac_fn_c_try_run
++
++# ac_fn_c_check_func LINENO FUNC VAR
++# ----------------------------------
++# Tests whether FUNC exists, setting the cache variable VAR accordingly
++ac_fn_c_check_func ()
++{
++ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
++$as_echo_n "checking for $2... " >&6; }
++if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
++ $as_echo_n "(cached) " >&6
++else
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++/* Define $2 to an innocuous variant, in case <limits.h> declares $2.
++ For example, HP-UX 11i <limits.h> declares gettimeofday. */
++#define $2 innocuous_$2
++
++/* System header to define __stub macros and hopefully few prototypes,
++ which can conflict with char $2 (); below.
++ Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
++ <limits.h> exists even on freestanding compilers. */
++
++#ifdef __STDC__
++# include <limits.h>
++#else
++# include <assert.h>
++#endif
++
++#undef $2
++
++/* Override any GCC internal prototype to avoid an error.
++ Use char because int might match the return type of a GCC
++ builtin and then its argument prototype would still apply. */
++#ifdef __cplusplus
++extern "C"
++#endif
++char $2 ();
++/* The GNU C library defines this for functions which it implements
++ to always fail with ENOSYS. Some functions are actually named
++ something starting with __ and the normal name is an alias. */
++#if defined __stub_$2 || defined __stub___$2
++choke me
++#endif
++
++int
++main ()
++{
++return $2 ();
++ ;
++ return 0;
++}
++_ACEOF
++if ac_fn_c_try_link "$LINENO"; then :
++ eval "$3=yes"
++else
++ eval "$3=no"
++fi
++rm -f core conftest.err conftest.$ac_objext \
++ conftest$ac_exeext conftest.$ac_ext
++fi
++eval ac_res=\$$3
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
++$as_echo "$ac_res" >&6; }
++ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
++
++} # ac_fn_c_check_func
++
++# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES
++# -------------------------------------------------------
++# Tests whether HEADER exists, giving a warning if it cannot be compiled using
++# the include files in INCLUDES and setting the cache variable VAR
++# accordingly.
++ac_fn_c_check_header_mongrel ()
++{
++ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
++ if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
++$as_echo_n "checking for $2... " >&6; }
++if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
++ $as_echo_n "(cached) " >&6
++fi
++eval ac_res=\$$3
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
++$as_echo "$ac_res" >&6; }
++else
++ # Is the header compilable?
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5
++$as_echo_n "checking $2 usability... " >&6; }
++cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++$4
++#include <$2>
++_ACEOF
++if ac_fn_c_try_compile "$LINENO"; then :
++ ac_header_compiler=yes
++else
++ ac_header_compiler=no
++fi
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5
++$as_echo "$ac_header_compiler" >&6; }
++
++# Is the header present?
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5
++$as_echo_n "checking $2 presence... " >&6; }
++cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++#include <$2>
++_ACEOF
++if ac_fn_c_try_cpp "$LINENO"; then :
++ ac_header_preproc=yes
++else
++ ac_header_preproc=no
++fi
++rm -f conftest.err conftest.$ac_ext
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5
++$as_echo "$ac_header_preproc" >&6; }
++
++# So? What about this header?
++case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #((
++ yes:no: )
++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5
++$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;}
++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
++$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
++ ;;
++ no:yes:* )
++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5
++$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;}
++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5
++$as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;}
++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5
++$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5
++$as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;}
++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
++$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
++( cat <<\_ASBOX
++## ----------------------------------------------- ##
++## Report this to des-sert@spline.inf.fu-berlin.de ##
++## ----------------------------------------------- ##
++_ASBOX
++ ) | sed "s/^/$as_me: WARNING: /" >&2
++ ;;
++esac
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
++$as_echo_n "checking for $2... " >&6; }
++if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
++ $as_echo_n "(cached) " >&6
++else
++ eval "$3=\$ac_header_compiler"
++fi
++eval ac_res=\$$3
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
++$as_echo "$ac_res" >&6; }
++fi
++ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
++
++} # ac_fn_c_check_header_mongrel
++
++# ac_fn_c_check_type LINENO TYPE VAR INCLUDES
++# -------------------------------------------
++# Tests whether TYPE exists after having included INCLUDES, setting cache
++# variable VAR accordingly.
++ac_fn_c_check_type ()
++{
++ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
++$as_echo_n "checking for $2... " >&6; }
++if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
++ $as_echo_n "(cached) " >&6
++else
++ eval "$3=no"
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++$4
++int
++main ()
++{
++if (sizeof ($2))
++ return 0;
++ ;
++ return 0;
++}
++_ACEOF
++if ac_fn_c_try_compile "$LINENO"; then :
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++$4
++int
++main ()
++{
++if (sizeof (($2)))
++ return 0;
++ ;
++ return 0;
++}
++_ACEOF
++if ac_fn_c_try_compile "$LINENO"; then :
++
++else
++ eval "$3=yes"
++fi
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++fi
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++fi
++eval ac_res=\$$3
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
++$as_echo "$ac_res" >&6; }
++ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
++
++} # ac_fn_c_check_type
++
++# ac_fn_c_find_intX_t LINENO BITS VAR
++# -----------------------------------
++# Finds a signed integer type with width BITS, setting cache variable VAR
++# accordingly.
++ac_fn_c_find_intX_t ()
++{
++ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for int$2_t" >&5
++$as_echo_n "checking for int$2_t... " >&6; }
++if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
++ $as_echo_n "(cached) " >&6
++else
++ eval "$3=no"
++ # Order is important - never check a type that is potentially smaller
++ # than half of the expected target width.
++ for ac_type in int$2_t 'int' 'long int' \
++ 'long long int' 'short int' 'signed char'; do
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++$ac_includes_default
++int
++main ()
++{
++static int test_array [1 - 2 * !(enum { N = $2 / 2 - 1 };
++ 0 < ($ac_type) ((((($ac_type) 1 << N) << N) - 1) * 2 + 1))];
++test_array [0] = 0
++
++ ;
++ return 0;
++}
++_ACEOF
++if ac_fn_c_try_compile "$LINENO"; then :
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++$ac_includes_default
++int
++main ()
++{
++static int test_array [1 - 2 * !(enum { N = $2 / 2 - 1 };
++ ($ac_type) ((((($ac_type) 1 << N) << N) - 1) * 2 + 1)
++ < ($ac_type) ((((($ac_type) 1 << N) << N) - 1) * 2 + 2))];
++test_array [0] = 0
++
++ ;
++ return 0;
++}
++_ACEOF
++if ac_fn_c_try_compile "$LINENO"; then :
++
++else
++ case $ac_type in #(
++ int$2_t) :
++ eval "$3=yes" ;; #(
++ *) :
++ eval "$3=\$ac_type" ;;
++esac
++fi
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++fi
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++ eval as_val=\$$3
++ if test "x$as_val" = x""no; then :
++
++else
++ break
++fi
++ done
++fi
++eval ac_res=\$$3
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
++$as_echo "$ac_res" >&6; }
++ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
++
++} # ac_fn_c_find_intX_t
++
++# ac_fn_c_find_uintX_t LINENO BITS VAR
++# ------------------------------------
++# Finds an unsigned integer type with width BITS, setting cache variable VAR
++# accordingly.
++ac_fn_c_find_uintX_t ()
++{
++ as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for uint$2_t" >&5
++$as_echo_n "checking for uint$2_t... " >&6; }
++if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then :
++ $as_echo_n "(cached) " >&6
++else
++ eval "$3=no"
++ # Order is important - never check a type that is potentially smaller
++ # than half of the expected target width.
++ for ac_type in uint$2_t 'unsigned int' 'unsigned long int' \
++ 'unsigned long long int' 'unsigned short int' 'unsigned char'; do
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++$ac_includes_default
++int
++main ()
++{
++static int test_array [1 - 2 * !((($ac_type) -1 >> ($2 / 2 - 1)) >> ($2 / 2 - 1) == 3)];
++test_array [0] = 0
++
++ ;
++ return 0;
++}
++_ACEOF
++if ac_fn_c_try_compile "$LINENO"; then :
++ case $ac_type in #(
++ uint$2_t) :
++ eval "$3=yes" ;; #(
++ *) :
++ eval "$3=\$ac_type" ;;
++esac
++fi
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++ eval as_val=\$$3
++ if test "x$as_val" = x""no; then :
++
++else
++ break
++fi
++ done
++fi
++eval ac_res=\$$3
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
++$as_echo "$ac_res" >&6; }
++ eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;}
++
++} # ac_fn_c_find_uintX_t
++cat >config.log <<_ACEOF
++This file contains any messages produced by compilers while
++running configure, to aid debugging if configure makes a mistake.
++
++It was created by libdessert $as_me 0.86.14, which was
++generated by GNU Autoconf 2.65. Invocation command line was
++
++ $ $0 $@
++
++_ACEOF
++exec 5>>config.log
++{
++cat <<_ASUNAME
++## --------- ##
++## Platform. ##
++## --------- ##
++
++hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
++uname -m = `(uname -m) 2>/dev/null || echo unknown`
++uname -r = `(uname -r) 2>/dev/null || echo unknown`
++uname -s = `(uname -s) 2>/dev/null || echo unknown`
++uname -v = `(uname -v) 2>/dev/null || echo unknown`
++
++/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
++/bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown`
++
++/bin/arch = `(/bin/arch) 2>/dev/null || echo unknown`
++/usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown`
++/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
++/usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown`
++/bin/machine = `(/bin/machine) 2>/dev/null || echo unknown`
++/usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown`
++/bin/universe = `(/bin/universe) 2>/dev/null || echo unknown`
++
++_ASUNAME
++
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ $as_echo "PATH: $as_dir"
++ done
++IFS=$as_save_IFS
++
++} >&5
++
++cat >&5 <<_ACEOF
++
++
++## ----------- ##
++## Core tests. ##
++## ----------- ##
++
++_ACEOF
++
++
++# Keep a trace of the command line.
++# Strip out --no-create and --no-recursion so they do not pile up.
++# Strip out --silent because we don't want to record it for future runs.
++# Also quote any args containing shell meta-characters.
++# Make two passes to allow for proper duplicate-argument suppression.
++ac_configure_args=
++ac_configure_args0=
++ac_configure_args1=
++ac_must_keep_next=false
++for ac_pass in 1 2
++do
++ for ac_arg
++ do
++ case $ac_arg in
++ -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
++ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
++ | -silent | --silent | --silen | --sile | --sil)
++ continue ;;
++ *\'*)
++ ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
++ esac
++ case $ac_pass in
++ 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
++ 2)
++ as_fn_append ac_configure_args1 " '$ac_arg'"
++ if test $ac_must_keep_next = true; then
++ ac_must_keep_next=false # Got value, back to normal.
++ else
++ case $ac_arg in
++ *=* | --config-cache | -C | -disable-* | --disable-* \
++ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
++ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
++ | -with-* | --with-* | -without-* | --without-* | --x)
++ case "$ac_configure_args0 " in
++ "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
++ esac
++ ;;
++ -* ) ac_must_keep_next=true ;;
++ esac
++ fi
++ as_fn_append ac_configure_args " '$ac_arg'"
++ ;;
++ esac
++ done
++done
++{ ac_configure_args0=; unset ac_configure_args0;}
++{ ac_configure_args1=; unset ac_configure_args1;}
++
++# When interrupted or exit'd, cleanup temporary files, and complete
++# config.log. We remove comments because anyway the quotes in there
++# would cause problems or look ugly.
++# WARNING: Use '\'' to represent an apostrophe within the trap.
++# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
++trap 'exit_status=$?
++ # Save into config.log some information that might help in debugging.
++ {
++ echo
++
++ cat <<\_ASBOX
++## ---------------- ##
++## Cache variables. ##
++## ---------------- ##
++_ASBOX
++ echo
++ # The following way of writing the cache mishandles newlines in values,
++(
++ for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
++ eval ac_val=\$$ac_var
++ case $ac_val in #(
++ *${as_nl}*)
++ case $ac_var in #(
++ *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
++$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
++ esac
++ case $ac_var in #(
++ _ | IFS | as_nl) ;; #(
++ BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
++ *) { eval $ac_var=; unset $ac_var;} ;;
++ esac ;;
++ esac
++ done
++ (set) 2>&1 |
++ case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
++ *${as_nl}ac_space=\ *)
++ sed -n \
++ "s/'\''/'\''\\\\'\'''\''/g;
++ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
++ ;; #(
++ *)
++ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
++ ;;
++ esac |
++ sort
++)
++ echo
++
++ cat <<\_ASBOX
++## ----------------- ##
++## Output variables. ##
++## ----------------- ##
++_ASBOX
++ echo
++ for ac_var in $ac_subst_vars
++ do
++ eval ac_val=\$$ac_var
++ case $ac_val in
++ *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
++ esac
++ $as_echo "$ac_var='\''$ac_val'\''"
++ done | sort
++ echo
++
++ if test -n "$ac_subst_files"; then
++ cat <<\_ASBOX
++## ------------------- ##
++## File substitutions. ##
++## ------------------- ##
++_ASBOX
++ echo
++ for ac_var in $ac_subst_files
++ do
++ eval ac_val=\$$ac_var
++ case $ac_val in
++ *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
++ esac
++ $as_echo "$ac_var='\''$ac_val'\''"
++ done | sort
++ echo
++ fi
++
++ if test -s confdefs.h; then
++ cat <<\_ASBOX
++## ----------- ##
++## confdefs.h. ##
++## ----------- ##
++_ASBOX
++ echo
++ cat confdefs.h
++ echo
++ fi
++ test "$ac_signal" != 0 &&
++ $as_echo "$as_me: caught signal $ac_signal"
++ $as_echo "$as_me: exit $exit_status"
++ } >&5
++ rm -f core *.core core.conftest.* &&
++ rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
++ exit $exit_status
++' 0
++for ac_signal in 1 2 13 15; do
++ trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal
++done
++ac_signal=0
++
++# confdefs.h avoids OS command line length limits that DEFS can exceed.
++rm -f -r conftest* confdefs.h
++
++$as_echo "/* confdefs.h */" > confdefs.h
++
++# Predefined preprocessor variables.
++
++cat >>confdefs.h <<_ACEOF
++#define PACKAGE_NAME "$PACKAGE_NAME"
++_ACEOF
++
++cat >>confdefs.h <<_ACEOF
++#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
++_ACEOF
++
++cat >>confdefs.h <<_ACEOF
++#define PACKAGE_VERSION "$PACKAGE_VERSION"
++_ACEOF
++
++cat >>confdefs.h <<_ACEOF
++#define PACKAGE_STRING "$PACKAGE_STRING"
++_ACEOF
++
++cat >>confdefs.h <<_ACEOF
++#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
++_ACEOF
++
++cat >>confdefs.h <<_ACEOF
++#define PACKAGE_URL "$PACKAGE_URL"
++_ACEOF
++
++
++# Let the site file select an alternate cache file if it wants to.
++# Prefer an explicitly selected file to automatically selected ones.
++ac_site_file1=NONE
++ac_site_file2=NONE
++if test -n "$CONFIG_SITE"; then
++ ac_site_file1=$CONFIG_SITE
++elif test "x$prefix" != xNONE; then
++ ac_site_file1=$prefix/share/config.site
++ ac_site_file2=$prefix/etc/config.site
++else
++ ac_site_file1=$ac_default_prefix/share/config.site
++ ac_site_file2=$ac_default_prefix/etc/config.site
++fi
++for ac_site_file in "$ac_site_file1" "$ac_site_file2"
++do
++ test "x$ac_site_file" = xNONE && continue
++ if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
++$as_echo "$as_me: loading site script $ac_site_file" >&6;}
++ sed 's/^/| /' "$ac_site_file" >&5
++ . "$ac_site_file"
++ fi
++done
++
++if test -r "$cache_file"; then
++ # Some versions of bash will fail to source /dev/null (special files
++ # actually), so we avoid doing that. DJGPP emulates it as a regular file.
++ if test /dev/null != "$cache_file" && test -f "$cache_file"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
++$as_echo "$as_me: loading cache $cache_file" >&6;}
++ case $cache_file in
++ [\\/]* | ?:[\\/]* ) . "$cache_file";;
++ *) . "./$cache_file";;
++ esac
++ fi
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
++$as_echo "$as_me: creating cache $cache_file" >&6;}
++ >$cache_file
++fi
++
++# Check that the precious variables saved in the cache have kept the same
++# value.
++ac_cache_corrupted=false
++for ac_var in $ac_precious_vars; do
++ eval ac_old_set=\$ac_cv_env_${ac_var}_set
++ eval ac_new_set=\$ac_env_${ac_var}_set
++ eval ac_old_val=\$ac_cv_env_${ac_var}_value
++ eval ac_new_val=\$ac_env_${ac_var}_value
++ case $ac_old_set,$ac_new_set in
++ set,)
++ { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
++$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
++ ac_cache_corrupted=: ;;
++ ,set)
++ { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
++$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
++ ac_cache_corrupted=: ;;
++ ,);;
++ *)
++ if test "x$ac_old_val" != "x$ac_new_val"; then
++ # differences in whitespace do not lead to failure.
++ ac_old_val_w=`echo x $ac_old_val`
++ ac_new_val_w=`echo x $ac_new_val`
++ if test "$ac_old_val_w" != "$ac_new_val_w"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
++$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
++ ac_cache_corrupted=:
++ else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
++$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
++ eval $ac_var=\$ac_old_val
++ fi
++ { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5
++$as_echo "$as_me: former value: \`$ac_old_val'" >&2;}
++ { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5
++$as_echo "$as_me: current value: \`$ac_new_val'" >&2;}
++ fi;;
++ esac
++ # Pass precious variables to config.status.
++ if test "$ac_new_set" = set; then
++ case $ac_new_val in
++ *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
++ *) ac_arg=$ac_var=$ac_new_val ;;
++ esac
++ case " $ac_configure_args " in
++ *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy.
++ *) as_fn_append ac_configure_args " '$ac_arg'" ;;
++ esac
++ fi
++done
++if $ac_cache_corrupted; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
++$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
++ { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
++$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
++ as_fn_error "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
++fi
++## -------------------- ##
++## Main body of script. ##
++## -------------------- ##
++
++ac_ext=c
++ac_cpp='$CPP $CPPFLAGS'
++ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
++ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
++ac_compiler_gnu=$ac_cv_c_compiler_gnu
++
++
++am__api_version='1.11'
++
++ac_aux_dir=
++for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
++ for ac_t in install-sh install.sh shtool; do
++ if test -f "$ac_dir/$ac_t"; then
++ ac_aux_dir=$ac_dir
++ ac_install_sh="$ac_aux_dir/$ac_t -c"
++ break 2
++ fi
++ done
++done
++if test -z "$ac_aux_dir"; then
++ as_fn_error "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5
++fi
++
++# These three variables are undocumented and unsupported,
++# and are intended to be withdrawn in a future Autoconf release.
++# They can cause serious problems if a builder's source tree is in a directory
++# whose full name contains unusual characters.
++ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var.
++ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var.
++ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var.
++
++
++# Find a good install program. We prefer a C program (faster),
++# so one script is as good as another. But avoid the broken or
++# incompatible versions:
++# SysV /etc/install, /usr/sbin/install
++# SunOS /usr/etc/install
++# IRIX /sbin/install
++# AIX /bin/install
++# AmigaOS /C/install, which installs bootblocks on floppy discs
++# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
++# AFS /usr/afsws/bin/install, which mishandles nonexistent args
++# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
++# OS/2's system install, which has a completely different semantic
++# ./install, which can be erroneously created by make from ./install.sh.
++# Reject install programs that cannot install multiple files.
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
++$as_echo_n "checking for a BSD-compatible install... " >&6; }
++if test -z "$INSTALL"; then
++if test "${ac_cv_path_install+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ # Account for people who put trailing slashes in PATH elements.
++case $as_dir/ in #((
++ ./ | .// | /[cC]/* | \
++ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
++ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
++ /usr/ucb/* ) ;;
++ *)
++ # OSF1 and SCO ODT 3.0 have their own names for install.
++ # Don't use installbsd from OSF since it installs stuff as root
++ # by default.
++ for ac_prog in ginstall scoinst install; do
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then
++ if test $ac_prog = install &&
++ grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
++ # AIX install. It has an incompatible calling convention.
++ :
++ elif test $ac_prog = install &&
++ grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
++ # program-specific install script used by HP pwplus--don't use.
++ :
++ else
++ rm -rf conftest.one conftest.two conftest.dir
++ echo one > conftest.one
++ echo two > conftest.two
++ mkdir conftest.dir
++ if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
++ test -s conftest.one && test -s conftest.two &&
++ test -s conftest.dir/conftest.one &&
++ test -s conftest.dir/conftest.two
++ then
++ ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
++ break 3
++ fi
++ fi
++ fi
++ done
++ done
++ ;;
++esac
++
++ done
++IFS=$as_save_IFS
++
++rm -rf conftest.one conftest.two conftest.dir
++
++fi
++ if test "${ac_cv_path_install+set}" = set; then
++ INSTALL=$ac_cv_path_install
++ else
++ # As a last resort, use the slow shell script. Don't cache a
++ # value for INSTALL within a source directory, because that will
++ # break other packages using the cache if that directory is
++ # removed, or if the value is a relative name.
++ INSTALL=$ac_install_sh
++ fi
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
++$as_echo "$INSTALL" >&6; }
++
++# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
++# It thinks the first close brace ends the variable substitution.
++test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
++
++test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
++
++test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5
++$as_echo_n "checking whether build environment is sane... " >&6; }
++# Just in case
++sleep 1
++echo timestamp > conftest.file
++# Reject unsafe characters in $srcdir or the absolute working directory
++# name. Accept space and tab only in the latter.
++am_lf='
++'
++case `pwd` in
++ *[\\\"\#\$\&\'\`$am_lf]*)
++ as_fn_error "unsafe absolute working directory name" "$LINENO" 5;;
++esac
++case $srcdir in
++ *[\\\"\#\$\&\'\`$am_lf\ \ ]*)
++ as_fn_error "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;;
++esac
++
++# Do `set' in a subshell so we don't clobber the current shell's
++# arguments. Must try -L first in case configure is actually a
++# symlink; some systems play weird games with the mod time of symlinks
++# (eg FreeBSD returns the mod time of the symlink's containing
++# directory).
++if (
++ set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
++ if test "$*" = "X"; then
++ # -L didn't work.
++ set X `ls -t "$srcdir/configure" conftest.file`
++ fi
++ rm -f conftest.file
++ if test "$*" != "X $srcdir/configure conftest.file" \
++ && test "$*" != "X conftest.file $srcdir/configure"; then
++
++ # If neither matched, then we have a broken ls. This can happen
++ # if, for instance, CONFIG_SHELL is bash and it inherits a
++ # broken ls alias from the environment. This has actually
++ # happened. Such a system could not be considered "sane".
++ as_fn_error "ls -t appears to fail. Make sure there is not a broken
++alias in your environment" "$LINENO" 5
++ fi
++
++ test "$2" = conftest.file
++ )
++then
++ # Ok.
++ :
++else
++ as_fn_error "newly created file is older than distributed files!
++Check your system clock" "$LINENO" 5
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
++$as_echo "yes" >&6; }
++test "$program_prefix" != NONE &&
++ program_transform_name="s&^&$program_prefix&;$program_transform_name"
++# Use a double $ so make ignores it.
++test "$program_suffix" != NONE &&
++ program_transform_name="s&\$&$program_suffix&;$program_transform_name"
++# Double any \ or $.
++# By default was `s,x,x', remove it if useless.
++ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
++program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
++
++# expand $ac_aux_dir to an absolute path
++am_aux_dir=`cd $ac_aux_dir && pwd`
++
++if test x"${MISSING+set}" != xset; then
++ case $am_aux_dir in
++ *\ * | *\ *)
++ MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
++ *)
++ MISSING="\${SHELL} $am_aux_dir/missing" ;;
++ esac
++fi
++# Use eval to expand $SHELL
++if eval "$MISSING --run true"; then
++ am_missing_run="$MISSING --run "
++else
++ am_missing_run=
++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5
++$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;}
++fi
++
++if test x"${install_sh}" != xset; then
++ case $am_aux_dir in
++ *\ * | *\ *)
++ install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
++ *)
++ install_sh="\${SHELL} $am_aux_dir/install-sh"
++ esac
++fi
++
++# Installed binaries are usually stripped using `strip' when the user
++# run `make install-strip'. However `strip' might not be the right
++# tool to use in cross-compilation environments, therefore Automake
++# will honor the `STRIP' environment variable to overrule this program.
++if test "$cross_compiling" != no; then
++ if test -n "$ac_tool_prefix"; then
++ # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
++set dummy ${ac_tool_prefix}strip; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_prog_STRIP+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$STRIP"; then
++ ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_prog_STRIP="${ac_tool_prefix}strip"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++fi
++fi
++STRIP=$ac_cv_prog_STRIP
++if test -n "$STRIP"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
++$as_echo "$STRIP" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++fi
++if test -z "$ac_cv_prog_STRIP"; then
++ ac_ct_STRIP=$STRIP
++ # Extract the first word of "strip", so it can be a program name with args.
++set dummy strip; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$ac_ct_STRIP"; then
++ ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_prog_ac_ct_STRIP="strip"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++fi
++fi
++ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
++if test -n "$ac_ct_STRIP"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
++$as_echo "$ac_ct_STRIP" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++ if test "x$ac_ct_STRIP" = x; then
++ STRIP=":"
++ else
++ case $cross_compiling:$ac_tool_warned in
++yes:)
++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
++$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
++ac_tool_warned=yes ;;
++esac
++ STRIP=$ac_ct_STRIP
++ fi
++else
++ STRIP="$ac_cv_prog_STRIP"
++fi
++
++fi
++INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5
++$as_echo_n "checking for a thread-safe mkdir -p... " >&6; }
++if test -z "$MKDIR_P"; then
++ if test "${ac_cv_path_mkdir+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_prog in mkdir gmkdir; do
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue
++ case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #(
++ 'mkdir (GNU coreutils) '* | \
++ 'mkdir (coreutils) '* | \
++ 'mkdir (fileutils) '4.1*)
++ ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext
++ break 3;;
++ esac
++ done
++ done
++ done
++IFS=$as_save_IFS
++
++fi
++
++ test -d ./--version && rmdir ./--version
++ if test "${ac_cv_path_mkdir+set}" = set; then
++ MKDIR_P="$ac_cv_path_mkdir -p"
++ else
++ # As a last resort, use the slow shell script. Don't cache a
++ # value for MKDIR_P within a source directory, because that will
++ # break other packages using the cache if that directory is
++ # removed, or if the value is a relative name.
++ MKDIR_P="$ac_install_sh -d"
++ fi
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5
++$as_echo "$MKDIR_P" >&6; }
++
++mkdir_p="$MKDIR_P"
++case $mkdir_p in
++ [\\/$]* | ?:[\\/]*) ;;
++ */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;;
++esac
++
++for ac_prog in gawk mawk nawk awk
++do
++ # Extract the first word of "$ac_prog", so it can be a program name with args.
++set dummy $ac_prog; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_prog_AWK+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$AWK"; then
++ ac_cv_prog_AWK="$AWK" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_prog_AWK="$ac_prog"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++fi
++fi
++AWK=$ac_cv_prog_AWK
++if test -n "$AWK"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5
++$as_echo "$AWK" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++ test -n "$AWK" && break
++done
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
++$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
++set x ${MAKE-make}
++ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
++if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then :
++ $as_echo_n "(cached) " >&6
++else
++ cat >conftest.make <<\_ACEOF
++SHELL = /bin/sh
++all:
++ @echo '@@@%%%=$(MAKE)=@@@%%%'
++_ACEOF
++# GNU make sometimes prints "make[1]: Entering...", which would confuse us.
++case `${MAKE-make} -f conftest.make 2>/dev/null` in
++ *@@@%%%=?*=@@@%%%*)
++ eval ac_cv_prog_make_${ac_make}_set=yes;;
++ *)
++ eval ac_cv_prog_make_${ac_make}_set=no;;
++esac
++rm -f conftest.make
++fi
++if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
++$as_echo "yes" >&6; }
++ SET_MAKE=
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++ SET_MAKE="MAKE=${MAKE-make}"
++fi
++
++rm -rf .tst 2>/dev/null
++mkdir .tst 2>/dev/null
++if test -d .tst; then
++ am__leading_dot=.
++else
++ am__leading_dot=_
++fi
++rmdir .tst 2>/dev/null
++
++if test "`cd $srcdir && pwd`" != "`pwd`"; then
++ # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
++ # is not polluted with repeated "-I."
++ am__isrc=' -I$(srcdir)'
++ # test to see if srcdir already configured
++ if test -f $srcdir/config.status; then
++ as_fn_error "source directory already configured; run \"make distclean\" there first" "$LINENO" 5
++ fi
++fi
++
++# test whether we have cygpath
++if test -z "$CYGPATH_W"; then
++ if (cygpath --version) >/dev/null 2>/dev/null; then
++ CYGPATH_W='cygpath -w'
++ else
++ CYGPATH_W=echo
++ fi
++fi
++
++
++# Define the identity of the package.
++ PACKAGE='libdessert'
++ VERSION='0.86.14'
++
++
++cat >>confdefs.h <<_ACEOF
++#define PACKAGE "$PACKAGE"
++_ACEOF
++
++
++cat >>confdefs.h <<_ACEOF
++#define VERSION "$VERSION"
++_ACEOF
++
++# Some tools Automake needs.
++
++ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"}
++
++
++AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"}
++
++
++AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"}
++
++
++AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
++
++
++MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
++
++# We need awk for the "check" target. The system "awk" is bad on
++# some platforms.
++# Always define AMTAR for backward compatibility.
++
++AMTAR=${AMTAR-"${am_missing_run}tar"}
++
++am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'
++
++
++
++
++
++
++
++
++ac_config_headers="$ac_config_headers config.h"
++
++
++LIBDESSERT_LIBRARY_VERSION=0:86:14
++
++
++# Checks for programs.
++ac_ext=c
++ac_cpp='$CPP $CPPFLAGS'
++ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
++ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
++ac_compiler_gnu=$ac_cv_c_compiler_gnu
++if test -n "$ac_tool_prefix"; then
++ # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
++set dummy ${ac_tool_prefix}gcc; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_prog_CC+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$CC"; then
++ ac_cv_prog_CC="$CC" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_prog_CC="${ac_tool_prefix}gcc"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++fi
++fi
++CC=$ac_cv_prog_CC
++if test -n "$CC"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
++$as_echo "$CC" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++fi
++if test -z "$ac_cv_prog_CC"; then
++ ac_ct_CC=$CC
++ # Extract the first word of "gcc", so it can be a program name with args.
++set dummy gcc; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$ac_ct_CC"; then
++ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_prog_ac_ct_CC="gcc"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++fi
++fi
++ac_ct_CC=$ac_cv_prog_ac_ct_CC
++if test -n "$ac_ct_CC"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
++$as_echo "$ac_ct_CC" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++ if test "x$ac_ct_CC" = x; then
++ CC=""
++ else
++ case $cross_compiling:$ac_tool_warned in
++yes:)
++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
++$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
++ac_tool_warned=yes ;;
++esac
++ CC=$ac_ct_CC
++ fi
++else
++ CC="$ac_cv_prog_CC"
++fi
++
++if test -z "$CC"; then
++ if test -n "$ac_tool_prefix"; then
++ # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
++set dummy ${ac_tool_prefix}cc; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_prog_CC+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$CC"; then
++ ac_cv_prog_CC="$CC" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_prog_CC="${ac_tool_prefix}cc"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++fi
++fi
++CC=$ac_cv_prog_CC
++if test -n "$CC"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
++$as_echo "$CC" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++ fi
++fi
++if test -z "$CC"; then
++ # Extract the first word of "cc", so it can be a program name with args.
++set dummy cc; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_prog_CC+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$CC"; then
++ ac_cv_prog_CC="$CC" # Let the user override the test.
++else
++ ac_prog_rejected=no
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
++ ac_prog_rejected=yes
++ continue
++ fi
++ ac_cv_prog_CC="cc"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++if test $ac_prog_rejected = yes; then
++ # We found a bogon in the path, so make sure we never use it.
++ set dummy $ac_cv_prog_CC
++ shift
++ if test $# != 0; then
++ # We chose a different compiler from the bogus one.
++ # However, it has the same basename, so the bogon will be chosen
++ # first if we set CC to just the basename; use the full file name.
++ shift
++ ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
++ fi
++fi
++fi
++fi
++CC=$ac_cv_prog_CC
++if test -n "$CC"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
++$as_echo "$CC" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++fi
++if test -z "$CC"; then
++ if test -n "$ac_tool_prefix"; then
++ for ac_prog in cl.exe
++ do
++ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
++set dummy $ac_tool_prefix$ac_prog; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_prog_CC+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$CC"; then
++ ac_cv_prog_CC="$CC" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++fi
++fi
++CC=$ac_cv_prog_CC
++if test -n "$CC"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
++$as_echo "$CC" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++ test -n "$CC" && break
++ done
++fi
++if test -z "$CC"; then
++ ac_ct_CC=$CC
++ for ac_prog in cl.exe
++do
++ # Extract the first word of "$ac_prog", so it can be a program name with args.
++set dummy $ac_prog; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_prog_ac_ct_CC+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$ac_ct_CC"; then
++ ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_prog_ac_ct_CC="$ac_prog"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++fi
++fi
++ac_ct_CC=$ac_cv_prog_ac_ct_CC
++if test -n "$ac_ct_CC"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
++$as_echo "$ac_ct_CC" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++ test -n "$ac_ct_CC" && break
++done
++
++ if test "x$ac_ct_CC" = x; then
++ CC=""
++ else
++ case $cross_compiling:$ac_tool_warned in
++yes:)
++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
++$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
++ac_tool_warned=yes ;;
++esac
++ CC=$ac_ct_CC
++ fi
++fi
++
++fi
++
++
++test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
++$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
++as_fn_error "no acceptable C compiler found in \$PATH
++See \`config.log' for more details." "$LINENO" 5; }
++
++# Provide some information about the compiler.
++$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
++set X $ac_compile
++ac_compiler=$2
++for ac_option in --version -v -V -qversion; do
++ { { ac_try="$ac_compiler $ac_option >&5"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
++$as_echo "$ac_try_echo"; } >&5
++ (eval "$ac_compiler $ac_option >&5") 2>conftest.err
++ ac_status=$?
++ if test -s conftest.err; then
++ sed '10a\
++... rest of stderr output deleted ...
++ 10q' conftest.err >conftest.er1
++ cat conftest.er1 >&5
++ fi
++ rm -f conftest.er1 conftest.err
++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++ test $ac_status = 0; }
++done
++
++cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++
++int
++main ()
++{
++
++ ;
++ return 0;
++}
++_ACEOF
++ac_clean_files_save=$ac_clean_files
++ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
++# Try to create an executable without -o first, disregard a.out.
++# It will help us diagnose broken compilers, and finding out an intuition
++# of exeext.
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
++$as_echo_n "checking whether the C compiler works... " >&6; }
++ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
++
++# The possible output files:
++ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
++
++ac_rmfiles=
++for ac_file in $ac_files
++do
++ case $ac_file in
++ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
++ * ) ac_rmfiles="$ac_rmfiles $ac_file";;
++ esac
++done
++rm -f $ac_rmfiles
++
++if { { ac_try="$ac_link_default"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
++$as_echo "$ac_try_echo"; } >&5
++ (eval "$ac_link_default") 2>&5
++ ac_status=$?
++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++ test $ac_status = 0; }; then :
++ # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
++# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
++# in a Makefile. We should not override ac_cv_exeext if it was cached,
++# so that the user can short-circuit this test for compilers unknown to
++# Autoconf.
++for ac_file in $ac_files ''
++do
++ test -f "$ac_file" || continue
++ case $ac_file in
++ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
++ ;;
++ [ab].out )
++ # We found the default executable, but exeext='' is most
++ # certainly right.
++ break;;
++ *.* )
++ if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
++ then :; else
++ ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
++ fi
++ # We set ac_cv_exeext here because the later test for it is not
++ # safe: cross compilers may not add the suffix if given an `-o'
++ # argument, so we may need to know it at that point already.
++ # Even if this section looks crufty: it has the advantage of
++ # actually working.
++ break;;
++ * )
++ break;;
++ esac
++done
++test "$ac_cv_exeext" = no && ac_cv_exeext=
++
++else
++ ac_file=''
++fi
++if test -z "$ac_file"; then :
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++$as_echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
++$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
++{ as_fn_set_status 77
++as_fn_error "C compiler cannot create executables
++See \`config.log' for more details." "$LINENO" 5; }; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
++$as_echo "yes" >&6; }
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
++$as_echo_n "checking for C compiler default output file name... " >&6; }
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
++$as_echo "$ac_file" >&6; }
++ac_exeext=$ac_cv_exeext
++
++rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
++ac_clean_files=$ac_clean_files_save
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
++$as_echo_n "checking for suffix of executables... " >&6; }
++if { { ac_try="$ac_link"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
++$as_echo "$ac_try_echo"; } >&5
++ (eval "$ac_link") 2>&5
++ ac_status=$?
++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++ test $ac_status = 0; }; then :
++ # If both `conftest.exe' and `conftest' are `present' (well, observable)
++# catch `conftest.exe'. For instance with Cygwin, `ls conftest' will
++# work properly (i.e., refer to `conftest.exe'), while it won't with
++# `rm'.
++for ac_file in conftest.exe conftest conftest.*; do
++ test -f "$ac_file" || continue
++ case $ac_file in
++ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
++ *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
++ break;;
++ * ) break;;
++ esac
++done
++else
++ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
++$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
++as_fn_error "cannot compute suffix of executables: cannot compile and link
++See \`config.log' for more details." "$LINENO" 5; }
++fi
++rm -f conftest conftest$ac_cv_exeext
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
++$as_echo "$ac_cv_exeext" >&6; }
++
++rm -f conftest.$ac_ext
++EXEEXT=$ac_cv_exeext
++ac_exeext=$EXEEXT
++cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++#include <stdio.h>
++int
++main ()
++{
++FILE *f = fopen ("conftest.out", "w");
++ return ferror (f) || fclose (f) != 0;
++
++ ;
++ return 0;
++}
++_ACEOF
++ac_clean_files="$ac_clean_files conftest.out"
++# Check that the compiler produces executables we can run. If not, either
++# the compiler is broken, or we cross compile.
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
++$as_echo_n "checking whether we are cross compiling... " >&6; }
++if test "$cross_compiling" != yes; then
++ { { ac_try="$ac_link"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
++$as_echo "$ac_try_echo"; } >&5
++ (eval "$ac_link") 2>&5
++ ac_status=$?
++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++ test $ac_status = 0; }
++ if { ac_try='./conftest$ac_cv_exeext'
++ { { case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
++$as_echo "$ac_try_echo"; } >&5
++ (eval "$ac_try") 2>&5
++ ac_status=$?
++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++ test $ac_status = 0; }; }; then
++ cross_compiling=no
++ else
++ if test "$cross_compiling" = maybe; then
++ cross_compiling=yes
++ else
++ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
++$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
++as_fn_error "cannot run C compiled programs.
++If you meant to cross compile, use \`--host'.
++See \`config.log' for more details." "$LINENO" 5; }
++ fi
++ fi
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
++$as_echo "$cross_compiling" >&6; }
++
++rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
++ac_clean_files=$ac_clean_files_save
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
++$as_echo_n "checking for suffix of object files... " >&6; }
++if test "${ac_cv_objext+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++
++int
++main ()
++{
++
++ ;
++ return 0;
++}
++_ACEOF
++rm -f conftest.o conftest.obj
++if { { ac_try="$ac_compile"
++case "(($ac_try" in
++ *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
++ *) ac_try_echo=$ac_try;;
++esac
++eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
++$as_echo "$ac_try_echo"; } >&5
++ (eval "$ac_compile") 2>&5
++ ac_status=$?
++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++ test $ac_status = 0; }; then :
++ for ac_file in conftest.o conftest.obj conftest.*; do
++ test -f "$ac_file" || continue;
++ case $ac_file in
++ *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
++ *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
++ break;;
++ esac
++done
++else
++ $as_echo "$as_me: failed program was:" >&5
++sed 's/^/| /' conftest.$ac_ext >&5
++
++{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
++$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
++as_fn_error "cannot compute suffix of object files: cannot compile
++See \`config.log' for more details." "$LINENO" 5; }
++fi
++rm -f conftest.$ac_cv_objext conftest.$ac_ext
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
++$as_echo "$ac_cv_objext" >&6; }
++OBJEXT=$ac_cv_objext
++ac_objext=$OBJEXT
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
++$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
++if test "${ac_cv_c_compiler_gnu+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++
++int
++main ()
++{
++#ifndef __GNUC__
++ choke me
++#endif
++
++ ;
++ return 0;
++}
++_ACEOF
++if ac_fn_c_try_compile "$LINENO"; then :
++ ac_compiler_gnu=yes
++else
++ ac_compiler_gnu=no
++fi
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++ac_cv_c_compiler_gnu=$ac_compiler_gnu
++
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
++$as_echo "$ac_cv_c_compiler_gnu" >&6; }
++if test $ac_compiler_gnu = yes; then
++ GCC=yes
++else
++ GCC=
++fi
++ac_test_CFLAGS=${CFLAGS+set}
++ac_save_CFLAGS=$CFLAGS
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
++$as_echo_n "checking whether $CC accepts -g... " >&6; }
++if test "${ac_cv_prog_cc_g+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ ac_save_c_werror_flag=$ac_c_werror_flag
++ ac_c_werror_flag=yes
++ ac_cv_prog_cc_g=no
++ CFLAGS="-g"
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++
++int
++main ()
++{
++
++ ;
++ return 0;
++}
++_ACEOF
++if ac_fn_c_try_compile "$LINENO"; then :
++ ac_cv_prog_cc_g=yes
++else
++ CFLAGS=""
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++
++int
++main ()
++{
++
++ ;
++ return 0;
++}
++_ACEOF
++if ac_fn_c_try_compile "$LINENO"; then :
++
++else
++ ac_c_werror_flag=$ac_save_c_werror_flag
++ CFLAGS="-g"
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++
++int
++main ()
++{
++
++ ;
++ return 0;
++}
++_ACEOF
++if ac_fn_c_try_compile "$LINENO"; then :
++ ac_cv_prog_cc_g=yes
++fi
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++fi
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++fi
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++ ac_c_werror_flag=$ac_save_c_werror_flag
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
++$as_echo "$ac_cv_prog_cc_g" >&6; }
++if test "$ac_test_CFLAGS" = set; then
++ CFLAGS=$ac_save_CFLAGS
++elif test $ac_cv_prog_cc_g = yes; then
++ if test "$GCC" = yes; then
++ CFLAGS="-g -O2"
++ else
++ CFLAGS="-g"
++ fi
++else
++ if test "$GCC" = yes; then
++ CFLAGS="-O2"
++ else
++ CFLAGS=
++ fi
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
++$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
++if test "${ac_cv_prog_cc_c89+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ ac_cv_prog_cc_c89=no
++ac_save_CC=$CC
++cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++#include <stdarg.h>
++#include <stdio.h>
++#include <sys/types.h>
++#include <sys/stat.h>
++/* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */
++struct buf { int x; };
++FILE * (*rcsopen) (struct buf *, struct stat *, int);
++static char *e (p, i)
++ char **p;
++ int i;
++{
++ return p[i];
++}
++static char *f (char * (*g) (char **, int), char **p, ...)
++{
++ char *s;
++ va_list v;
++ va_start (v,p);
++ s = g (p, va_arg (v,int));
++ va_end (v);
++ return s;
++}
++
++/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has
++ function prototypes and stuff, but not '\xHH' hex character constants.
++ These don't provoke an error unfortunately, instead are silently treated
++ as 'x'. The following induces an error, until -std is added to get
++ proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an
++ array size at least. It's necessary to write '\x00'==0 to get something
++ that's true only with -std. */
++int osf4_cc_array ['\x00' == 0 ? 1 : -1];
++
++/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
++ inside strings and character constants. */
++#define FOO(x) 'x'
++int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
++
++int test (int i, double x);
++struct s1 {int (*f) (int a);};
++struct s2 {int (*f) (double a);};
++int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
++int argc;
++char **argv;
++int
++main ()
++{
++return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1];
++ ;
++ return 0;
++}
++_ACEOF
++for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
++ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
++do
++ CC="$ac_save_CC $ac_arg"
++ if ac_fn_c_try_compile "$LINENO"; then :
++ ac_cv_prog_cc_c89=$ac_arg
++fi
++rm -f core conftest.err conftest.$ac_objext
++ test "x$ac_cv_prog_cc_c89" != "xno" && break
++done
++rm -f conftest.$ac_ext
++CC=$ac_save_CC
++
++fi
++# AC_CACHE_VAL
++case "x$ac_cv_prog_cc_c89" in
++ x)
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
++$as_echo "none needed" >&6; } ;;
++ xno)
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
++$as_echo "unsupported" >&6; } ;;
++ *)
++ CC="$CC $ac_cv_prog_cc_c89"
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
++$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
++esac
++if test "x$ac_cv_prog_cc_c89" != xno; then :
++
++fi
++
++ac_ext=c
++ac_cpp='$CPP $CPPFLAGS'
++ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
++ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
++ac_compiler_gnu=$ac_cv_c_compiler_gnu
++DEPDIR="${am__leading_dot}deps"
++
++ac_config_commands="$ac_config_commands depfiles"
++
++
++am_make=${MAKE-make}
++cat > confinc << 'END'
++am__doit:
++ @echo this is the am__doit target
++.PHONY: am__doit
++END
++# If we don't find an include directive, just comment out the code.
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5
++$as_echo_n "checking for style of include used by $am_make... " >&6; }
++am__include="#"
++am__quote=
++_am_result=none
++# First try GNU make style include.
++echo "include confinc" > confmf
++# Ignore all kinds of additional output from `make'.
++case `$am_make -s -f confmf 2> /dev/null` in #(
++*the\ am__doit\ target*)
++ am__include=include
++ am__quote=
++ _am_result=GNU
++ ;;
++esac
++# Now try BSD make style include.
++if test "$am__include" = "#"; then
++ echo '.include "confinc"' > confmf
++ case `$am_make -s -f confmf 2> /dev/null` in #(
++ *the\ am__doit\ target*)
++ am__include=.include
++ am__quote="\""
++ _am_result=BSD
++ ;;
++ esac
++fi
++
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5
++$as_echo "$_am_result" >&6; }
++rm -f confinc confmf
++
++# Check whether --enable-dependency-tracking was given.
++if test "${enable_dependency_tracking+set}" = set; then :
++ enableval=$enable_dependency_tracking;
++fi
++
++if test "x$enable_dependency_tracking" != xno; then
++ am_depcomp="$ac_aux_dir/depcomp"
++ AMDEPBACKSLASH='\'
++fi
++ if test "x$enable_dependency_tracking" != xno; then
++ AMDEP_TRUE=
++ AMDEP_FALSE='#'
++else
++ AMDEP_TRUE='#'
++ AMDEP_FALSE=
++fi
++
++
++
++depcc="$CC" am_compiler_list=
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
++$as_echo_n "checking dependency style of $depcc... " >&6; }
++if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
++ # We make a subdir and do the tests there. Otherwise we can end up
++ # making bogus files that we don't know about and never remove. For
++ # instance it was reported that on HP-UX the gcc test will end up
++ # making a dummy file named `D' -- because `-MD' means `put the output
++ # in D'.
++ mkdir conftest.dir
++ # Copy depcomp to subdir because otherwise we won't find it if we're
++ # using a relative directory.
++ cp "$am_depcomp" conftest.dir
++ cd conftest.dir
++ # We will build objects and dependencies in a subdirectory because
++ # it helps to detect inapplicable dependency modes. For instance
++ # both Tru64's cc and ICC support -MD to output dependencies as a
++ # side effect of compilation, but ICC will put the dependencies in
++ # the current directory while Tru64 will put them in the object
++ # directory.
++ mkdir sub
++
++ am_cv_CC_dependencies_compiler_type=none
++ if test "$am_compiler_list" = ""; then
++ am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
++ fi
++ am__universal=false
++ case " $depcc " in #(
++ *\ -arch\ *\ -arch\ *) am__universal=true ;;
++ esac
++
++ for depmode in $am_compiler_list; do
++ # Setup a source with many dependencies, because some compilers
++ # like to wrap large dependency lists on column 80 (with \), and
++ # we should not choose a depcomp mode which is confused by this.
++ #
++ # We need to recreate these files for each test, as the compiler may
++ # overwrite some of them when testing with obscure command lines.
++ # This happens at least with the AIX C compiler.
++ : > sub/conftest.c
++ for i in 1 2 3 4 5 6; do
++ echo '#include "conftst'$i'.h"' >> sub/conftest.c
++ # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with
++ # Solaris 8's {/usr,}/bin/sh.
++ touch sub/conftst$i.h
++ done
++ echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
++
++ # We check with `-c' and `-o' for the sake of the "dashmstdout"
++ # mode. It turns out that the SunPro C++ compiler does not properly
++ # handle `-M -o', and we need to detect this. Also, some Intel
++ # versions had trouble with output in subdirs
++ am__obj=sub/conftest.${OBJEXT-o}
++ am__minus_obj="-o $am__obj"
++ case $depmode in
++ gcc)
++ # This depmode causes a compiler race in universal mode.
++ test "$am__universal" = false || continue
++ ;;
++ nosideeffect)
++ # after this tag, mechanisms are not by side-effect, so they'll
++ # only be used when explicitly requested
++ if test "x$enable_dependency_tracking" = xyes; then
++ continue
++ else
++ break
++ fi
++ ;;
++ msvisualcpp | msvcmsys)
++ # This compiler won't grok `-c -o', but also, the minuso test has
++ # not run yet. These depmodes are late enough in the game, and
++ # so weak that their functioning should not be impacted.
++ am__obj=conftest.${OBJEXT-o}
++ am__minus_obj=
++ ;;
++ none) break ;;
++ esac
++ if depmode=$depmode \
++ source=sub/conftest.c object=$am__obj \
++ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
++ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
++ >/dev/null 2>conftest.err &&
++ grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
++ grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
++ grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
++ ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
++ # icc doesn't choke on unknown options, it will just issue warnings
++ # or remarks (even with -Werror). So we grep stderr for any message
++ # that says an option was ignored or not supported.
++ # When given -MP, icc 7.0 and 7.1 complain thusly:
++ # icc: Command line warning: ignoring option '-M'; no argument required
++ # The diagnosis changed in icc 8.0:
++ # icc: Command line remark: option '-MP' not supported
++ if (grep 'ignoring option' conftest.err ||
++ grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
++ am_cv_CC_dependencies_compiler_type=$depmode
++ break
++ fi
++ fi
++ done
++
++ cd ..
++ rm -rf conftest.dir
++else
++ am_cv_CC_dependencies_compiler_type=none
++fi
++
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5
++$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; }
++CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
++
++ if
++ test "x$enable_dependency_tracking" != xno \
++ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
++ am__fastdepCC_TRUE=
++ am__fastdepCC_FALSE='#'
++else
++ am__fastdepCC_TRUE='#'
++ am__fastdepCC_FALSE=
++fi
++
++
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5
++$as_echo_n "checking whether ln -s works... " >&6; }
++LN_S=$as_ln_s
++if test "$LN_S" = "ln -s"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
++$as_echo "yes" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5
++$as_echo "no, using $LN_S" >&6; }
++fi
++
++
++# Checks for libtool
++
++# Debian Stable has no libtool2 yet so use old invocation
++#LT_INIT
++case `pwd` in
++ *\ * | *\ *)
++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5
++$as_echo "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;;
++esac
++
++
++
++macro_version='2.2.6'
++macro_revision='1.3012'
++
++
++
++
++
++
++
++
++
++
++
++
++
++ltmain="$ac_aux_dir/ltmain.sh"
++
++# Make sure we can run config.sub.
++$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
++ as_fn_error "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
++$as_echo_n "checking build system type... " >&6; }
++if test "${ac_cv_build+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ ac_build_alias=$build_alias
++test "x$ac_build_alias" = x &&
++ ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
++test "x$ac_build_alias" = x &&
++ as_fn_error "cannot guess build type; you must specify one" "$LINENO" 5
++ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
++ as_fn_error "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
++
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
++$as_echo "$ac_cv_build" >&6; }
++case $ac_cv_build in
++*-*-*) ;;
++*) as_fn_error "invalid value of canonical build" "$LINENO" 5;;
++esac
++build=$ac_cv_build
++ac_save_IFS=$IFS; IFS='-'
++set x $ac_cv_build
++shift
++build_cpu=$1
++build_vendor=$2
++shift; shift
++# Remember, the first character of IFS is used to create $*,
++# except with old shells:
++build_os=$*
++IFS=$ac_save_IFS
++case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
++
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
++$as_echo_n "checking host system type... " >&6; }
++if test "${ac_cv_host+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test "x$host_alias" = x; then
++ ac_cv_host=$ac_cv_build
++else
++ ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
++ as_fn_error "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
++fi
++
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
++$as_echo "$ac_cv_host" >&6; }
++case $ac_cv_host in
++*-*-*) ;;
++*) as_fn_error "invalid value of canonical host" "$LINENO" 5;;
++esac
++host=$ac_cv_host
++ac_save_IFS=$IFS; IFS='-'
++set x $ac_cv_host
++shift
++host_cpu=$1
++host_vendor=$2
++shift; shift
++# Remember, the first character of IFS is used to create $*,
++# except with old shells:
++host_os=$*
++IFS=$ac_save_IFS
++case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
++
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5
++$as_echo_n "checking for a sed that does not truncate output... " >&6; }
++if test "${ac_cv_path_SED+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
++ for ac_i in 1 2 3 4 5 6 7; do
++ ac_script="$ac_script$as_nl$ac_script"
++ done
++ echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed
++ { ac_script=; unset ac_script;}
++ if test -z "$SED"; then
++ ac_path_SED_found=false
++ # Loop through the user's path and test for each of PROGNAME-LIST
++ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_prog in sed gsed; do
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ ac_path_SED="$as_dir/$ac_prog$ac_exec_ext"
++ { test -f "$ac_path_SED" && $as_test_x "$ac_path_SED"; } || continue
++# Check for GNU ac_path_SED and select it if it is found.
++ # Check for GNU $ac_path_SED
++case `"$ac_path_SED" --version 2>&1` in
++*GNU*)
++ ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;;
++*)
++ ac_count=0
++ $as_echo_n 0123456789 >"conftest.in"
++ while :
++ do
++ cat "conftest.in" "conftest.in" >"conftest.tmp"
++ mv "conftest.tmp" "conftest.in"
++ cp "conftest.in" "conftest.nl"
++ $as_echo '' >> "conftest.nl"
++ "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break
++ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
++ as_fn_arith $ac_count + 1 && ac_count=$as_val
++ if test $ac_count -gt ${ac_path_SED_max-0}; then
++ # Best one so far, save it but keep looking for a better one
++ ac_cv_path_SED="$ac_path_SED"
++ ac_path_SED_max=$ac_count
++ fi
++ # 10*(2^10) chars as input seems more than enough
++ test $ac_count -gt 10 && break
++ done
++ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
++esac
++
++ $ac_path_SED_found && break 3
++ done
++ done
++ done
++IFS=$as_save_IFS
++ if test -z "$ac_cv_path_SED"; then
++ as_fn_error "no acceptable sed could be found in \$PATH" "$LINENO" 5
++ fi
++else
++ ac_cv_path_SED=$SED
++fi
++
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5
++$as_echo "$ac_cv_path_SED" >&6; }
++ SED="$ac_cv_path_SED"
++ rm -f conftest.sed
++
++test -z "$SED" && SED=sed
++Xsed="$SED -e 1s/^X//"
++
++
++
++
++
++
++
++
++
++
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
++$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
++if test "${ac_cv_path_GREP+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -z "$GREP"; then
++ ac_path_GREP_found=false
++ # Loop through the user's path and test for each of PROGNAME-LIST
++ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_prog in grep ggrep; do
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
++ { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue
++# Check for GNU ac_path_GREP and select it if it is found.
++ # Check for GNU $ac_path_GREP
++case `"$ac_path_GREP" --version 2>&1` in
++*GNU*)
++ ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
++*)
++ ac_count=0
++ $as_echo_n 0123456789 >"conftest.in"
++ while :
++ do
++ cat "conftest.in" "conftest.in" >"conftest.tmp"
++ mv "conftest.tmp" "conftest.in"
++ cp "conftest.in" "conftest.nl"
++ $as_echo 'GREP' >> "conftest.nl"
++ "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
++ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
++ as_fn_arith $ac_count + 1 && ac_count=$as_val
++ if test $ac_count -gt ${ac_path_GREP_max-0}; then
++ # Best one so far, save it but keep looking for a better one
++ ac_cv_path_GREP="$ac_path_GREP"
++ ac_path_GREP_max=$ac_count
++ fi
++ # 10*(2^10) chars as input seems more than enough
++ test $ac_count -gt 10 && break
++ done
++ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
++esac
++
++ $ac_path_GREP_found && break 3
++ done
++ done
++ done
++IFS=$as_save_IFS
++ if test -z "$ac_cv_path_GREP"; then
++ as_fn_error "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
++ fi
++else
++ ac_cv_path_GREP=$GREP
++fi
++
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
++$as_echo "$ac_cv_path_GREP" >&6; }
++ GREP="$ac_cv_path_GREP"
++
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
++$as_echo_n "checking for egrep... " >&6; }
++if test "${ac_cv_path_EGREP+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
++ then ac_cv_path_EGREP="$GREP -E"
++ else
++ if test -z "$EGREP"; then
++ ac_path_EGREP_found=false
++ # Loop through the user's path and test for each of PROGNAME-LIST
++ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_prog in egrep; do
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
++ { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue
++# Check for GNU ac_path_EGREP and select it if it is found.
++ # Check for GNU $ac_path_EGREP
++case `"$ac_path_EGREP" --version 2>&1` in
++*GNU*)
++ ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
++*)
++ ac_count=0
++ $as_echo_n 0123456789 >"conftest.in"
++ while :
++ do
++ cat "conftest.in" "conftest.in" >"conftest.tmp"
++ mv "conftest.tmp" "conftest.in"
++ cp "conftest.in" "conftest.nl"
++ $as_echo 'EGREP' >> "conftest.nl"
++ "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
++ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
++ as_fn_arith $ac_count + 1 && ac_count=$as_val
++ if test $ac_count -gt ${ac_path_EGREP_max-0}; then
++ # Best one so far, save it but keep looking for a better one
++ ac_cv_path_EGREP="$ac_path_EGREP"
++ ac_path_EGREP_max=$ac_count
++ fi
++ # 10*(2^10) chars as input seems more than enough
++ test $ac_count -gt 10 && break
++ done
++ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
++esac
++
++ $ac_path_EGREP_found && break 3
++ done
++ done
++ done
++IFS=$as_save_IFS
++ if test -z "$ac_cv_path_EGREP"; then
++ as_fn_error "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
++ fi
++else
++ ac_cv_path_EGREP=$EGREP
++fi
++
++ fi
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
++$as_echo "$ac_cv_path_EGREP" >&6; }
++ EGREP="$ac_cv_path_EGREP"
++
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5
++$as_echo_n "checking for fgrep... " >&6; }
++if test "${ac_cv_path_FGREP+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1
++ then ac_cv_path_FGREP="$GREP -F"
++ else
++ if test -z "$FGREP"; then
++ ac_path_FGREP_found=false
++ # Loop through the user's path and test for each of PROGNAME-LIST
++ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_prog in fgrep; do
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ ac_path_FGREP="$as_dir/$ac_prog$ac_exec_ext"
++ { test -f "$ac_path_FGREP" && $as_test_x "$ac_path_FGREP"; } || continue
++# Check for GNU ac_path_FGREP and select it if it is found.
++ # Check for GNU $ac_path_FGREP
++case `"$ac_path_FGREP" --version 2>&1` in
++*GNU*)
++ ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_found=:;;
++*)
++ ac_count=0
++ $as_echo_n 0123456789 >"conftest.in"
++ while :
++ do
++ cat "conftest.in" "conftest.in" >"conftest.tmp"
++ mv "conftest.tmp" "conftest.in"
++ cp "conftest.in" "conftest.nl"
++ $as_echo 'FGREP' >> "conftest.nl"
++ "$ac_path_FGREP" FGREP < "conftest.nl" >"conftest.out" 2>/dev/null || break
++ diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
++ as_fn_arith $ac_count + 1 && ac_count=$as_val
++ if test $ac_count -gt ${ac_path_FGREP_max-0}; then
++ # Best one so far, save it but keep looking for a better one
++ ac_cv_path_FGREP="$ac_path_FGREP"
++ ac_path_FGREP_max=$ac_count
++ fi
++ # 10*(2^10) chars as input seems more than enough
++ test $ac_count -gt 10 && break
++ done
++ rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
++esac
++
++ $ac_path_FGREP_found && break 3
++ done
++ done
++ done
++IFS=$as_save_IFS
++ if test -z "$ac_cv_path_FGREP"; then
++ as_fn_error "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
++ fi
++else
++ ac_cv_path_FGREP=$FGREP
++fi
++
++ fi
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5
++$as_echo "$ac_cv_path_FGREP" >&6; }
++ FGREP="$ac_cv_path_FGREP"
++
++
++test -z "$GREP" && GREP=grep
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++# Check whether --with-gnu-ld was given.
++if test "${with_gnu_ld+set}" = set; then :
++ withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes
++else
++ with_gnu_ld=no
++fi
++
++ac_prog=ld
++if test "$GCC" = yes; then
++ # Check if gcc -print-prog-name=ld gives a path.
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5
++$as_echo_n "checking for ld used by $CC... " >&6; }
++ case $host in
++ *-*-mingw*)
++ # gcc leaves a trailing carriage return which upsets mingw
++ ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
++ *)
++ ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
++ esac
++ case $ac_prog in
++ # Accept absolute paths.
++ [\\/]* | ?:[\\/]*)
++ re_direlt='/[^/][^/]*/\.\./'
++ # Canonicalize the pathname of ld
++ ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
++ while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
++ ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
++ done
++ test -z "$LD" && LD="$ac_prog"
++ ;;
++ "")
++ # If it fails, then pretend we aren't using GCC.
++ ac_prog=ld
++ ;;
++ *)
++ # If it is relative, then search for the first ld in PATH.
++ with_gnu_ld=unknown
++ ;;
++ esac
++elif test "$with_gnu_ld" = yes; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5
++$as_echo_n "checking for GNU ld... " >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5
++$as_echo_n "checking for non-GNU ld... " >&6; }
++fi
++if test "${lt_cv_path_LD+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -z "$LD"; then
++ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
++ for ac_dir in $PATH; do
++ IFS="$lt_save_ifs"
++ test -z "$ac_dir" && ac_dir=.
++ if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
++ lt_cv_path_LD="$ac_dir/$ac_prog"
++ # Check to see if the program is GNU ld. I'd rather use --version,
++ # but apparently some variants of GNU ld only accept -v.
++ # Break only if it was the GNU/non-GNU ld that we prefer.
++ case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
++ *GNU* | *'with BFD'*)
++ test "$with_gnu_ld" != no && break
++ ;;
++ *)
++ test "$with_gnu_ld" != yes && break
++ ;;
++ esac
++ fi
++ done
++ IFS="$lt_save_ifs"
++else
++ lt_cv_path_LD="$LD" # Let the user override the test with a path.
++fi
++fi
++
++LD="$lt_cv_path_LD"
++if test -n "$LD"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5
++$as_echo "$LD" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++test -z "$LD" && as_fn_error "no acceptable ld found in \$PATH" "$LINENO" 5
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5
++$as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; }
++if test "${lt_cv_prog_gnu_ld+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ # I'd rather use --version here, but apparently some GNU lds only accept -v.
++case `$LD -v 2>&1 </dev/null` in
++*GNU* | *'with BFD'*)
++ lt_cv_prog_gnu_ld=yes
++ ;;
++*)
++ lt_cv_prog_gnu_ld=no
++ ;;
++esac
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5
++$as_echo "$lt_cv_prog_gnu_ld" >&6; }
++with_gnu_ld=$lt_cv_prog_gnu_ld
++
++
++
++
++
++
++
++
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5
++$as_echo_n "checking for BSD- or MS-compatible name lister (nm)... " >&6; }
++if test "${lt_cv_path_NM+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$NM"; then
++ # Let the user override the test.
++ lt_cv_path_NM="$NM"
++else
++ lt_nm_to_check="${ac_tool_prefix}nm"
++ if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
++ lt_nm_to_check="$lt_nm_to_check nm"
++ fi
++ for lt_tmp_nm in $lt_nm_to_check; do
++ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
++ for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
++ IFS="$lt_save_ifs"
++ test -z "$ac_dir" && ac_dir=.
++ tmp_nm="$ac_dir/$lt_tmp_nm"
++ if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
++ # Check to see if the nm accepts a BSD-compat flag.
++ # Adding the `sed 1q' prevents false positives on HP-UX, which says:
++ # nm: unknown option "B" ignored
++ # Tru64's nm complains that /dev/null is an invalid object file
++ case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
++ */dev/null* | *'Invalid file or object type'*)
++ lt_cv_path_NM="$tmp_nm -B"
++ break
++ ;;
++ *)
++ case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
++ */dev/null*)
++ lt_cv_path_NM="$tmp_nm -p"
++ break
++ ;;
++ *)
++ lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
++ continue # so that we can try to find one that supports BSD flags
++ ;;
++ esac
++ ;;
++ esac
++ fi
++ done
++ IFS="$lt_save_ifs"
++ done
++ : ${lt_cv_path_NM=no}
++fi
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5
++$as_echo "$lt_cv_path_NM" >&6; }
++if test "$lt_cv_path_NM" != "no"; then
++ NM="$lt_cv_path_NM"
++else
++ # Didn't find any BSD compatible name lister, look for dumpbin.
++ if test -n "$ac_tool_prefix"; then
++ for ac_prog in "dumpbin -symbols" "link -dump -symbols"
++ do
++ # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
++set dummy $ac_tool_prefix$ac_prog; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_prog_DUMPBIN+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$DUMPBIN"; then
++ ac_cv_prog_DUMPBIN="$DUMPBIN" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_prog_DUMPBIN="$ac_tool_prefix$ac_prog"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++fi
++fi
++DUMPBIN=$ac_cv_prog_DUMPBIN
++if test -n "$DUMPBIN"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5
++$as_echo "$DUMPBIN" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++ test -n "$DUMPBIN" && break
++ done
++fi
++if test -z "$DUMPBIN"; then
++ ac_ct_DUMPBIN=$DUMPBIN
++ for ac_prog in "dumpbin -symbols" "link -dump -symbols"
++do
++ # Extract the first word of "$ac_prog", so it can be a program name with args.
++set dummy $ac_prog; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_prog_ac_ct_DUMPBIN+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$ac_ct_DUMPBIN"; then
++ ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_prog_ac_ct_DUMPBIN="$ac_prog"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++fi
++fi
++ac_ct_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN
++if test -n "$ac_ct_DUMPBIN"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5
++$as_echo "$ac_ct_DUMPBIN" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++ test -n "$ac_ct_DUMPBIN" && break
++done
++
++ if test "x$ac_ct_DUMPBIN" = x; then
++ DUMPBIN=":"
++ else
++ case $cross_compiling:$ac_tool_warned in
++yes:)
++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
++$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
++ac_tool_warned=yes ;;
++esac
++ DUMPBIN=$ac_ct_DUMPBIN
++ fi
++fi
++
++
++ if test "$DUMPBIN" != ":"; then
++ NM="$DUMPBIN"
++ fi
++fi
++test -z "$NM" && NM=nm
++
++
++
++
++
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5
++$as_echo_n "checking the name lister ($NM) interface... " >&6; }
++if test "${lt_cv_nm_interface+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ lt_cv_nm_interface="BSD nm"
++ echo "int some_variable = 0;" > conftest.$ac_ext
++ (eval echo "\"\$as_me:4756: $ac_compile\"" >&5)
++ (eval "$ac_compile" 2>conftest.err)
++ cat conftest.err >&5
++ (eval echo "\"\$as_me:4759: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
++ (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
++ cat conftest.err >&5
++ (eval echo "\"\$as_me:4762: output\"" >&5)
++ cat conftest.out >&5
++ if $GREP 'External.*some_variable' conftest.out > /dev/null; then
++ lt_cv_nm_interface="MS dumpbin"
++ fi
++ rm -f conftest*
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5
++$as_echo "$lt_cv_nm_interface" >&6; }
++
++# find the maximum length of command line arguments
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5
++$as_echo_n "checking the maximum length of command line arguments... " >&6; }
++if test "${lt_cv_sys_max_cmd_len+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ i=0
++ teststring="ABCD"
++
++ case $build_os in
++ msdosdjgpp*)
++ # On DJGPP, this test can blow up pretty badly due to problems in libc
++ # (any single argument exceeding 2000 bytes causes a buffer overrun
++ # during glob expansion). Even if it were fixed, the result of this
++ # check would be larger than it should be.
++ lt_cv_sys_max_cmd_len=12288; # 12K is about right
++ ;;
++
++ gnu*)
++ # Under GNU Hurd, this test is not required because there is
++ # no limit to the length of command line arguments.
++ # Libtool will interpret -1 as no limit whatsoever
++ lt_cv_sys_max_cmd_len=-1;
++ ;;
++
++ cygwin* | mingw* | cegcc*)
++ # On Win9x/ME, this test blows up -- it succeeds, but takes
++ # about 5 minutes as the teststring grows exponentially.
++ # Worse, since 9x/ME are not pre-emptively multitasking,
++ # you end up with a "frozen" computer, even though with patience
++ # the test eventually succeeds (with a max line length of 256k).
++ # Instead, let's just punt: use the minimum linelength reported by
++ # all of the supported platforms: 8192 (on NT/2K/XP).
++ lt_cv_sys_max_cmd_len=8192;
++ ;;
++
++ amigaos*)
++ # On AmigaOS with pdksh, this test takes hours, literally.
++ # So we just punt and use a minimum line length of 8192.
++ lt_cv_sys_max_cmd_len=8192;
++ ;;
++
++ netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
++ # This has been around since 386BSD, at least. Likely further.
++ if test -x /sbin/sysctl; then
++ lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
++ elif test -x /usr/sbin/sysctl; then
++ lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
++ else
++ lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs
++ fi
++ # And add a safety zone
++ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
++ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
++ ;;
++
++ interix*)
++ # We know the value 262144 and hardcode it with a safety zone (like BSD)
++ lt_cv_sys_max_cmd_len=196608
++ ;;
++
++ osf*)
++ # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
++ # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
++ # nice to cause kernel panics so lets avoid the loop below.
++ # First set a reasonable default.
++ lt_cv_sys_max_cmd_len=16384
++ #
++ if test -x /sbin/sysconfig; then
++ case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
++ *1*) lt_cv_sys_max_cmd_len=-1 ;;
++ esac
++ fi
++ ;;
++ sco3.2v5*)
++ lt_cv_sys_max_cmd_len=102400
++ ;;
++ sysv5* | sco5v6* | sysv4.2uw2*)
++ kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
++ if test -n "$kargmax"; then
++ lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'`
++ else
++ lt_cv_sys_max_cmd_len=32768
++ fi
++ ;;
++ *)
++ lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
++ if test -n "$lt_cv_sys_max_cmd_len"; then
++ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
++ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
++ else
++ # Make teststring a little bigger before we do anything with it.
++ # a 1K string should be a reasonable start.
++ for i in 1 2 3 4 5 6 7 8 ; do
++ teststring=$teststring$teststring
++ done
++ SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
++ # If test is not a shell built-in, we'll probably end up computing a
++ # maximum length that is only half of the actual maximum length, but
++ # we can't tell.
++ while { test "X"`$SHELL $0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \
++ = "XX$teststring$teststring"; } >/dev/null 2>&1 &&
++ test $i != 17 # 1/2 MB should be enough
++ do
++ i=`expr $i + 1`
++ teststring=$teststring$teststring
++ done
++ # Only check the string length outside the loop.
++ lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
++ teststring=
++ # Add a significant safety factor because C++ compilers can tack on
++ # massive amounts of additional arguments before passing them to the
++ # linker. It appears as though 1/2 is a usable value.
++ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
++ fi
++ ;;
++ esac
++
++fi
++
++if test -n $lt_cv_sys_max_cmd_len ; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5
++$as_echo "$lt_cv_sys_max_cmd_len" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5
++$as_echo "none" >&6; }
++fi
++max_cmd_len=$lt_cv_sys_max_cmd_len
++
++
++
++
++
++
++: ${CP="cp -f"}
++: ${MV="mv -f"}
++: ${RM="rm -f"}
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands some XSI constructs" >&5
++$as_echo_n "checking whether the shell understands some XSI constructs... " >&6; }
++# Try some XSI features
++xsi_shell=no
++( _lt_dummy="a/b/c"
++ test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
++ = c,a/b,, \
++ && eval 'test $(( 1 + 1 )) -eq 2 \
++ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
++ && xsi_shell=yes
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $xsi_shell" >&5
++$as_echo "$xsi_shell" >&6; }
++
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the shell understands \"+=\"" >&5
++$as_echo_n "checking whether the shell understands \"+=\"... " >&6; }
++lt_shell_append=no
++( foo=bar; set foo baz; eval "$1+=\$2" && test "$foo" = barbaz ) \
++ >/dev/null 2>&1 \
++ && lt_shell_append=yes
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_shell_append" >&5
++$as_echo "$lt_shell_append" >&6; }
++
++
++if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
++ lt_unset=unset
++else
++ lt_unset=false
++fi
++
++
++
++
++
++# test EBCDIC or ASCII
++case `echo X|tr X '\101'` in
++ A) # ASCII based system
++ # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
++ lt_SP2NL='tr \040 \012'
++ lt_NL2SP='tr \015\012 \040\040'
++ ;;
++ *) # EBCDIC based system
++ lt_SP2NL='tr \100 \n'
++ lt_NL2SP='tr \r\n \100\100'
++ ;;
++esac
++
++
++
++
++
++
++
++
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5
++$as_echo_n "checking for $LD option to reload object files... " >&6; }
++if test "${lt_cv_ld_reload_flag+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ lt_cv_ld_reload_flag='-r'
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5
++$as_echo "$lt_cv_ld_reload_flag" >&6; }
++reload_flag=$lt_cv_ld_reload_flag
++case $reload_flag in
++"" | " "*) ;;
++*) reload_flag=" $reload_flag" ;;
++esac
++reload_cmds='$LD$reload_flag -o $output$reload_objs'
++case $host_os in
++ darwin*)
++ if test "$GCC" = yes; then
++ reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
++ else
++ reload_cmds='$LD$reload_flag -o $output$reload_objs'
++ fi
++ ;;
++esac
++
++
++
++
++
++
++
++
++
++if test -n "$ac_tool_prefix"; then
++ # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args.
++set dummy ${ac_tool_prefix}objdump; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_prog_OBJDUMP+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$OBJDUMP"; then
++ ac_cv_prog_OBJDUMP="$OBJDUMP" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_prog_OBJDUMP="${ac_tool_prefix}objdump"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++fi
++fi
++OBJDUMP=$ac_cv_prog_OBJDUMP
++if test -n "$OBJDUMP"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5
++$as_echo "$OBJDUMP" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++fi
++if test -z "$ac_cv_prog_OBJDUMP"; then
++ ac_ct_OBJDUMP=$OBJDUMP
++ # Extract the first word of "objdump", so it can be a program name with args.
++set dummy objdump; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_prog_ac_ct_OBJDUMP+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$ac_ct_OBJDUMP"; then
++ ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_prog_ac_ct_OBJDUMP="objdump"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++fi
++fi
++ac_ct_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP
++if test -n "$ac_ct_OBJDUMP"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5
++$as_echo "$ac_ct_OBJDUMP" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++ if test "x$ac_ct_OBJDUMP" = x; then
++ OBJDUMP="false"
++ else
++ case $cross_compiling:$ac_tool_warned in
++yes:)
++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
++$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
++ac_tool_warned=yes ;;
++esac
++ OBJDUMP=$ac_ct_OBJDUMP
++ fi
++else
++ OBJDUMP="$ac_cv_prog_OBJDUMP"
++fi
++
++test -z "$OBJDUMP" && OBJDUMP=objdump
++
++
++
++
++
++
++
++
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5
++$as_echo_n "checking how to recognize dependent libraries... " >&6; }
++if test "${lt_cv_deplibs_check_method+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ lt_cv_file_magic_cmd='$MAGIC_CMD'
++lt_cv_file_magic_test_file=
++lt_cv_deplibs_check_method='unknown'
++# Need to set the preceding variable on all platforms that support
++# interlibrary dependencies.
++# 'none' -- dependencies not supported.
++# `unknown' -- same as none, but documents that we really don't know.
++# 'pass_all' -- all dependencies passed with no checks.
++# 'test_compile' -- check by making test program.
++# 'file_magic [[regex]]' -- check by looking for files in library path
++# which responds to the $file_magic_cmd with a given extended regex.
++# If you have `file' or equivalent on your system and you're not sure
++# whether `pass_all' will *always* work, you probably want this one.
++
++case $host_os in
++aix[4-9]*)
++ lt_cv_deplibs_check_method=pass_all
++ ;;
++
++beos*)
++ lt_cv_deplibs_check_method=pass_all
++ ;;
++
++bsdi[45]*)
++ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)'
++ lt_cv_file_magic_cmd='/usr/bin/file -L'
++ lt_cv_file_magic_test_file=/shlib/libc.so
++ ;;
++
++cygwin*)
++ # func_win32_libid is a shell function defined in ltmain.sh
++ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
++ lt_cv_file_magic_cmd='func_win32_libid'
++ ;;
++
++mingw* | pw32*)
++ # Base MSYS/MinGW do not provide the 'file' command needed by
++ # func_win32_libid shell function, so use a weaker test based on 'objdump',
++ # unless we find 'file', for example because we are cross-compiling.
++ if ( file / ) >/dev/null 2>&1; then
++ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
++ lt_cv_file_magic_cmd='func_win32_libid'
++ else
++ lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
++ lt_cv_file_magic_cmd='$OBJDUMP -f'
++ fi
++ ;;
++
++cegcc)
++ # use the weaker test based on 'objdump'. See mingw*.
++ lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'
++ lt_cv_file_magic_cmd='$OBJDUMP -f'
++ ;;
++
++darwin* | rhapsody*)
++ lt_cv_deplibs_check_method=pass_all
++ ;;
++
++freebsd* | dragonfly*)
++ if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
++ case $host_cpu in
++ i*86 )
++ # Not sure whether the presence of OpenBSD here was a mistake.
++ # Let's accept both of them until this is cleared up.
++ lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library'
++ lt_cv_file_magic_cmd=/usr/bin/file
++ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
++ ;;
++ esac
++ else
++ lt_cv_deplibs_check_method=pass_all
++ fi
++ ;;
++
++gnu*)
++ lt_cv_deplibs_check_method=pass_all
++ ;;
++
++hpux10.20* | hpux11*)
++ lt_cv_file_magic_cmd=/usr/bin/file
++ case $host_cpu in
++ ia64*)
++ lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64'
++ lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
++ ;;
++ hppa*64*)
++ lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]'
++ lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
++ ;;
++ *)
++ lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library'
++ lt_cv_file_magic_test_file=/usr/lib/libc.sl
++ ;;
++ esac
++ ;;
++
++interix[3-9]*)
++ # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
++ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$'
++ ;;
++
++irix5* | irix6* | nonstopux*)
++ case $LD in
++ *-32|*"-32 ") libmagic=32-bit;;
++ *-n32|*"-n32 ") libmagic=N32;;
++ *-64|*"-64 ") libmagic=64-bit;;
++ *) libmagic=never-match;;
++ esac
++ lt_cv_deplibs_check_method=pass_all
++ ;;
++
++# This must be Linux ELF.
++linux* | k*bsd*-gnu)
++ lt_cv_deplibs_check_method=pass_all
++ ;;
++
++netbsd* | netbsdelf*-gnu)
++ if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
++ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
++ else
++ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$'
++ fi
++ ;;
++
++newos6*)
++ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)'
++ lt_cv_file_magic_cmd=/usr/bin/file
++ lt_cv_file_magic_test_file=/usr/lib/libnls.so
++ ;;
++
++*nto* | *qnx*)
++ lt_cv_deplibs_check_method=pass_all
++ ;;
++
++openbsd*)
++ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
++ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$'
++ else
++ lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$'
++ fi
++ ;;
++
++osf3* | osf4* | osf5*)
++ lt_cv_deplibs_check_method=pass_all
++ ;;
++
++rdos*)
++ lt_cv_deplibs_check_method=pass_all
++ ;;
++
++solaris*)
++ lt_cv_deplibs_check_method=pass_all
++ ;;
++
++sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
++ lt_cv_deplibs_check_method=pass_all
++ ;;
++
++sysv4 | sysv4.3*)
++ case $host_vendor in
++ motorola)
++ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]'
++ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
++ ;;
++ ncr)
++ lt_cv_deplibs_check_method=pass_all
++ ;;
++ sequent)
++ lt_cv_file_magic_cmd='/bin/file'
++ lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )'
++ ;;
++ sni)
++ lt_cv_file_magic_cmd='/bin/file'
++ lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib"
++ lt_cv_file_magic_test_file=/lib/libc.so
++ ;;
++ siemens)
++ lt_cv_deplibs_check_method=pass_all
++ ;;
++ pc)
++ lt_cv_deplibs_check_method=pass_all
++ ;;
++ esac
++ ;;
++
++tpf*)
++ lt_cv_deplibs_check_method=pass_all
++ ;;
++esac
++
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5
++$as_echo "$lt_cv_deplibs_check_method" >&6; }
++file_magic_cmd=$lt_cv_file_magic_cmd
++deplibs_check_method=$lt_cv_deplibs_check_method
++test -z "$deplibs_check_method" && deplibs_check_method=unknown
++
++
++
++
++
++
++
++
++
++
++
++
++if test -n "$ac_tool_prefix"; then
++ # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
++set dummy ${ac_tool_prefix}ar; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_prog_AR+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$AR"; then
++ ac_cv_prog_AR="$AR" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_prog_AR="${ac_tool_prefix}ar"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++fi
++fi
++AR=$ac_cv_prog_AR
++if test -n "$AR"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
++$as_echo "$AR" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++fi
++if test -z "$ac_cv_prog_AR"; then
++ ac_ct_AR=$AR
++ # Extract the first word of "ar", so it can be a program name with args.
++set dummy ar; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_prog_ac_ct_AR+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$ac_ct_AR"; then
++ ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_prog_ac_ct_AR="ar"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++fi
++fi
++ac_ct_AR=$ac_cv_prog_ac_ct_AR
++if test -n "$ac_ct_AR"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
++$as_echo "$ac_ct_AR" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++ if test "x$ac_ct_AR" = x; then
++ AR="false"
++ else
++ case $cross_compiling:$ac_tool_warned in
++yes:)
++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
++$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
++ac_tool_warned=yes ;;
++esac
++ AR=$ac_ct_AR
++ fi
++else
++ AR="$ac_cv_prog_AR"
++fi
++
++test -z "$AR" && AR=ar
++test -z "$AR_FLAGS" && AR_FLAGS=cru
++
++
++
++
++
++
++
++
++
++
++
++if test -n "$ac_tool_prefix"; then
++ # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
++set dummy ${ac_tool_prefix}strip; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_prog_STRIP+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$STRIP"; then
++ ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_prog_STRIP="${ac_tool_prefix}strip"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++fi
++fi
++STRIP=$ac_cv_prog_STRIP
++if test -n "$STRIP"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
++$as_echo "$STRIP" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++fi
++if test -z "$ac_cv_prog_STRIP"; then
++ ac_ct_STRIP=$STRIP
++ # Extract the first word of "strip", so it can be a program name with args.
++set dummy strip; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$ac_ct_STRIP"; then
++ ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_prog_ac_ct_STRIP="strip"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++fi
++fi
++ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
++if test -n "$ac_ct_STRIP"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
++$as_echo "$ac_ct_STRIP" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++ if test "x$ac_ct_STRIP" = x; then
++ STRIP=":"
++ else
++ case $cross_compiling:$ac_tool_warned in
++yes:)
++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
++$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
++ac_tool_warned=yes ;;
++esac
++ STRIP=$ac_ct_STRIP
++ fi
++else
++ STRIP="$ac_cv_prog_STRIP"
++fi
++
++test -z "$STRIP" && STRIP=:
++
++
++
++
++
++
++if test -n "$ac_tool_prefix"; then
++ # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
++set dummy ${ac_tool_prefix}ranlib; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_prog_RANLIB+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$RANLIB"; then
++ ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++fi
++fi
++RANLIB=$ac_cv_prog_RANLIB
++if test -n "$RANLIB"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
++$as_echo "$RANLIB" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++fi
++if test -z "$ac_cv_prog_RANLIB"; then
++ ac_ct_RANLIB=$RANLIB
++ # Extract the first word of "ranlib", so it can be a program name with args.
++set dummy ranlib; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$ac_ct_RANLIB"; then
++ ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_prog_ac_ct_RANLIB="ranlib"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++fi
++fi
++ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
++if test -n "$ac_ct_RANLIB"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
++$as_echo "$ac_ct_RANLIB" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++ if test "x$ac_ct_RANLIB" = x; then
++ RANLIB=":"
++ else
++ case $cross_compiling:$ac_tool_warned in
++yes:)
++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
++$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
++ac_tool_warned=yes ;;
++esac
++ RANLIB=$ac_ct_RANLIB
++ fi
++else
++ RANLIB="$ac_cv_prog_RANLIB"
++fi
++
++test -z "$RANLIB" && RANLIB=:
++
++
++
++
++
++
++# Determine commands to create old-style static archives.
++old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
++old_postinstall_cmds='chmod 644 $oldlib'
++old_postuninstall_cmds=
++
++if test -n "$RANLIB"; then
++ case $host_os in
++ openbsd*)
++ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
++ ;;
++ *)
++ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
++ ;;
++ esac
++ old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
++fi
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++# If no C compiler was specified, use CC.
++LTCC=${LTCC-"$CC"}
++
++# If no C compiler flags were specified, use CFLAGS.
++LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
++
++# Allow CC to be a program name with arguments.
++compiler=$CC
++
++
++# Check for command to grab the raw symbol name followed by C symbol from nm.
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5
++$as_echo_n "checking command to parse $NM output from $compiler object... " >&6; }
++if test "${lt_cv_sys_global_symbol_pipe+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++
++# These are sane defaults that work on at least a few old systems.
++# [They come from Ultrix. What could be older than Ultrix?!! ;)]
++
++# Character class describing NM global symbol codes.
++symcode='[BCDEGRST]'
++
++# Regexp to match symbols that can be accessed directly from C.
++sympat='\([_A-Za-z][_A-Za-z0-9]*\)'
++
++# Define system-specific variables.
++case $host_os in
++aix*)
++ symcode='[BCDT]'
++ ;;
++cygwin* | mingw* | pw32* | cegcc*)
++ symcode='[ABCDGISTW]'
++ ;;
++hpux*)
++ if test "$host_cpu" = ia64; then
++ symcode='[ABCDEGRST]'
++ fi
++ ;;
++irix* | nonstopux*)
++ symcode='[BCDEGRST]'
++ ;;
++osf*)
++ symcode='[BCDEGQRST]'
++ ;;
++solaris*)
++ symcode='[BDRT]'
++ ;;
++sco3.2v5*)
++ symcode='[DT]'
++ ;;
++sysv4.2uw2*)
++ symcode='[DT]'
++ ;;
++sysv5* | sco5v6* | unixware* | OpenUNIX*)
++ symcode='[ABDT]'
++ ;;
++sysv4)
++ symcode='[DFNSTU]'
++ ;;
++esac
++
++# If we're using GNU nm, then use its standard symbol codes.
++case `$NM -V 2>&1` in
++*GNU* | *'with BFD'*)
++ symcode='[ABCDGIRSTW]' ;;
++esac
++
++# Transform an extracted symbol line into a proper C declaration.
++# Some systems (esp. on ia64) link data and code symbols differently,
++# so use this general approach.
++lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
++
++# Transform an extracted symbol line into symbol name and symbol address
++lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"\2\", (void *) \&\2},/p'"
++lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([^ ]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([^ ]*\) \(lib[^ ]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([^ ]*\) \([^ ]*\)$/ {\"lib\2\", (void *) \&\2},/p'"
++
++# Handle CRLF in mingw tool chain
++opt_cr=
++case $build_os in
++mingw*)
++ opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
++ ;;
++esac
++
++# Try without a prefix underscore, then with it.
++for ac_symprfx in "" "_"; do
++
++ # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
++ symxfrm="\\1 $ac_symprfx\\2 \\2"
++
++ # Write the raw and C identifiers.
++ if test "$lt_cv_nm_interface" = "MS dumpbin"; then
++ # Fake it for dumpbin and say T for any non-static function
++ # and D for any global variable.
++ # Also find C++ and __fastcall symbols from MSVC++,
++ # which start with @ or ?.
++ lt_cv_sys_global_symbol_pipe="$AWK '"\
++" {last_section=section; section=\$ 3};"\
++" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
++" \$ 0!~/External *\|/{next};"\
++" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
++" {if(hide[section]) next};"\
++" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\
++" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\
++" s[1]~/^[@?]/{print s[1], s[1]; next};"\
++" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\
++" ' prfx=^$ac_symprfx"
++ else
++ lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
++ fi
++
++ # Check to see that the pipe works correctly.
++ pipe_works=no
++
++ rm -f conftest*
++ cat > conftest.$ac_ext <<_LT_EOF
++#ifdef __cplusplus
++extern "C" {
++#endif
++char nm_test_var;
++void nm_test_func(void);
++void nm_test_func(void){}
++#ifdef __cplusplus
++}
++#endif
++int main(){nm_test_var='a';nm_test_func();return(0);}
++_LT_EOF
++
++ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
++ (eval $ac_compile) 2>&5
++ ac_status=$?
++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++ test $ac_status = 0; }; then
++ # Now try to grab the symbols.
++ nlist=conftest.nm
++ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist\""; } >&5
++ (eval $NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) 2>&5
++ ac_status=$?
++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++ test $ac_status = 0; } && test -s "$nlist"; then
++ # Try sorting and uniquifying the output.
++ if sort "$nlist" | uniq > "$nlist"T; then
++ mv -f "$nlist"T "$nlist"
++ else
++ rm -f "$nlist"T
++ fi
++
++ # Make sure that we snagged all the symbols we need.
++ if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
++ if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
++ cat <<_LT_EOF > conftest.$ac_ext
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++_LT_EOF
++ # Now generate the symbol file.
++ eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
++
++ cat <<_LT_EOF >> conftest.$ac_ext
++
++/* The mapping between symbol names and symbols. */
++const struct {
++ const char *name;
++ void *address;
++}
++lt__PROGRAM__LTX_preloaded_symbols[] =
++{
++ { "@PROGRAM@", (void *) 0 },
++_LT_EOF
++ $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
++ cat <<\_LT_EOF >> conftest.$ac_ext
++ {0, (void *) 0}
++};
++
++/* This works around a problem in FreeBSD linker */
++#ifdef FREEBSD_WORKAROUND
++static const void *lt_preloaded_setup() {
++ return lt__PROGRAM__LTX_preloaded_symbols;
++}
++#endif
++
++#ifdef __cplusplus
++}
++#endif
++_LT_EOF
++ # Now try linking the two files.
++ mv conftest.$ac_objext conftstm.$ac_objext
++ lt_save_LIBS="$LIBS"
++ lt_save_CFLAGS="$CFLAGS"
++ LIBS="conftstm.$ac_objext"
++ CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag"
++ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
++ (eval $ac_link) 2>&5
++ ac_status=$?
++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++ test $ac_status = 0; } && test -s conftest${ac_exeext}; then
++ pipe_works=yes
++ fi
++ LIBS="$lt_save_LIBS"
++ CFLAGS="$lt_save_CFLAGS"
++ else
++ echo "cannot find nm_test_func in $nlist" >&5
++ fi
++ else
++ echo "cannot find nm_test_var in $nlist" >&5
++ fi
++ else
++ echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5
++ fi
++ else
++ echo "$progname: failed program was:" >&5
++ cat conftest.$ac_ext >&5
++ fi
++ rm -rf conftest* conftst*
++
++ # Do not use the global_symbol_pipe unless it works.
++ if test "$pipe_works" = yes; then
++ break
++ else
++ lt_cv_sys_global_symbol_pipe=
++ fi
++done
++
++fi
++
++if test -z "$lt_cv_sys_global_symbol_pipe"; then
++ lt_cv_sys_global_symbol_to_cdecl=
++fi
++if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: failed" >&5
++$as_echo "failed" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&5
++$as_echo "ok" >&6; }
++fi
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++# Check whether --enable-libtool-lock was given.
++if test "${enable_libtool_lock+set}" = set; then :
++ enableval=$enable_libtool_lock;
++fi
++
++test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
++
++# Some flags need to be propagated to the compiler or linker for good
++# libtool support.
++case $host in
++ia64-*-hpux*)
++ # Find out which ABI we are using.
++ echo 'int i;' > conftest.$ac_ext
++ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
++ (eval $ac_compile) 2>&5
++ ac_status=$?
++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++ test $ac_status = 0; }; then
++ case `/usr/bin/file conftest.$ac_objext` in
++ *ELF-32*)
++ HPUX_IA64_MODE="32"
++ ;;
++ *ELF-64*)
++ HPUX_IA64_MODE="64"
++ ;;
++ esac
++ fi
++ rm -rf conftest*
++ ;;
++*-*-irix6*)
++ # Find out which ABI we are using.
++ echo '#line 5957 "configure"' > conftest.$ac_ext
++ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
++ (eval $ac_compile) 2>&5
++ ac_status=$?
++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++ test $ac_status = 0; }; then
++ if test "$lt_cv_prog_gnu_ld" = yes; then
++ case `/usr/bin/file conftest.$ac_objext` in
++ *32-bit*)
++ LD="${LD-ld} -melf32bsmip"
++ ;;
++ *N32*)
++ LD="${LD-ld} -melf32bmipn32"
++ ;;
++ *64-bit*)
++ LD="${LD-ld} -melf64bmip"
++ ;;
++ esac
++ else
++ case `/usr/bin/file conftest.$ac_objext` in
++ *32-bit*)
++ LD="${LD-ld} -32"
++ ;;
++ *N32*)
++ LD="${LD-ld} -n32"
++ ;;
++ *64-bit*)
++ LD="${LD-ld} -64"
++ ;;
++ esac
++ fi
++ fi
++ rm -rf conftest*
++ ;;
++
++x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
++s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
++ # Find out which ABI we are using.
++ echo 'int i;' > conftest.$ac_ext
++ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
++ (eval $ac_compile) 2>&5
++ ac_status=$?
++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++ test $ac_status = 0; }; then
++ case `/usr/bin/file conftest.o` in
++ *32-bit*)
++ case $host in
++ x86_64-*kfreebsd*-gnu)
++ LD="${LD-ld} -m elf_i386_fbsd"
++ ;;
++ x86_64-*linux*)
++ LD="${LD-ld} -m elf_i386"
++ ;;
++ ppc64-*linux*|powerpc64-*linux*)
++ LD="${LD-ld} -m elf32ppclinux"
++ ;;
++ s390x-*linux*)
++ LD="${LD-ld} -m elf_s390"
++ ;;
++ sparc64-*linux*)
++ LD="${LD-ld} -m elf32_sparc"
++ ;;
++ esac
++ ;;
++ *64-bit*)
++ case $host in
++ x86_64-*kfreebsd*-gnu)
++ LD="${LD-ld} -m elf_x86_64_fbsd"
++ ;;
++ x86_64-*linux*)
++ LD="${LD-ld} -m elf_x86_64"
++ ;;
++ ppc*-*linux*|powerpc*-*linux*)
++ LD="${LD-ld} -m elf64ppc"
++ ;;
++ s390*-*linux*|s390*-*tpf*)
++ LD="${LD-ld} -m elf64_s390"
++ ;;
++ sparc*-*linux*)
++ LD="${LD-ld} -m elf64_sparc"
++ ;;
++ esac
++ ;;
++ esac
++ fi
++ rm -rf conftest*
++ ;;
++
++*-*-sco3.2v5*)
++ # On SCO OpenServer 5, we need -belf to get full-featured binaries.
++ SAVE_CFLAGS="$CFLAGS"
++ CFLAGS="$CFLAGS -belf"
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5
++$as_echo_n "checking whether the C compiler needs -belf... " >&6; }
++if test "${lt_cv_cc_needs_belf+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ ac_ext=c
++ac_cpp='$CPP $CPPFLAGS'
++ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
++ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
++ac_compiler_gnu=$ac_cv_c_compiler_gnu
++
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++
++int
++main ()
++{
++
++ ;
++ return 0;
++}
++_ACEOF
++if ac_fn_c_try_link "$LINENO"; then :
++ lt_cv_cc_needs_belf=yes
++else
++ lt_cv_cc_needs_belf=no
++fi
++rm -f core conftest.err conftest.$ac_objext \
++ conftest$ac_exeext conftest.$ac_ext
++ ac_ext=c
++ac_cpp='$CPP $CPPFLAGS'
++ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
++ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
++ac_compiler_gnu=$ac_cv_c_compiler_gnu
++
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5
++$as_echo "$lt_cv_cc_needs_belf" >&6; }
++ if test x"$lt_cv_cc_needs_belf" != x"yes"; then
++ # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
++ CFLAGS="$SAVE_CFLAGS"
++ fi
++ ;;
++sparc*-*solaris*)
++ # Find out which ABI we are using.
++ echo 'int i;' > conftest.$ac_ext
++ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
++ (eval $ac_compile) 2>&5
++ ac_status=$?
++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++ test $ac_status = 0; }; then
++ case `/usr/bin/file conftest.o` in
++ *64-bit*)
++ case $lt_cv_prog_gnu_ld in
++ yes*) LD="${LD-ld} -m elf64_sparc" ;;
++ *)
++ if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
++ LD="${LD-ld} -64"
++ fi
++ ;;
++ esac
++ ;;
++ esac
++ fi
++ rm -rf conftest*
++ ;;
++esac
++
++need_locks="$enable_libtool_lock"
++
++
++ case $host_os in
++ rhapsody* | darwin*)
++ if test -n "$ac_tool_prefix"; then
++ # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args.
++set dummy ${ac_tool_prefix}dsymutil; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_prog_DSYMUTIL+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$DSYMUTIL"; then
++ ac_cv_prog_DSYMUTIL="$DSYMUTIL" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_prog_DSYMUTIL="${ac_tool_prefix}dsymutil"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++fi
++fi
++DSYMUTIL=$ac_cv_prog_DSYMUTIL
++if test -n "$DSYMUTIL"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5
++$as_echo "$DSYMUTIL" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++fi
++if test -z "$ac_cv_prog_DSYMUTIL"; then
++ ac_ct_DSYMUTIL=$DSYMUTIL
++ # Extract the first word of "dsymutil", so it can be a program name with args.
++set dummy dsymutil; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_prog_ac_ct_DSYMUTIL+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$ac_ct_DSYMUTIL"; then
++ ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_prog_ac_ct_DSYMUTIL="dsymutil"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++fi
++fi
++ac_ct_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL
++if test -n "$ac_ct_DSYMUTIL"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5
++$as_echo "$ac_ct_DSYMUTIL" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++ if test "x$ac_ct_DSYMUTIL" = x; then
++ DSYMUTIL=":"
++ else
++ case $cross_compiling:$ac_tool_warned in
++yes:)
++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
++$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
++ac_tool_warned=yes ;;
++esac
++ DSYMUTIL=$ac_ct_DSYMUTIL
++ fi
++else
++ DSYMUTIL="$ac_cv_prog_DSYMUTIL"
++fi
++
++ if test -n "$ac_tool_prefix"; then
++ # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args.
++set dummy ${ac_tool_prefix}nmedit; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_prog_NMEDIT+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$NMEDIT"; then
++ ac_cv_prog_NMEDIT="$NMEDIT" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_prog_NMEDIT="${ac_tool_prefix}nmedit"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++fi
++fi
++NMEDIT=$ac_cv_prog_NMEDIT
++if test -n "$NMEDIT"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5
++$as_echo "$NMEDIT" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++fi
++if test -z "$ac_cv_prog_NMEDIT"; then
++ ac_ct_NMEDIT=$NMEDIT
++ # Extract the first word of "nmedit", so it can be a program name with args.
++set dummy nmedit; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_prog_ac_ct_NMEDIT+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$ac_ct_NMEDIT"; then
++ ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_prog_ac_ct_NMEDIT="nmedit"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++fi
++fi
++ac_ct_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT
++if test -n "$ac_ct_NMEDIT"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5
++$as_echo "$ac_ct_NMEDIT" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++ if test "x$ac_ct_NMEDIT" = x; then
++ NMEDIT=":"
++ else
++ case $cross_compiling:$ac_tool_warned in
++yes:)
++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
++$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
++ac_tool_warned=yes ;;
++esac
++ NMEDIT=$ac_ct_NMEDIT
++ fi
++else
++ NMEDIT="$ac_cv_prog_NMEDIT"
++fi
++
++ if test -n "$ac_tool_prefix"; then
++ # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args.
++set dummy ${ac_tool_prefix}lipo; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_prog_LIPO+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$LIPO"; then
++ ac_cv_prog_LIPO="$LIPO" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_prog_LIPO="${ac_tool_prefix}lipo"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++fi
++fi
++LIPO=$ac_cv_prog_LIPO
++if test -n "$LIPO"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5
++$as_echo "$LIPO" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++fi
++if test -z "$ac_cv_prog_LIPO"; then
++ ac_ct_LIPO=$LIPO
++ # Extract the first word of "lipo", so it can be a program name with args.
++set dummy lipo; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_prog_ac_ct_LIPO+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$ac_ct_LIPO"; then
++ ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_prog_ac_ct_LIPO="lipo"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++fi
++fi
++ac_ct_LIPO=$ac_cv_prog_ac_ct_LIPO
++if test -n "$ac_ct_LIPO"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5
++$as_echo "$ac_ct_LIPO" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++ if test "x$ac_ct_LIPO" = x; then
++ LIPO=":"
++ else
++ case $cross_compiling:$ac_tool_warned in
++yes:)
++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
++$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
++ac_tool_warned=yes ;;
++esac
++ LIPO=$ac_ct_LIPO
++ fi
++else
++ LIPO="$ac_cv_prog_LIPO"
++fi
++
++ if test -n "$ac_tool_prefix"; then
++ # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args.
++set dummy ${ac_tool_prefix}otool; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_prog_OTOOL+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$OTOOL"; then
++ ac_cv_prog_OTOOL="$OTOOL" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_prog_OTOOL="${ac_tool_prefix}otool"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++fi
++fi
++OTOOL=$ac_cv_prog_OTOOL
++if test -n "$OTOOL"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5
++$as_echo "$OTOOL" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++fi
++if test -z "$ac_cv_prog_OTOOL"; then
++ ac_ct_OTOOL=$OTOOL
++ # Extract the first word of "otool", so it can be a program name with args.
++set dummy otool; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_prog_ac_ct_OTOOL+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$ac_ct_OTOOL"; then
++ ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_prog_ac_ct_OTOOL="otool"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++fi
++fi
++ac_ct_OTOOL=$ac_cv_prog_ac_ct_OTOOL
++if test -n "$ac_ct_OTOOL"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5
++$as_echo "$ac_ct_OTOOL" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++ if test "x$ac_ct_OTOOL" = x; then
++ OTOOL=":"
++ else
++ case $cross_compiling:$ac_tool_warned in
++yes:)
++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
++$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
++ac_tool_warned=yes ;;
++esac
++ OTOOL=$ac_ct_OTOOL
++ fi
++else
++ OTOOL="$ac_cv_prog_OTOOL"
++fi
++
++ if test -n "$ac_tool_prefix"; then
++ # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args.
++set dummy ${ac_tool_prefix}otool64; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_prog_OTOOL64+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$OTOOL64"; then
++ ac_cv_prog_OTOOL64="$OTOOL64" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_prog_OTOOL64="${ac_tool_prefix}otool64"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++fi
++fi
++OTOOL64=$ac_cv_prog_OTOOL64
++if test -n "$OTOOL64"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5
++$as_echo "$OTOOL64" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++fi
++if test -z "$ac_cv_prog_OTOOL64"; then
++ ac_ct_OTOOL64=$OTOOL64
++ # Extract the first word of "otool64", so it can be a program name with args.
++set dummy otool64; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_prog_ac_ct_OTOOL64+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$ac_ct_OTOOL64"; then
++ ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_prog_ac_ct_OTOOL64="otool64"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++fi
++fi
++ac_ct_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64
++if test -n "$ac_ct_OTOOL64"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5
++$as_echo "$ac_ct_OTOOL64" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++ if test "x$ac_ct_OTOOL64" = x; then
++ OTOOL64=":"
++ else
++ case $cross_compiling:$ac_tool_warned in
++yes:)
++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
++$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
++ac_tool_warned=yes ;;
++esac
++ OTOOL64=$ac_ct_OTOOL64
++ fi
++else
++ OTOOL64="$ac_cv_prog_OTOOL64"
++fi
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5
++$as_echo_n "checking for -single_module linker flag... " >&6; }
++if test "${lt_cv_apple_cc_single_mod+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ lt_cv_apple_cc_single_mod=no
++ if test -z "${LT_MULTI_MODULE}"; then
++ # By default we will add the -single_module flag. You can override
++ # by either setting the environment variable LT_MULTI_MODULE
++ # non-empty at configure time, or by adding -multi_module to the
++ # link flags.
++ rm -rf libconftest.dylib*
++ echo "int foo(void){return 1;}" > conftest.c
++ echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
++-dynamiclib -Wl,-single_module conftest.c" >&5
++ $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
++ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
++ _lt_result=$?
++ if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then
++ lt_cv_apple_cc_single_mod=yes
++ else
++ cat conftest.err >&5
++ fi
++ rm -rf libconftest.dylib*
++ rm -f conftest.*
++ fi
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5
++$as_echo "$lt_cv_apple_cc_single_mod" >&6; }
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5
++$as_echo_n "checking for -exported_symbols_list linker flag... " >&6; }
++if test "${lt_cv_ld_exported_symbols_list+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ lt_cv_ld_exported_symbols_list=no
++ save_LDFLAGS=$LDFLAGS
++ echo "_main" > conftest.sym
++ LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++
++int
++main ()
++{
++
++ ;
++ return 0;
++}
++_ACEOF
++if ac_fn_c_try_link "$LINENO"; then :
++ lt_cv_ld_exported_symbols_list=yes
++else
++ lt_cv_ld_exported_symbols_list=no
++fi
++rm -f core conftest.err conftest.$ac_objext \
++ conftest$ac_exeext conftest.$ac_ext
++ LDFLAGS="$save_LDFLAGS"
++
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5
++$as_echo "$lt_cv_ld_exported_symbols_list" >&6; }
++ case $host_os in
++ rhapsody* | darwin1.[012])
++ _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
++ darwin1.*)
++ _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
++ darwin*) # darwin 5.x on
++ # if running on 10.5 or later, the deployment target defaults
++ # to the OS version, if on x86, and 10.4, the deployment
++ # target defaults to 10.4. Don't you love it?
++ case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
++ 10.0,*86*-darwin8*|10.0,*-darwin[91]*)
++ _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
++ 10.[012]*)
++ _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
++ 10.*)
++ _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
++ esac
++ ;;
++ esac
++ if test "$lt_cv_apple_cc_single_mod" = "yes"; then
++ _lt_dar_single_mod='$single_module'
++ fi
++ if test "$lt_cv_ld_exported_symbols_list" = "yes"; then
++ _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'
++ else
++ _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'
++ fi
++ if test "$DSYMUTIL" != ":"; then
++ _lt_dsymutil='~$DSYMUTIL $lib || :'
++ else
++ _lt_dsymutil=
++ fi
++ ;;
++ esac
++
++ac_ext=c
++ac_cpp='$CPP $CPPFLAGS'
++ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
++ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
++ac_compiler_gnu=$ac_cv_c_compiler_gnu
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
++$as_echo_n "checking how to run the C preprocessor... " >&6; }
++# On Suns, sometimes $CPP names a directory.
++if test -n "$CPP" && test -d "$CPP"; then
++ CPP=
++fi
++if test -z "$CPP"; then
++ if test "${ac_cv_prog_CPP+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ # Double quotes because CPP needs to be expanded
++ for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
++ do
++ ac_preproc_ok=false
++for ac_c_preproc_warn_flag in '' yes
++do
++ # Use a header file that comes with gcc, so configuring glibc
++ # with a fresh cross-compiler works.
++ # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
++ # <limits.h> exists even on freestanding compilers.
++ # On the NeXT, cc -E runs the code through the compiler's parser,
++ # not just through cpp. "Syntax error" is here to catch this case.
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++#ifdef __STDC__
++# include <limits.h>
++#else
++# include <assert.h>
++#endif
++ Syntax error
++_ACEOF
++if ac_fn_c_try_cpp "$LINENO"; then :
++
++else
++ # Broken: fails on valid input.
++continue
++fi
++rm -f conftest.err conftest.$ac_ext
++
++ # OK, works on sane cases. Now check whether nonexistent headers
++ # can be detected and how.
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++#include <ac_nonexistent.h>
++_ACEOF
++if ac_fn_c_try_cpp "$LINENO"; then :
++ # Broken: success on invalid input.
++continue
++else
++ # Passes both tests.
++ac_preproc_ok=:
++break
++fi
++rm -f conftest.err conftest.$ac_ext
++
++done
++# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
++rm -f conftest.err conftest.$ac_ext
++if $ac_preproc_ok; then :
++ break
++fi
++
++ done
++ ac_cv_prog_CPP=$CPP
++
++fi
++ CPP=$ac_cv_prog_CPP
++else
++ ac_cv_prog_CPP=$CPP
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
++$as_echo "$CPP" >&6; }
++ac_preproc_ok=false
++for ac_c_preproc_warn_flag in '' yes
++do
++ # Use a header file that comes with gcc, so configuring glibc
++ # with a fresh cross-compiler works.
++ # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
++ # <limits.h> exists even on freestanding compilers.
++ # On the NeXT, cc -E runs the code through the compiler's parser,
++ # not just through cpp. "Syntax error" is here to catch this case.
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++#ifdef __STDC__
++# include <limits.h>
++#else
++# include <assert.h>
++#endif
++ Syntax error
++_ACEOF
++if ac_fn_c_try_cpp "$LINENO"; then :
++
++else
++ # Broken: fails on valid input.
++continue
++fi
++rm -f conftest.err conftest.$ac_ext
++
++ # OK, works on sane cases. Now check whether nonexistent headers
++ # can be detected and how.
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++#include <ac_nonexistent.h>
++_ACEOF
++if ac_fn_c_try_cpp "$LINENO"; then :
++ # Broken: success on invalid input.
++continue
++else
++ # Passes both tests.
++ac_preproc_ok=:
++break
++fi
++rm -f conftest.err conftest.$ac_ext
++
++done
++# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
++rm -f conftest.err conftest.$ac_ext
++if $ac_preproc_ok; then :
++
++else
++ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
++$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
++as_fn_error "C preprocessor \"$CPP\" fails sanity check
++See \`config.log' for more details." "$LINENO" 5; }
++fi
++
++ac_ext=c
++ac_cpp='$CPP $CPPFLAGS'
++ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
++ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
++ac_compiler_gnu=$ac_cv_c_compiler_gnu
++
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
++$as_echo_n "checking for ANSI C header files... " >&6; }
++if test "${ac_cv_header_stdc+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++#include <stdlib.h>
++#include <stdarg.h>
++#include <string.h>
++#include <float.h>
++
++int
++main ()
++{
++
++ ;
++ return 0;
++}
++_ACEOF
++if ac_fn_c_try_compile "$LINENO"; then :
++ ac_cv_header_stdc=yes
++else
++ ac_cv_header_stdc=no
++fi
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++
++if test $ac_cv_header_stdc = yes; then
++ # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++#include <string.h>
++
++_ACEOF
++if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
++ $EGREP "memchr" >/dev/null 2>&1; then :
++
++else
++ ac_cv_header_stdc=no
++fi
++rm -f conftest*
++
++fi
++
++if test $ac_cv_header_stdc = yes; then
++ # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++#include <stdlib.h>
++
++_ACEOF
++if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
++ $EGREP "free" >/dev/null 2>&1; then :
++
++else
++ ac_cv_header_stdc=no
++fi
++rm -f conftest*
++
++fi
++
++if test $ac_cv_header_stdc = yes; then
++ # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
++ if test "$cross_compiling" = yes; then :
++ :
++else
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++#include <ctype.h>
++#include <stdlib.h>
++#if ((' ' & 0x0FF) == 0x020)
++# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
++# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
++#else
++# define ISLOWER(c) \
++ (('a' <= (c) && (c) <= 'i') \
++ || ('j' <= (c) && (c) <= 'r') \
++ || ('s' <= (c) && (c) <= 'z'))
++# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
++#endif
++
++#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
++int
++main ()
++{
++ int i;
++ for (i = 0; i < 256; i++)
++ if (XOR (islower (i), ISLOWER (i))
++ || toupper (i) != TOUPPER (i))
++ return 2;
++ return 0;
++}
++_ACEOF
++if ac_fn_c_try_run "$LINENO"; then :
++
++else
++ ac_cv_header_stdc=no
++fi
++rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
++ conftest.$ac_objext conftest.beam conftest.$ac_ext
++fi
++
++fi
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
++$as_echo "$ac_cv_header_stdc" >&6; }
++if test $ac_cv_header_stdc = yes; then
++
++$as_echo "#define STDC_HEADERS 1" >>confdefs.h
++
++fi
++
++# On IRIX 5.3, sys/types and inttypes.h are conflicting.
++for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
++ inttypes.h stdint.h unistd.h
++do :
++ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
++ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
++"
++eval as_val=\$$as_ac_Header
++ if test "x$as_val" = x""yes; then :
++ cat >>confdefs.h <<_ACEOF
++#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
++_ACEOF
++
++fi
++
++done
++
++
++for ac_header in dlfcn.h
++do :
++ ac_fn_c_check_header_compile "$LINENO" "dlfcn.h" "ac_cv_header_dlfcn_h" "$ac_includes_default
++"
++if test "x$ac_cv_header_dlfcn_h" = x""yes; then :
++ cat >>confdefs.h <<_ACEOF
++#define HAVE_DLFCN_H 1
++_ACEOF
++
++fi
++
++done
++
++
++
++# Set options
++
++
++
++ enable_dlopen=no
++
++
++ enable_win32_dll=no
++
++
++ # Check whether --enable-shared was given.
++if test "${enable_shared+set}" = set; then :
++ enableval=$enable_shared; p=${PACKAGE-default}
++ case $enableval in
++ yes) enable_shared=yes ;;
++ no) enable_shared=no ;;
++ *)
++ enable_shared=no
++ # Look at the argument we got. We use all the common list separators.
++ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
++ for pkg in $enableval; do
++ IFS="$lt_save_ifs"
++ if test "X$pkg" = "X$p"; then
++ enable_shared=yes
++ fi
++ done
++ IFS="$lt_save_ifs"
++ ;;
++ esac
++else
++ enable_shared=yes
++fi
++
++
++
++
++
++
++
++
++
++ # Check whether --enable-static was given.
++if test "${enable_static+set}" = set; then :
++ enableval=$enable_static; p=${PACKAGE-default}
++ case $enableval in
++ yes) enable_static=yes ;;
++ no) enable_static=no ;;
++ *)
++ enable_static=no
++ # Look at the argument we got. We use all the common list separators.
++ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
++ for pkg in $enableval; do
++ IFS="$lt_save_ifs"
++ if test "X$pkg" = "X$p"; then
++ enable_static=yes
++ fi
++ done
++ IFS="$lt_save_ifs"
++ ;;
++ esac
++else
++ enable_static=yes
++fi
++
++
++
++
++
++
++
++
++
++
++# Check whether --with-pic was given.
++if test "${with_pic+set}" = set; then :
++ withval=$with_pic; pic_mode="$withval"
++else
++ pic_mode=default
++fi
++
++
++test -z "$pic_mode" && pic_mode=default
++
++
++
++
++
++
++
++ # Check whether --enable-fast-install was given.
++if test "${enable_fast_install+set}" = set; then :
++ enableval=$enable_fast_install; p=${PACKAGE-default}
++ case $enableval in
++ yes) enable_fast_install=yes ;;
++ no) enable_fast_install=no ;;
++ *)
++ enable_fast_install=no
++ # Look at the argument we got. We use all the common list separators.
++ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
++ for pkg in $enableval; do
++ IFS="$lt_save_ifs"
++ if test "X$pkg" = "X$p"; then
++ enable_fast_install=yes
++ fi
++ done
++ IFS="$lt_save_ifs"
++ ;;
++ esac
++else
++ enable_fast_install=yes
++fi
++
++
++
++
++
++
++
++
++
++
++
++# This can be used to rebuild libtool when needed
++LIBTOOL_DEPS="$ltmain"
++
++# Always use our own libtool.
++LIBTOOL='$(SHELL) $(top_builddir)/libtool'
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++test -z "$LN_S" && LN_S="ln -s"
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++if test -n "${ZSH_VERSION+set}" ; then
++ setopt NO_GLOB_SUBST
++fi
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5
++$as_echo_n "checking for objdir... " >&6; }
++if test "${lt_cv_objdir+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ rm -f .libs 2>/dev/null
++mkdir .libs 2>/dev/null
++if test -d .libs; then
++ lt_cv_objdir=.libs
++else
++ # MS-DOS does not allow filenames that begin with a dot.
++ lt_cv_objdir=_libs
++fi
++rmdir .libs 2>/dev/null
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5
++$as_echo "$lt_cv_objdir" >&6; }
++objdir=$lt_cv_objdir
++
++
++
++
++
++cat >>confdefs.h <<_ACEOF
++#define LT_OBJDIR "$lt_cv_objdir/"
++_ACEOF
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++case $host_os in
++aix3*)
++ # AIX sometimes has problems with the GCC collect2 program. For some
++ # reason, if we set the COLLECT_NAMES environment variable, the problems
++ # vanish in a puff of smoke.
++ if test "X${COLLECT_NAMES+set}" != Xset; then
++ COLLECT_NAMES=
++ export COLLECT_NAMES
++ fi
++ ;;
++esac
++
++# Sed substitution that helps us do robust quoting. It backslashifies
++# metacharacters that are still active within double-quoted strings.
++sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
++
++# Same as above, but do not quote variable references.
++double_quote_subst='s/\(["`\\]\)/\\\1/g'
++
++# Sed substitution to delay expansion of an escaped shell variable in a
++# double_quote_subst'ed string.
++delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
++
++# Sed substitution to delay expansion of an escaped single quote.
++delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
++
++# Sed substitution to avoid accidental globbing in evaled expressions
++no_glob_subst='s/\*/\\\*/g'
++
++# Global variables:
++ofile=libtool
++can_build_shared=yes
++
++# All known linkers require a `.a' archive for static linking (except MSVC,
++# which needs '.lib').
++libext=a
++
++with_gnu_ld="$lt_cv_prog_gnu_ld"
++
++old_CC="$CC"
++old_CFLAGS="$CFLAGS"
++
++# Set sane defaults for various variables
++test -z "$CC" && CC=cc
++test -z "$LTCC" && LTCC=$CC
++test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
++test -z "$LD" && LD=ld
++test -z "$ac_objext" && ac_objext=o
++
++for cc_temp in $compiler""; do
++ case $cc_temp in
++ compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
++ distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
++ \-*) ;;
++ *) break;;
++ esac
++done
++cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
++
++
++# Only perform the check for file, if the check method requires it
++test -z "$MAGIC_CMD" && MAGIC_CMD=file
++case $deplibs_check_method in
++file_magic*)
++ if test "$file_magic_cmd" = '$MAGIC_CMD'; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5
++$as_echo_n "checking for ${ac_tool_prefix}file... " >&6; }
++if test "${lt_cv_path_MAGIC_CMD+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ case $MAGIC_CMD in
++[\\/*] | ?:[\\/]*)
++ lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
++ ;;
++*)
++ lt_save_MAGIC_CMD="$MAGIC_CMD"
++ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
++ ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
++ for ac_dir in $ac_dummy; do
++ IFS="$lt_save_ifs"
++ test -z "$ac_dir" && ac_dir=.
++ if test -f $ac_dir/${ac_tool_prefix}file; then
++ lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file"
++ if test -n "$file_magic_test_file"; then
++ case $deplibs_check_method in
++ "file_magic "*)
++ file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
++ MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
++ if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
++ $EGREP "$file_magic_regex" > /dev/null; then
++ :
++ else
++ cat <<_LT_EOF 1>&2
++
++*** Warning: the command libtool uses to detect shared libraries,
++*** $file_magic_cmd, produces output that libtool cannot recognize.
++*** The result is that libtool may fail to recognize shared libraries
++*** as such. This will affect the creation of libtool libraries that
++*** depend on shared libraries, but programs linked with such libtool
++*** libraries will work regardless of this problem. Nevertheless, you
++*** may want to report the problem to your system manager and/or to
++*** bug-libtool@gnu.org
++
++_LT_EOF
++ fi ;;
++ esac
++ fi
++ break
++ fi
++ done
++ IFS="$lt_save_ifs"
++ MAGIC_CMD="$lt_save_MAGIC_CMD"
++ ;;
++esac
++fi
++
++MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
++if test -n "$MAGIC_CMD"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
++$as_echo "$MAGIC_CMD" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++
++
++
++if test -z "$lt_cv_path_MAGIC_CMD"; then
++ if test -n "$ac_tool_prefix"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for file" >&5
++$as_echo_n "checking for file... " >&6; }
++if test "${lt_cv_path_MAGIC_CMD+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ case $MAGIC_CMD in
++[\\/*] | ?:[\\/]*)
++ lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
++ ;;
++*)
++ lt_save_MAGIC_CMD="$MAGIC_CMD"
++ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
++ ac_dummy="/usr/bin$PATH_SEPARATOR$PATH"
++ for ac_dir in $ac_dummy; do
++ IFS="$lt_save_ifs"
++ test -z "$ac_dir" && ac_dir=.
++ if test -f $ac_dir/file; then
++ lt_cv_path_MAGIC_CMD="$ac_dir/file"
++ if test -n "$file_magic_test_file"; then
++ case $deplibs_check_method in
++ "file_magic "*)
++ file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
++ MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
++ if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
++ $EGREP "$file_magic_regex" > /dev/null; then
++ :
++ else
++ cat <<_LT_EOF 1>&2
++
++*** Warning: the command libtool uses to detect shared libraries,
++*** $file_magic_cmd, produces output that libtool cannot recognize.
++*** The result is that libtool may fail to recognize shared libraries
++*** as such. This will affect the creation of libtool libraries that
++*** depend on shared libraries, but programs linked with such libtool
++*** libraries will work regardless of this problem. Nevertheless, you
++*** may want to report the problem to your system manager and/or to
++*** bug-libtool@gnu.org
++
++_LT_EOF
++ fi ;;
++ esac
++ fi
++ break
++ fi
++ done
++ IFS="$lt_save_ifs"
++ MAGIC_CMD="$lt_save_MAGIC_CMD"
++ ;;
++esac
++fi
++
++MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
++if test -n "$MAGIC_CMD"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5
++$as_echo "$MAGIC_CMD" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++ else
++ MAGIC_CMD=:
++ fi
++fi
++
++ fi
++ ;;
++esac
++
++# Use C for the default configuration in the libtool script
++
++lt_save_CC="$CC"
++ac_ext=c
++ac_cpp='$CPP $CPPFLAGS'
++ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
++ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
++ac_compiler_gnu=$ac_cv_c_compiler_gnu
++
++
++# Source file extension for C test sources.
++ac_ext=c
++
++# Object file extension for compiled C test sources.
++objext=o
++objext=$objext
++
++# Code to be used in simple compile tests
++lt_simple_compile_test_code="int some_variable = 0;"
++
++# Code to be used in simple link tests
++lt_simple_link_test_code='int main(){return(0);}'
++
++
++
++
++
++
++
++# If no C compiler was specified, use CC.
++LTCC=${LTCC-"$CC"}
++
++# If no C compiler flags were specified, use CFLAGS.
++LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
++
++# Allow CC to be a program name with arguments.
++compiler=$CC
++
++# Save the default compiler, since it gets overwritten when the other
++# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
++compiler_DEFAULT=$CC
++
++# save warnings/boilerplate of simple test code
++ac_outfile=conftest.$ac_objext
++echo "$lt_simple_compile_test_code" >conftest.$ac_ext
++eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
++_lt_compiler_boilerplate=`cat conftest.err`
++$RM conftest*
++
++ac_outfile=conftest.$ac_objext
++echo "$lt_simple_link_test_code" >conftest.$ac_ext
++eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
++_lt_linker_boilerplate=`cat conftest.err`
++$RM -r conftest*
++
++
++## CAVEAT EMPTOR:
++## There is no encapsulation within the following macros, do not change
++## the running order or otherwise move them around unless you know exactly
++## what you are doing...
++if test -n "$compiler"; then
++
++lt_prog_compiler_no_builtin_flag=
++
++if test "$GCC" = yes; then
++ lt_prog_compiler_no_builtin_flag=' -fno-builtin'
++
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5
++$as_echo_n "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; }
++if test "${lt_cv_prog_compiler_rtti_exceptions+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ lt_cv_prog_compiler_rtti_exceptions=no
++ ac_outfile=conftest.$ac_objext
++ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
++ lt_compiler_flag="-fno-rtti -fno-exceptions"
++ # Insert the option either (1) after the last *FLAGS variable, or
++ # (2) before a word containing "conftest.", or (3) at the end.
++ # Note that $ac_compile itself does not contain backslashes and begins
++ # with a dollar sign (not a hyphen), so the echo should work correctly.
++ # The option is referenced via a variable to avoid confusing sed.
++ lt_compile=`echo "$ac_compile" | $SED \
++ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
++ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
++ -e 's:$: $lt_compiler_flag:'`
++ (eval echo "\"\$as_me:7487: $lt_compile\"" >&5)
++ (eval "$lt_compile" 2>conftest.err)
++ ac_status=$?
++ cat conftest.err >&5
++ echo "$as_me:7491: \$? = $ac_status" >&5
++ if (exit $ac_status) && test -s "$ac_outfile"; then
++ # The compiler can only warn and ignore the option if not recognized
++ # So say no if there are warnings other than the usual output.
++ $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
++ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
++ if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
++ lt_cv_prog_compiler_rtti_exceptions=yes
++ fi
++ fi
++ $RM conftest*
++
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5
++$as_echo "$lt_cv_prog_compiler_rtti_exceptions" >&6; }
++
++if test x"$lt_cv_prog_compiler_rtti_exceptions" = xyes; then
++ lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions"
++else
++ :
++fi
++
++fi
++
++
++
++
++
++
++ lt_prog_compiler_wl=
++lt_prog_compiler_pic=
++lt_prog_compiler_static=
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5
++$as_echo_n "checking for $compiler option to produce PIC... " >&6; }
++
++ if test "$GCC" = yes; then
++ lt_prog_compiler_wl='-Wl,'
++ lt_prog_compiler_static='-static'
++
++ case $host_os in
++ aix*)
++ # All AIX code is PIC.
++ if test "$host_cpu" = ia64; then
++ # AIX 5 now supports IA64 processor
++ lt_prog_compiler_static='-Bstatic'
++ fi
++ ;;
++
++ amigaos*)
++ case $host_cpu in
++ powerpc)
++ # see comment about AmigaOS4 .so support
++ lt_prog_compiler_pic='-fPIC'
++ ;;
++ m68k)
++ # FIXME: we need at least 68020 code to build shared libraries, but
++ # adding the `-m68020' flag to GCC prevents building anything better,
++ # like `-m68040'.
++ lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4'
++ ;;
++ esac
++ ;;
++
++ beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
++ # PIC is the default for these OSes.
++ ;;
++
++ mingw* | cygwin* | pw32* | os2* | cegcc*)
++ # This hack is so that the source file can tell whether it is being
++ # built for inclusion in a dll (and should export symbols for example).
++ # Although the cygwin gcc ignores -fPIC, still need this for old-style
++ # (--disable-auto-import) libraries
++ lt_prog_compiler_pic='-DDLL_EXPORT'
++ ;;
++
++ darwin* | rhapsody*)
++ # PIC is the default on this platform
++ # Common symbols not allowed in MH_DYLIB files
++ lt_prog_compiler_pic='-fno-common'
++ ;;
++
++ hpux*)
++ # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
++ # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag
++ # sets the default TLS model and affects inlining.
++ case $host_cpu in
++ hppa*64*)
++ # +Z the default
++ ;;
++ *)
++ lt_prog_compiler_pic='-fPIC'
++ ;;
++ esac
++ ;;
++
++ interix[3-9]*)
++ # Interix 3.x gcc -fpic/-fPIC options generate broken code.
++ # Instead, we relocate shared libraries at runtime.
++ ;;
++
++ msdosdjgpp*)
++ # Just because we use GCC doesn't mean we suddenly get shared libraries
++ # on systems that don't support them.
++ lt_prog_compiler_can_build_shared=no
++ enable_shared=no
++ ;;
++
++ *nto* | *qnx*)
++ # QNX uses GNU C++, but need to define -shared option too, otherwise
++ # it will coredump.
++ lt_prog_compiler_pic='-fPIC -shared'
++ ;;
++
++ sysv4*MP*)
++ if test -d /usr/nec; then
++ lt_prog_compiler_pic=-Kconform_pic
++ fi
++ ;;
++
++ *)
++ lt_prog_compiler_pic='-fPIC'
++ ;;
++ esac
++ else
++ # PORTME Check for flag to pass linker flags through the system compiler.
++ case $host_os in
++ aix*)
++ lt_prog_compiler_wl='-Wl,'
++ if test "$host_cpu" = ia64; then
++ # AIX 5 now supports IA64 processor
++ lt_prog_compiler_static='-Bstatic'
++ else
++ lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp'
++ fi
++ ;;
++
++ mingw* | cygwin* | pw32* | os2* | cegcc*)
++ # This hack is so that the source file can tell whether it is being
++ # built for inclusion in a dll (and should export symbols for example).
++ lt_prog_compiler_pic='-DDLL_EXPORT'
++ ;;
++
++ hpux9* | hpux10* | hpux11*)
++ lt_prog_compiler_wl='-Wl,'
++ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
++ # not for PA HP-UX.
++ case $host_cpu in
++ hppa*64*|ia64*)
++ # +Z the default
++ ;;
++ *)
++ lt_prog_compiler_pic='+Z'
++ ;;
++ esac
++ # Is there a better lt_prog_compiler_static that works with the bundled CC?
++ lt_prog_compiler_static='${wl}-a ${wl}archive'
++ ;;
++
++ irix5* | irix6* | nonstopux*)
++ lt_prog_compiler_wl='-Wl,'
++ # PIC (with -KPIC) is the default.
++ lt_prog_compiler_static='-non_shared'
++ ;;
++
++ linux* | k*bsd*-gnu)
++ case $cc_basename in
++ # old Intel for x86_64 which still supported -KPIC.
++ ecc*)
++ lt_prog_compiler_wl='-Wl,'
++ lt_prog_compiler_pic='-KPIC'
++ lt_prog_compiler_static='-static'
++ ;;
++ # icc used to be incompatible with GCC.
++ # ICC 10 doesn't accept -KPIC any more.
++ icc* | ifort*)
++ lt_prog_compiler_wl='-Wl,'
++ lt_prog_compiler_pic='-fPIC'
++ lt_prog_compiler_static='-static'
++ ;;
++ # Lahey Fortran 8.1.
++ lf95*)
++ lt_prog_compiler_wl='-Wl,'
++ lt_prog_compiler_pic='--shared'
++ lt_prog_compiler_static='--static'
++ ;;
++ pgcc* | pgf77* | pgf90* | pgf95*)
++ # Portland Group compilers (*not* the Pentium gcc compiler,
++ # which looks to be a dead project)
++ lt_prog_compiler_wl='-Wl,'
++ lt_prog_compiler_pic='-fpic'
++ lt_prog_compiler_static='-Bstatic'
++ ;;
++ ccc*)
++ lt_prog_compiler_wl='-Wl,'
++ # All Alpha code is PIC.
++ lt_prog_compiler_static='-non_shared'
++ ;;
++ xl*)
++ # IBM XL C 8.0/Fortran 10.1 on PPC
++ lt_prog_compiler_wl='-Wl,'
++ lt_prog_compiler_pic='-qpic'
++ lt_prog_compiler_static='-qstaticlink'
++ ;;
++ *)
++ case `$CC -V 2>&1 | sed 5q` in
++ *Sun\ C*)
++ # Sun C 5.9
++ lt_prog_compiler_pic='-KPIC'
++ lt_prog_compiler_static='-Bstatic'
++ lt_prog_compiler_wl='-Wl,'
++ ;;
++ *Sun\ F*)
++ # Sun Fortran 8.3 passes all unrecognized flags to the linker
++ lt_prog_compiler_pic='-KPIC'
++ lt_prog_compiler_static='-Bstatic'
++ lt_prog_compiler_wl=''
++ ;;
++ esac
++ ;;
++ esac
++ ;;
++
++ newsos6)
++ lt_prog_compiler_pic='-KPIC'
++ lt_prog_compiler_static='-Bstatic'
++ ;;
++
++ *nto* | *qnx*)
++ # QNX uses GNU C++, but need to define -shared option too, otherwise
++ # it will coredump.
++ lt_prog_compiler_pic='-fPIC -shared'
++ ;;
++
++ osf3* | osf4* | osf5*)
++ lt_prog_compiler_wl='-Wl,'
++ # All OSF/1 code is PIC.
++ lt_prog_compiler_static='-non_shared'
++ ;;
++
++ rdos*)
++ lt_prog_compiler_static='-non_shared'
++ ;;
++
++ solaris*)
++ lt_prog_compiler_pic='-KPIC'
++ lt_prog_compiler_static='-Bstatic'
++ case $cc_basename in
++ f77* | f90* | f95*)
++ lt_prog_compiler_wl='-Qoption ld ';;
++ *)
++ lt_prog_compiler_wl='-Wl,';;
++ esac
++ ;;
++
++ sunos4*)
++ lt_prog_compiler_wl='-Qoption ld '
++ lt_prog_compiler_pic='-PIC'
++ lt_prog_compiler_static='-Bstatic'
++ ;;
++
++ sysv4 | sysv4.2uw2* | sysv4.3*)
++ lt_prog_compiler_wl='-Wl,'
++ lt_prog_compiler_pic='-KPIC'
++ lt_prog_compiler_static='-Bstatic'
++ ;;
++
++ sysv4*MP*)
++ if test -d /usr/nec ;then
++ lt_prog_compiler_pic='-Kconform_pic'
++ lt_prog_compiler_static='-Bstatic'
++ fi
++ ;;
++
++ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
++ lt_prog_compiler_wl='-Wl,'
++ lt_prog_compiler_pic='-KPIC'
++ lt_prog_compiler_static='-Bstatic'
++ ;;
++
++ unicos*)
++ lt_prog_compiler_wl='-Wl,'
++ lt_prog_compiler_can_build_shared=no
++ ;;
++
++ uts4*)
++ lt_prog_compiler_pic='-pic'
++ lt_prog_compiler_static='-Bstatic'
++ ;;
++
++ *)
++ lt_prog_compiler_can_build_shared=no
++ ;;
++ esac
++ fi
++
++case $host_os in
++ # For platforms which do not support PIC, -DPIC is meaningless:
++ *djgpp*)
++ lt_prog_compiler_pic=
++ ;;
++ *)
++ lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC"
++ ;;
++esac
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_prog_compiler_pic" >&5
++$as_echo "$lt_prog_compiler_pic" >&6; }
++
++
++
++
++
++
++#
++# Check to make sure the PIC flag actually works.
++#
++if test -n "$lt_prog_compiler_pic"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5
++$as_echo_n "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; }
++if test "${lt_cv_prog_compiler_pic_works+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ lt_cv_prog_compiler_pic_works=no
++ ac_outfile=conftest.$ac_objext
++ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
++ lt_compiler_flag="$lt_prog_compiler_pic -DPIC"
++ # Insert the option either (1) after the last *FLAGS variable, or
++ # (2) before a word containing "conftest.", or (3) at the end.
++ # Note that $ac_compile itself does not contain backslashes and begins
++ # with a dollar sign (not a hyphen), so the echo should work correctly.
++ # The option is referenced via a variable to avoid confusing sed.
++ lt_compile=`echo "$ac_compile" | $SED \
++ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
++ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
++ -e 's:$: $lt_compiler_flag:'`
++ (eval echo "\"\$as_me:7826: $lt_compile\"" >&5)
++ (eval "$lt_compile" 2>conftest.err)
++ ac_status=$?
++ cat conftest.err >&5
++ echo "$as_me:7830: \$? = $ac_status" >&5
++ if (exit $ac_status) && test -s "$ac_outfile"; then
++ # The compiler can only warn and ignore the option if not recognized
++ # So say no if there are warnings other than the usual output.
++ $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
++ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
++ if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
++ lt_cv_prog_compiler_pic_works=yes
++ fi
++ fi
++ $RM conftest*
++
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5
++$as_echo "$lt_cv_prog_compiler_pic_works" >&6; }
++
++if test x"$lt_cv_prog_compiler_pic_works" = xyes; then
++ case $lt_prog_compiler_pic in
++ "" | " "*) ;;
++ *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;;
++ esac
++else
++ lt_prog_compiler_pic=
++ lt_prog_compiler_can_build_shared=no
++fi
++
++fi
++
++
++
++
++
++
++#
++# Check to make sure the static flag actually works.
++#
++wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\"
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5
++$as_echo_n "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; }
++if test "${lt_cv_prog_compiler_static_works+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ lt_cv_prog_compiler_static_works=no
++ save_LDFLAGS="$LDFLAGS"
++ LDFLAGS="$LDFLAGS $lt_tmp_static_flag"
++ echo "$lt_simple_link_test_code" > conftest.$ac_ext
++ if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
++ # The linker can only warn and ignore the option if not recognized
++ # So say no if there are warnings
++ if test -s conftest.err; then
++ # Append any errors to the config.log.
++ cat conftest.err 1>&5
++ $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
++ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
++ if diff conftest.exp conftest.er2 >/dev/null; then
++ lt_cv_prog_compiler_static_works=yes
++ fi
++ else
++ lt_cv_prog_compiler_static_works=yes
++ fi
++ fi
++ $RM -r conftest*
++ LDFLAGS="$save_LDFLAGS"
++
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5
++$as_echo "$lt_cv_prog_compiler_static_works" >&6; }
++
++if test x"$lt_cv_prog_compiler_static_works" = xyes; then
++ :
++else
++ lt_prog_compiler_static=
++fi
++
++
++
++
++
++
++
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
++$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
++if test "${lt_cv_prog_compiler_c_o+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ lt_cv_prog_compiler_c_o=no
++ $RM -r conftest 2>/dev/null
++ mkdir conftest
++ cd conftest
++ mkdir out
++ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
++
++ lt_compiler_flag="-o out/conftest2.$ac_objext"
++ # Insert the option either (1) after the last *FLAGS variable, or
++ # (2) before a word containing "conftest.", or (3) at the end.
++ # Note that $ac_compile itself does not contain backslashes and begins
++ # with a dollar sign (not a hyphen), so the echo should work correctly.
++ lt_compile=`echo "$ac_compile" | $SED \
++ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
++ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
++ -e 's:$: $lt_compiler_flag:'`
++ (eval echo "\"\$as_me:7931: $lt_compile\"" >&5)
++ (eval "$lt_compile" 2>out/conftest.err)
++ ac_status=$?
++ cat out/conftest.err >&5
++ echo "$as_me:7935: \$? = $ac_status" >&5
++ if (exit $ac_status) && test -s out/conftest2.$ac_objext
++ then
++ # The compiler can only warn and ignore the option if not recognized
++ # So say no if there are warnings
++ $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
++ $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
++ if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
++ lt_cv_prog_compiler_c_o=yes
++ fi
++ fi
++ chmod u+w . 2>&5
++ $RM conftest*
++ # SGI C++ compiler will create directory out/ii_files/ for
++ # template instantiation
++ test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
++ $RM out/* && rmdir out
++ cd ..
++ $RM -r conftest
++ $RM conftest*
++
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
++$as_echo "$lt_cv_prog_compiler_c_o" >&6; }
++
++
++
++
++
++
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5
++$as_echo_n "checking if $compiler supports -c -o file.$ac_objext... " >&6; }
++if test "${lt_cv_prog_compiler_c_o+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ lt_cv_prog_compiler_c_o=no
++ $RM -r conftest 2>/dev/null
++ mkdir conftest
++ cd conftest
++ mkdir out
++ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
++
++ lt_compiler_flag="-o out/conftest2.$ac_objext"
++ # Insert the option either (1) after the last *FLAGS variable, or
++ # (2) before a word containing "conftest.", or (3) at the end.
++ # Note that $ac_compile itself does not contain backslashes and begins
++ # with a dollar sign (not a hyphen), so the echo should work correctly.
++ lt_compile=`echo "$ac_compile" | $SED \
++ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
++ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
++ -e 's:$: $lt_compiler_flag:'`
++ (eval echo "\"\$as_me:7986: $lt_compile\"" >&5)
++ (eval "$lt_compile" 2>out/conftest.err)
++ ac_status=$?
++ cat out/conftest.err >&5
++ echo "$as_me:7990: \$? = $ac_status" >&5
++ if (exit $ac_status) && test -s out/conftest2.$ac_objext
++ then
++ # The compiler can only warn and ignore the option if not recognized
++ # So say no if there are warnings
++ $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
++ $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
++ if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
++ lt_cv_prog_compiler_c_o=yes
++ fi
++ fi
++ chmod u+w . 2>&5
++ $RM conftest*
++ # SGI C++ compiler will create directory out/ii_files/ for
++ # template instantiation
++ test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
++ $RM out/* && rmdir out
++ cd ..
++ $RM -r conftest
++ $RM conftest*
++
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5
++$as_echo "$lt_cv_prog_compiler_c_o" >&6; }
++
++
++
++
++hard_links="nottested"
++if test "$lt_cv_prog_compiler_c_o" = no && test "$need_locks" != no; then
++ # do not overwrite the value of need_locks provided by the user
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5
++$as_echo_n "checking if we can lock with hard links... " >&6; }
++ hard_links=yes
++ $RM conftest*
++ ln conftest.a conftest.b 2>/dev/null && hard_links=no
++ touch conftest.a
++ ln conftest.a conftest.b 2>&5 || hard_links=no
++ ln conftest.a conftest.b 2>/dev/null && hard_links=no
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5
++$as_echo "$hard_links" >&6; }
++ if test "$hard_links" = no; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&5
++$as_echo "$as_me: WARNING: \`$CC' does not support \`-c -o', so \`make -j' may be unsafe" >&2;}
++ need_locks=warn
++ fi
++else
++ need_locks=no
++fi
++
++
++
++
++
++
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5
++$as_echo_n "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; }
++
++ runpath_var=
++ allow_undefined_flag=
++ always_export_symbols=no
++ archive_cmds=
++ archive_expsym_cmds=
++ compiler_needs_object=no
++ enable_shared_with_static_runtimes=no
++ export_dynamic_flag_spec=
++ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
++ hardcode_automatic=no
++ hardcode_direct=no
++ hardcode_direct_absolute=no
++ hardcode_libdir_flag_spec=
++ hardcode_libdir_flag_spec_ld=
++ hardcode_libdir_separator=
++ hardcode_minus_L=no
++ hardcode_shlibpath_var=unsupported
++ inherit_rpath=no
++ link_all_deplibs=unknown
++ module_cmds=
++ module_expsym_cmds=
++ old_archive_from_new_cmds=
++ old_archive_from_expsyms_cmds=
++ thread_safe_flag_spec=
++ whole_archive_flag_spec=
++ # include_expsyms should be a list of space-separated symbols to be *always*
++ # included in the symbol list
++ include_expsyms=
++ # exclude_expsyms can be an extended regexp of symbols to exclude
++ # it will be wrapped by ` (' and `)$', so one must not match beginning or
++ # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
++ # as well as any symbol that contains `d'.
++ exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'
++ # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
++ # platforms (ab)use it in PIC code, but their linkers get confused if
++ # the symbol is explicitly referenced. Since portable code cannot
++ # rely on this symbol name, it's probably fine to never include it in
++ # preloaded symbol tables.
++ # Exclude shared library initialization/finalization symbols.
++ extract_expsyms_cmds=
++
++ case $host_os in
++ cygwin* | mingw* | pw32* | cegcc*)
++ # FIXME: the MSVC++ port hasn't been tested in a loooong time
++ # When not using gcc, we currently assume that we are using
++ # Microsoft Visual C++.
++ if test "$GCC" != yes; then
++ with_gnu_ld=no
++ fi
++ ;;
++ interix*)
++ # we just hope/assume this is gcc and not c89 (= MSVC++)
++ with_gnu_ld=yes
++ ;;
++ openbsd*)
++ with_gnu_ld=no
++ ;;
++ linux* | k*bsd*-gnu)
++ link_all_deplibs=no
++ ;;
++ esac
++
++ ld_shlibs=yes
++ if test "$with_gnu_ld" = yes; then
++ # If archive_cmds runs LD, not CC, wlarc should be empty
++ wlarc='${wl}'
++
++ # Set some defaults for GNU ld with shared library support. These
++ # are reset later if shared libraries are not supported. Putting them
++ # here allows them to be overridden if necessary.
++ runpath_var=LD_RUN_PATH
++ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
++ export_dynamic_flag_spec='${wl}--export-dynamic'
++ # ancient GNU ld didn't support --whole-archive et. al.
++ if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
++ whole_archive_flag_spec="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
++ else
++ whole_archive_flag_spec=
++ fi
++ supports_anon_versioning=no
++ case `$LD -v 2>&1` in
++ *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11
++ *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
++ *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
++ *\ 2.11.*) ;; # other 2.11 versions
++ *) supports_anon_versioning=yes ;;
++ esac
++
++ # See if GNU ld supports shared libraries.
++ case $host_os in
++ aix[3-9]*)
++ # On AIX/PPC, the GNU linker is very broken
++ if test "$host_cpu" != ia64; then
++ ld_shlibs=no
++ cat <<_LT_EOF 1>&2
++
++*** Warning: the GNU linker, at least up to release 2.9.1, is reported
++*** to be unable to reliably create shared libraries on AIX.
++*** Therefore, libtool is disabling shared libraries support. If you
++*** really care for shared libraries, you may want to modify your PATH
++*** so that a non-GNU linker is found, and then restart.
++
++_LT_EOF
++ fi
++ ;;
++
++ amigaos*)
++ case $host_cpu in
++ powerpc)
++ # see comment about AmigaOS4 .so support
++ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
++ archive_expsym_cmds=''
++ ;;
++ m68k)
++ archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
++ hardcode_libdir_flag_spec='-L$libdir'
++ hardcode_minus_L=yes
++ ;;
++ esac
++ ;;
++
++ beos*)
++ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
++ allow_undefined_flag=unsupported
++ # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
++ # support --undefined. This deserves some investigation. FIXME
++ archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
++ else
++ ld_shlibs=no
++ fi
++ ;;
++
++ cygwin* | mingw* | pw32* | cegcc*)
++ # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless,
++ # as there is no search path for DLLs.
++ hardcode_libdir_flag_spec='-L$libdir'
++ allow_undefined_flag=unsupported
++ always_export_symbols=no
++ enable_shared_with_static_runtimes=yes
++ export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols'
++
++ if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
++ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
++ # If the export-symbols file already is a .def file (1st line
++ # is EXPORTS), use it as is; otherwise, prepend...
++ archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
++ cp $export_symbols $output_objdir/$soname.def;
++ else
++ echo EXPORTS > $output_objdir/$soname.def;
++ cat $export_symbols >> $output_objdir/$soname.def;
++ fi~
++ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
++ else
++ ld_shlibs=no
++ fi
++ ;;
++
++ interix[3-9]*)
++ hardcode_direct=no
++ hardcode_shlibpath_var=no
++ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
++ export_dynamic_flag_spec='${wl}-E'
++ # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
++ # Instead, shared libraries are loaded at an image base (0x10000000 by
++ # default) and relocated if they conflict, which is a slow very memory
++ # consuming and fragmenting process. To avoid this, we pick a random,
++ # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
++ # time. Moving up from 0x10000000 also allows more sbrk(2) space.
++ archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
++ archive_expsym_cmds='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
++ ;;
++
++ gnu* | linux* | tpf* | k*bsd*-gnu)
++ tmp_diet=no
++ if test "$host_os" = linux-dietlibc; then
++ case $cc_basename in
++ diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn)
++ esac
++ fi
++ if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
++ && test "$tmp_diet" = no
++ then
++ tmp_addflag=
++ tmp_sharedflag='-shared'
++ case $cc_basename,$host_cpu in
++ pgcc*) # Portland Group C compiler
++ whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
++ tmp_addflag=' $pic_flag'
++ ;;
++ pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers
++ whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
++ tmp_addflag=' $pic_flag -Mnomain' ;;
++ ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64
++ tmp_addflag=' -i_dynamic' ;;
++ efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64
++ tmp_addflag=' -i_dynamic -nofor_main' ;;
++ ifc* | ifort*) # Intel Fortran compiler
++ tmp_addflag=' -nofor_main' ;;
++ lf95*) # Lahey Fortran 8.1
++ whole_archive_flag_spec=
++ tmp_sharedflag='--shared' ;;
++ xl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below)
++ tmp_sharedflag='-qmkshrobj'
++ tmp_addflag= ;;
++ esac
++ case `$CC -V 2>&1 | sed 5q` in
++ *Sun\ C*) # Sun C 5.9
++ whole_archive_flag_spec='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
++ compiler_needs_object=yes
++ tmp_sharedflag='-G' ;;
++ *Sun\ F*) # Sun Fortran 8.3
++ tmp_sharedflag='-G' ;;
++ esac
++ archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
++
++ if test "x$supports_anon_versioning" = xyes; then
++ archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
++ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
++ echo "local: *; };" >> $output_objdir/$libname.ver~
++ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
++ fi
++
++ case $cc_basename in
++ xlf*)
++ # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
++ whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive'
++ hardcode_libdir_flag_spec=
++ hardcode_libdir_flag_spec_ld='-rpath $libdir'
++ archive_cmds='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib'
++ if test "x$supports_anon_versioning" = xyes; then
++ archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~
++ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
++ echo "local: *; };" >> $output_objdir/$libname.ver~
++ $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
++ fi
++ ;;
++ esac
++ else
++ ld_shlibs=no
++ fi
++ ;;
++
++ netbsd* | netbsdelf*-gnu)
++ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
++ archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
++ wlarc=
++ else
++ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
++ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
++ fi
++ ;;
++
++ solaris*)
++ if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
++ ld_shlibs=no
++ cat <<_LT_EOF 1>&2
++
++*** Warning: The releases 2.8.* of the GNU linker cannot reliably
++*** create shared libraries on Solaris systems. Therefore, libtool
++*** is disabling shared libraries support. We urge you to upgrade GNU
++*** binutils to release 2.9.1 or newer. Another option is to modify
++*** your PATH or compiler configuration so that the native linker is
++*** used, and then restart.
++
++_LT_EOF
++ elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
++ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
++ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
++ else
++ ld_shlibs=no
++ fi
++ ;;
++
++ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
++ case `$LD -v 2>&1` in
++ *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
++ ld_shlibs=no
++ cat <<_LT_EOF 1>&2
++
++*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
++*** reliably create shared libraries on SCO systems. Therefore, libtool
++*** is disabling shared libraries support. We urge you to upgrade GNU
++*** binutils to release 2.16.91.0.3 or newer. Another option is to modify
++*** your PATH or compiler configuration so that the native linker is
++*** used, and then restart.
++
++_LT_EOF
++ ;;
++ *)
++ # For security reasons, it is highly recommended that you always
++ # use absolute paths for naming shared libraries, and exclude the
++ # DT_RUNPATH tag from executables and libraries. But doing so
++ # requires that you compile everything twice, which is a pain.
++ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
++ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
++ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
++ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
++ else
++ ld_shlibs=no
++ fi
++ ;;
++ esac
++ ;;
++
++ sunos4*)
++ archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
++ wlarc=
++ hardcode_direct=yes
++ hardcode_shlibpath_var=no
++ ;;
++
++ *)
++ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
++ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
++ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
++ else
++ ld_shlibs=no
++ fi
++ ;;
++ esac
++
++ if test "$ld_shlibs" = no; then
++ runpath_var=
++ hardcode_libdir_flag_spec=
++ export_dynamic_flag_spec=
++ whole_archive_flag_spec=
++ fi
++ else
++ # PORTME fill in a description of your system's linker (not GNU ld)
++ case $host_os in
++ aix3*)
++ allow_undefined_flag=unsupported
++ always_export_symbols=yes
++ archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
++ # Note: this linker hardcodes the directories in LIBPATH if there
++ # are no directories specified by -L.
++ hardcode_minus_L=yes
++ if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
++ # Neither direct hardcoding nor static linking is supported with a
++ # broken collect2.
++ hardcode_direct=unsupported
++ fi
++ ;;
++
++ aix[4-9]*)
++ if test "$host_cpu" = ia64; then
++ # On IA64, the linker does run time linking by default, so we don't
++ # have to do anything special.
++ aix_use_runtimelinking=no
++ exp_sym_flag='-Bexport'
++ no_entry_flag=""
++ else
++ # If we're using GNU nm, then we don't want the "-C" option.
++ # -C means demangle to AIX nm, but means don't demangle with GNU nm
++ if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
++ export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
++ else
++ export_symbols_cmds='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && (substr(\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
++ fi
++ aix_use_runtimelinking=no
++
++ # Test if we are trying to use run time linking or normal
++ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
++ # need to do runtime linking.
++ case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
++ for ld_flag in $LDFLAGS; do
++ if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
++ aix_use_runtimelinking=yes
++ break
++ fi
++ done
++ ;;
++ esac
++
++ exp_sym_flag='-bexport'
++ no_entry_flag='-bnoentry'
++ fi
++
++ # When large executables or shared objects are built, AIX ld can
++ # have problems creating the table of contents. If linking a library
++ # or program results in "error TOC overflow" add -mminimal-toc to
++ # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
++ # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
++
++ archive_cmds=''
++ hardcode_direct=yes
++ hardcode_direct_absolute=yes
++ hardcode_libdir_separator=':'
++ link_all_deplibs=yes
++ file_list_spec='${wl}-f,'
++
++ if test "$GCC" = yes; then
++ case $host_os in aix4.[012]|aix4.[012].*)
++ # We only want to do this on AIX 4.2 and lower, the check
++ # below for broken collect2 doesn't work under 4.3+
++ collect2name=`${CC} -print-prog-name=collect2`
++ if test -f "$collect2name" &&
++ strings "$collect2name" | $GREP resolve_lib_name >/dev/null
++ then
++ # We have reworked collect2
++ :
++ else
++ # We have old collect2
++ hardcode_direct=unsupported
++ # It fails to find uninstalled libraries when the uninstalled
++ # path is not listed in the libpath. Setting hardcode_minus_L
++ # to unsupported forces relinking
++ hardcode_minus_L=yes
++ hardcode_libdir_flag_spec='-L$libdir'
++ hardcode_libdir_separator=
++ fi
++ ;;
++ esac
++ shared_flag='-shared'
++ if test "$aix_use_runtimelinking" = yes; then
++ shared_flag="$shared_flag "'${wl}-G'
++ fi
++ link_all_deplibs=no
++ else
++ # not using gcc
++ if test "$host_cpu" = ia64; then
++ # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
++ # chokes on -Wl,-G. The following line is correct:
++ shared_flag='-G'
++ else
++ if test "$aix_use_runtimelinking" = yes; then
++ shared_flag='${wl}-G'
++ else
++ shared_flag='${wl}-bM:SRE'
++ fi
++ fi
++ fi
++
++ export_dynamic_flag_spec='${wl}-bexpall'
++ # It seems that -bexpall does not export symbols beginning with
++ # underscore (_), so it is better to generate a list of symbols to export.
++ always_export_symbols=yes
++ if test "$aix_use_runtimelinking" = yes; then
++ # Warning - without using the other runtime loading flags (-brtl),
++ # -berok will link without error, but may produce a broken library.
++ allow_undefined_flag='-berok'
++ # Determine the default libpath from the value encoded in an
++ # empty executable.
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++
++int
++main ()
++{
++
++ ;
++ return 0;
++}
++_ACEOF
++if ac_fn_c_try_link "$LINENO"; then :
++
++lt_aix_libpath_sed='
++ /Import File Strings/,/^$/ {
++ /^0/ {
++ s/^0 *\(.*\)$/\1/
++ p
++ }
++ }'
++aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
++# Check for a 64-bit object if we didn't find anything.
++if test -z "$aix_libpath"; then
++ aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
++fi
++fi
++rm -f core conftest.err conftest.$ac_objext \
++ conftest$ac_exeext conftest.$ac_ext
++if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
++
++ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
++ archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
++ else
++ if test "$host_cpu" = ia64; then
++ hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
++ allow_undefined_flag="-z nodefs"
++ archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
++ else
++ # Determine the default libpath from the value encoded in an
++ # empty executable.
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++
++int
++main ()
++{
++
++ ;
++ return 0;
++}
++_ACEOF
++if ac_fn_c_try_link "$LINENO"; then :
++
++lt_aix_libpath_sed='
++ /Import File Strings/,/^$/ {
++ /^0/ {
++ s/^0 *\(.*\)$/\1/
++ p
++ }
++ }'
++aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
++# Check for a 64-bit object if we didn't find anything.
++if test -z "$aix_libpath"; then
++ aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
++fi
++fi
++rm -f core conftest.err conftest.$ac_objext \
++ conftest$ac_exeext conftest.$ac_ext
++if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
++
++ hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
++ # Warning - without using the other run time loading flags,
++ # -berok will link without error, but may produce a broken library.
++ no_undefined_flag=' ${wl}-bernotok'
++ allow_undefined_flag=' ${wl}-berok'
++ # Exported symbols can be pulled into shared objects from archives
++ whole_archive_flag_spec='$convenience'
++ archive_cmds_need_lc=yes
++ # This is similar to how AIX traditionally builds its shared libraries.
++ archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
++ fi
++ fi
++ ;;
++
++ amigaos*)
++ case $host_cpu in
++ powerpc)
++ # see comment about AmigaOS4 .so support
++ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
++ archive_expsym_cmds=''
++ ;;
++ m68k)
++ archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
++ hardcode_libdir_flag_spec='-L$libdir'
++ hardcode_minus_L=yes
++ ;;
++ esac
++ ;;
++
++ bsdi[45]*)
++ export_dynamic_flag_spec=-rdynamic
++ ;;
++
++ cygwin* | mingw* | pw32* | cegcc*)
++ # When not using gcc, we currently assume that we are using
++ # Microsoft Visual C++.
++ # hardcode_libdir_flag_spec is actually meaningless, as there is
++ # no search path for DLLs.
++ hardcode_libdir_flag_spec=' '
++ allow_undefined_flag=unsupported
++ # Tell ltmain to make .lib files, not .a files.
++ libext=lib
++ # Tell ltmain to make .dll files, not .so files.
++ shrext_cmds=".dll"
++ # FIXME: Setting linknames here is a bad hack.
++ archive_cmds='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames='
++ # The linker will automatically build a .lib file if we build a DLL.
++ old_archive_from_new_cmds='true'
++ # FIXME: Should let the user specify the lib program.
++ old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs'
++ fix_srcfile_path='`cygpath -w "$srcfile"`'
++ enable_shared_with_static_runtimes=yes
++ ;;
++
++ darwin* | rhapsody*)
++
++
++ archive_cmds_need_lc=no
++ hardcode_direct=no
++ hardcode_automatic=yes
++ hardcode_shlibpath_var=unsupported
++ whole_archive_flag_spec=''
++ link_all_deplibs=yes
++ allow_undefined_flag="$_lt_dar_allow_undefined"
++ case $cc_basename in
++ ifort*) _lt_dar_can_shared=yes ;;
++ *) _lt_dar_can_shared=$GCC ;;
++ esac
++ if test "$_lt_dar_can_shared" = "yes"; then
++ output_verbose_link_cmd=echo
++ archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
++ module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
++ archive_expsym_cmds="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
++ module_expsym_cmds="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
++
++ else
++ ld_shlibs=no
++ fi
++
++ ;;
++
++ dgux*)
++ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
++ hardcode_libdir_flag_spec='-L$libdir'
++ hardcode_shlibpath_var=no
++ ;;
++
++ freebsd1*)
++ ld_shlibs=no
++ ;;
++
++ # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
++ # support. Future versions do this automatically, but an explicit c++rt0.o
++ # does not break anything, and helps significantly (at the cost of a little
++ # extra space).
++ freebsd2.2*)
++ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
++ hardcode_libdir_flag_spec='-R$libdir'
++ hardcode_direct=yes
++ hardcode_shlibpath_var=no
++ ;;
++
++ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
++ freebsd2*)
++ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
++ hardcode_direct=yes
++ hardcode_minus_L=yes
++ hardcode_shlibpath_var=no
++ ;;
++
++ # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
++ freebsd* | dragonfly*)
++ archive_cmds='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
++ hardcode_libdir_flag_spec='-R$libdir'
++ hardcode_direct=yes
++ hardcode_shlibpath_var=no
++ ;;
++
++ hpux9*)
++ if test "$GCC" = yes; then
++ archive_cmds='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
++ else
++ archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
++ fi
++ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
++ hardcode_libdir_separator=:
++ hardcode_direct=yes
++
++ # hardcode_minus_L: Not really in the search PATH,
++ # but as the default location of the library.
++ hardcode_minus_L=yes
++ export_dynamic_flag_spec='${wl}-E'
++ ;;
++
++ hpux10*)
++ if test "$GCC" = yes -a "$with_gnu_ld" = no; then
++ archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
++ else
++ archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
++ fi
++ if test "$with_gnu_ld" = no; then
++ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
++ hardcode_libdir_flag_spec_ld='+b $libdir'
++ hardcode_libdir_separator=:
++ hardcode_direct=yes
++ hardcode_direct_absolute=yes
++ export_dynamic_flag_spec='${wl}-E'
++ # hardcode_minus_L: Not really in the search PATH,
++ # but as the default location of the library.
++ hardcode_minus_L=yes
++ fi
++ ;;
++
++ hpux11*)
++ if test "$GCC" = yes -a "$with_gnu_ld" = no; then
++ case $host_cpu in
++ hppa*64*)
++ archive_cmds='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
++ ;;
++ ia64*)
++ archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
++ ;;
++ *)
++ archive_cmds='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
++ ;;
++ esac
++ else
++ case $host_cpu in
++ hppa*64*)
++ archive_cmds='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
++ ;;
++ ia64*)
++ archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
++ ;;
++ *)
++ archive_cmds='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
++ ;;
++ esac
++ fi
++ if test "$with_gnu_ld" = no; then
++ hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
++ hardcode_libdir_separator=:
++
++ case $host_cpu in
++ hppa*64*|ia64*)
++ hardcode_direct=no
++ hardcode_shlibpath_var=no
++ ;;
++ *)
++ hardcode_direct=yes
++ hardcode_direct_absolute=yes
++ export_dynamic_flag_spec='${wl}-E'
++
++ # hardcode_minus_L: Not really in the search PATH,
++ # but as the default location of the library.
++ hardcode_minus_L=yes
++ ;;
++ esac
++ fi
++ ;;
++
++ irix5* | irix6* | nonstopux*)
++ if test "$GCC" = yes; then
++ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
++ # Try to use the -exported_symbol ld option, if it does not
++ # work, assume that -exports_file does not work either and
++ # implicitly export all symbols.
++ save_LDFLAGS="$LDFLAGS"
++ LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++int foo(void) {}
++_ACEOF
++if ac_fn_c_try_link "$LINENO"; then :
++ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
++
++fi
++rm -f core conftest.err conftest.$ac_objext \
++ conftest$ac_exeext conftest.$ac_ext
++ LDFLAGS="$save_LDFLAGS"
++ else
++ archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
++ archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
++ fi
++ archive_cmds_need_lc='no'
++ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
++ hardcode_libdir_separator=:
++ inherit_rpath=yes
++ link_all_deplibs=yes
++ ;;
++
++ netbsd* | netbsdelf*-gnu)
++ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
++ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
++ else
++ archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF
++ fi
++ hardcode_libdir_flag_spec='-R$libdir'
++ hardcode_direct=yes
++ hardcode_shlibpath_var=no
++ ;;
++
++ newsos6)
++ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
++ hardcode_direct=yes
++ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
++ hardcode_libdir_separator=:
++ hardcode_shlibpath_var=no
++ ;;
++
++ *nto* | *qnx*)
++ ;;
++
++ openbsd*)
++ if test -f /usr/libexec/ld.so; then
++ hardcode_direct=yes
++ hardcode_shlibpath_var=no
++ hardcode_direct_absolute=yes
++ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
++ archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
++ archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
++ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
++ export_dynamic_flag_spec='${wl}-E'
++ else
++ case $host_os in
++ openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
++ archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
++ hardcode_libdir_flag_spec='-R$libdir'
++ ;;
++ *)
++ archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
++ hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
++ ;;
++ esac
++ fi
++ else
++ ld_shlibs=no
++ fi
++ ;;
++
++ os2*)
++ hardcode_libdir_flag_spec='-L$libdir'
++ hardcode_minus_L=yes
++ allow_undefined_flag=unsupported
++ archive_cmds='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
++ old_archive_from_new_cmds='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
++ ;;
++
++ osf3*)
++ if test "$GCC" = yes; then
++ allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
++ archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
++ else
++ allow_undefined_flag=' -expect_unresolved \*'
++ archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
++ fi
++ archive_cmds_need_lc='no'
++ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
++ hardcode_libdir_separator=:
++ ;;
++
++ osf4* | osf5*) # as osf3* with the addition of -msym flag
++ if test "$GCC" = yes; then
++ allow_undefined_flag=' ${wl}-expect_unresolved ${wl}\*'
++ archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
++ hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
++ else
++ allow_undefined_flag=' -expect_unresolved \*'
++ archive_cmds='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
++ archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
++ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
++
++ # Both c and cxx compiler support -rpath directly
++ hardcode_libdir_flag_spec='-rpath $libdir'
++ fi
++ archive_cmds_need_lc='no'
++ hardcode_libdir_separator=:
++ ;;
++
++ solaris*)
++ no_undefined_flag=' -z defs'
++ if test "$GCC" = yes; then
++ wlarc='${wl}'
++ archive_cmds='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
++ archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
++ $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
++ else
++ case `$CC -V 2>&1` in
++ *"Compilers 5.0"*)
++ wlarc=''
++ archive_cmds='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
++ archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
++ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
++ ;;
++ *)
++ wlarc='${wl}'
++ archive_cmds='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags'
++ archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
++ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
++ ;;
++ esac
++ fi
++ hardcode_libdir_flag_spec='-R$libdir'
++ hardcode_shlibpath_var=no
++ case $host_os in
++ solaris2.[0-5] | solaris2.[0-5].*) ;;
++ *)
++ # The compiler driver will combine and reorder linker options,
++ # but understands `-z linker_flag'. GCC discards it without `$wl',
++ # but is careful enough not to reorder.
++ # Supported since Solaris 2.6 (maybe 2.5.1?)
++ if test "$GCC" = yes; then
++ whole_archive_flag_spec='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
++ else
++ whole_archive_flag_spec='-z allextract$convenience -z defaultextract'
++ fi
++ ;;
++ esac
++ link_all_deplibs=yes
++ ;;
++
++ sunos4*)
++ if test "x$host_vendor" = xsequent; then
++ # Use $CC to link under sequent, because it throws in some extra .o
++ # files that make .init and .fini sections work.
++ archive_cmds='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
++ else
++ archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
++ fi
++ hardcode_libdir_flag_spec='-L$libdir'
++ hardcode_direct=yes
++ hardcode_minus_L=yes
++ hardcode_shlibpath_var=no
++ ;;
++
++ sysv4)
++ case $host_vendor in
++ sni)
++ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
++ hardcode_direct=yes # is this really true???
++ ;;
++ siemens)
++ ## LD is ld it makes a PLAMLIB
++ ## CC just makes a GrossModule.
++ archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags'
++ reload_cmds='$CC -r -o $output$reload_objs'
++ hardcode_direct=no
++ ;;
++ motorola)
++ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
++ hardcode_direct=no #Motorola manual says yes, but my tests say they lie
++ ;;
++ esac
++ runpath_var='LD_RUN_PATH'
++ hardcode_shlibpath_var=no
++ ;;
++
++ sysv4.3*)
++ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
++ hardcode_shlibpath_var=no
++ export_dynamic_flag_spec='-Bexport'
++ ;;
++
++ sysv4*MP*)
++ if test -d /usr/nec; then
++ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
++ hardcode_shlibpath_var=no
++ runpath_var=LD_RUN_PATH
++ hardcode_runpath_var=yes
++ ld_shlibs=yes
++ fi
++ ;;
++
++ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
++ no_undefined_flag='${wl}-z,text'
++ archive_cmds_need_lc=no
++ hardcode_shlibpath_var=no
++ runpath_var='LD_RUN_PATH'
++
++ if test "$GCC" = yes; then
++ archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
++ archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
++ else
++ archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
++ archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
++ fi
++ ;;
++
++ sysv5* | sco3.2v5* | sco5v6*)
++ # Note: We can NOT use -z defs as we might desire, because we do not
++ # link with -lc, and that would cause any symbols used from libc to
++ # always be unresolved, which means just about no library would
++ # ever link correctly. If we're not using GNU ld we use -z text
++ # though, which does catch some bad symbols but isn't as heavy-handed
++ # as -z defs.
++ no_undefined_flag='${wl}-z,text'
++ allow_undefined_flag='${wl}-z,nodefs'
++ archive_cmds_need_lc=no
++ hardcode_shlibpath_var=no
++ hardcode_libdir_flag_spec='${wl}-R,$libdir'
++ hardcode_libdir_separator=':'
++ link_all_deplibs=yes
++ export_dynamic_flag_spec='${wl}-Bexport'
++ runpath_var='LD_RUN_PATH'
++
++ if test "$GCC" = yes; then
++ archive_cmds='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
++ archive_expsym_cmds='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
++ else
++ archive_cmds='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
++ archive_expsym_cmds='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
++ fi
++ ;;
++
++ uts4*)
++ archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
++ hardcode_libdir_flag_spec='-L$libdir'
++ hardcode_shlibpath_var=no
++ ;;
++
++ *)
++ ld_shlibs=no
++ ;;
++ esac
++
++ if test x$host_vendor = xsni; then
++ case $host in
++ sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
++ export_dynamic_flag_spec='${wl}-Blargedynsym'
++ ;;
++ esac
++ fi
++ fi
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5
++$as_echo "$ld_shlibs" >&6; }
++test "$ld_shlibs" = no && can_build_shared=no
++
++with_gnu_ld=$with_gnu_ld
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++#
++# Do we need to explicitly link libc?
++#
++case "x$archive_cmds_need_lc" in
++x|xyes)
++ # Assume -lc should be added
++ archive_cmds_need_lc=yes
++
++ if test "$enable_shared" = yes && test "$GCC" = yes; then
++ case $archive_cmds in
++ *'~'*)
++ # FIXME: we may have to deal with multi-command sequences.
++ ;;
++ '$CC '*)
++ # Test whether the compiler implicitly links with -lc since on some
++ # systems, -lgcc has to come before -lc. If gcc already passes -lc
++ # to ld, don't add -lc before -lgcc.
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5
++$as_echo_n "checking whether -lc should be explicitly linked in... " >&6; }
++ $RM conftest*
++ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
++
++ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
++ (eval $ac_compile) 2>&5
++ ac_status=$?
++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++ test $ac_status = 0; } 2>conftest.err; then
++ soname=conftest
++ lib=conftest
++ libobjs=conftest.$ac_objext
++ deplibs=
++ wl=$lt_prog_compiler_wl
++ pic_flag=$lt_prog_compiler_pic
++ compiler_flags=-v
++ linker_flags=-v
++ verstring=
++ output_objdir=.
++ libname=conftest
++ lt_save_allow_undefined_flag=$allow_undefined_flag
++ allow_undefined_flag=
++ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5
++ (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5
++ ac_status=$?
++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++ test $ac_status = 0; }
++ then
++ archive_cmds_need_lc=no
++ else
++ archive_cmds_need_lc=yes
++ fi
++ allow_undefined_flag=$lt_save_allow_undefined_flag
++ else
++ cat conftest.err 1>&5
++ fi
++ $RM conftest*
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $archive_cmds_need_lc" >&5
++$as_echo "$archive_cmds_need_lc" >&6; }
++ ;;
++ esac
++ fi
++ ;;
++esac
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5
++$as_echo_n "checking dynamic linker characteristics... " >&6; }
++
++if test "$GCC" = yes; then
++ case $host_os in
++ darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
++ *) lt_awk_arg="/^libraries:/" ;;
++ esac
++ lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"`
++ if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then
++ # if the path contains ";" then we assume it to be the separator
++ # otherwise default to the standard path separator (i.e. ":") - it is
++ # assumed that no part of a normal pathname contains ";" but that should
++ # okay in the real world where ";" in dirpaths is itself problematic.
++ lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'`
++ else
++ lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
++ fi
++ # Ok, now we have the path, separated by spaces, we can step through it
++ # and add multilib dir if necessary.
++ lt_tmp_lt_search_path_spec=
++ lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
++ for lt_sys_path in $lt_search_path_spec; do
++ if test -d "$lt_sys_path/$lt_multi_os_dir"; then
++ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir"
++ else
++ test -d "$lt_sys_path" && \
++ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
++ fi
++ done
++ lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk '
++BEGIN {RS=" "; FS="/|\n";} {
++ lt_foo="";
++ lt_count=0;
++ for (lt_i = NF; lt_i > 0; lt_i--) {
++ if ($lt_i != "" && $lt_i != ".") {
++ if ($lt_i == "..") {
++ lt_count++;
++ } else {
++ if (lt_count == 0) {
++ lt_foo="/" $lt_i lt_foo;
++ } else {
++ lt_count--;
++ }
++ }
++ }
++ }
++ if (lt_foo != "") { lt_freq[lt_foo]++; }
++ if (lt_freq[lt_foo] == 1) { print lt_foo; }
++}'`
++ sys_lib_search_path_spec=`$ECHO $lt_search_path_spec`
++else
++ sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
++fi
++library_names_spec=
++libname_spec='lib$name'
++soname_spec=
++shrext_cmds=".so"
++postinstall_cmds=
++postuninstall_cmds=
++finish_cmds=
++finish_eval=
++shlibpath_var=
++shlibpath_overrides_runpath=unknown
++version_type=none
++dynamic_linker="$host_os ld.so"
++sys_lib_dlsearch_path_spec="/lib /usr/lib"
++need_lib_prefix=unknown
++hardcode_into_libs=no
++
++# when you set need_version to no, make sure it does not cause -set_version
++# flags to be left without arguments
++need_version=unknown
++
++case $host_os in
++aix3*)
++ version_type=linux
++ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
++ shlibpath_var=LIBPATH
++
++ # AIX 3 has no versioning support, so we append a major version to the name.
++ soname_spec='${libname}${release}${shared_ext}$major'
++ ;;
++
++aix[4-9]*)
++ version_type=linux
++ need_lib_prefix=no
++ need_version=no
++ hardcode_into_libs=yes
++ if test "$host_cpu" = ia64; then
++ # AIX 5 supports IA64
++ library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
++ shlibpath_var=LD_LIBRARY_PATH
++ else
++ # With GCC up to 2.95.x, collect2 would create an import file
++ # for dependence libraries. The import file would start with
++ # the line `#! .'. This would cause the generated library to
++ # depend on `.', always an invalid library. This was fixed in
++ # development snapshots of GCC prior to 3.0.
++ case $host_os in
++ aix4 | aix4.[01] | aix4.[01].*)
++ if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
++ echo ' yes '
++ echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
++ :
++ else
++ can_build_shared=no
++ fi
++ ;;
++ esac
++ # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
++ # soname into executable. Probably we can add versioning support to
++ # collect2, so additional links can be useful in future.
++ if test "$aix_use_runtimelinking" = yes; then
++ # If using run time linking (on AIX 4.2 or later) use lib<name>.so
++ # instead of lib<name>.a to let people know that these are not
++ # typical AIX shared libraries.
++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
++ else
++ # We preserve .a as extension for shared libraries through AIX4.2
++ # and later when we are not doing run time linking.
++ library_names_spec='${libname}${release}.a $libname.a'
++ soname_spec='${libname}${release}${shared_ext}$major'
++ fi
++ shlibpath_var=LIBPATH
++ fi
++ ;;
++
++amigaos*)
++ case $host_cpu in
++ powerpc)
++ # Since July 2007 AmigaOS4 officially supports .so libraries.
++ # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
++ ;;
++ m68k)
++ library_names_spec='$libname.ixlibrary $libname.a'
++ # Create ${libname}_ixlibrary.a entries in /sys/libs.
++ finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
++ ;;
++ esac
++ ;;
++
++beos*)
++ library_names_spec='${libname}${shared_ext}'
++ dynamic_linker="$host_os ld.so"
++ shlibpath_var=LIBRARY_PATH
++ ;;
++
++bsdi[45]*)
++ version_type=linux
++ need_version=no
++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
++ soname_spec='${libname}${release}${shared_ext}$major'
++ finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
++ shlibpath_var=LD_LIBRARY_PATH
++ sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
++ sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
++ # the default ld.so.conf also contains /usr/contrib/lib and
++ # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
++ # libtool to hard-code these into programs
++ ;;
++
++cygwin* | mingw* | pw32* | cegcc*)
++ version_type=windows
++ shrext_cmds=".dll"
++ need_version=no
++ need_lib_prefix=no
++
++ case $GCC,$host_os in
++ yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
++ library_names_spec='$libname.dll.a'
++ # DLL is installed to $(libdir)/../bin by postinstall_cmds
++ postinstall_cmds='base_file=`basename \${file}`~
++ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
++ dldir=$destdir/`dirname \$dlpath`~
++ test -d \$dldir || mkdir -p \$dldir~
++ $install_prog $dir/$dlname \$dldir/$dlname~
++ chmod a+x \$dldir/$dlname~
++ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
++ eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
++ fi'
++ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
++ dlpath=$dir/\$dldll~
++ $RM \$dlpath'
++ shlibpath_overrides_runpath=yes
++
++ case $host_os in
++ cygwin*)
++ # Cygwin DLLs use 'cyg' prefix rather than 'lib'
++ soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
++ sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
++ ;;
++ mingw* | cegcc*)
++ # MinGW DLLs use traditional 'lib' prefix
++ soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
++ sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
++ if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then
++ # It is most probably a Windows format PATH printed by
++ # mingw gcc, but we are running on Cygwin. Gcc prints its search
++ # path with ; separators, and with drive letters. We can handle the
++ # drive letters (cygwin fileutils understands them), so leave them,
++ # especially as we might pass files found there to a mingw objdump,
++ # which wouldn't understand a cygwinified path. Ahh.
++ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
++ else
++ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
++ fi
++ ;;
++ pw32*)
++ # pw32 DLLs use 'pw' prefix rather than 'lib'
++ library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}'
++ ;;
++ esac
++ ;;
++
++ *)
++ library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib'
++ ;;
++ esac
++ dynamic_linker='Win32 ld.exe'
++ # FIXME: first we should search . and the directory the executable is in
++ shlibpath_var=PATH
++ ;;
++
++darwin* | rhapsody*)
++ dynamic_linker="$host_os dyld"
++ version_type=darwin
++ need_lib_prefix=no
++ need_version=no
++ library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
++ soname_spec='${libname}${release}${major}$shared_ext'
++ shlibpath_overrides_runpath=yes
++ shlibpath_var=DYLD_LIBRARY_PATH
++ shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
++
++ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"
++ sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
++ ;;
++
++dgux*)
++ version_type=linux
++ need_lib_prefix=no
++ need_version=no
++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
++ soname_spec='${libname}${release}${shared_ext}$major'
++ shlibpath_var=LD_LIBRARY_PATH
++ ;;
++
++freebsd1*)
++ dynamic_linker=no
++ ;;
++
++freebsd* | dragonfly*)
++ # DragonFly does not have aout. When/if they implement a new
++ # versioning mechanism, adjust this.
++ if test -x /usr/bin/objformat; then
++ objformat=`/usr/bin/objformat`
++ else
++ case $host_os in
++ freebsd[123]*) objformat=aout ;;
++ *) objformat=elf ;;
++ esac
++ fi
++ version_type=freebsd-$objformat
++ case $version_type in
++ freebsd-elf*)
++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
++ need_version=no
++ need_lib_prefix=no
++ ;;
++ freebsd-*)
++ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
++ need_version=yes
++ ;;
++ esac
++ shlibpath_var=LD_LIBRARY_PATH
++ case $host_os in
++ freebsd2*)
++ shlibpath_overrides_runpath=yes
++ ;;
++ freebsd3.[01]* | freebsdelf3.[01]*)
++ shlibpath_overrides_runpath=yes
++ hardcode_into_libs=yes
++ ;;
++ freebsd3.[2-9]* | freebsdelf3.[2-9]* | \
++ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1)
++ shlibpath_overrides_runpath=no
++ hardcode_into_libs=yes
++ ;;
++ *) # from 4.6 on, and DragonFly
++ shlibpath_overrides_runpath=yes
++ hardcode_into_libs=yes
++ ;;
++ esac
++ ;;
++
++gnu*)
++ version_type=linux
++ need_lib_prefix=no
++ need_version=no
++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
++ soname_spec='${libname}${release}${shared_ext}$major'
++ shlibpath_var=LD_LIBRARY_PATH
++ hardcode_into_libs=yes
++ ;;
++
++hpux9* | hpux10* | hpux11*)
++ # Give a soname corresponding to the major version so that dld.sl refuses to
++ # link against other versions.
++ version_type=sunos
++ need_lib_prefix=no
++ need_version=no
++ case $host_cpu in
++ ia64*)
++ shrext_cmds='.so'
++ hardcode_into_libs=yes
++ dynamic_linker="$host_os dld.so"
++ shlibpath_var=LD_LIBRARY_PATH
++ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
++ soname_spec='${libname}${release}${shared_ext}$major'
++ if test "X$HPUX_IA64_MODE" = X32; then
++ sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
++ else
++ sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
++ fi
++ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
++ ;;
++ hppa*64*)
++ shrext_cmds='.sl'
++ hardcode_into_libs=yes
++ dynamic_linker="$host_os dld.sl"
++ shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
++ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
++ soname_spec='${libname}${release}${shared_ext}$major'
++ sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
++ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
++ ;;
++ *)
++ shrext_cmds='.sl'
++ dynamic_linker="$host_os dld.sl"
++ shlibpath_var=SHLIB_PATH
++ shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
++ soname_spec='${libname}${release}${shared_ext}$major'
++ ;;
++ esac
++ # HP-UX runs *really* slowly unless shared libraries are mode 555.
++ postinstall_cmds='chmod 555 $lib'
++ ;;
++
++interix[3-9]*)
++ version_type=linux
++ need_lib_prefix=no
++ need_version=no
++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
++ soname_spec='${libname}${release}${shared_ext}$major'
++ dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
++ shlibpath_var=LD_LIBRARY_PATH
++ shlibpath_overrides_runpath=no
++ hardcode_into_libs=yes
++ ;;
++
++irix5* | irix6* | nonstopux*)
++ case $host_os in
++ nonstopux*) version_type=nonstopux ;;
++ *)
++ if test "$lt_cv_prog_gnu_ld" = yes; then
++ version_type=linux
++ else
++ version_type=irix
++ fi ;;
++ esac
++ need_lib_prefix=no
++ need_version=no
++ soname_spec='${libname}${release}${shared_ext}$major'
++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
++ case $host_os in
++ irix5* | nonstopux*)
++ libsuff= shlibsuff=
++ ;;
++ *)
++ case $LD in # libtool.m4 will add one of these switches to LD
++ *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
++ libsuff= shlibsuff= libmagic=32-bit;;
++ *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
++ libsuff=32 shlibsuff=N32 libmagic=N32;;
++ *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
++ libsuff=64 shlibsuff=64 libmagic=64-bit;;
++ *) libsuff= shlibsuff= libmagic=never-match;;
++ esac
++ ;;
++ esac
++ shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
++ shlibpath_overrides_runpath=no
++ sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
++ sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
++ hardcode_into_libs=yes
++ ;;
++
++# No shared lib support for Linux oldld, aout, or coff.
++linux*oldld* | linux*aout* | linux*coff*)
++ dynamic_linker=no
++ ;;
++
++# This must be Linux ELF.
++linux* | k*bsd*-gnu)
++ version_type=linux
++ need_lib_prefix=no
++ need_version=no
++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
++ soname_spec='${libname}${release}${shared_ext}$major'
++ finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
++ shlibpath_var=LD_LIBRARY_PATH
++ shlibpath_overrides_runpath=no
++ # Some binutils ld are patched to set DT_RUNPATH
++ save_LDFLAGS=$LDFLAGS
++ save_libdir=$libdir
++ eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \
++ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\""
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++
++int
++main ()
++{
++
++ ;
++ return 0;
++}
++_ACEOF
++if ac_fn_c_try_link "$LINENO"; then :
++ if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null; then :
++ shlibpath_overrides_runpath=yes
++fi
++fi
++rm -f core conftest.err conftest.$ac_objext \
++ conftest$ac_exeext conftest.$ac_ext
++ LDFLAGS=$save_LDFLAGS
++ libdir=$save_libdir
++
++ # This implies no fast_install, which is unacceptable.
++ # Some rework will be needed to allow for fast_install
++ # before this can be enabled.
++ hardcode_into_libs=yes
++
++ # Append ld.so.conf contents to the search path
++ if test -f /etc/ld.so.conf; then
++ lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
++ sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
++ fi
++
++ # We used to test for /lib/ld.so.1 and disable shared libraries on
++ # powerpc, because MkLinux only supported shared libraries with the
++ # GNU dynamic linker. Since this was broken with cross compilers,
++ # most powerpc-linux boxes support dynamic linking these days and
++ # people can always --disable-shared, the test was removed, and we
++ # assume the GNU/Linux dynamic linker is in use.
++ dynamic_linker='GNU/Linux ld.so'
++ ;;
++
++netbsdelf*-gnu)
++ version_type=linux
++ need_lib_prefix=no
++ need_version=no
++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
++ soname_spec='${libname}${release}${shared_ext}$major'
++ shlibpath_var=LD_LIBRARY_PATH
++ shlibpath_overrides_runpath=no
++ hardcode_into_libs=yes
++ dynamic_linker='NetBSD ld.elf_so'
++ ;;
++
++netbsd*)
++ version_type=sunos
++ need_lib_prefix=no
++ need_version=no
++ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
++ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
++ dynamic_linker='NetBSD (a.out) ld.so'
++ else
++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
++ soname_spec='${libname}${release}${shared_ext}$major'
++ dynamic_linker='NetBSD ld.elf_so'
++ fi
++ shlibpath_var=LD_LIBRARY_PATH
++ shlibpath_overrides_runpath=yes
++ hardcode_into_libs=yes
++ ;;
++
++newsos6)
++ version_type=linux
++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
++ shlibpath_var=LD_LIBRARY_PATH
++ shlibpath_overrides_runpath=yes
++ ;;
++
++*nto* | *qnx*)
++ version_type=qnx
++ need_lib_prefix=no
++ need_version=no
++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
++ soname_spec='${libname}${release}${shared_ext}$major'
++ shlibpath_var=LD_LIBRARY_PATH
++ shlibpath_overrides_runpath=no
++ hardcode_into_libs=yes
++ dynamic_linker='ldqnx.so'
++ ;;
++
++openbsd*)
++ version_type=sunos
++ sys_lib_dlsearch_path_spec="/usr/lib"
++ need_lib_prefix=no
++ # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
++ case $host_os in
++ openbsd3.3 | openbsd3.3.*) need_version=yes ;;
++ *) need_version=no ;;
++ esac
++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
++ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
++ shlibpath_var=LD_LIBRARY_PATH
++ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
++ case $host_os in
++ openbsd2.[89] | openbsd2.[89].*)
++ shlibpath_overrides_runpath=no
++ ;;
++ *)
++ shlibpath_overrides_runpath=yes
++ ;;
++ esac
++ else
++ shlibpath_overrides_runpath=yes
++ fi
++ ;;
++
++os2*)
++ libname_spec='$name'
++ shrext_cmds=".dll"
++ need_lib_prefix=no
++ library_names_spec='$libname${shared_ext} $libname.a'
++ dynamic_linker='OS/2 ld.exe'
++ shlibpath_var=LIBPATH
++ ;;
++
++osf3* | osf4* | osf5*)
++ version_type=osf
++ need_lib_prefix=no
++ need_version=no
++ soname_spec='${libname}${release}${shared_ext}$major'
++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
++ shlibpath_var=LD_LIBRARY_PATH
++ sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
++ sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
++ ;;
++
++rdos*)
++ dynamic_linker=no
++ ;;
++
++solaris*)
++ version_type=linux
++ need_lib_prefix=no
++ need_version=no
++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
++ soname_spec='${libname}${release}${shared_ext}$major'
++ shlibpath_var=LD_LIBRARY_PATH
++ shlibpath_overrides_runpath=yes
++ hardcode_into_libs=yes
++ # ldd complains unless libraries are executable
++ postinstall_cmds='chmod +x $lib'
++ ;;
++
++sunos4*)
++ version_type=sunos
++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
++ finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
++ shlibpath_var=LD_LIBRARY_PATH
++ shlibpath_overrides_runpath=yes
++ if test "$with_gnu_ld" = yes; then
++ need_lib_prefix=no
++ fi
++ need_version=yes
++ ;;
++
++sysv4 | sysv4.3*)
++ version_type=linux
++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
++ soname_spec='${libname}${release}${shared_ext}$major'
++ shlibpath_var=LD_LIBRARY_PATH
++ case $host_vendor in
++ sni)
++ shlibpath_overrides_runpath=no
++ need_lib_prefix=no
++ runpath_var=LD_RUN_PATH
++ ;;
++ siemens)
++ need_lib_prefix=no
++ ;;
++ motorola)
++ need_lib_prefix=no
++ need_version=no
++ shlibpath_overrides_runpath=no
++ sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
++ ;;
++ esac
++ ;;
++
++sysv4*MP*)
++ if test -d /usr/nec ;then
++ version_type=linux
++ library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
++ soname_spec='$libname${shared_ext}.$major'
++ shlibpath_var=LD_LIBRARY_PATH
++ fi
++ ;;
++
++sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
++ version_type=freebsd-elf
++ need_lib_prefix=no
++ need_version=no
++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
++ soname_spec='${libname}${release}${shared_ext}$major'
++ shlibpath_var=LD_LIBRARY_PATH
++ shlibpath_overrides_runpath=yes
++ hardcode_into_libs=yes
++ if test "$with_gnu_ld" = yes; then
++ sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
++ else
++ sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
++ case $host_os in
++ sco3.2v5*)
++ sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
++ ;;
++ esac
++ fi
++ sys_lib_dlsearch_path_spec='/usr/lib'
++ ;;
++
++tpf*)
++ # TPF is a cross-target only. Preferred cross-host = GNU/Linux.
++ version_type=linux
++ need_lib_prefix=no
++ need_version=no
++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
++ shlibpath_var=LD_LIBRARY_PATH
++ shlibpath_overrides_runpath=no
++ hardcode_into_libs=yes
++ ;;
++
++uts4*)
++ version_type=linux
++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
++ soname_spec='${libname}${release}${shared_ext}$major'
++ shlibpath_var=LD_LIBRARY_PATH
++ ;;
++
++*)
++ dynamic_linker=no
++ ;;
++esac
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5
++$as_echo "$dynamic_linker" >&6; }
++test "$dynamic_linker" = no && can_build_shared=no
++
++variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
++if test "$GCC" = yes; then
++ variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
++fi
++
++if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
++ sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
++fi
++if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
++ sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
++fi
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5
++$as_echo_n "checking how to hardcode library paths into programs... " >&6; }
++hardcode_action=
++if test -n "$hardcode_libdir_flag_spec" ||
++ test -n "$runpath_var" ||
++ test "X$hardcode_automatic" = "Xyes" ; then
++
++ # We can hardcode non-existent directories.
++ if test "$hardcode_direct" != no &&
++ # If the only mechanism to avoid hardcoding is shlibpath_var, we
++ # have to relink, otherwise we might link with an installed library
++ # when we should be linking with a yet-to-be-installed one
++ ## test "$_LT_TAGVAR(hardcode_shlibpath_var, )" != no &&
++ test "$hardcode_minus_L" != no; then
++ # Linking always hardcodes the temporary library directory.
++ hardcode_action=relink
++ else
++ # We can link without hardcoding, and we can hardcode nonexisting dirs.
++ hardcode_action=immediate
++ fi
++else
++ # We cannot hardcode anything, or else we can only hardcode existing
++ # directories.
++ hardcode_action=unsupported
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5
++$as_echo "$hardcode_action" >&6; }
++
++if test "$hardcode_action" = relink ||
++ test "$inherit_rpath" = yes; then
++ # Fast installation is not supported
++ enable_fast_install=no
++elif test "$shlibpath_overrides_runpath" = yes ||
++ test "$enable_shared" = no; then
++ # Fast installation is not necessary
++ enable_fast_install=needless
++fi
++
++
++
++
++
++
++ if test "x$enable_dlopen" != xyes; then
++ enable_dlopen=unknown
++ enable_dlopen_self=unknown
++ enable_dlopen_self_static=unknown
++else
++ lt_cv_dlopen=no
++ lt_cv_dlopen_libs=
++
++ case $host_os in
++ beos*)
++ lt_cv_dlopen="load_add_on"
++ lt_cv_dlopen_libs=
++ lt_cv_dlopen_self=yes
++ ;;
++
++ mingw* | pw32* | cegcc*)
++ lt_cv_dlopen="LoadLibrary"
++ lt_cv_dlopen_libs=
++ ;;
++
++ cygwin*)
++ lt_cv_dlopen="dlopen"
++ lt_cv_dlopen_libs=
++ ;;
++
++ darwin*)
++ # if libdl is installed we need to link against it
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
++$as_echo_n "checking for dlopen in -ldl... " >&6; }
++if test "${ac_cv_lib_dl_dlopen+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ ac_check_lib_save_LIBS=$LIBS
++LIBS="-ldl $LIBS"
++cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++
++/* Override any GCC internal prototype to avoid an error.
++ Use char because int might match the return type of a GCC
++ builtin and then its argument prototype would still apply. */
++#ifdef __cplusplus
++extern "C"
++#endif
++char dlopen ();
++int
++main ()
++{
++return dlopen ();
++ ;
++ return 0;
++}
++_ACEOF
++if ac_fn_c_try_link "$LINENO"; then :
++ ac_cv_lib_dl_dlopen=yes
++else
++ ac_cv_lib_dl_dlopen=no
++fi
++rm -f core conftest.err conftest.$ac_objext \
++ conftest$ac_exeext conftest.$ac_ext
++LIBS=$ac_check_lib_save_LIBS
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
++$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
++if test "x$ac_cv_lib_dl_dlopen" = x""yes; then :
++ lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
++else
++
++ lt_cv_dlopen="dyld"
++ lt_cv_dlopen_libs=
++ lt_cv_dlopen_self=yes
++
++fi
++
++ ;;
++
++ *)
++ ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load"
++if test "x$ac_cv_func_shl_load" = x""yes; then :
++ lt_cv_dlopen="shl_load"
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shl_load in -ldld" >&5
++$as_echo_n "checking for shl_load in -ldld... " >&6; }
++if test "${ac_cv_lib_dld_shl_load+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ ac_check_lib_save_LIBS=$LIBS
++LIBS="-ldld $LIBS"
++cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++
++/* Override any GCC internal prototype to avoid an error.
++ Use char because int might match the return type of a GCC
++ builtin and then its argument prototype would still apply. */
++#ifdef __cplusplus
++extern "C"
++#endif
++char shl_load ();
++int
++main ()
++{
++return shl_load ();
++ ;
++ return 0;
++}
++_ACEOF
++if ac_fn_c_try_link "$LINENO"; then :
++ ac_cv_lib_dld_shl_load=yes
++else
++ ac_cv_lib_dld_shl_load=no
++fi
++rm -f core conftest.err conftest.$ac_objext \
++ conftest$ac_exeext conftest.$ac_ext
++LIBS=$ac_check_lib_save_LIBS
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_shl_load" >&5
++$as_echo "$ac_cv_lib_dld_shl_load" >&6; }
++if test "x$ac_cv_lib_dld_shl_load" = x""yes; then :
++ lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"
++else
++ ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen"
++if test "x$ac_cv_func_dlopen" = x""yes; then :
++ lt_cv_dlopen="dlopen"
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -ldl" >&5
++$as_echo_n "checking for dlopen in -ldl... " >&6; }
++if test "${ac_cv_lib_dl_dlopen+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ ac_check_lib_save_LIBS=$LIBS
++LIBS="-ldl $LIBS"
++cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++
++/* Override any GCC internal prototype to avoid an error.
++ Use char because int might match the return type of a GCC
++ builtin and then its argument prototype would still apply. */
++#ifdef __cplusplus
++extern "C"
++#endif
++char dlopen ();
++int
++main ()
++{
++return dlopen ();
++ ;
++ return 0;
++}
++_ACEOF
++if ac_fn_c_try_link "$LINENO"; then :
++ ac_cv_lib_dl_dlopen=yes
++else
++ ac_cv_lib_dl_dlopen=no
++fi
++rm -f core conftest.err conftest.$ac_objext \
++ conftest$ac_exeext conftest.$ac_ext
++LIBS=$ac_check_lib_save_LIBS
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dl_dlopen" >&5
++$as_echo "$ac_cv_lib_dl_dlopen" >&6; }
++if test "x$ac_cv_lib_dl_dlopen" = x""yes; then :
++ lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5
++$as_echo_n "checking for dlopen in -lsvld... " >&6; }
++if test "${ac_cv_lib_svld_dlopen+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ ac_check_lib_save_LIBS=$LIBS
++LIBS="-lsvld $LIBS"
++cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++
++/* Override any GCC internal prototype to avoid an error.
++ Use char because int might match the return type of a GCC
++ builtin and then its argument prototype would still apply. */
++#ifdef __cplusplus
++extern "C"
++#endif
++char dlopen ();
++int
++main ()
++{
++return dlopen ();
++ ;
++ return 0;
++}
++_ACEOF
++if ac_fn_c_try_link "$LINENO"; then :
++ ac_cv_lib_svld_dlopen=yes
++else
++ ac_cv_lib_svld_dlopen=no
++fi
++rm -f core conftest.err conftest.$ac_objext \
++ conftest$ac_exeext conftest.$ac_ext
++LIBS=$ac_check_lib_save_LIBS
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_svld_dlopen" >&5
++$as_echo "$ac_cv_lib_svld_dlopen" >&6; }
++if test "x$ac_cv_lib_svld_dlopen" = x""yes; then :
++ lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5
++$as_echo_n "checking for dld_link in -ldld... " >&6; }
++if test "${ac_cv_lib_dld_dld_link+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ ac_check_lib_save_LIBS=$LIBS
++LIBS="-ldld $LIBS"
++cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++
++/* Override any GCC internal prototype to avoid an error.
++ Use char because int might match the return type of a GCC
++ builtin and then its argument prototype would still apply. */
++#ifdef __cplusplus
++extern "C"
++#endif
++char dld_link ();
++int
++main ()
++{
++return dld_link ();
++ ;
++ return 0;
++}
++_ACEOF
++if ac_fn_c_try_link "$LINENO"; then :
++ ac_cv_lib_dld_dld_link=yes
++else
++ ac_cv_lib_dld_dld_link=no
++fi
++rm -f core conftest.err conftest.$ac_objext \
++ conftest$ac_exeext conftest.$ac_ext
++LIBS=$ac_check_lib_save_LIBS
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dld_dld_link" >&5
++$as_echo "$ac_cv_lib_dld_dld_link" >&6; }
++if test "x$ac_cv_lib_dld_dld_link" = x""yes; then :
++ lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"
++fi
++
++
++fi
++
++
++fi
++
++
++fi
++
++
++fi
++
++
++fi
++
++ ;;
++ esac
++
++ if test "x$lt_cv_dlopen" != xno; then
++ enable_dlopen=yes
++ else
++ enable_dlopen=no
++ fi
++
++ case $lt_cv_dlopen in
++ dlopen)
++ save_CPPFLAGS="$CPPFLAGS"
++ test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
++
++ save_LDFLAGS="$LDFLAGS"
++ wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
++
++ save_LIBS="$LIBS"
++ LIBS="$lt_cv_dlopen_libs $LIBS"
++
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5
++$as_echo_n "checking whether a program can dlopen itself... " >&6; }
++if test "${lt_cv_dlopen_self+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test "$cross_compiling" = yes; then :
++ lt_cv_dlopen_self=cross
++else
++ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
++ lt_status=$lt_dlunknown
++ cat > conftest.$ac_ext <<_LT_EOF
++#line 10369 "configure"
++#include "confdefs.h"
++
++#if HAVE_DLFCN_H
++#include <dlfcn.h>
++#endif
++
++#include <stdio.h>
++
++#ifdef RTLD_GLOBAL
++# define LT_DLGLOBAL RTLD_GLOBAL
++#else
++# ifdef DL_GLOBAL
++# define LT_DLGLOBAL DL_GLOBAL
++# else
++# define LT_DLGLOBAL 0
++# endif
++#endif
++
++/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
++ find out it does not work in some platform. */
++#ifndef LT_DLLAZY_OR_NOW
++# ifdef RTLD_LAZY
++# define LT_DLLAZY_OR_NOW RTLD_LAZY
++# else
++# ifdef DL_LAZY
++# define LT_DLLAZY_OR_NOW DL_LAZY
++# else
++# ifdef RTLD_NOW
++# define LT_DLLAZY_OR_NOW RTLD_NOW
++# else
++# ifdef DL_NOW
++# define LT_DLLAZY_OR_NOW DL_NOW
++# else
++# define LT_DLLAZY_OR_NOW 0
++# endif
++# endif
++# endif
++# endif
++#endif
++
++void fnord() { int i=42;}
++int main ()
++{
++ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
++ int status = $lt_dlunknown;
++
++ if (self)
++ {
++ if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
++ else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
++ /* dlclose (self); */
++ }
++ else
++ puts (dlerror ());
++
++ return status;
++}
++_LT_EOF
++ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
++ (eval $ac_link) 2>&5
++ ac_status=$?
++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++ test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then
++ (./conftest; exit; ) >&5 2>/dev/null
++ lt_status=$?
++ case x$lt_status in
++ x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;;
++ x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;;
++ x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;;
++ esac
++ else :
++ # compilation failed
++ lt_cv_dlopen_self=no
++ fi
++fi
++rm -fr conftest*
++
++
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5
++$as_echo "$lt_cv_dlopen_self" >&6; }
++
++ if test "x$lt_cv_dlopen_self" = xyes; then
++ wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5
++$as_echo_n "checking whether a statically linked program can dlopen itself... " >&6; }
++if test "${lt_cv_dlopen_self_static+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test "$cross_compiling" = yes; then :
++ lt_cv_dlopen_self_static=cross
++else
++ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
++ lt_status=$lt_dlunknown
++ cat > conftest.$ac_ext <<_LT_EOF
++#line 10465 "configure"
++#include "confdefs.h"
++
++#if HAVE_DLFCN_H
++#include <dlfcn.h>
++#endif
++
++#include <stdio.h>
++
++#ifdef RTLD_GLOBAL
++# define LT_DLGLOBAL RTLD_GLOBAL
++#else
++# ifdef DL_GLOBAL
++# define LT_DLGLOBAL DL_GLOBAL
++# else
++# define LT_DLGLOBAL 0
++# endif
++#endif
++
++/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
++ find out it does not work in some platform. */
++#ifndef LT_DLLAZY_OR_NOW
++# ifdef RTLD_LAZY
++# define LT_DLLAZY_OR_NOW RTLD_LAZY
++# else
++# ifdef DL_LAZY
++# define LT_DLLAZY_OR_NOW DL_LAZY
++# else
++# ifdef RTLD_NOW
++# define LT_DLLAZY_OR_NOW RTLD_NOW
++# else
++# ifdef DL_NOW
++# define LT_DLLAZY_OR_NOW DL_NOW
++# else
++# define LT_DLLAZY_OR_NOW 0
++# endif
++# endif
++# endif
++# endif
++#endif
++
++void fnord() { int i=42;}
++int main ()
++{
++ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
++ int status = $lt_dlunknown;
++
++ if (self)
++ {
++ if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
++ else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
++ /* dlclose (self); */
++ }
++ else
++ puts (dlerror ());
++
++ return status;
++}
++_LT_EOF
++ if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
++ (eval $ac_link) 2>&5
++ ac_status=$?
++ $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
++ test $ac_status = 0; } && test -s conftest${ac_exeext} 2>/dev/null; then
++ (./conftest; exit; ) >&5 2>/dev/null
++ lt_status=$?
++ case x$lt_status in
++ x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;;
++ x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;;
++ x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;;
++ esac
++ else :
++ # compilation failed
++ lt_cv_dlopen_self_static=no
++ fi
++fi
++rm -fr conftest*
++
++
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5
++$as_echo "$lt_cv_dlopen_self_static" >&6; }
++ fi
++
++ CPPFLAGS="$save_CPPFLAGS"
++ LDFLAGS="$save_LDFLAGS"
++ LIBS="$save_LIBS"
++ ;;
++ esac
++
++ case $lt_cv_dlopen_self in
++ yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
++ *) enable_dlopen_self=unknown ;;
++ esac
++
++ case $lt_cv_dlopen_self_static in
++ yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
++ *) enable_dlopen_self_static=unknown ;;
++ esac
++fi
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++
++striplib=
++old_striplib=
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5
++$as_echo_n "checking whether stripping libraries is possible... " >&6; }
++if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
++ test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
++ test -z "$striplib" && striplib="$STRIP --strip-unneeded"
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
++$as_echo "yes" >&6; }
++else
++# FIXME - insert some real tests, host_os isn't really good enough
++ case $host_os in
++ darwin*)
++ if test -n "$STRIP" ; then
++ striplib="$STRIP -x"
++ old_striplib="$STRIP -S"
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
++$as_echo "yes" >&6; }
++ else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++ fi
++ ;;
++ *)
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++ ;;
++ esac
++fi
++
++
++
++
++
++
++
++
++
++
++
++
++ # Report which library types will actually be built
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5
++$as_echo_n "checking if libtool supports shared libraries... " >&6; }
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5
++$as_echo "$can_build_shared" >&6; }
++
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5
++$as_echo_n "checking whether to build shared libraries... " >&6; }
++ test "$can_build_shared" = "no" && enable_shared=no
++
++ # On AIX, shared libraries and static libraries use the same namespace, and
++ # are all built from PIC.
++ case $host_os in
++ aix3*)
++ test "$enable_shared" = yes && enable_static=no
++ if test -n "$RANLIB"; then
++ archive_cmds="$archive_cmds~\$RANLIB \$lib"
++ postinstall_cmds='$RANLIB $lib'
++ fi
++ ;;
++
++ aix[4-9]*)
++ if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
++ test "$enable_shared" = yes && enable_static=no
++ fi
++ ;;
++ esac
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5
++$as_echo "$enable_shared" >&6; }
++
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5
++$as_echo_n "checking whether to build static libraries... " >&6; }
++ # Make sure either enable_shared or enable_static is yes.
++ test "$enable_shared" = yes || enable_static=yes
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5
++$as_echo "$enable_static" >&6; }
++
++
++
++
++fi
++ac_ext=c
++ac_cpp='$CPP $CPPFLAGS'
++ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
++ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
++ac_compiler_gnu=$ac_cv_c_compiler_gnu
++
++CC="$lt_save_CC"
++
++
++
++
++
++
++
++
++
++
++
++
++
++ ac_config_commands="$ac_config_commands libtool"
++
++
++
++
++# Only expand once:
++
++
++
++# Checks for net-snmp-config
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking Searching for net-snmp lib" >&5
++$as_echo_n "checking Searching for net-snmp lib... " >&6; }
++# Extract the first word of "net-snmp-config", so it can be a program name with args.
++set dummy net-snmp-config; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_prog_SNMP_LIBS+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$SNMP_LIBS"; then
++ ac_cv_prog_SNMP_LIBS="$SNMP_LIBS" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_prog_SNMP_LIBS="`net-snmp-config --agent-libs`"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++ test -z "$ac_cv_prog_SNMP_LIBS" && ac_cv_prog_SNMP_LIBS="none"
++fi
++fi
++SNMP_LIBS=$ac_cv_prog_SNMP_LIBS
++if test -n "$SNMP_LIBS"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SNMP_LIBS" >&5
++$as_echo "$SNMP_LIBS" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++# Extract the first word of "net-snmp-config", so it can be a program name with args.
++set dummy net-snmp-config; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_prog_SNMP_CFLGAS+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$SNMP_CFLGAS"; then
++ ac_cv_prog_SNMP_CFLGAS="$SNMP_CFLGAS" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_prog_SNMP_CFLGAS="`net-snmp-config --cflags`"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++ test -z "$ac_cv_prog_SNMP_CFLGAS" && ac_cv_prog_SNMP_CFLGAS="none"
++fi
++fi
++SNMP_CFLGAS=$ac_cv_prog_SNMP_CFLGAS
++if test -n "$SNMP_CFLGAS"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SNMP_CFLGAS" >&5
++$as_echo "$SNMP_CFLGAS" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++if test x"${SNMP_LIBS}" = "xnone"; then
++as_fn_error "net-snmp-config not found, please install the development package of net-snmp" "$LINENO" 5
++else
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: found net-snmp-config" >&5
++$as_echo "found net-snmp-config" >&6; }
++fi
++
++
++
++
++
++# Checks for pcap-config
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking Searching for pcap lib" >&5
++$as_echo_n "checking Searching for pcap lib... " >&6; }
++# Extract the first word of "pcap-config", so it can be a program name with args.
++set dummy pcap-config; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_prog_PCAP_LIBS+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$PCAP_LIBS"; then
++ ac_cv_prog_PCAP_LIBS="$PCAP_LIBS" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_prog_PCAP_LIBS="`pcap-config --libs`"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++ test -z "$ac_cv_prog_PCAP_LIBS" && ac_cv_prog_PCAP_LIBS="none"
++fi
++fi
++PCAP_LIBS=$ac_cv_prog_PCAP_LIBS
++if test -n "$PCAP_LIBS"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PCAP_LIBS" >&5
++$as_echo "$PCAP_LIBS" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++# Extract the first word of "pcap-config", so it can be a program name with args.
++set dummy pcap-config; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_prog_PCAP_CFLGAS+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$PCAP_CFLGAS"; then
++ ac_cv_prog_PCAP_CFLGAS="$PCAP_CFLGAS" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_prog_PCAP_CFLGAS="`pcap-config --cflags`"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++ test -z "$ac_cv_prog_PCAP_CFLGAS" && ac_cv_prog_PCAP_CFLGAS="none"
++fi
++fi
++PCAP_CFLGAS=$ac_cv_prog_PCAP_CFLGAS
++if test -n "$PCAP_CFLGAS"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PCAP_CFLGAS" >&5
++$as_echo "$PCAP_CFLGAS" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++if test x"${PCAP_LIBS}" = "xnone"; then
++as_fn_error "pcap-config not found, please install the development package of libpcap" "$LINENO" 5
++else
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: found pcap" >&5
++$as_echo "found pcap" >&6; }
++fi
++
++
++
++
++
++# Checks for libcli
++
++for ac_header in libcli.h
++do :
++ ac_fn_c_check_header_mongrel "$LINENO" "libcli.h" "ac_cv_header_libcli_h" "$ac_includes_default"
++if test "x$ac_cv_header_libcli_h" = x""yes; then :
++ cat >>confdefs.h <<_ACEOF
++#define HAVE_LIBCLI_H 1
++_ACEOF
++
++fi
++
++done
++
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing cli_print" >&5
++$as_echo_n "checking for library containing cli_print... " >&6; }
++if test "${ac_cv_search_cli_print+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ ac_func_search_save_LIBS=$LIBS
++cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++
++/* Override any GCC internal prototype to avoid an error.
++ Use char because int might match the return type of a GCC
++ builtin and then its argument prototype would still apply. */
++#ifdef __cplusplus
++extern "C"
++#endif
++char cli_print ();
++int
++main ()
++{
++return cli_print ();
++ ;
++ return 0;
++}
++_ACEOF
++for ac_lib in '' cli; do
++ if test -z "$ac_lib"; then
++ ac_res="none required"
++ else
++ ac_res=-l$ac_lib
++ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
++ fi
++ if ac_fn_c_try_link "$LINENO"; then :
++ ac_cv_search_cli_print=$ac_res
++fi
++rm -f core conftest.err conftest.$ac_objext \
++ conftest$ac_exeext
++ if test "${ac_cv_search_cli_print+set}" = set; then :
++ break
++fi
++done
++if test "${ac_cv_search_cli_print+set}" = set; then :
++
++else
++ ac_cv_search_cli_print=no
++fi
++rm conftest.$ac_ext
++LIBS=$ac_func_search_save_LIBS
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_cli_print" >&5
++$as_echo "$ac_cv_search_cli_print" >&6; }
++ac_res=$ac_cv_search_cli_print
++if test "$ac_res" != no; then :
++ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
++
++$as_echo "#define CLI_LIBS -lcli" >>confdefs.h
++
++else
++ as_fn_error "libcli could not found, please install development package of libcli" "$LINENO" 5
++
++fi
++
++
++
++
++# Checks for libraries.
++
++
++
++
++ac_ext=c
++ac_cpp='$CPP $CPPFLAGS'
++ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
++ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
++ac_compiler_gnu=$ac_cv_c_compiler_gnu
++
++ax_pthread_ok=no
++
++# We used to check for pthread.h first, but this fails if pthread.h
++# requires special compiler flags (e.g. on True64 or Sequent).
++# It gets checked for in the link test anyway.
++
++# First of all, check if the user has set any of the PTHREAD_LIBS,
++# etcetera environment variables, and if threads linking works using
++# them:
++if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then
++ save_CFLAGS="$CFLAGS"
++ CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
++ save_LIBS="$LIBS"
++ LIBS="$PTHREAD_LIBS $LIBS"
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS" >&5
++$as_echo_n "checking for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS... " >&6; }
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++
++/* Override any GCC internal prototype to avoid an error.
++ Use char because int might match the return type of a GCC
++ builtin and then its argument prototype would still apply. */
++#ifdef __cplusplus
++extern "C"
++#endif
++char pthread_join ();
++int
++main ()
++{
++return pthread_join ();
++ ;
++ return 0;
++}
++_ACEOF
++if ac_fn_c_try_link "$LINENO"; then :
++ ax_pthread_ok=yes
++fi
++rm -f core conftest.err conftest.$ac_objext \
++ conftest$ac_exeext conftest.$ac_ext
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok" >&5
++$as_echo "$ax_pthread_ok" >&6; }
++ if test x"$ax_pthread_ok" = xno; then
++ PTHREAD_LIBS=""
++ PTHREAD_CFLAGS=""
++ fi
++ LIBS="$save_LIBS"
++ CFLAGS="$save_CFLAGS"
++fi
++
++# We must check for the threads library under a number of different
++# names; the ordering is very important because some systems
++# (e.g. DEC) have both -lpthread and -lpthreads, where one of the
++# libraries is broken (non-POSIX).
++
++# Create a list of thread flags to try. Items starting with a "-" are
++# C compiler flags, and other items are library names, except for "none"
++# which indicates that we try without any flags at all, and "pthread-config"
++# which is a program returning the flags for the Pth emulation library.
++
++ax_pthread_flags="pthread pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config"
++
++# The ordering *is* (sometimes) important. Some notes on the
++# individual items follow:
++
++# pthreads: AIX (must check this before -lpthread)
++# none: in case threads are in libc; should be tried before -Kthread and
++# other compiler flags to prevent continual compiler warnings
++# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h)
++# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able)
++# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread)
++# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads)
++# -pthreads: Solaris/gcc
++# -mthreads: Mingw32/gcc, Lynx/gcc
++# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it
++# doesn't hurt to check since this sometimes defines pthreads too;
++# also defines -D_REENTRANT)
++# ... -mt is also the pthreads flag for HP/aCC
++# pthread: Linux, etcetera
++# --thread-safe: KAI C++
++# pthread-config: use pthread-config program (for GNU Pth library)
++
++case "${host_cpu}-${host_os}" in
++ *solaris*)
++
++ # On Solaris (at least, for some versions), libc contains stubbed
++ # (non-functional) versions of the pthreads routines, so link-based
++ # tests will erroneously succeed. (We need to link with -pthreads/-mt/
++ # -lpthread.) (The stubs are missing pthread_cleanup_push, or rather
++ # a function called by this macro, so we could check for that, but
++ # who knows whether they'll stub that too in a future libc.) So,
++ # we'll just look for -pthreads and -lpthread first:
++
++ ax_pthread_flags="-pthreads pthread -mt -pthread $ax_pthread_flags"
++ ;;
++esac
++
++if test x"$ax_pthread_ok" = xno; then
++for flag in $ax_pthread_flags; do
++
++ case $flag in
++ none)
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work without any flags" >&5
++$as_echo_n "checking whether pthreads work without any flags... " >&6; }
++ ;;
++
++ -*)
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether pthreads work with $flag" >&5
++$as_echo_n "checking whether pthreads work with $flag... " >&6; }
++ PTHREAD_CFLAGS="$flag"
++ ;;
++
++ pthread-config)
++ # Extract the first word of "pthread-config", so it can be a program name with args.
++set dummy pthread-config; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_prog_ax_pthread_config+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$ax_pthread_config"; then
++ ac_cv_prog_ax_pthread_config="$ax_pthread_config" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_prog_ax_pthread_config="yes"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++ test -z "$ac_cv_prog_ax_pthread_config" && ac_cv_prog_ax_pthread_config="no"
++fi
++fi
++ax_pthread_config=$ac_cv_prog_ax_pthread_config
++if test -n "$ax_pthread_config"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_config" >&5
++$as_echo "$ax_pthread_config" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++ if test x"$ax_pthread_config" = xno; then continue; fi
++ PTHREAD_CFLAGS="`pthread-config --cflags`"
++ PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`"
++ ;;
++
++ *)
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for the pthreads library -l$flag" >&5
++$as_echo_n "checking for the pthreads library -l$flag... " >&6; }
++ PTHREAD_LIBS="-l$flag"
++ ;;
++ esac
++
++ save_LIBS="$LIBS"
++ save_CFLAGS="$CFLAGS"
++ LIBS="$PTHREAD_LIBS $LIBS"
++ CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
++
++ # Check for various functions. We must include pthread.h,
++ # since some functions may be macros. (On the Sequent, we
++ # need a special flag -Kthread to make this header compile.)
++ # We check for pthread_join because it is in -lpthread on IRIX
++ # while pthread_create is in libc. We check for pthread_attr_init
++ # due to DEC craziness with -lpthreads. We check for
++ # pthread_cleanup_push because it is one of the few pthread
++ # functions on Solaris that doesn't have a non-functional libc stub.
++ # We try pthread_create on general principles.
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++#include <pthread.h>
++int
++main ()
++{
++pthread_t th; pthread_join(th, 0);
++ pthread_attr_init(0); pthread_cleanup_push(0, 0);
++ pthread_create(0,0,0,0); pthread_cleanup_pop(0);
++ ;
++ return 0;
++}
++_ACEOF
++if ac_fn_c_try_link "$LINENO"; then :
++ ax_pthread_ok=yes
++fi
++rm -f core conftest.err conftest.$ac_objext \
++ conftest$ac_exeext conftest.$ac_ext
++
++ LIBS="$save_LIBS"
++ CFLAGS="$save_CFLAGS"
++
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ax_pthread_ok" >&5
++$as_echo "$ax_pthread_ok" >&6; }
++ if test "x$ax_pthread_ok" = xyes; then
++ break;
++ fi
++
++ PTHREAD_LIBS=""
++ PTHREAD_CFLAGS=""
++done
++fi
++
++# Various other checks:
++if test "x$ax_pthread_ok" = xyes; then
++ save_LIBS="$LIBS"
++ LIBS="$PTHREAD_LIBS $LIBS"
++ save_CFLAGS="$CFLAGS"
++ CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
++
++ # Detect AIX lossage: JOINABLE attribute is called UNDETACHED.
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for joinable pthread attribute" >&5
++$as_echo_n "checking for joinable pthread attribute... " >&6; }
++ attr_name=unknown
++ for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++#include <pthread.h>
++int
++main ()
++{
++int attr=$attr; return attr;
++ ;
++ return 0;
++}
++_ACEOF
++if ac_fn_c_try_link "$LINENO"; then :
++ attr_name=$attr; break
++fi
++rm -f core conftest.err conftest.$ac_objext \
++ conftest$ac_exeext conftest.$ac_ext
++ done
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $attr_name" >&5
++$as_echo "$attr_name" >&6; }
++ if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then
++
++cat >>confdefs.h <<_ACEOF
++#define PTHREAD_CREATE_JOINABLE $attr_name
++_ACEOF
++
++ fi
++
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if more special flags are required for pthreads" >&5
++$as_echo_n "checking if more special flags are required for pthreads... " >&6; }
++ flag=no
++ case "${host_cpu}-${host_os}" in
++ *-aix* | *-freebsd* | *-darwin*) flag="-D_THREAD_SAFE";;
++ *solaris* | *-osf* | *-hpux*) flag="-D_REENTRANT";;
++ esac
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${flag}" >&5
++$as_echo "${flag}" >&6; }
++ if test "x$flag" != xno; then
++ PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS"
++ fi
++
++ LIBS="$save_LIBS"
++ CFLAGS="$save_CFLAGS"
++
++ # More AIX lossage: must compile with xlc_r or cc_r
++ if test x"$GCC" != xyes; then
++ for ac_prog in xlc_r cc_r
++do
++ # Extract the first word of "$ac_prog", so it can be a program name with args.
++set dummy $ac_prog; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_prog_PTHREAD_CC+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test -n "$PTHREAD_CC"; then
++ ac_cv_prog_PTHREAD_CC="$PTHREAD_CC" # Let the user override the test.
++else
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_prog_PTHREAD_CC="$ac_prog"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++fi
++fi
++PTHREAD_CC=$ac_cv_prog_PTHREAD_CC
++if test -n "$PTHREAD_CC"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PTHREAD_CC" >&5
++$as_echo "$PTHREAD_CC" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++ test -n "$PTHREAD_CC" && break
++done
++test -n "$PTHREAD_CC" || PTHREAD_CC="${CC}"
++
++ else
++ PTHREAD_CC=$CC
++ fi
++else
++ PTHREAD_CC="$CC"
++fi
++
++
++
++
++
++# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
++if test x"$ax_pthread_ok" = xyes; then
++
++$as_echo "#define HAVE_PTHREAD 1" >>confdefs.h
++
++ :
++else
++ ax_pthread_ok=no
++
++as_fn_error "Your system does not support a pthread variant, libdessert will not work" "$LINENO" 5
++
++fi
++ac_ext=c
++ac_cpp='$CPP $CPPFLAGS'
++ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
++ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
++ac_compiler_gnu=$ac_cv_c_compiler_gnu
++
++
++
++# Checks for header files.
++for ac_header in arpa/inet.h fcntl.h netinet/in.h stdint.h stdlib.h string.h sys/ioctl.h sys/socket.h syslog.h unistd.h
++do :
++ as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
++ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
++eval as_val=\$$as_ac_Header
++ if test "x$as_val" = x""yes; then :
++ cat >>confdefs.h <<_ACEOF
++#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
++_ACEOF
++
++fi
++
++done
++
++
++# Checks for typedefs, structures, and compiler characteristics.
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdbool.h that conforms to C99" >&5
++$as_echo_n "checking for stdbool.h that conforms to C99... " >&6; }
++if test "${ac_cv_header_stdbool_h+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++
++#include <stdbool.h>
++#ifndef bool
++ "error: bool is not defined"
++#endif
++#ifndef false
++ "error: false is not defined"
++#endif
++#if false
++ "error: false is not 0"
++#endif
++#ifndef true
++ "error: true is not defined"
++#endif
++#if true != 1
++ "error: true is not 1"
++#endif
++#ifndef __bool_true_false_are_defined
++ "error: __bool_true_false_are_defined is not defined"
++#endif
++
++ struct s { _Bool s: 1; _Bool t; } s;
++
++ char a[true == 1 ? 1 : -1];
++ char b[false == 0 ? 1 : -1];
++ char c[__bool_true_false_are_defined == 1 ? 1 : -1];
++ char d[(bool) 0.5 == true ? 1 : -1];
++ bool e = &s;
++ char f[(_Bool) 0.0 == false ? 1 : -1];
++ char g[true];
++ char h[sizeof (_Bool)];
++ char i[sizeof s.t];
++ enum { j = false, k = true, l = false * true, m = true * 256 };
++ /* The following fails for
++ HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */
++ _Bool n[m];
++ char o[sizeof n == m * sizeof n[0] ? 1 : -1];
++ char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1];
++# if defined __xlc__ || defined __GNUC__
++ /* Catch a bug in IBM AIX xlc compiler version 6.0.0.0
++ reported by James Lemley on 2005-10-05; see
++ http://lists.gnu.org/archive/html/bug-coreutils/2005-10/msg00086.html
++ This test is not quite right, since xlc is allowed to
++ reject this program, as the initializer for xlcbug is
++ not one of the forms that C requires support for.
++ However, doing the test right would require a runtime
++ test, and that would make cross-compilation harder.
++ Let us hope that IBM fixes the xlc bug, and also adds
++ support for this kind of constant expression. In the
++ meantime, this test will reject xlc, which is OK, since
++ our stdbool.h substitute should suffice. We also test
++ this with GCC, where it should work, to detect more
++ quickly whether someone messes up the test in the
++ future. */
++ char digs[] = "0123456789";
++ int xlcbug = 1 / (&(digs + 5)[-2 + (bool) 1] == &digs[4] ? 1 : -1);
++# endif
++ /* Catch a bug in an HP-UX C compiler. See
++ http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html
++ http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html
++ */
++ _Bool q = true;
++ _Bool *pq = &q;
++
++int
++main ()
++{
++
++ *pq |= q;
++ *pq |= ! q;
++ /* Refer to every declared value, to avoid compiler optimizations. */
++ return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l
++ + !m + !n + !o + !p + !q + !pq);
++
++ ;
++ return 0;
++}
++_ACEOF
++if ac_fn_c_try_compile "$LINENO"; then :
++ ac_cv_header_stdbool_h=yes
++else
++ ac_cv_header_stdbool_h=no
++fi
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdbool_h" >&5
++$as_echo "$ac_cv_header_stdbool_h" >&6; }
++ac_fn_c_check_type "$LINENO" "_Bool" "ac_cv_type__Bool" "$ac_includes_default"
++if test "x$ac_cv_type__Bool" = x""yes; then :
++
++cat >>confdefs.h <<_ACEOF
++#define HAVE__BOOL 1
++_ACEOF
++
++
++fi
++
++if test $ac_cv_header_stdbool_h = yes; then
++
++$as_echo "#define HAVE_STDBOOL_H 1" >>confdefs.h
++
++fi
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5
++$as_echo_n "checking for inline... " >&6; }
++if test "${ac_cv_c_inline+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ ac_cv_c_inline=no
++for ac_kw in inline __inline__ __inline; do
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++#ifndef __cplusplus
++typedef int foo_t;
++static $ac_kw foo_t static_foo () {return 0; }
++$ac_kw foo_t foo () {return 0; }
++#endif
++
++_ACEOF
++if ac_fn_c_try_compile "$LINENO"; then :
++ ac_cv_c_inline=$ac_kw
++fi
++rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
++ test "$ac_cv_c_inline" != no && break
++done
++
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5
++$as_echo "$ac_cv_c_inline" >&6; }
++
++case $ac_cv_c_inline in
++ inline | yes) ;;
++ *)
++ case $ac_cv_c_inline in
++ no) ac_val=;;
++ *) ac_val=$ac_cv_c_inline;;
++ esac
++ cat >>confdefs.h <<_ACEOF
++#ifndef __cplusplus
++#define inline $ac_val
++#endif
++_ACEOF
++ ;;
++esac
++
++ac_fn_c_find_intX_t "$LINENO" "32" "ac_cv_c_int32_t"
++case $ac_cv_c_int32_t in #(
++ no|yes) ;; #(
++ *)
++
++cat >>confdefs.h <<_ACEOF
++#define int32_t $ac_cv_c_int32_t
++_ACEOF
++;;
++esac
++
++ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default"
++if test "x$ac_cv_type_pid_t" = x""yes; then :
++
++else
++
++cat >>confdefs.h <<_ACEOF
++#define pid_t int
++_ACEOF
++
++fi
++
++ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default"
++if test "x$ac_cv_type_size_t" = x""yes; then :
++
++else
++
++cat >>confdefs.h <<_ACEOF
++#define size_t unsigned int
++_ACEOF
++
++fi
++
++ac_fn_c_check_type "$LINENO" "ssize_t" "ac_cv_type_ssize_t" "$ac_includes_default"
++if test "x$ac_cv_type_ssize_t" = x""yes; then :
++
++else
++
++cat >>confdefs.h <<_ACEOF
++#define ssize_t int
++_ACEOF
++
++fi
++
++ac_fn_c_find_uintX_t "$LINENO" "16" "ac_cv_c_uint16_t"
++case $ac_cv_c_uint16_t in #(
++ no|yes) ;; #(
++ *)
++
++
++cat >>confdefs.h <<_ACEOF
++#define uint16_t $ac_cv_c_uint16_t
++_ACEOF
++;;
++ esac
++
++ac_fn_c_find_uintX_t "$LINENO" "32" "ac_cv_c_uint32_t"
++case $ac_cv_c_uint32_t in #(
++ no|yes) ;; #(
++ *)
++
++$as_echo "#define _UINT32_T 1" >>confdefs.h
++
++
++cat >>confdefs.h <<_ACEOF
++#define uint32_t $ac_cv_c_uint32_t
++_ACEOF
++;;
++ esac
++
++ac_fn_c_find_uintX_t "$LINENO" "64" "ac_cv_c_uint64_t"
++case $ac_cv_c_uint64_t in #(
++ no|yes) ;; #(
++ *)
++
++$as_echo "#define _UINT64_T 1" >>confdefs.h
++
++
++cat >>confdefs.h <<_ACEOF
++#define uint64_t $ac_cv_c_uint64_t
++_ACEOF
++;;
++ esac
++
++ac_fn_c_find_uintX_t "$LINENO" "8" "ac_cv_c_uint8_t"
++case $ac_cv_c_uint8_t in #(
++ no|yes) ;; #(
++ *)
++
++$as_echo "#define _UINT8_T 1" >>confdefs.h
++
++
++cat >>confdefs.h <<_ACEOF
++#define uint8_t $ac_cv_c_uint8_t
++_ACEOF
++;;
++ esac
++
++
++# Checks for library functions.
++for ac_header in vfork.h
++do :
++ ac_fn_c_check_header_mongrel "$LINENO" "vfork.h" "ac_cv_header_vfork_h" "$ac_includes_default"
++if test "x$ac_cv_header_vfork_h" = x""yes; then :
++ cat >>confdefs.h <<_ACEOF
++#define HAVE_VFORK_H 1
++_ACEOF
++
++fi
++
++done
++
++for ac_func in fork vfork
++do :
++ as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
++ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
++eval as_val=\$$as_ac_var
++ if test "x$as_val" = x""yes; then :
++ cat >>confdefs.h <<_ACEOF
++#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
++_ACEOF
++
++fi
++done
++
++if test "x$ac_cv_func_fork" = xyes; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working fork" >&5
++$as_echo_n "checking for working fork... " >&6; }
++if test "${ac_cv_func_fork_works+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test "$cross_compiling" = yes; then :
++ ac_cv_func_fork_works=cross
++else
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++$ac_includes_default
++int
++main ()
++{
++
++ /* By Ruediger Kuhlmann. */
++ return fork () < 0;
++
++ ;
++ return 0;
++}
++_ACEOF
++if ac_fn_c_try_run "$LINENO"; then :
++ ac_cv_func_fork_works=yes
++else
++ ac_cv_func_fork_works=no
++fi
++rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
++ conftest.$ac_objext conftest.beam conftest.$ac_ext
++fi
++
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_fork_works" >&5
++$as_echo "$ac_cv_func_fork_works" >&6; }
++
++else
++ ac_cv_func_fork_works=$ac_cv_func_fork
++fi
++if test "x$ac_cv_func_fork_works" = xcross; then
++ case $host in
++ *-*-amigaos* | *-*-msdosdjgpp*)
++ # Override, as these systems have only a dummy fork() stub
++ ac_cv_func_fork_works=no
++ ;;
++ *)
++ ac_cv_func_fork_works=yes
++ ;;
++ esac
++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&5
++$as_echo "$as_me: WARNING: result $ac_cv_func_fork_works guessed because of cross compilation" >&2;}
++fi
++ac_cv_func_vfork_works=$ac_cv_func_vfork
++if test "x$ac_cv_func_vfork" = xyes; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working vfork" >&5
++$as_echo_n "checking for working vfork... " >&6; }
++if test "${ac_cv_func_vfork_works+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test "$cross_compiling" = yes; then :
++ ac_cv_func_vfork_works=cross
++else
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++/* Thanks to Paul Eggert for this test. */
++$ac_includes_default
++#include <sys/wait.h>
++#ifdef HAVE_VFORK_H
++# include <vfork.h>
++#endif
++/* On some sparc systems, changes by the child to local and incoming
++ argument registers are propagated back to the parent. The compiler
++ is told about this with #include <vfork.h>, but some compilers
++ (e.g. gcc -O) don't grok <vfork.h>. Test for this by using a
++ static variable whose address is put into a register that is
++ clobbered by the vfork. */
++static void
++#ifdef __cplusplus
++sparc_address_test (int arg)
++# else
++sparc_address_test (arg) int arg;
++#endif
++{
++ static pid_t child;
++ if (!child) {
++ child = vfork ();
++ if (child < 0) {
++ perror ("vfork");
++ _exit(2);
++ }
++ if (!child) {
++ arg = getpid();
++ write(-1, "", 0);
++ _exit (arg);
++ }
++ }
++}
++
++int
++main ()
++{
++ pid_t parent = getpid ();
++ pid_t child;
++
++ sparc_address_test (0);
++
++ child = vfork ();
++
++ if (child == 0) {
++ /* Here is another test for sparc vfork register problems. This
++ test uses lots of local variables, at least as many local
++ variables as main has allocated so far including compiler
++ temporaries. 4 locals are enough for gcc 1.40.3 on a Solaris
++ 4.1.3 sparc, but we use 8 to be safe. A buggy compiler should
++ reuse the register of parent for one of the local variables,
++ since it will think that parent can't possibly be used any more
++ in this routine. Assigning to the local variable will thus
++ munge parent in the parent process. */
++ pid_t
++ p = getpid(), p1 = getpid(), p2 = getpid(), p3 = getpid(),
++ p4 = getpid(), p5 = getpid(), p6 = getpid(), p7 = getpid();
++ /* Convince the compiler that p..p7 are live; otherwise, it might
++ use the same hardware register for all 8 local variables. */
++ if (p != p1 || p != p2 || p != p3 || p != p4
++ || p != p5 || p != p6 || p != p7)
++ _exit(1);
++
++ /* On some systems (e.g. IRIX 3.3), vfork doesn't separate parent
++ from child file descriptors. If the child closes a descriptor
++ before it execs or exits, this munges the parent's descriptor
++ as well. Test for this by closing stdout in the child. */
++ _exit(close(fileno(stdout)) != 0);
++ } else {
++ int status;
++ struct stat st;
++
++ while (wait(&status) != child)
++ ;
++ return (
++ /* Was there some problem with vforking? */
++ child < 0
++
++ /* Did the child fail? (This shouldn't happen.) */
++ || status
++
++ /* Did the vfork/compiler bug occur? */
++ || parent != getpid()
++
++ /* Did the file descriptor bug occur? */
++ || fstat(fileno(stdout), &st) != 0
++ );
++ }
++}
++_ACEOF
++if ac_fn_c_try_run "$LINENO"; then :
++ ac_cv_func_vfork_works=yes
++else
++ ac_cv_func_vfork_works=no
++fi
++rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
++ conftest.$ac_objext conftest.beam conftest.$ac_ext
++fi
++
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_vfork_works" >&5
++$as_echo "$ac_cv_func_vfork_works" >&6; }
++
++fi;
++if test "x$ac_cv_func_fork_works" = xcross; then
++ ac_cv_func_vfork_works=$ac_cv_func_vfork
++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&5
++$as_echo "$as_me: WARNING: result $ac_cv_func_vfork_works guessed because of cross compilation" >&2;}
++fi
++
++if test "x$ac_cv_func_vfork_works" = xyes; then
++
++$as_echo "#define HAVE_WORKING_VFORK 1" >>confdefs.h
++
++else
++
++$as_echo "#define vfork fork" >>confdefs.h
++
++fi
++if test "x$ac_cv_func_fork_works" = xyes; then
++
++$as_echo "#define HAVE_WORKING_FORK 1" >>confdefs.h
++
++fi
++
++for ac_header in stdlib.h
++do :
++ ac_fn_c_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default"
++if test "x$ac_cv_header_stdlib_h" = x""yes; then :
++ cat >>confdefs.h <<_ACEOF
++#define HAVE_STDLIB_H 1
++_ACEOF
++
++fi
++
++done
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible malloc" >&5
++$as_echo_n "checking for GNU libc compatible malloc... " >&6; }
++if test "${ac_cv_func_malloc_0_nonnull+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test "$cross_compiling" = yes; then :
++ ac_cv_func_malloc_0_nonnull=no
++else
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++#if defined STDC_HEADERS || defined HAVE_STDLIB_H
++# include <stdlib.h>
++#else
++char *malloc ();
++#endif
++
++int
++main ()
++{
++return ! malloc (0);
++ ;
++ return 0;
++}
++_ACEOF
++if ac_fn_c_try_run "$LINENO"; then :
++ ac_cv_func_malloc_0_nonnull=yes
++else
++ ac_cv_func_malloc_0_nonnull=no
++fi
++rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
++ conftest.$ac_objext conftest.beam conftest.$ac_ext
++fi
++
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_malloc_0_nonnull" >&5
++$as_echo "$ac_cv_func_malloc_0_nonnull" >&6; }
++if test $ac_cv_func_malloc_0_nonnull = yes; then :
++
++$as_echo "#define HAVE_MALLOC 1" >>confdefs.h
++
++else
++ $as_echo "#define HAVE_MALLOC 0" >>confdefs.h
++
++ case " $LIBOBJS " in
++ *" malloc.$ac_objext "* ) ;;
++ *) LIBOBJS="$LIBOBJS malloc.$ac_objext"
++ ;;
++esac
++
++
++$as_echo "#define malloc rpl_malloc" >>confdefs.h
++
++fi
++
++
++for ac_header in stdlib.h
++do :
++ ac_fn_c_check_header_mongrel "$LINENO" "stdlib.h" "ac_cv_header_stdlib_h" "$ac_includes_default"
++if test "x$ac_cv_header_stdlib_h" = x""yes; then :
++ cat >>confdefs.h <<_ACEOF
++#define HAVE_STDLIB_H 1
++_ACEOF
++
++fi
++
++done
++
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU libc compatible realloc" >&5
++$as_echo_n "checking for GNU libc compatible realloc... " >&6; }
++if test "${ac_cv_func_realloc_0_nonnull+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ if test "$cross_compiling" = yes; then :
++ ac_cv_func_realloc_0_nonnull=no
++else
++ cat confdefs.h - <<_ACEOF >conftest.$ac_ext
++/* end confdefs.h. */
++#if defined STDC_HEADERS || defined HAVE_STDLIB_H
++# include <stdlib.h>
++#else
++char *realloc ();
++#endif
++
++int
++main ()
++{
++return ! realloc (0, 0);
++ ;
++ return 0;
++}
++_ACEOF
++if ac_fn_c_try_run "$LINENO"; then :
++ ac_cv_func_realloc_0_nonnull=yes
++else
++ ac_cv_func_realloc_0_nonnull=no
++fi
++rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
++ conftest.$ac_objext conftest.beam conftest.$ac_ext
++fi
++
++fi
++{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_realloc_0_nonnull" >&5
++$as_echo "$ac_cv_func_realloc_0_nonnull" >&6; }
++if test $ac_cv_func_realloc_0_nonnull = yes; then :
++
++$as_echo "#define HAVE_REALLOC 1" >>confdefs.h
++
++else
++ $as_echo "#define HAVE_REALLOC 0" >>confdefs.h
++
++ case " $LIBOBJS " in
++ *" realloc.$ac_objext "* ) ;;
++ *) LIBOBJS="$LIBOBJS realloc.$ac_objext"
++ ;;
++esac
++
++
++$as_echo "#define realloc rpl_realloc" >>confdefs.h
++
++fi
++
++
++for ac_func in gethostname gettimeofday localtime_r memmove memset socket strdup strerror strtol
++do :
++ as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
++ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
++eval as_val=\$$as_ac_var
++ if test "x$as_val" = x""yes; then :
++ cat >>confdefs.h <<_ACEOF
++#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
++_ACEOF
++
++fi
++done
++
++
++# Checking for documentation generation
++
++
++
++
++
++
++
++
++
++
++
++# Files:
++DX_PROJECT=${PACKAGE_NAME}
++
++DX_CONFIG=DES-SERT.doxyfile
++
++DX_DOCDIR=doxygen
++
++
++# Environment variables used inside doxygen.cfg:
++DX_ENV="$DX_ENV SRCDIR='$srcdir'"
++
++DX_ENV="$DX_ENV PROJECT='$DX_PROJECT'"
++
++DX_ENV="$DX_ENV DOCDIR='$DX_DOCDIR'"
++
++DX_ENV="$DX_ENV VERSION='$PACKAGE_VERSION'"
++
++
++# Doxygen itself:
++
++
++
++ # Check whether --enable-doxygen-doc was given.
++if test "${enable_doxygen_doc+set}" = set; then :
++ enableval=$enable_doxygen_doc;
++case "$enableval" in
++#(
++y|Y|yes|Yes|YES)
++ DX_FLAG_doc=1
++
++
++;; #(
++n|N|no|No|NO)
++ DX_FLAG_doc=0
++
++;; #(
++*)
++ as_fn_error "invalid value '$enableval' given to doxygen-doc" "$LINENO" 5
++;;
++esac
++
++else
++
++DX_FLAG_doc=1
++
++
++
++fi
++
++if test "$DX_FLAG_doc" = 1; then
++
++if test -n "$ac_tool_prefix"; then
++ # Extract the first word of "${ac_tool_prefix}doxygen", so it can be a program name with args.
++set dummy ${ac_tool_prefix}doxygen; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_path_DX_DOXYGEN+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ case $DX_DOXYGEN in
++ [\\/]* | ?:[\\/]*)
++ ac_cv_path_DX_DOXYGEN="$DX_DOXYGEN" # Let the user override the test with a path.
++ ;;
++ *)
++ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_path_DX_DOXYGEN="$as_dir/$ac_word$ac_exec_ext"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++ ;;
++esac
++fi
++DX_DOXYGEN=$ac_cv_path_DX_DOXYGEN
++if test -n "$DX_DOXYGEN"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_DOXYGEN" >&5
++$as_echo "$DX_DOXYGEN" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++fi
++if test -z "$ac_cv_path_DX_DOXYGEN"; then
++ ac_pt_DX_DOXYGEN=$DX_DOXYGEN
++ # Extract the first word of "doxygen", so it can be a program name with args.
++set dummy doxygen; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_path_ac_pt_DX_DOXYGEN+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ case $ac_pt_DX_DOXYGEN in
++ [\\/]* | ?:[\\/]*)
++ ac_cv_path_ac_pt_DX_DOXYGEN="$ac_pt_DX_DOXYGEN" # Let the user override the test with a path.
++ ;;
++ *)
++ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_path_ac_pt_DX_DOXYGEN="$as_dir/$ac_word$ac_exec_ext"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++ ;;
++esac
++fi
++ac_pt_DX_DOXYGEN=$ac_cv_path_ac_pt_DX_DOXYGEN
++if test -n "$ac_pt_DX_DOXYGEN"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_DOXYGEN" >&5
++$as_echo "$ac_pt_DX_DOXYGEN" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++ if test "x$ac_pt_DX_DOXYGEN" = x; then
++ DX_DOXYGEN=""
++ else
++ case $cross_compiling:$ac_tool_warned in
++yes:)
++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
++$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
++ac_tool_warned=yes ;;
++esac
++ DX_DOXYGEN=$ac_pt_DX_DOXYGEN
++ fi
++else
++ DX_DOXYGEN="$ac_cv_path_DX_DOXYGEN"
++fi
++
++if test "$DX_FLAG_$DX_CURRENT_FEATURE$DX_DOXYGEN" = 1; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: doxygen not found - will not generate any doxygen documentation" >&5
++$as_echo "$as_me: WARNING: doxygen not found - will not generate any doxygen documentation" >&2;}
++ DX_FLAG_doc=0
++
++fi
++
++
++if test -n "$ac_tool_prefix"; then
++ # Extract the first word of "${ac_tool_prefix}perl", so it can be a program name with args.
++set dummy ${ac_tool_prefix}perl; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_path_DX_PERL+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ case $DX_PERL in
++ [\\/]* | ?:[\\/]*)
++ ac_cv_path_DX_PERL="$DX_PERL" # Let the user override the test with a path.
++ ;;
++ *)
++ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_path_DX_PERL="$as_dir/$ac_word$ac_exec_ext"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++ ;;
++esac
++fi
++DX_PERL=$ac_cv_path_DX_PERL
++if test -n "$DX_PERL"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_PERL" >&5
++$as_echo "$DX_PERL" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++fi
++if test -z "$ac_cv_path_DX_PERL"; then
++ ac_pt_DX_PERL=$DX_PERL
++ # Extract the first word of "perl", so it can be a program name with args.
++set dummy perl; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_path_ac_pt_DX_PERL+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ case $ac_pt_DX_PERL in
++ [\\/]* | ?:[\\/]*)
++ ac_cv_path_ac_pt_DX_PERL="$ac_pt_DX_PERL" # Let the user override the test with a path.
++ ;;
++ *)
++ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_path_ac_pt_DX_PERL="$as_dir/$ac_word$ac_exec_ext"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++ ;;
++esac
++fi
++ac_pt_DX_PERL=$ac_cv_path_ac_pt_DX_PERL
++if test -n "$ac_pt_DX_PERL"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_PERL" >&5
++$as_echo "$ac_pt_DX_PERL" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++ if test "x$ac_pt_DX_PERL" = x; then
++ DX_PERL=""
++ else
++ case $cross_compiling:$ac_tool_warned in
++yes:)
++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
++$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
++ac_tool_warned=yes ;;
++esac
++ DX_PERL=$ac_pt_DX_PERL
++ fi
++else
++ DX_PERL="$ac_cv_path_DX_PERL"
++fi
++
++if test "$DX_FLAG_$DX_CURRENT_FEATURE$DX_PERL" = 1; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: perl not found - will not generate any doxygen documentation" >&5
++$as_echo "$as_me: WARNING: perl not found - will not generate any doxygen documentation" >&2;}
++ DX_FLAG_doc=0
++
++fi
++
++ :
++fi
++if test "$DX_FLAG_doc" = 1; then
++ if :; then
++ DX_COND_doc_TRUE=
++ DX_COND_doc_FALSE='#'
++else
++ DX_COND_doc_TRUE='#'
++ DX_COND_doc_FALSE=
++fi
++
++ DX_ENV="$DX_ENV PERL_PATH='$DX_PERL'"
++
++ :
++else
++ if false; then
++ DX_COND_doc_TRUE=
++ DX_COND_doc_FALSE='#'
++else
++ DX_COND_doc_TRUE='#'
++ DX_COND_doc_FALSE=
++fi
++
++
++ :
++fi
++
++
++# Dot for graphics:
++
++
++
++ # Check whether --enable-doxygen-dot was given.
++if test "${enable_doxygen_dot+set}" = set; then :
++ enableval=$enable_doxygen_dot;
++case "$enableval" in
++#(
++y|Y|yes|Yes|YES)
++ DX_FLAG_dot=1
++
++
++test "$DX_FLAG_doc" = "1" \
++|| as_fn_error "doxygen-dot requires doxygen-dot" "$LINENO" 5
++
++;; #(
++n|N|no|No|NO)
++ DX_FLAG_dot=0
++
++;; #(
++*)
++ as_fn_error "invalid value '$enableval' given to doxygen-dot" "$LINENO" 5
++;;
++esac
++
++else
++
++DX_FLAG_dot=1
++
++
++test "$DX_FLAG_doc" = "1" || DX_FLAG_dot=0
++
++
++
++fi
++
++if test "$DX_FLAG_dot" = 1; then
++
++if test -n "$ac_tool_prefix"; then
++ # Extract the first word of "${ac_tool_prefix}dot", so it can be a program name with args.
++set dummy ${ac_tool_prefix}dot; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_path_DX_DOT+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ case $DX_DOT in
++ [\\/]* | ?:[\\/]*)
++ ac_cv_path_DX_DOT="$DX_DOT" # Let the user override the test with a path.
++ ;;
++ *)
++ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_path_DX_DOT="$as_dir/$ac_word$ac_exec_ext"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++ ;;
++esac
++fi
++DX_DOT=$ac_cv_path_DX_DOT
++if test -n "$DX_DOT"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_DOT" >&5
++$as_echo "$DX_DOT" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++fi
++if test -z "$ac_cv_path_DX_DOT"; then
++ ac_pt_DX_DOT=$DX_DOT
++ # Extract the first word of "dot", so it can be a program name with args.
++set dummy dot; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_path_ac_pt_DX_DOT+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ case $ac_pt_DX_DOT in
++ [\\/]* | ?:[\\/]*)
++ ac_cv_path_ac_pt_DX_DOT="$ac_pt_DX_DOT" # Let the user override the test with a path.
++ ;;
++ *)
++ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_path_ac_pt_DX_DOT="$as_dir/$ac_word$ac_exec_ext"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++ ;;
++esac
++fi
++ac_pt_DX_DOT=$ac_cv_path_ac_pt_DX_DOT
++if test -n "$ac_pt_DX_DOT"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_DOT" >&5
++$as_echo "$ac_pt_DX_DOT" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++ if test "x$ac_pt_DX_DOT" = x; then
++ DX_DOT=""
++ else
++ case $cross_compiling:$ac_tool_warned in
++yes:)
++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
++$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
++ac_tool_warned=yes ;;
++esac
++ DX_DOT=$ac_pt_DX_DOT
++ fi
++else
++ DX_DOT="$ac_cv_path_DX_DOT"
++fi
++
++if test "$DX_FLAG_$DX_CURRENT_FEATURE$DX_DOT" = 1; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: dot not found - will not generate graphics for doxygen documentation" >&5
++$as_echo "$as_me: WARNING: dot not found - will not generate graphics for doxygen documentation" >&2;}
++ DX_FLAG_dot=0
++
++fi
++
++ :
++fi
++if test "$DX_FLAG_dot" = 1; then
++ if :; then
++ DX_COND_dot_TRUE=
++ DX_COND_dot_FALSE='#'
++else
++ DX_COND_dot_TRUE='#'
++ DX_COND_dot_FALSE=
++fi
++
++ DX_ENV="$DX_ENV HAVE_DOT='YES'"
++
++ DX_ENV="$DX_ENV DOT_PATH='`expr ".$DX_DOT" : '\(\.\)[^/]*$' \| "x$DX_DOT" : 'x\(.*\)/[^/]*$'`'"
++
++ :
++else
++ if false; then
++ DX_COND_dot_TRUE=
++ DX_COND_dot_FALSE='#'
++else
++ DX_COND_dot_TRUE='#'
++ DX_COND_dot_FALSE=
++fi
++
++ DX_ENV="$DX_ENV HAVE_DOT='NO'"
++
++ :
++fi
++
++
++# Man pages generation:
++
++
++
++ # Check whether --enable-doxygen-man was given.
++if test "${enable_doxygen_man+set}" = set; then :
++ enableval=$enable_doxygen_man;
++case "$enableval" in
++#(
++y|Y|yes|Yes|YES)
++ DX_FLAG_man=1
++
++
++test "$DX_FLAG_doc" = "1" \
++|| as_fn_error "doxygen-man requires doxygen-man" "$LINENO" 5
++
++;; #(
++n|N|no|No|NO)
++ DX_FLAG_man=0
++
++;; #(
++*)
++ as_fn_error "invalid value '$enableval' given to doxygen-man" "$LINENO" 5
++;;
++esac
++
++else
++
++DX_FLAG_man=0
++
++
++test "$DX_FLAG_doc" = "1" || DX_FLAG_man=0
++
++
++
++fi
++
++if test "$DX_FLAG_man" = 1; then
++
++ :
++fi
++if test "$DX_FLAG_man" = 1; then
++ if :; then
++ DX_COND_man_TRUE=
++ DX_COND_man_FALSE='#'
++else
++ DX_COND_man_TRUE='#'
++ DX_COND_man_FALSE=
++fi
++
++ DX_ENV="$DX_ENV GENERATE_MAN='YES'"
++
++ :
++else
++ if false; then
++ DX_COND_man_TRUE=
++ DX_COND_man_FALSE='#'
++else
++ DX_COND_man_TRUE='#'
++ DX_COND_man_FALSE=
++fi
++
++ DX_ENV="$DX_ENV GENERATE_MAN='NO'"
++
++ :
++fi
++
++
++# RTF file generation:
++
++
++
++ # Check whether --enable-doxygen-rtf was given.
++if test "${enable_doxygen_rtf+set}" = set; then :
++ enableval=$enable_doxygen_rtf;
++case "$enableval" in
++#(
++y|Y|yes|Yes|YES)
++ DX_FLAG_rtf=1
++
++
++test "$DX_FLAG_doc" = "1" \
++|| as_fn_error "doxygen-rtf requires doxygen-rtf" "$LINENO" 5
++
++;; #(
++n|N|no|No|NO)
++ DX_FLAG_rtf=0
++
++;; #(
++*)
++ as_fn_error "invalid value '$enableval' given to doxygen-rtf" "$LINENO" 5
++;;
++esac
++
++else
++
++DX_FLAG_rtf=0
++
++
++test "$DX_FLAG_doc" = "1" || DX_FLAG_rtf=0
++
++
++
++fi
++
++if test "$DX_FLAG_rtf" = 1; then
++
++ :
++fi
++if test "$DX_FLAG_rtf" = 1; then
++ if :; then
++ DX_COND_rtf_TRUE=
++ DX_COND_rtf_FALSE='#'
++else
++ DX_COND_rtf_TRUE='#'
++ DX_COND_rtf_FALSE=
++fi
++
++ DX_ENV="$DX_ENV GENERATE_RTF='YES'"
++
++ :
++else
++ if false; then
++ DX_COND_rtf_TRUE=
++ DX_COND_rtf_FALSE='#'
++else
++ DX_COND_rtf_TRUE='#'
++ DX_COND_rtf_FALSE=
++fi
++
++ DX_ENV="$DX_ENV GENERATE_RTF='NO'"
++
++ :
++fi
++
++
++# XML file generation:
++
++
++
++ # Check whether --enable-doxygen-xml was given.
++if test "${enable_doxygen_xml+set}" = set; then :
++ enableval=$enable_doxygen_xml;
++case "$enableval" in
++#(
++y|Y|yes|Yes|YES)
++ DX_FLAG_xml=1
++
++
++test "$DX_FLAG_doc" = "1" \
++|| as_fn_error "doxygen-xml requires doxygen-xml" "$LINENO" 5
++
++;; #(
++n|N|no|No|NO)
++ DX_FLAG_xml=0
++
++;; #(
++*)
++ as_fn_error "invalid value '$enableval' given to doxygen-xml" "$LINENO" 5
++;;
++esac
++
++else
++
++DX_FLAG_xml=0
++
++
++test "$DX_FLAG_doc" = "1" || DX_FLAG_xml=0
++
++
++
++fi
++
++if test "$DX_FLAG_xml" = 1; then
++
++ :
++fi
++if test "$DX_FLAG_xml" = 1; then
++ if :; then
++ DX_COND_xml_TRUE=
++ DX_COND_xml_FALSE='#'
++else
++ DX_COND_xml_TRUE='#'
++ DX_COND_xml_FALSE=
++fi
++
++ DX_ENV="$DX_ENV GENERATE_XML='YES'"
++
++ :
++else
++ if false; then
++ DX_COND_xml_TRUE=
++ DX_COND_xml_FALSE='#'
++else
++ DX_COND_xml_TRUE='#'
++ DX_COND_xml_FALSE=
++fi
++
++ DX_ENV="$DX_ENV GENERATE_XML='NO'"
++
++ :
++fi
++
++
++# (Compressed) HTML help generation:
++
++
++
++ # Check whether --enable-doxygen-chm was given.
++if test "${enable_doxygen_chm+set}" = set; then :
++ enableval=$enable_doxygen_chm;
++case "$enableval" in
++#(
++y|Y|yes|Yes|YES)
++ DX_FLAG_chm=1
++
++
++test "$DX_FLAG_doc" = "1" \
++|| as_fn_error "doxygen-chm requires doxygen-chm" "$LINENO" 5
++
++;; #(
++n|N|no|No|NO)
++ DX_FLAG_chm=0
++
++;; #(
++*)
++ as_fn_error "invalid value '$enableval' given to doxygen-chm" "$LINENO" 5
++;;
++esac
++
++else
++
++DX_FLAG_chm=0
++
++
++test "$DX_FLAG_doc" = "1" || DX_FLAG_chm=0
++
++
++
++fi
++
++if test "$DX_FLAG_chm" = 1; then
++
++if test -n "$ac_tool_prefix"; then
++ # Extract the first word of "${ac_tool_prefix}hhc", so it can be a program name with args.
++set dummy ${ac_tool_prefix}hhc; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_path_DX_HHC+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ case $DX_HHC in
++ [\\/]* | ?:[\\/]*)
++ ac_cv_path_DX_HHC="$DX_HHC" # Let the user override the test with a path.
++ ;;
++ *)
++ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_path_DX_HHC="$as_dir/$ac_word$ac_exec_ext"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++ ;;
++esac
++fi
++DX_HHC=$ac_cv_path_DX_HHC
++if test -n "$DX_HHC"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_HHC" >&5
++$as_echo "$DX_HHC" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++fi
++if test -z "$ac_cv_path_DX_HHC"; then
++ ac_pt_DX_HHC=$DX_HHC
++ # Extract the first word of "hhc", so it can be a program name with args.
++set dummy hhc; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_path_ac_pt_DX_HHC+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ case $ac_pt_DX_HHC in
++ [\\/]* | ?:[\\/]*)
++ ac_cv_path_ac_pt_DX_HHC="$ac_pt_DX_HHC" # Let the user override the test with a path.
++ ;;
++ *)
++ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_path_ac_pt_DX_HHC="$as_dir/$ac_word$ac_exec_ext"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++ ;;
++esac
++fi
++ac_pt_DX_HHC=$ac_cv_path_ac_pt_DX_HHC
++if test -n "$ac_pt_DX_HHC"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_HHC" >&5
++$as_echo "$ac_pt_DX_HHC" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++ if test "x$ac_pt_DX_HHC" = x; then
++ DX_HHC=""
++ else
++ case $cross_compiling:$ac_tool_warned in
++yes:)
++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
++$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
++ac_tool_warned=yes ;;
++esac
++ DX_HHC=$ac_pt_DX_HHC
++ fi
++else
++ DX_HHC="$ac_cv_path_DX_HHC"
++fi
++
++if test "$DX_FLAG_$DX_CURRENT_FEATURE$DX_HHC" = 1; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: hhc not found - will not generate doxygen compressed HTML help documentation" >&5
++$as_echo "$as_me: WARNING: hhc not found - will not generate doxygen compressed HTML help documentation" >&2;}
++ DX_FLAG_chm=0
++
++fi
++
++ :
++fi
++if test "$DX_FLAG_chm" = 1; then
++ if :; then
++ DX_COND_chm_TRUE=
++ DX_COND_chm_FALSE='#'
++else
++ DX_COND_chm_TRUE='#'
++ DX_COND_chm_FALSE=
++fi
++
++ DX_ENV="$DX_ENV HHC_PATH='$DX_HHC'"
++
++ DX_ENV="$DX_ENV GENERATE_HTML='YES'"
++
++ DX_ENV="$DX_ENV GENERATE_HTMLHELP='YES'"
++
++ :
++else
++ if false; then
++ DX_COND_chm_TRUE=
++ DX_COND_chm_FALSE='#'
++else
++ DX_COND_chm_TRUE='#'
++ DX_COND_chm_FALSE=
++fi
++
++ DX_ENV="$DX_ENV GENERATE_HTMLHELP='NO'"
++
++ :
++fi
++
++
++# Seperate CHI file generation.
++
++
++
++ # Check whether --enable-doxygen-chi was given.
++if test "${enable_doxygen_chi+set}" = set; then :
++ enableval=$enable_doxygen_chi;
++case "$enableval" in
++#(
++y|Y|yes|Yes|YES)
++ DX_FLAG_chi=1
++
++
++test "$DX_FLAG_chm" = "1" \
++|| as_fn_error "doxygen-chi requires doxygen-chi" "$LINENO" 5
++
++;; #(
++n|N|no|No|NO)
++ DX_FLAG_chi=0
++
++;; #(
++*)
++ as_fn_error "invalid value '$enableval' given to doxygen-chi" "$LINENO" 5
++;;
++esac
++
++else
++
++DX_FLAG_chi=0
++
++
++test "$DX_FLAG_chm" = "1" || DX_FLAG_chi=0
++
++
++
++fi
++
++if test "$DX_FLAG_chi" = 1; then
++
++ :
++fi
++if test "$DX_FLAG_chi" = 1; then
++ if :; then
++ DX_COND_chi_TRUE=
++ DX_COND_chi_FALSE='#'
++else
++ DX_COND_chi_TRUE='#'
++ DX_COND_chi_FALSE=
++fi
++
++ DX_ENV="$DX_ENV GENERATE_CHI='YES'"
++
++ :
++else
++ if false; then
++ DX_COND_chi_TRUE=
++ DX_COND_chi_FALSE='#'
++else
++ DX_COND_chi_TRUE='#'
++ DX_COND_chi_FALSE=
++fi
++
++ DX_ENV="$DX_ENV GENERATE_CHI='NO'"
++
++ :
++fi
++
++
++# Plain HTML pages generation:
++
++
++
++ # Check whether --enable-doxygen-html was given.
++if test "${enable_doxygen_html+set}" = set; then :
++ enableval=$enable_doxygen_html;
++case "$enableval" in
++#(
++y|Y|yes|Yes|YES)
++ DX_FLAG_html=1
++
++
++test "$DX_FLAG_doc" = "1" \
++|| as_fn_error "doxygen-html requires doxygen-html" "$LINENO" 5
++
++test "$DX_FLAG_chm" = "0" \
++|| as_fn_error "doxygen-html contradicts doxygen-html" "$LINENO" 5
++
++;; #(
++n|N|no|No|NO)
++ DX_FLAG_html=0
++
++;; #(
++*)
++ as_fn_error "invalid value '$enableval' given to doxygen-html" "$LINENO" 5
++;;
++esac
++
++else
++
++DX_FLAG_html=1
++
++
++test "$DX_FLAG_doc" = "1" || DX_FLAG_html=0
++
++
++test "$DX_FLAG_chm" = "0" || DX_FLAG_html=0
++
++
++
++fi
++
++if test "$DX_FLAG_html" = 1; then
++
++ :
++fi
++if test "$DX_FLAG_html" = 1; then
++ if :; then
++ DX_COND_html_TRUE=
++ DX_COND_html_FALSE='#'
++else
++ DX_COND_html_TRUE='#'
++ DX_COND_html_FALSE=
++fi
++
++ DX_ENV="$DX_ENV GENERATE_HTML='YES'"
++
++ :
++else
++ if false; then
++ DX_COND_html_TRUE=
++ DX_COND_html_FALSE='#'
++else
++ DX_COND_html_TRUE='#'
++ DX_COND_html_FALSE=
++fi
++
++ test "$DX_FLAG_chm" = 1 || DX_ENV="$DX_ENV GENERATE_HTML='NO'"
++
++ :
++fi
++
++
++# PostScript file generation:
++
++
++
++ # Check whether --enable-doxygen-ps was given.
++if test "${enable_doxygen_ps+set}" = set; then :
++ enableval=$enable_doxygen_ps;
++case "$enableval" in
++#(
++y|Y|yes|Yes|YES)
++ DX_FLAG_ps=1
++
++
++test "$DX_FLAG_doc" = "1" \
++|| as_fn_error "doxygen-ps requires doxygen-ps" "$LINENO" 5
++
++;; #(
++n|N|no|No|NO)
++ DX_FLAG_ps=0
++
++;; #(
++*)
++ as_fn_error "invalid value '$enableval' given to doxygen-ps" "$LINENO" 5
++;;
++esac
++
++else
++
++DX_FLAG_ps=0
++
++
++test "$DX_FLAG_doc" = "1" || DX_FLAG_ps=0
++
++
++
++fi
++
++if test "$DX_FLAG_ps" = 1; then
++
++if test -n "$ac_tool_prefix"; then
++ # Extract the first word of "${ac_tool_prefix}latex", so it can be a program name with args.
++set dummy ${ac_tool_prefix}latex; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_path_DX_LATEX+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ case $DX_LATEX in
++ [\\/]* | ?:[\\/]*)
++ ac_cv_path_DX_LATEX="$DX_LATEX" # Let the user override the test with a path.
++ ;;
++ *)
++ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_path_DX_LATEX="$as_dir/$ac_word$ac_exec_ext"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++ ;;
++esac
++fi
++DX_LATEX=$ac_cv_path_DX_LATEX
++if test -n "$DX_LATEX"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_LATEX" >&5
++$as_echo "$DX_LATEX" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++fi
++if test -z "$ac_cv_path_DX_LATEX"; then
++ ac_pt_DX_LATEX=$DX_LATEX
++ # Extract the first word of "latex", so it can be a program name with args.
++set dummy latex; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_path_ac_pt_DX_LATEX+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ case $ac_pt_DX_LATEX in
++ [\\/]* | ?:[\\/]*)
++ ac_cv_path_ac_pt_DX_LATEX="$ac_pt_DX_LATEX" # Let the user override the test with a path.
++ ;;
++ *)
++ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_path_ac_pt_DX_LATEX="$as_dir/$ac_word$ac_exec_ext"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++ ;;
++esac
++fi
++ac_pt_DX_LATEX=$ac_cv_path_ac_pt_DX_LATEX
++if test -n "$ac_pt_DX_LATEX"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_LATEX" >&5
++$as_echo "$ac_pt_DX_LATEX" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++ if test "x$ac_pt_DX_LATEX" = x; then
++ DX_LATEX=""
++ else
++ case $cross_compiling:$ac_tool_warned in
++yes:)
++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
++$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
++ac_tool_warned=yes ;;
++esac
++ DX_LATEX=$ac_pt_DX_LATEX
++ fi
++else
++ DX_LATEX="$ac_cv_path_DX_LATEX"
++fi
++
++if test "$DX_FLAG_$DX_CURRENT_FEATURE$DX_LATEX" = 1; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: latex not found - will not generate doxygen PostScript documentation" >&5
++$as_echo "$as_me: WARNING: latex not found - will not generate doxygen PostScript documentation" >&2;}
++ DX_FLAG_ps=0
++
++fi
++
++
++if test -n "$ac_tool_prefix"; then
++ # Extract the first word of "${ac_tool_prefix}makeindex", so it can be a program name with args.
++set dummy ${ac_tool_prefix}makeindex; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_path_DX_MAKEINDEX+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ case $DX_MAKEINDEX in
++ [\\/]* | ?:[\\/]*)
++ ac_cv_path_DX_MAKEINDEX="$DX_MAKEINDEX" # Let the user override the test with a path.
++ ;;
++ *)
++ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_path_DX_MAKEINDEX="$as_dir/$ac_word$ac_exec_ext"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++ ;;
++esac
++fi
++DX_MAKEINDEX=$ac_cv_path_DX_MAKEINDEX
++if test -n "$DX_MAKEINDEX"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_MAKEINDEX" >&5
++$as_echo "$DX_MAKEINDEX" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++fi
++if test -z "$ac_cv_path_DX_MAKEINDEX"; then
++ ac_pt_DX_MAKEINDEX=$DX_MAKEINDEX
++ # Extract the first word of "makeindex", so it can be a program name with args.
++set dummy makeindex; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_path_ac_pt_DX_MAKEINDEX+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ case $ac_pt_DX_MAKEINDEX in
++ [\\/]* | ?:[\\/]*)
++ ac_cv_path_ac_pt_DX_MAKEINDEX="$ac_pt_DX_MAKEINDEX" # Let the user override the test with a path.
++ ;;
++ *)
++ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_path_ac_pt_DX_MAKEINDEX="$as_dir/$ac_word$ac_exec_ext"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++ ;;
++esac
++fi
++ac_pt_DX_MAKEINDEX=$ac_cv_path_ac_pt_DX_MAKEINDEX
++if test -n "$ac_pt_DX_MAKEINDEX"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_MAKEINDEX" >&5
++$as_echo "$ac_pt_DX_MAKEINDEX" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++ if test "x$ac_pt_DX_MAKEINDEX" = x; then
++ DX_MAKEINDEX=""
++ else
++ case $cross_compiling:$ac_tool_warned in
++yes:)
++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
++$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
++ac_tool_warned=yes ;;
++esac
++ DX_MAKEINDEX=$ac_pt_DX_MAKEINDEX
++ fi
++else
++ DX_MAKEINDEX="$ac_cv_path_DX_MAKEINDEX"
++fi
++
++if test "$DX_FLAG_$DX_CURRENT_FEATURE$DX_MAKEINDEX" = 1; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: makeindex not found - will not generate doxygen PostScript documentation" >&5
++$as_echo "$as_me: WARNING: makeindex not found - will not generate doxygen PostScript documentation" >&2;}
++ DX_FLAG_ps=0
++
++fi
++
++
++if test -n "$ac_tool_prefix"; then
++ # Extract the first word of "${ac_tool_prefix}dvips", so it can be a program name with args.
++set dummy ${ac_tool_prefix}dvips; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_path_DX_DVIPS+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ case $DX_DVIPS in
++ [\\/]* | ?:[\\/]*)
++ ac_cv_path_DX_DVIPS="$DX_DVIPS" # Let the user override the test with a path.
++ ;;
++ *)
++ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_path_DX_DVIPS="$as_dir/$ac_word$ac_exec_ext"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++ ;;
++esac
++fi
++DX_DVIPS=$ac_cv_path_DX_DVIPS
++if test -n "$DX_DVIPS"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_DVIPS" >&5
++$as_echo "$DX_DVIPS" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++fi
++if test -z "$ac_cv_path_DX_DVIPS"; then
++ ac_pt_DX_DVIPS=$DX_DVIPS
++ # Extract the first word of "dvips", so it can be a program name with args.
++set dummy dvips; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_path_ac_pt_DX_DVIPS+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ case $ac_pt_DX_DVIPS in
++ [\\/]* | ?:[\\/]*)
++ ac_cv_path_ac_pt_DX_DVIPS="$ac_pt_DX_DVIPS" # Let the user override the test with a path.
++ ;;
++ *)
++ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_path_ac_pt_DX_DVIPS="$as_dir/$ac_word$ac_exec_ext"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++ ;;
++esac
++fi
++ac_pt_DX_DVIPS=$ac_cv_path_ac_pt_DX_DVIPS
++if test -n "$ac_pt_DX_DVIPS"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_DVIPS" >&5
++$as_echo "$ac_pt_DX_DVIPS" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++ if test "x$ac_pt_DX_DVIPS" = x; then
++ DX_DVIPS=""
++ else
++ case $cross_compiling:$ac_tool_warned in
++yes:)
++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
++$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
++ac_tool_warned=yes ;;
++esac
++ DX_DVIPS=$ac_pt_DX_DVIPS
++ fi
++else
++ DX_DVIPS="$ac_cv_path_DX_DVIPS"
++fi
++
++if test "$DX_FLAG_$DX_CURRENT_FEATURE$DX_DVIPS" = 1; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: dvips not found - will not generate doxygen PostScript documentation" >&5
++$as_echo "$as_me: WARNING: dvips not found - will not generate doxygen PostScript documentation" >&2;}
++ DX_FLAG_ps=0
++
++fi
++
++
++if test -n "$ac_tool_prefix"; then
++ # Extract the first word of "${ac_tool_prefix}egrep", so it can be a program name with args.
++set dummy ${ac_tool_prefix}egrep; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_path_DX_EGREP+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ case $DX_EGREP in
++ [\\/]* | ?:[\\/]*)
++ ac_cv_path_DX_EGREP="$DX_EGREP" # Let the user override the test with a path.
++ ;;
++ *)
++ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_path_DX_EGREP="$as_dir/$ac_word$ac_exec_ext"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++ ;;
++esac
++fi
++DX_EGREP=$ac_cv_path_DX_EGREP
++if test -n "$DX_EGREP"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_EGREP" >&5
++$as_echo "$DX_EGREP" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++fi
++if test -z "$ac_cv_path_DX_EGREP"; then
++ ac_pt_DX_EGREP=$DX_EGREP
++ # Extract the first word of "egrep", so it can be a program name with args.
++set dummy egrep; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_path_ac_pt_DX_EGREP+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ case $ac_pt_DX_EGREP in
++ [\\/]* | ?:[\\/]*)
++ ac_cv_path_ac_pt_DX_EGREP="$ac_pt_DX_EGREP" # Let the user override the test with a path.
++ ;;
++ *)
++ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_path_ac_pt_DX_EGREP="$as_dir/$ac_word$ac_exec_ext"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++ ;;
++esac
++fi
++ac_pt_DX_EGREP=$ac_cv_path_ac_pt_DX_EGREP
++if test -n "$ac_pt_DX_EGREP"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_EGREP" >&5
++$as_echo "$ac_pt_DX_EGREP" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++ if test "x$ac_pt_DX_EGREP" = x; then
++ DX_EGREP=""
++ else
++ case $cross_compiling:$ac_tool_warned in
++yes:)
++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
++$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
++ac_tool_warned=yes ;;
++esac
++ DX_EGREP=$ac_pt_DX_EGREP
++ fi
++else
++ DX_EGREP="$ac_cv_path_DX_EGREP"
++fi
++
++if test "$DX_FLAG_$DX_CURRENT_FEATURE$DX_EGREP" = 1; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: egrep not found - will not generate doxygen PostScript documentation" >&5
++$as_echo "$as_me: WARNING: egrep not found - will not generate doxygen PostScript documentation" >&2;}
++ DX_FLAG_ps=0
++
++fi
++
++ :
++fi
++if test "$DX_FLAG_ps" = 1; then
++ if :; then
++ DX_COND_ps_TRUE=
++ DX_COND_ps_FALSE='#'
++else
++ DX_COND_ps_TRUE='#'
++ DX_COND_ps_FALSE=
++fi
++
++
++ :
++else
++ if false; then
++ DX_COND_ps_TRUE=
++ DX_COND_ps_FALSE='#'
++else
++ DX_COND_ps_TRUE='#'
++ DX_COND_ps_FALSE=
++fi
++
++
++ :
++fi
++
++
++# PDF file generation:
++
++
++
++ # Check whether --enable-doxygen-pdf was given.
++if test "${enable_doxygen_pdf+set}" = set; then :
++ enableval=$enable_doxygen_pdf;
++case "$enableval" in
++#(
++y|Y|yes|Yes|YES)
++ DX_FLAG_pdf=1
++
++
++test "$DX_FLAG_doc" = "1" \
++|| as_fn_error "doxygen-pdf requires doxygen-pdf" "$LINENO" 5
++
++;; #(
++n|N|no|No|NO)
++ DX_FLAG_pdf=0
++
++;; #(
++*)
++ as_fn_error "invalid value '$enableval' given to doxygen-pdf" "$LINENO" 5
++;;
++esac
++
++else
++
++DX_FLAG_pdf=1
++
++
++test "$DX_FLAG_doc" = "1" || DX_FLAG_pdf=0
++
++
++
++fi
++
++if test "$DX_FLAG_pdf" = 1; then
++
++if test -n "$ac_tool_prefix"; then
++ # Extract the first word of "${ac_tool_prefix}pdflatex", so it can be a program name with args.
++set dummy ${ac_tool_prefix}pdflatex; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_path_DX_PDFLATEX+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ case $DX_PDFLATEX in
++ [\\/]* | ?:[\\/]*)
++ ac_cv_path_DX_PDFLATEX="$DX_PDFLATEX" # Let the user override the test with a path.
++ ;;
++ *)
++ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_path_DX_PDFLATEX="$as_dir/$ac_word$ac_exec_ext"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++ ;;
++esac
++fi
++DX_PDFLATEX=$ac_cv_path_DX_PDFLATEX
++if test -n "$DX_PDFLATEX"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_PDFLATEX" >&5
++$as_echo "$DX_PDFLATEX" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++fi
++if test -z "$ac_cv_path_DX_PDFLATEX"; then
++ ac_pt_DX_PDFLATEX=$DX_PDFLATEX
++ # Extract the first word of "pdflatex", so it can be a program name with args.
++set dummy pdflatex; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_path_ac_pt_DX_PDFLATEX+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ case $ac_pt_DX_PDFLATEX in
++ [\\/]* | ?:[\\/]*)
++ ac_cv_path_ac_pt_DX_PDFLATEX="$ac_pt_DX_PDFLATEX" # Let the user override the test with a path.
++ ;;
++ *)
++ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_path_ac_pt_DX_PDFLATEX="$as_dir/$ac_word$ac_exec_ext"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++ ;;
++esac
++fi
++ac_pt_DX_PDFLATEX=$ac_cv_path_ac_pt_DX_PDFLATEX
++if test -n "$ac_pt_DX_PDFLATEX"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_PDFLATEX" >&5
++$as_echo "$ac_pt_DX_PDFLATEX" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++ if test "x$ac_pt_DX_PDFLATEX" = x; then
++ DX_PDFLATEX=""
++ else
++ case $cross_compiling:$ac_tool_warned in
++yes:)
++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
++$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
++ac_tool_warned=yes ;;
++esac
++ DX_PDFLATEX=$ac_pt_DX_PDFLATEX
++ fi
++else
++ DX_PDFLATEX="$ac_cv_path_DX_PDFLATEX"
++fi
++
++if test "$DX_FLAG_$DX_CURRENT_FEATURE$DX_PDFLATEX" = 1; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: pdflatex not found - will not generate doxygen PDF documentation" >&5
++$as_echo "$as_me: WARNING: pdflatex not found - will not generate doxygen PDF documentation" >&2;}
++ DX_FLAG_pdf=0
++
++fi
++
++
++if test -n "$ac_tool_prefix"; then
++ # Extract the first word of "${ac_tool_prefix}makeindex", so it can be a program name with args.
++set dummy ${ac_tool_prefix}makeindex; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_path_DX_MAKEINDEX+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ case $DX_MAKEINDEX in
++ [\\/]* | ?:[\\/]*)
++ ac_cv_path_DX_MAKEINDEX="$DX_MAKEINDEX" # Let the user override the test with a path.
++ ;;
++ *)
++ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_path_DX_MAKEINDEX="$as_dir/$ac_word$ac_exec_ext"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++ ;;
++esac
++fi
++DX_MAKEINDEX=$ac_cv_path_DX_MAKEINDEX
++if test -n "$DX_MAKEINDEX"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_MAKEINDEX" >&5
++$as_echo "$DX_MAKEINDEX" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++fi
++if test -z "$ac_cv_path_DX_MAKEINDEX"; then
++ ac_pt_DX_MAKEINDEX=$DX_MAKEINDEX
++ # Extract the first word of "makeindex", so it can be a program name with args.
++set dummy makeindex; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_path_ac_pt_DX_MAKEINDEX+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ case $ac_pt_DX_MAKEINDEX in
++ [\\/]* | ?:[\\/]*)
++ ac_cv_path_ac_pt_DX_MAKEINDEX="$ac_pt_DX_MAKEINDEX" # Let the user override the test with a path.
++ ;;
++ *)
++ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_path_ac_pt_DX_MAKEINDEX="$as_dir/$ac_word$ac_exec_ext"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++ ;;
++esac
++fi
++ac_pt_DX_MAKEINDEX=$ac_cv_path_ac_pt_DX_MAKEINDEX
++if test -n "$ac_pt_DX_MAKEINDEX"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_MAKEINDEX" >&5
++$as_echo "$ac_pt_DX_MAKEINDEX" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++ if test "x$ac_pt_DX_MAKEINDEX" = x; then
++ DX_MAKEINDEX=""
++ else
++ case $cross_compiling:$ac_tool_warned in
++yes:)
++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
++$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
++ac_tool_warned=yes ;;
++esac
++ DX_MAKEINDEX=$ac_pt_DX_MAKEINDEX
++ fi
++else
++ DX_MAKEINDEX="$ac_cv_path_DX_MAKEINDEX"
++fi
++
++if test "$DX_FLAG_$DX_CURRENT_FEATURE$DX_MAKEINDEX" = 1; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: makeindex not found - will not generate doxygen PDF documentation" >&5
++$as_echo "$as_me: WARNING: makeindex not found - will not generate doxygen PDF documentation" >&2;}
++ DX_FLAG_pdf=0
++
++fi
++
++
++if test -n "$ac_tool_prefix"; then
++ # Extract the first word of "${ac_tool_prefix}egrep", so it can be a program name with args.
++set dummy ${ac_tool_prefix}egrep; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_path_DX_EGREP+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ case $DX_EGREP in
++ [\\/]* | ?:[\\/]*)
++ ac_cv_path_DX_EGREP="$DX_EGREP" # Let the user override the test with a path.
++ ;;
++ *)
++ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_path_DX_EGREP="$as_dir/$ac_word$ac_exec_ext"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++ ;;
++esac
++fi
++DX_EGREP=$ac_cv_path_DX_EGREP
++if test -n "$DX_EGREP"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DX_EGREP" >&5
++$as_echo "$DX_EGREP" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++fi
++if test -z "$ac_cv_path_DX_EGREP"; then
++ ac_pt_DX_EGREP=$DX_EGREP
++ # Extract the first word of "egrep", so it can be a program name with args.
++set dummy egrep; ac_word=$2
++{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_path_ac_pt_DX_EGREP+set}" = set; then :
++ $as_echo_n "(cached) " >&6
++else
++ case $ac_pt_DX_EGREP in
++ [\\/]* | ?:[\\/]*)
++ ac_cv_path_ac_pt_DX_EGREP="$ac_pt_DX_EGREP" # Let the user override the test with a path.
++ ;;
++ *)
++ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_path_ac_pt_DX_EGREP="$as_dir/$ac_word$ac_exec_ext"
++ $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++ done
++IFS=$as_save_IFS
++
++ ;;
++esac
++fi
++ac_pt_DX_EGREP=$ac_cv_path_ac_pt_DX_EGREP
++if test -n "$ac_pt_DX_EGREP"; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_DX_EGREP" >&5
++$as_echo "$ac_pt_DX_EGREP" >&6; }
++else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++ if test "x$ac_pt_DX_EGREP" = x; then
++ DX_EGREP=""
++ else
++ case $cross_compiling:$ac_tool_warned in
++yes:)
++{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
++$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
++ac_tool_warned=yes ;;
++esac
++ DX_EGREP=$ac_pt_DX_EGREP
++ fi
++else
++ DX_EGREP="$ac_cv_path_DX_EGREP"
++fi
++
++if test "$DX_FLAG_$DX_CURRENT_FEATURE$DX_EGREP" = 1; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: egrep not found - will not generate doxygen PDF documentation" >&5
++$as_echo "$as_me: WARNING: egrep not found - will not generate doxygen PDF documentation" >&2;}
++ DX_FLAG_pdf=0
++
++fi
++
++ :
++fi
++if test "$DX_FLAG_pdf" = 1; then
++ if :; then
++ DX_COND_pdf_TRUE=
++ DX_COND_pdf_FALSE='#'
++else
++ DX_COND_pdf_TRUE='#'
++ DX_COND_pdf_FALSE=
++fi
++
++
++ :
++else
++ if false; then
++ DX_COND_pdf_TRUE=
++ DX_COND_pdf_FALSE='#'
++else
++ DX_COND_pdf_TRUE='#'
++ DX_COND_pdf_FALSE=
++fi
++
++
++ :
++fi
++
++
++# LaTeX generation for PS and/or PDF:
++if test "$DX_FLAG_ps" = 1 || test "$DX_FLAG_pdf" = 1; then
++ if :; then
++ DX_COND_latex_TRUE=
++ DX_COND_latex_FALSE='#'
++else
++ DX_COND_latex_TRUE='#'
++ DX_COND_latex_FALSE=
++fi
++
++ DX_ENV="$DX_ENV GENERATE_LATEX='YES'"
++
++else
++ if false; then
++ DX_COND_latex_TRUE=
++ DX_COND_latex_FALSE='#'
++else
++ DX_COND_latex_TRUE='#'
++ DX_COND_latex_FALSE=
++fi
++
++ DX_ENV="$DX_ENV GENERATE_LATEX='NO'"
++
++fi
++
++# Paper size for PS and/or PDF:
++
++case "$DOXYGEN_PAPER_SIZE" in
++#(
++"")
++ DOXYGEN_PAPER_SIZE=""
++
++;; #(
++a4wide|a4|letter|legal|executive)
++ DX_ENV="$DX_ENV PAPER_SIZE='$DOXYGEN_PAPER_SIZE'"
++
++;; #(
++*)
++ as_fn_error "unknown DOXYGEN_PAPER_SIZE='$DOXYGEN_PAPER_SIZE'" "$LINENO" 5
++;;
++esac
++
++#For debugging:
++#echo DX_FLAG_doc=$DX_FLAG_doc
++#echo DX_FLAG_dot=$DX_FLAG_dot
++#echo DX_FLAG_man=$DX_FLAG_man
++#echo DX_FLAG_html=$DX_FLAG_html
++#echo DX_FLAG_chm=$DX_FLAG_chm
++#echo DX_FLAG_chi=$DX_FLAG_chi
++#echo DX_FLAG_rtf=$DX_FLAG_rtf
++#echo DX_FLAG_xml=$DX_FLAG_xml
++#echo DX_FLAG_pdf=$DX_FLAG_pdf
++#echo DX_FLAG_ps=$DX_FLAG_ps
++#echo DX_ENV=$DX_ENV
++
++
++ac_config_files="$ac_config_files Makefile src/Makefile src/snmp/Makefile src/libdessert/Makefile include/Makefile libdessert.pc"
++
++cat >confcache <<\_ACEOF
++# This file is a shell script that caches the results of configure
++# tests run on this system so they can be shared between configure
++# scripts and configure runs, see configure's option --config-cache.
++# It is not useful on other systems. If it contains results you don't
++# want to keep, you may remove or edit it.
++#
++# config.status only pays attention to the cache file if you give it
++# the --recheck option to rerun configure.
++#
++# `ac_cv_env_foo' variables (set or unset) will be overridden when
++# loading this file, other *unset* `ac_cv_foo' will be assigned the
++# following values.
++
++_ACEOF
++
++# The following way of writing the cache mishandles newlines in values,
++# but we know of no workaround that is simple, portable, and efficient.
++# So, we kill variables containing newlines.
++# Ultrix sh set writes to stderr and can't be redirected directly,
++# and sets the high bit in the cache file unless we assign to the vars.
++(
++ for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
++ eval ac_val=\$$ac_var
++ case $ac_val in #(
++ *${as_nl}*)
++ case $ac_var in #(
++ *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
++$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
++ esac
++ case $ac_var in #(
++ _ | IFS | as_nl) ;; #(
++ BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
++ *) { eval $ac_var=; unset $ac_var;} ;;
++ esac ;;
++ esac
++ done
++
++ (set) 2>&1 |
++ case $as_nl`(ac_space=' '; set) 2>&1` in #(
++ *${as_nl}ac_space=\ *)
++ # `set' does not quote correctly, so add quotes: double-quote
++ # substitution turns \\\\ into \\, and sed turns \\ into \.
++ sed -n \
++ "s/'/'\\\\''/g;
++ s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
++ ;; #(
++ *)
++ # `set' quotes correctly as required by POSIX, so do not add quotes.
++ sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
++ ;;
++ esac |
++ sort
++) |
++ sed '
++ /^ac_cv_env_/b end
++ t clear
++ :clear
++ s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
++ t end
++ s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
++ :end' >>confcache
++if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
++ if test -w "$cache_file"; then
++ test "x$cache_file" != "x/dev/null" &&
++ { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
++$as_echo "$as_me: updating cache $cache_file" >&6;}
++ cat confcache >$cache_file
++ else
++ { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
++$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
++ fi
++fi
++rm -f confcache
++
++test "x$prefix" = xNONE && prefix=$ac_default_prefix
++# Let make expand exec_prefix.
++test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
++
++DEFS=-DHAVE_CONFIG_H
++
++ac_libobjs=
++ac_ltlibobjs=
++for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
++ # 1. Remove the extension, and $U if already installed.
++ ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
++ ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
++ # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR
++ # will be set to the directory where LIBOBJS objects are built.
++ as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
++ as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
++done
++LIBOBJS=$ac_libobjs
++
++LTLIBOBJS=$ac_ltlibobjs
++
++
++ if test -n "$EXEEXT"; then
++ am__EXEEXT_TRUE=
++ am__EXEEXT_FALSE='#'
++else
++ am__EXEEXT_TRUE='#'
++ am__EXEEXT_FALSE=
++fi
++
++if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
++ as_fn_error "conditional \"AMDEP\" was never defined.
++Usually this means the macro was only invoked conditionally." "$LINENO" 5
++fi
++if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
++ as_fn_error "conditional \"am__fastdepCC\" was never defined.
++Usually this means the macro was only invoked conditionally." "$LINENO" 5
++fi
++if test -z "${DX_COND_doc_TRUE}" && test -z "${DX_COND_doc_FALSE}"; then
++ as_fn_error "conditional \"DX_COND_doc\" was never defined.
++Usually this means the macro was only invoked conditionally." "$LINENO" 5
++fi
++if test -z "${DX_COND_doc_TRUE}" && test -z "${DX_COND_doc_FALSE}"; then
++ as_fn_error "conditional \"DX_COND_doc\" was never defined.
++Usually this means the macro was only invoked conditionally." "$LINENO" 5
++fi
++if test -z "${DX_COND_dot_TRUE}" && test -z "${DX_COND_dot_FALSE}"; then
++ as_fn_error "conditional \"DX_COND_dot\" was never defined.
++Usually this means the macro was only invoked conditionally." "$LINENO" 5
++fi
++if test -z "${DX_COND_dot_TRUE}" && test -z "${DX_COND_dot_FALSE}"; then
++ as_fn_error "conditional \"DX_COND_dot\" was never defined.
++Usually this means the macro was only invoked conditionally." "$LINENO" 5
++fi
++if test -z "${DX_COND_man_TRUE}" && test -z "${DX_COND_man_FALSE}"; then
++ as_fn_error "conditional \"DX_COND_man\" was never defined.
++Usually this means the macro was only invoked conditionally." "$LINENO" 5
++fi
++if test -z "${DX_COND_man_TRUE}" && test -z "${DX_COND_man_FALSE}"; then
++ as_fn_error "conditional \"DX_COND_man\" was never defined.
++Usually this means the macro was only invoked conditionally." "$LINENO" 5
++fi
++if test -z "${DX_COND_rtf_TRUE}" && test -z "${DX_COND_rtf_FALSE}"; then
++ as_fn_error "conditional \"DX_COND_rtf\" was never defined.
++Usually this means the macro was only invoked conditionally." "$LINENO" 5
++fi
++if test -z "${DX_COND_rtf_TRUE}" && test -z "${DX_COND_rtf_FALSE}"; then
++ as_fn_error "conditional \"DX_COND_rtf\" was never defined.
++Usually this means the macro was only invoked conditionally." "$LINENO" 5
++fi
++if test -z "${DX_COND_xml_TRUE}" && test -z "${DX_COND_xml_FALSE}"; then
++ as_fn_error "conditional \"DX_COND_xml\" was never defined.
++Usually this means the macro was only invoked conditionally." "$LINENO" 5
++fi
++if test -z "${DX_COND_xml_TRUE}" && test -z "${DX_COND_xml_FALSE}"; then
++ as_fn_error "conditional \"DX_COND_xml\" was never defined.
++Usually this means the macro was only invoked conditionally." "$LINENO" 5
++fi
++if test -z "${DX_COND_chm_TRUE}" && test -z "${DX_COND_chm_FALSE}"; then
++ as_fn_error "conditional \"DX_COND_chm\" was never defined.
++Usually this means the macro was only invoked conditionally." "$LINENO" 5
++fi
++if test -z "${DX_COND_chm_TRUE}" && test -z "${DX_COND_chm_FALSE}"; then
++ as_fn_error "conditional \"DX_COND_chm\" was never defined.
++Usually this means the macro was only invoked conditionally." "$LINENO" 5
++fi
++if test -z "${DX_COND_chi_TRUE}" && test -z "${DX_COND_chi_FALSE}"; then
++ as_fn_error "conditional \"DX_COND_chi\" was never defined.
++Usually this means the macro was only invoked conditionally." "$LINENO" 5
++fi
++if test -z "${DX_COND_chi_TRUE}" && test -z "${DX_COND_chi_FALSE}"; then
++ as_fn_error "conditional \"DX_COND_chi\" was never defined.
++Usually this means the macro was only invoked conditionally." "$LINENO" 5
++fi
++if test -z "${DX_COND_html_TRUE}" && test -z "${DX_COND_html_FALSE}"; then
++ as_fn_error "conditional \"DX_COND_html\" was never defined.
++Usually this means the macro was only invoked conditionally." "$LINENO" 5
++fi
++if test -z "${DX_COND_html_TRUE}" && test -z "${DX_COND_html_FALSE}"; then
++ as_fn_error "conditional \"DX_COND_html\" was never defined.
++Usually this means the macro was only invoked conditionally." "$LINENO" 5
++fi
++if test -z "${DX_COND_ps_TRUE}" && test -z "${DX_COND_ps_FALSE}"; then
++ as_fn_error "conditional \"DX_COND_ps\" was never defined.
++Usually this means the macro was only invoked conditionally." "$LINENO" 5
++fi
++if test -z "${DX_COND_ps_TRUE}" && test -z "${DX_COND_ps_FALSE}"; then
++ as_fn_error "conditional \"DX_COND_ps\" was never defined.
++Usually this means the macro was only invoked conditionally." "$LINENO" 5
++fi
++if test -z "${DX_COND_pdf_TRUE}" && test -z "${DX_COND_pdf_FALSE}"; then
++ as_fn_error "conditional \"DX_COND_pdf\" was never defined.
++Usually this means the macro was only invoked conditionally." "$LINENO" 5
++fi
++if test -z "${DX_COND_pdf_TRUE}" && test -z "${DX_COND_pdf_FALSE}"; then
++ as_fn_error "conditional \"DX_COND_pdf\" was never defined.
++Usually this means the macro was only invoked conditionally." "$LINENO" 5
++fi
++if test -z "${DX_COND_latex_TRUE}" && test -z "${DX_COND_latex_FALSE}"; then
++ as_fn_error "conditional \"DX_COND_latex\" was never defined.
++Usually this means the macro was only invoked conditionally." "$LINENO" 5
++fi
++if test -z "${DX_COND_latex_TRUE}" && test -z "${DX_COND_latex_FALSE}"; then
++ as_fn_error "conditional \"DX_COND_latex\" was never defined.
++Usually this means the macro was only invoked conditionally." "$LINENO" 5
++fi
++
++: ${CONFIG_STATUS=./config.status}
++ac_write_fail=0
++ac_clean_files_save=$ac_clean_files
++ac_clean_files="$ac_clean_files $CONFIG_STATUS"
++{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
++$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
++as_write_fail=0
++cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
++#! $SHELL
++# Generated by $as_me.
++# Run this file to recreate the current configuration.
++# Compiler output produced by configure, useful for debugging
++# configure, is in config.log if it exists.
++
++debug=false
++ac_cs_recheck=false
++ac_cs_silent=false
++
++SHELL=\${CONFIG_SHELL-$SHELL}
++export SHELL
++_ASEOF
++cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
++## -------------------- ##
++## M4sh Initialization. ##
++## -------------------- ##
++
++# Be more Bourne compatible
++DUALCASE=1; export DUALCASE # for MKS sh
++if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
++ emulate sh
++ NULLCMD=:
++ # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
++ # is contrary to our usage. Disable this feature.
++ alias -g '${1+"$@"}'='"$@"'
++ setopt NO_GLOB_SUBST
++else
++ case `(set -o) 2>/dev/null` in #(
++ *posix*) :
++ set -o posix ;; #(
++ *) :
++ ;;
++esac
++fi
++
++
++as_nl='
++'
++export as_nl
++# Printing a long string crashes Solaris 7 /usr/bin/printf.
++as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
++as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
++as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
++# Prefer a ksh shell builtin over an external printf program on Solaris,
++# but without wasting forks for bash or zsh.
++if test -z "$BASH_VERSION$ZSH_VERSION" \
++ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
++ as_echo='print -r --'
++ as_echo_n='print -rn --'
++elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
++ as_echo='printf %s\n'
++ as_echo_n='printf %s'
++else
++ if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
++ as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
++ as_echo_n='/usr/ucb/echo -n'
++ else
++ as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
++ as_echo_n_body='eval
++ arg=$1;
++ case $arg in #(
++ *"$as_nl"*)
++ expr "X$arg" : "X\\(.*\\)$as_nl";
++ arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
++ esac;
++ expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
++ '
++ export as_echo_n_body
++ as_echo_n='sh -c $as_echo_n_body as_echo'
++ fi
++ export as_echo_body
++ as_echo='sh -c $as_echo_body as_echo'
++fi
++
++# The user is always right.
++if test "${PATH_SEPARATOR+set}" != set; then
++ PATH_SEPARATOR=:
++ (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
++ (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
++ PATH_SEPARATOR=';'
++ }
++fi
++
++
++# IFS
++# We need space, tab and new line, in precisely that order. Quoting is
++# there to prevent editors from complaining about space-tab.
++# (If _AS_PATH_WALK were called with IFS unset, it would disable word
++# splitting by setting IFS to empty value.)
++IFS=" "" $as_nl"
++
++# Find who we are. Look in the path if we contain no directory separator.
++case $0 in #((
++ *[\\/]* ) as_myself=$0 ;;
++ *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
++ done
++IFS=$as_save_IFS
++
++ ;;
++esac
++# We did not find ourselves, most probably we were run as `sh COMMAND'
++# in which case we are not to be found in the path.
++if test "x$as_myself" = x; then
++ as_myself=$0
++fi
++if test ! -f "$as_myself"; then
++ $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
++ exit 1
++fi
++
++# Unset variables that we do not need and which cause bugs (e.g. in
++# pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1"
++# suppresses any "Segmentation fault" message there. '((' could
++# trigger a bug in pdksh 5.2.14.
++for as_var in BASH_ENV ENV MAIL MAILPATH
++do eval test x\${$as_var+set} = xset \
++ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
++done
++PS1='$ '
++PS2='> '
++PS4='+ '
++
++# NLS nuisances.
++LC_ALL=C
++export LC_ALL
++LANGUAGE=C
++export LANGUAGE
++
++# CDPATH.
++(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
++
++
++# as_fn_error ERROR [LINENO LOG_FD]
++# ---------------------------------
++# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
++# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
++# script with status $?, using 1 if that was 0.
++as_fn_error ()
++{
++ as_status=$?; test $as_status -eq 0 && as_status=1
++ if test "$3"; then
++ as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
++ $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3
++ fi
++ $as_echo "$as_me: error: $1" >&2
++ as_fn_exit $as_status
++} # as_fn_error
++
++
++# as_fn_set_status STATUS
++# -----------------------
++# Set $? to STATUS, without forking.
++as_fn_set_status ()
++{
++ return $1
++} # as_fn_set_status
++
++# as_fn_exit STATUS
++# -----------------
++# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
++as_fn_exit ()
++{
++ set +e
++ as_fn_set_status $1
++ exit $1
++} # as_fn_exit
++
++# as_fn_unset VAR
++# ---------------
++# Portably unset VAR.
++as_fn_unset ()
++{
++ { eval $1=; unset $1;}
++}
++as_unset=as_fn_unset
++# as_fn_append VAR VALUE
++# ----------------------
++# Append the text in VALUE to the end of the definition contained in VAR. Take
++# advantage of any shell optimizations that allow amortized linear growth over
++# repeated appends, instead of the typical quadratic growth present in naive
++# implementations.
++if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
++ eval 'as_fn_append ()
++ {
++ eval $1+=\$2
++ }'
++else
++ as_fn_append ()
++ {
++ eval $1=\$$1\$2
++ }
++fi # as_fn_append
++
++# as_fn_arith ARG...
++# ------------------
++# Perform arithmetic evaluation on the ARGs, and store the result in the
++# global $as_val. Take advantage of shells that can avoid forks. The arguments
++# must be portable across $(()) and expr.
++if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
++ eval 'as_fn_arith ()
++ {
++ as_val=$(( $* ))
++ }'
++else
++ as_fn_arith ()
++ {
++ as_val=`expr "$@" || test $? -eq 1`
++ }
++fi # as_fn_arith
++
++
++if expr a : '\(a\)' >/dev/null 2>&1 &&
++ test "X`expr 00001 : '.*\(...\)'`" = X001; then
++ as_expr=expr
++else
++ as_expr=false
++fi
++
++if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
++ as_basename=basename
++else
++ as_basename=false
++fi
++
++if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
++ as_dirname=dirname
++else
++ as_dirname=false
++fi
++
++as_me=`$as_basename -- "$0" ||
++$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
++ X"$0" : 'X\(//\)$' \| \
++ X"$0" : 'X\(/\)' \| . 2>/dev/null ||
++$as_echo X/"$0" |
++ sed '/^.*\/\([^/][^/]*\)\/*$/{
++ s//\1/
++ q
++ }
++ /^X\/\(\/\/\)$/{
++ s//\1/
++ q
++ }
++ /^X\/\(\/\).*/{
++ s//\1/
++ q
++ }
++ s/.*/./; q'`
++
++# Avoid depending upon Character Ranges.
++as_cr_letters='abcdefghijklmnopqrstuvwxyz'
++as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
++as_cr_Letters=$as_cr_letters$as_cr_LETTERS
++as_cr_digits='0123456789'
++as_cr_alnum=$as_cr_Letters$as_cr_digits
++
++ECHO_C= ECHO_N= ECHO_T=
++case `echo -n x` in #(((((
++-n*)
++ case `echo 'xy\c'` in
++ *c*) ECHO_T=' ';; # ECHO_T is single tab character.
++ xy) ECHO_C='\c';;
++ *) echo `echo ksh88 bug on AIX 6.1` > /dev/null
++ ECHO_T=' ';;
++ esac;;
++*)
++ ECHO_N='-n';;
++esac
++
++rm -f conf$$ conf$$.exe conf$$.file
++if test -d conf$$.dir; then
++ rm -f conf$$.dir/conf$$.file
++else
++ rm -f conf$$.dir
++ mkdir conf$$.dir 2>/dev/null
++fi
++if (echo >conf$$.file) 2>/dev/null; then
++ if ln -s conf$$.file conf$$ 2>/dev/null; then
++ as_ln_s='ln -s'
++ # ... but there are two gotchas:
++ # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
++ # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
++ # In both cases, we have to default to `cp -p'.
++ ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
++ as_ln_s='cp -p'
++ elif ln conf$$.file conf$$ 2>/dev/null; then
++ as_ln_s=ln
++ else
++ as_ln_s='cp -p'
++ fi
++else
++ as_ln_s='cp -p'
++fi
++rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
++rmdir conf$$.dir 2>/dev/null
++
++
++# as_fn_mkdir_p
++# -------------
++# Create "$as_dir" as a directory, including parents if necessary.
++as_fn_mkdir_p ()
++{
++
++ case $as_dir in #(
++ -*) as_dir=./$as_dir;;
++ esac
++ test -d "$as_dir" || eval $as_mkdir_p || {
++ as_dirs=
++ while :; do
++ case $as_dir in #(
++ *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
++ *) as_qdir=$as_dir;;
++ esac
++ as_dirs="'$as_qdir' $as_dirs"
++ as_dir=`$as_dirname -- "$as_dir" ||
++$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
++ X"$as_dir" : 'X\(//\)[^/]' \| \
++ X"$as_dir" : 'X\(//\)$' \| \
++ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
++$as_echo X"$as_dir" |
++ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
++ s//\1/
++ q
++ }
++ /^X\(\/\/\)[^/].*/{
++ s//\1/
++ q
++ }
++ /^X\(\/\/\)$/{
++ s//\1/
++ q
++ }
++ /^X\(\/\).*/{
++ s//\1/
++ q
++ }
++ s/.*/./; q'`
++ test -d "$as_dir" && break
++ done
++ test -z "$as_dirs" || eval "mkdir $as_dirs"
++ } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir"
++
++
++} # as_fn_mkdir_p
++if mkdir -p . 2>/dev/null; then
++ as_mkdir_p='mkdir -p "$as_dir"'
++else
++ test -d ./-p && rmdir ./-p
++ as_mkdir_p=false
++fi
++
++if test -x / >/dev/null 2>&1; then
++ as_test_x='test -x'
++else
++ if ls -dL / >/dev/null 2>&1; then
++ as_ls_L_option=L
++ else
++ as_ls_L_option=
++ fi
++ as_test_x='
++ eval sh -c '\''
++ if test -d "$1"; then
++ test -d "$1/.";
++ else
++ case $1 in #(
++ -*)set "./$1";;
++ esac;
++ case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #((
++ ???[sx]*):;;*)false;;esac;fi
++ '\'' sh
++ '
++fi
++as_executable_p=$as_test_x
++
++# Sed expression to map a string onto a valid CPP name.
++as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
++
++# Sed expression to map a string onto a valid variable name.
++as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
++
++
++exec 6>&1
++## ----------------------------------- ##
++## Main body of $CONFIG_STATUS script. ##
++## ----------------------------------- ##
++_ASEOF
++test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1
++
++cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
++# Save the log message, to keep $0 and so on meaningful, and to
++# report actual input values of CONFIG_FILES etc. instead of their
++# values after options handling.
++ac_log="
++This file was extended by libdessert $as_me 0.86.14, which was
++generated by GNU Autoconf 2.65. Invocation command line was
++
++ CONFIG_FILES = $CONFIG_FILES
++ CONFIG_HEADERS = $CONFIG_HEADERS
++ CONFIG_LINKS = $CONFIG_LINKS
++ CONFIG_COMMANDS = $CONFIG_COMMANDS
++ $ $0 $@
++
++on `(hostname || uname -n) 2>/dev/null | sed 1q`
++"
++
++_ACEOF
++
++case $ac_config_files in *"
++"*) set x $ac_config_files; shift; ac_config_files=$*;;
++esac
++
++case $ac_config_headers in *"
++"*) set x $ac_config_headers; shift; ac_config_headers=$*;;
++esac
++
++
++cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
++# Files that config.status was made for.
++config_files="$ac_config_files"
++config_headers="$ac_config_headers"
++config_commands="$ac_config_commands"
++
++_ACEOF
++
++cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
++ac_cs_usage="\
++\`$as_me' instantiates files and other configuration actions
++from templates according to the current configuration. Unless the files
++and actions are specified as TAGs, all are instantiated by default.
++
++Usage: $0 [OPTION]... [TAG]...
++
++ -h, --help print this help, then exit
++ -V, --version print version number and configuration settings, then exit
++ --config print configuration, then exit
++ -q, --quiet, --silent
++ do not print progress messages
++ -d, --debug don't remove temporary files
++ --recheck update $as_me by reconfiguring in the same conditions
++ --file=FILE[:TEMPLATE]
++ instantiate the configuration file FILE
++ --header=FILE[:TEMPLATE]
++ instantiate the configuration header FILE
++
++Configuration files:
++$config_files
++
++Configuration headers:
++$config_headers
++
++Configuration commands:
++$config_commands
++
++Report bugs to <des-sert@spline.inf.fu-berlin.de>."
++
++_ACEOF
++cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
++ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
++ac_cs_version="\\
++libdessert config.status 0.86.14
++configured by $0, generated by GNU Autoconf 2.65,
++ with options \\"\$ac_cs_config\\"
++
++Copyright (C) 2009 Free Software Foundation, Inc.
++This config.status script is free software; the Free Software Foundation
++gives unlimited permission to copy, distribute and modify it."
++
++ac_pwd='$ac_pwd'
++srcdir='$srcdir'
++INSTALL='$INSTALL'
++MKDIR_P='$MKDIR_P'
++AWK='$AWK'
++test -n "\$AWK" || AWK=awk
++_ACEOF
++
++cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
++# The default lists apply if the user does not specify any file.
++ac_need_defaults=:
++while test $# != 0
++do
++ case $1 in
++ --*=*)
++ ac_option=`expr "X$1" : 'X\([^=]*\)='`
++ ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
++ ac_shift=:
++ ;;
++ *)
++ ac_option=$1
++ ac_optarg=$2
++ ac_shift=shift
++ ;;
++ esac
++
++ case $ac_option in
++ # Handling of the options.
++ -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
++ ac_cs_recheck=: ;;
++ --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
++ $as_echo "$ac_cs_version"; exit ;;
++ --config | --confi | --conf | --con | --co | --c )
++ $as_echo "$ac_cs_config"; exit ;;
++ --debug | --debu | --deb | --de | --d | -d )
++ debug=: ;;
++ --file | --fil | --fi | --f )
++ $ac_shift
++ case $ac_optarg in
++ *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
++ esac
++ as_fn_append CONFIG_FILES " '$ac_optarg'"
++ ac_need_defaults=false;;
++ --header | --heade | --head | --hea )
++ $ac_shift
++ case $ac_optarg in
++ *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
++ esac
++ as_fn_append CONFIG_HEADERS " '$ac_optarg'"
++ ac_need_defaults=false;;
++ --he | --h)
++ # Conflict between --help and --header
++ as_fn_error "ambiguous option: \`$1'
++Try \`$0 --help' for more information.";;
++ --help | --hel | -h )
++ $as_echo "$ac_cs_usage"; exit ;;
++ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
++ | -silent | --silent | --silen | --sile | --sil | --si | --s)
++ ac_cs_silent=: ;;
++
++ # This is an error.
++ -*) as_fn_error "unrecognized option: \`$1'
++Try \`$0 --help' for more information." ;;
++
++ *) as_fn_append ac_config_targets " $1"
++ ac_need_defaults=false ;;
++
++ esac
++ shift
++done
++
++ac_configure_extra_args=
++
++if $ac_cs_silent; then
++ exec 6>/dev/null
++ ac_configure_extra_args="$ac_configure_extra_args --silent"
++fi
++
++_ACEOF
++cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
++if \$ac_cs_recheck; then
++ set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
++ shift
++ \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
++ CONFIG_SHELL='$SHELL'
++ export CONFIG_SHELL
++ exec "\$@"
++fi
++
++_ACEOF
++cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
++exec 5>>config.log
++{
++ echo
++ sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
++## Running $as_me. ##
++_ASBOX
++ $as_echo "$ac_log"
++} >&5
++
++_ACEOF
++cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
++#
++# INIT-COMMANDS
++#
++AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
++
++
++# The HP-UX ksh and POSIX shell print the target directory to stdout
++# if CDPATH is set.
++(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
++
++sed_quote_subst='$sed_quote_subst'
++double_quote_subst='$double_quote_subst'
++delay_variable_subst='$delay_variable_subst'
++macro_version='`$ECHO "X$macro_version" | $Xsed -e "$delay_single_quote_subst"`'
++macro_revision='`$ECHO "X$macro_revision" | $Xsed -e "$delay_single_quote_subst"`'
++enable_shared='`$ECHO "X$enable_shared" | $Xsed -e "$delay_single_quote_subst"`'
++enable_static='`$ECHO "X$enable_static" | $Xsed -e "$delay_single_quote_subst"`'
++pic_mode='`$ECHO "X$pic_mode" | $Xsed -e "$delay_single_quote_subst"`'
++enable_fast_install='`$ECHO "X$enable_fast_install" | $Xsed -e "$delay_single_quote_subst"`'
++host_alias='`$ECHO "X$host_alias" | $Xsed -e "$delay_single_quote_subst"`'
++host='`$ECHO "X$host" | $Xsed -e "$delay_single_quote_subst"`'
++host_os='`$ECHO "X$host_os" | $Xsed -e "$delay_single_quote_subst"`'
++build_alias='`$ECHO "X$build_alias" | $Xsed -e "$delay_single_quote_subst"`'
++build='`$ECHO "X$build" | $Xsed -e "$delay_single_quote_subst"`'
++build_os='`$ECHO "X$build_os" | $Xsed -e "$delay_single_quote_subst"`'
++SED='`$ECHO "X$SED" | $Xsed -e "$delay_single_quote_subst"`'
++Xsed='`$ECHO "X$Xsed" | $Xsed -e "$delay_single_quote_subst"`'
++GREP='`$ECHO "X$GREP" | $Xsed -e "$delay_single_quote_subst"`'
++EGREP='`$ECHO "X$EGREP" | $Xsed -e "$delay_single_quote_subst"`'
++FGREP='`$ECHO "X$FGREP" | $Xsed -e "$delay_single_quote_subst"`'
++LD='`$ECHO "X$LD" | $Xsed -e "$delay_single_quote_subst"`'
++NM='`$ECHO "X$NM" | $Xsed -e "$delay_single_quote_subst"`'
++LN_S='`$ECHO "X$LN_S" | $Xsed -e "$delay_single_quote_subst"`'
++max_cmd_len='`$ECHO "X$max_cmd_len" | $Xsed -e "$delay_single_quote_subst"`'
++ac_objext='`$ECHO "X$ac_objext" | $Xsed -e "$delay_single_quote_subst"`'
++exeext='`$ECHO "X$exeext" | $Xsed -e "$delay_single_quote_subst"`'
++lt_unset='`$ECHO "X$lt_unset" | $Xsed -e "$delay_single_quote_subst"`'
++lt_SP2NL='`$ECHO "X$lt_SP2NL" | $Xsed -e "$delay_single_quote_subst"`'
++lt_NL2SP='`$ECHO "X$lt_NL2SP" | $Xsed -e "$delay_single_quote_subst"`'
++reload_flag='`$ECHO "X$reload_flag" | $Xsed -e "$delay_single_quote_subst"`'
++reload_cmds='`$ECHO "X$reload_cmds" | $Xsed -e "$delay_single_quote_subst"`'
++OBJDUMP='`$ECHO "X$OBJDUMP" | $Xsed -e "$delay_single_quote_subst"`'
++deplibs_check_method='`$ECHO "X$deplibs_check_method" | $Xsed -e "$delay_single_quote_subst"`'
++file_magic_cmd='`$ECHO "X$file_magic_cmd" | $Xsed -e "$delay_single_quote_subst"`'
++AR='`$ECHO "X$AR" | $Xsed -e "$delay_single_quote_subst"`'
++AR_FLAGS='`$ECHO "X$AR_FLAGS" | $Xsed -e "$delay_single_quote_subst"`'
++STRIP='`$ECHO "X$STRIP" | $Xsed -e "$delay_single_quote_subst"`'
++RANLIB='`$ECHO "X$RANLIB" | $Xsed -e "$delay_single_quote_subst"`'
++old_postinstall_cmds='`$ECHO "X$old_postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
++old_postuninstall_cmds='`$ECHO "X$old_postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
++old_archive_cmds='`$ECHO "X$old_archive_cmds" | $Xsed -e "$delay_single_quote_subst"`'
++CC='`$ECHO "X$CC" | $Xsed -e "$delay_single_quote_subst"`'
++CFLAGS='`$ECHO "X$CFLAGS" | $Xsed -e "$delay_single_quote_subst"`'
++compiler='`$ECHO "X$compiler" | $Xsed -e "$delay_single_quote_subst"`'
++GCC='`$ECHO "X$GCC" | $Xsed -e "$delay_single_quote_subst"`'
++lt_cv_sys_global_symbol_pipe='`$ECHO "X$lt_cv_sys_global_symbol_pipe" | $Xsed -e "$delay_single_quote_subst"`'
++lt_cv_sys_global_symbol_to_cdecl='`$ECHO "X$lt_cv_sys_global_symbol_to_cdecl" | $Xsed -e "$delay_single_quote_subst"`'
++lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address" | $Xsed -e "$delay_single_quote_subst"`'
++lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "X$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`'
++objdir='`$ECHO "X$objdir" | $Xsed -e "$delay_single_quote_subst"`'
++SHELL='`$ECHO "X$SHELL" | $Xsed -e "$delay_single_quote_subst"`'
++ECHO='`$ECHO "X$ECHO" | $Xsed -e "$delay_single_quote_subst"`'
++MAGIC_CMD='`$ECHO "X$MAGIC_CMD" | $Xsed -e "$delay_single_quote_subst"`'
++lt_prog_compiler_no_builtin_flag='`$ECHO "X$lt_prog_compiler_no_builtin_flag" | $Xsed -e "$delay_single_quote_subst"`'
++lt_prog_compiler_wl='`$ECHO "X$lt_prog_compiler_wl" | $Xsed -e "$delay_single_quote_subst"`'
++lt_prog_compiler_pic='`$ECHO "X$lt_prog_compiler_pic" | $Xsed -e "$delay_single_quote_subst"`'
++lt_prog_compiler_static='`$ECHO "X$lt_prog_compiler_static" | $Xsed -e "$delay_single_quote_subst"`'
++lt_cv_prog_compiler_c_o='`$ECHO "X$lt_cv_prog_compiler_c_o" | $Xsed -e "$delay_single_quote_subst"`'
++need_locks='`$ECHO "X$need_locks" | $Xsed -e "$delay_single_quote_subst"`'
++DSYMUTIL='`$ECHO "X$DSYMUTIL" | $Xsed -e "$delay_single_quote_subst"`'
++NMEDIT='`$ECHO "X$NMEDIT" | $Xsed -e "$delay_single_quote_subst"`'
++LIPO='`$ECHO "X$LIPO" | $Xsed -e "$delay_single_quote_subst"`'
++OTOOL='`$ECHO "X$OTOOL" | $Xsed -e "$delay_single_quote_subst"`'
++OTOOL64='`$ECHO "X$OTOOL64" | $Xsed -e "$delay_single_quote_subst"`'
++libext='`$ECHO "X$libext" | $Xsed -e "$delay_single_quote_subst"`'
++shrext_cmds='`$ECHO "X$shrext_cmds" | $Xsed -e "$delay_single_quote_subst"`'
++extract_expsyms_cmds='`$ECHO "X$extract_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`'
++archive_cmds_need_lc='`$ECHO "X$archive_cmds_need_lc" | $Xsed -e "$delay_single_quote_subst"`'
++enable_shared_with_static_runtimes='`$ECHO "X$enable_shared_with_static_runtimes" | $Xsed -e "$delay_single_quote_subst"`'
++export_dynamic_flag_spec='`$ECHO "X$export_dynamic_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
++whole_archive_flag_spec='`$ECHO "X$whole_archive_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
++compiler_needs_object='`$ECHO "X$compiler_needs_object" | $Xsed -e "$delay_single_quote_subst"`'
++old_archive_from_new_cmds='`$ECHO "X$old_archive_from_new_cmds" | $Xsed -e "$delay_single_quote_subst"`'
++old_archive_from_expsyms_cmds='`$ECHO "X$old_archive_from_expsyms_cmds" | $Xsed -e "$delay_single_quote_subst"`'
++archive_cmds='`$ECHO "X$archive_cmds" | $Xsed -e "$delay_single_quote_subst"`'
++archive_expsym_cmds='`$ECHO "X$archive_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`'
++module_cmds='`$ECHO "X$module_cmds" | $Xsed -e "$delay_single_quote_subst"`'
++module_expsym_cmds='`$ECHO "X$module_expsym_cmds" | $Xsed -e "$delay_single_quote_subst"`'
++with_gnu_ld='`$ECHO "X$with_gnu_ld" | $Xsed -e "$delay_single_quote_subst"`'
++allow_undefined_flag='`$ECHO "X$allow_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`'
++no_undefined_flag='`$ECHO "X$no_undefined_flag" | $Xsed -e "$delay_single_quote_subst"`'
++hardcode_libdir_flag_spec='`$ECHO "X$hardcode_libdir_flag_spec" | $Xsed -e "$delay_single_quote_subst"`'
++hardcode_libdir_flag_spec_ld='`$ECHO "X$hardcode_libdir_flag_spec_ld" | $Xsed -e "$delay_single_quote_subst"`'
++hardcode_libdir_separator='`$ECHO "X$hardcode_libdir_separator" | $Xsed -e "$delay_single_quote_subst"`'
++hardcode_direct='`$ECHO "X$hardcode_direct" | $Xsed -e "$delay_single_quote_subst"`'
++hardcode_direct_absolute='`$ECHO "X$hardcode_direct_absolute" | $Xsed -e "$delay_single_quote_subst"`'
++hardcode_minus_L='`$ECHO "X$hardcode_minus_L" | $Xsed -e "$delay_single_quote_subst"`'
++hardcode_shlibpath_var='`$ECHO "X$hardcode_shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`'
++hardcode_automatic='`$ECHO "X$hardcode_automatic" | $Xsed -e "$delay_single_quote_subst"`'
++inherit_rpath='`$ECHO "X$inherit_rpath" | $Xsed -e "$delay_single_quote_subst"`'
++link_all_deplibs='`$ECHO "X$link_all_deplibs" | $Xsed -e "$delay_single_quote_subst"`'
++fix_srcfile_path='`$ECHO "X$fix_srcfile_path" | $Xsed -e "$delay_single_quote_subst"`'
++always_export_symbols='`$ECHO "X$always_export_symbols" | $Xsed -e "$delay_single_quote_subst"`'
++export_symbols_cmds='`$ECHO "X$export_symbols_cmds" | $Xsed -e "$delay_single_quote_subst"`'
++exclude_expsyms='`$ECHO "X$exclude_expsyms" | $Xsed -e "$delay_single_quote_subst"`'
++include_expsyms='`$ECHO "X$include_expsyms" | $Xsed -e "$delay_single_quote_subst"`'
++prelink_cmds='`$ECHO "X$prelink_cmds" | $Xsed -e "$delay_single_quote_subst"`'
++file_list_spec='`$ECHO "X$file_list_spec" | $Xsed -e "$delay_single_quote_subst"`'
++variables_saved_for_relink='`$ECHO "X$variables_saved_for_relink" | $Xsed -e "$delay_single_quote_subst"`'
++need_lib_prefix='`$ECHO "X$need_lib_prefix" | $Xsed -e "$delay_single_quote_subst"`'
++need_version='`$ECHO "X$need_version" | $Xsed -e "$delay_single_quote_subst"`'
++version_type='`$ECHO "X$version_type" | $Xsed -e "$delay_single_quote_subst"`'
++runpath_var='`$ECHO "X$runpath_var" | $Xsed -e "$delay_single_quote_subst"`'
++shlibpath_var='`$ECHO "X$shlibpath_var" | $Xsed -e "$delay_single_quote_subst"`'
++shlibpath_overrides_runpath='`$ECHO "X$shlibpath_overrides_runpath" | $Xsed -e "$delay_single_quote_subst"`'
++libname_spec='`$ECHO "X$libname_spec" | $Xsed -e "$delay_single_quote_subst"`'
++library_names_spec='`$ECHO "X$library_names_spec" | $Xsed -e "$delay_single_quote_subst"`'
++soname_spec='`$ECHO "X$soname_spec" | $Xsed -e "$delay_single_quote_subst"`'
++postinstall_cmds='`$ECHO "X$postinstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
++postuninstall_cmds='`$ECHO "X$postuninstall_cmds" | $Xsed -e "$delay_single_quote_subst"`'
++finish_cmds='`$ECHO "X$finish_cmds" | $Xsed -e "$delay_single_quote_subst"`'
++finish_eval='`$ECHO "X$finish_eval" | $Xsed -e "$delay_single_quote_subst"`'
++hardcode_into_libs='`$ECHO "X$hardcode_into_libs" | $Xsed -e "$delay_single_quote_subst"`'
++sys_lib_search_path_spec='`$ECHO "X$sys_lib_search_path_spec" | $Xsed -e "$delay_single_quote_subst"`'
++sys_lib_dlsearch_path_spec='`$ECHO "X$sys_lib_dlsearch_path_spec" | $Xsed -e "$delay_single_quote_subst"`'
++hardcode_action='`$ECHO "X$hardcode_action" | $Xsed -e "$delay_single_quote_subst"`'
++enable_dlopen='`$ECHO "X$enable_dlopen" | $Xsed -e "$delay_single_quote_subst"`'
++enable_dlopen_self='`$ECHO "X$enable_dlopen_self" | $Xsed -e "$delay_single_quote_subst"`'
++enable_dlopen_self_static='`$ECHO "X$enable_dlopen_self_static" | $Xsed -e "$delay_single_quote_subst"`'
++old_striplib='`$ECHO "X$old_striplib" | $Xsed -e "$delay_single_quote_subst"`'
++striplib='`$ECHO "X$striplib" | $Xsed -e "$delay_single_quote_subst"`'
++
++LTCC='$LTCC'
++LTCFLAGS='$LTCFLAGS'
++compiler='$compiler_DEFAULT'
++
++# Quote evaled strings.
++for var in SED \
++GREP \
++EGREP \
++FGREP \
++LD \
++NM \
++LN_S \
++lt_SP2NL \
++lt_NL2SP \
++reload_flag \
++OBJDUMP \
++deplibs_check_method \
++file_magic_cmd \
++AR \
++AR_FLAGS \
++STRIP \
++RANLIB \
++CC \
++CFLAGS \
++compiler \
++lt_cv_sys_global_symbol_pipe \
++lt_cv_sys_global_symbol_to_cdecl \
++lt_cv_sys_global_symbol_to_c_name_address \
++lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \
++SHELL \
++ECHO \
++lt_prog_compiler_no_builtin_flag \
++lt_prog_compiler_wl \
++lt_prog_compiler_pic \
++lt_prog_compiler_static \
++lt_cv_prog_compiler_c_o \
++need_locks \
++DSYMUTIL \
++NMEDIT \
++LIPO \
++OTOOL \
++OTOOL64 \
++shrext_cmds \
++export_dynamic_flag_spec \
++whole_archive_flag_spec \
++compiler_needs_object \
++with_gnu_ld \
++allow_undefined_flag \
++no_undefined_flag \
++hardcode_libdir_flag_spec \
++hardcode_libdir_flag_spec_ld \
++hardcode_libdir_separator \
++fix_srcfile_path \
++exclude_expsyms \
++include_expsyms \
++file_list_spec \
++variables_saved_for_relink \
++libname_spec \
++library_names_spec \
++soname_spec \
++finish_eval \
++old_striplib \
++striplib; do
++ case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
++ *[\\\\\\\`\\"\\\$]*)
++ eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
++ ;;
++ *)
++ eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
++ ;;
++ esac
++done
++
++# Double-quote double-evaled strings.
++for var in reload_cmds \
++old_postinstall_cmds \
++old_postuninstall_cmds \
++old_archive_cmds \
++extract_expsyms_cmds \
++old_archive_from_new_cmds \
++old_archive_from_expsyms_cmds \
++archive_cmds \
++archive_expsym_cmds \
++module_cmds \
++module_expsym_cmds \
++export_symbols_cmds \
++prelink_cmds \
++postinstall_cmds \
++postuninstall_cmds \
++finish_cmds \
++sys_lib_search_path_spec \
++sys_lib_dlsearch_path_spec; do
++ case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
++ *[\\\\\\\`\\"\\\$]*)
++ eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
++ ;;
++ *)
++ eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
++ ;;
++ esac
++done
++
++# Fix-up fallback echo if it was mangled by the above quoting rules.
++case \$lt_ECHO in
++*'\\\$0 --fallback-echo"') lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\$0 --fallback-echo"\$/\$0 --fallback-echo"/'\`
++ ;;
++esac
++
++ac_aux_dir='$ac_aux_dir'
++xsi_shell='$xsi_shell'
++lt_shell_append='$lt_shell_append'
++
++# See if we are running on zsh, and set the options which allow our
++# commands through without removal of \ escapes INIT.
++if test -n "\${ZSH_VERSION+set}" ; then
++ setopt NO_GLOB_SUBST
++fi
++
++
++ PACKAGE='$PACKAGE'
++ VERSION='$VERSION'
++ TIMESTAMP='$TIMESTAMP'
++ RM='$RM'
++ ofile='$ofile'
++
++
++
++
++_ACEOF
++
++cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
++
++# Handling of arguments.
++for ac_config_target in $ac_config_targets
++do
++ case $ac_config_target in
++ "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
++ "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
++ "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;;
++ "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
++ "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;;
++ "src/snmp/Makefile") CONFIG_FILES="$CONFIG_FILES src/snmp/Makefile" ;;
++ "src/libdessert/Makefile") CONFIG_FILES="$CONFIG_FILES src/libdessert/Makefile" ;;
++ "include/Makefile") CONFIG_FILES="$CONFIG_FILES include/Makefile" ;;
++ "libdessert.pc") CONFIG_FILES="$CONFIG_FILES libdessert.pc" ;;
++
++ *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
++ esac
++done
++
++
++# If the user did not use the arguments to specify the items to instantiate,
++# then the envvar interface is used. Set only those that are not.
++# We use the long form for the default assignment because of an extremely
++# bizarre bug on SunOS 4.1.3.
++if $ac_need_defaults; then
++ test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
++ test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
++ test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
++fi
++
++# Have a temporary directory for convenience. Make it in the build tree
++# simply because there is no reason against having it here, and in addition,
++# creating and moving files from /tmp can sometimes cause problems.
++# Hook for its removal unless debugging.
++# Note that there is a small window in which the directory will not be cleaned:
++# after its creation but before its name has been assigned to `$tmp'.
++$debug ||
++{
++ tmp=
++ trap 'exit_status=$?
++ { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status
++' 0
++ trap 'as_fn_exit 1' 1 2 13 15
++}
++# Create a (secure) tmp directory for tmp files.
++
++{
++ tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
++ test -n "$tmp" && test -d "$tmp"
++} ||
++{
++ tmp=./conf$$-$RANDOM
++ (umask 077 && mkdir "$tmp")
++} || as_fn_error "cannot create a temporary directory in ." "$LINENO" 5
++
++# Set up the scripts for CONFIG_FILES section.
++# No need to generate them if there are no CONFIG_FILES.
++# This happens for instance with `./config.status config.h'.
++if test -n "$CONFIG_FILES"; then
++
++
++ac_cr=`echo X | tr X '\015'`
++# On cygwin, bash can eat \r inside `` if the user requested igncr.
++# But we know of no other shell where ac_cr would be empty at this
++# point, so we can use a bashism as a fallback.
++if test "x$ac_cr" = x; then
++ eval ac_cr=\$\'\\r\'
++fi
++ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
++if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
++ ac_cs_awk_cr='\r'
++else
++ ac_cs_awk_cr=$ac_cr
++fi
++
++echo 'BEGIN {' >"$tmp/subs1.awk" &&
++_ACEOF
++
++
++{
++ echo "cat >conf$$subs.awk <<_ACEOF" &&
++ echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
++ echo "_ACEOF"
++} >conf$$subs.sh ||
++ as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5
++ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'`
++ac_delim='%!_!# '
++for ac_last_try in false false false false false :; do
++ . ./conf$$subs.sh ||
++ as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5
++
++ ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
++ if test $ac_delim_n = $ac_delim_num; then
++ break
++ elif $ac_last_try; then
++ as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5
++ else
++ ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
++ fi
++done
++rm -f conf$$subs.sh
++
++cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
++cat >>"\$tmp/subs1.awk" <<\\_ACAWK &&
++_ACEOF
++sed -n '
++h
++s/^/S["/; s/!.*/"]=/
++p
++g
++s/^[^!]*!//
++:repl
++t repl
++s/'"$ac_delim"'$//
++t delim
++:nl
++h
++s/\(.\{148\}\)..*/\1/
++t more1
++s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
++p
++n
++b repl
++:more1
++s/["\\]/\\&/g; s/^/"/; s/$/"\\/
++p
++g
++s/.\{148\}//
++t nl
++:delim
++h
++s/\(.\{148\}\)..*/\1/
++t more2
++s/["\\]/\\&/g; s/^/"/; s/$/"/
++p
++b
++:more2
++s/["\\]/\\&/g; s/^/"/; s/$/"\\/
++p
++g
++s/.\{148\}//
++t delim
++' <conf$$subs.awk | sed '
++/^[^""]/{
++ N
++ s/\n//
++}
++' >>$CONFIG_STATUS || ac_write_fail=1
++rm -f conf$$subs.awk
++cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
++_ACAWK
++cat >>"\$tmp/subs1.awk" <<_ACAWK &&
++ for (key in S) S_is_set[key] = 1
++ FS = ""
++
++}
++{
++ line = $ 0
++ nfields = split(line, field, "@")
++ substed = 0
++ len = length(field[1])
++ for (i = 2; i < nfields; i++) {
++ key = field[i]
++ keylen = length(key)
++ if (S_is_set[key]) {
++ value = S[key]
++ line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
++ len += length(value) + length(field[++i])
++ substed = 1
++ } else
++ len += 1 + keylen
++ }
++
++ print line
++}
++
++_ACAWK
++_ACEOF
++cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
++if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
++ sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
++else
++ cat
++fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \
++ || as_fn_error "could not setup config files machinery" "$LINENO" 5
++_ACEOF
++
++# VPATH may cause trouble with some makes, so we remove $(srcdir),
++# ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and
++# trailing colons and then remove the whole line if VPATH becomes empty
++# (actually we leave an empty line to preserve line numbers).
++if test "x$srcdir" = x.; then
++ ac_vpsub='/^[ ]*VPATH[ ]*=/{
++s/:*\$(srcdir):*/:/
++s/:*\${srcdir}:*/:/
++s/:*@srcdir@:*/:/
++s/^\([^=]*=[ ]*\):*/\1/
++s/:*$//
++s/^[^=]*=[ ]*$//
++}'
++fi
++
++cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
++fi # test -n "$CONFIG_FILES"
++
++# Set up the scripts for CONFIG_HEADERS section.
++# No need to generate them if there are no CONFIG_HEADERS.
++# This happens for instance with `./config.status Makefile'.
++if test -n "$CONFIG_HEADERS"; then
++cat >"$tmp/defines.awk" <<\_ACAWK ||
++BEGIN {
++_ACEOF
++
++# Transform confdefs.h into an awk script `defines.awk', embedded as
++# here-document in config.status, that substitutes the proper values into
++# config.h.in to produce config.h.
++
++# Create a delimiter string that does not exist in confdefs.h, to ease
++# handling of long lines.
++ac_delim='%!_!# '
++for ac_last_try in false false :; do
++ ac_t=`sed -n "/$ac_delim/p" confdefs.h`
++ if test -z "$ac_t"; then
++ break
++ elif $ac_last_try; then
++ as_fn_error "could not make $CONFIG_HEADERS" "$LINENO" 5
++ else
++ ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
++ fi
++done
++
++# For the awk script, D is an array of macro values keyed by name,
++# likewise P contains macro parameters if any. Preserve backslash
++# newline sequences.
++
++ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
++sed -n '
++s/.\{148\}/&'"$ac_delim"'/g
++t rset
++:rset
++s/^[ ]*#[ ]*define[ ][ ]*/ /
++t def
++d
++:def
++s/\\$//
++t bsnl
++s/["\\]/\\&/g
++s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\
++D["\1"]=" \3"/p
++s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p
++d
++:bsnl
++s/["\\]/\\&/g
++s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\
++D["\1"]=" \3\\\\\\n"\\/p
++t cont
++s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p
++t cont
++d
++:cont
++n
++s/.\{148\}/&'"$ac_delim"'/g
++t clear
++:clear
++s/\\$//
++t bsnlc
++s/["\\]/\\&/g; s/^/"/; s/$/"/p
++d
++:bsnlc
++s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p
++b cont
++' <confdefs.h | sed '
++s/'"$ac_delim"'/"\\\
++"/g' >>$CONFIG_STATUS || ac_write_fail=1
++
++cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
++ for (key in D) D_is_set[key] = 1
++ FS = ""
++}
++/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ {
++ line = \$ 0
++ split(line, arg, " ")
++ if (arg[1] == "#") {
++ defundef = arg[2]
++ mac1 = arg[3]
++ } else {
++ defundef = substr(arg[1], 2)
++ mac1 = arg[2]
++ }
++ split(mac1, mac2, "(") #)
++ macro = mac2[1]
++ prefix = substr(line, 1, index(line, defundef) - 1)
++ if (D_is_set[macro]) {
++ # Preserve the white space surrounding the "#".
++ print prefix "define", macro P[macro] D[macro]
++ next
++ } else {
++ # Replace #undef with comments. This is necessary, for example,
++ # in the case of _POSIX_SOURCE, which is predefined and required
++ # on some systems where configure will not decide to define it.
++ if (defundef == "undef") {
++ print "/*", prefix defundef, macro, "*/"
++ next
++ }
++ }
++}
++{ print }
++_ACAWK
++_ACEOF
++cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
++ as_fn_error "could not setup config headers machinery" "$LINENO" 5
++fi # test -n "$CONFIG_HEADERS"
++
++
++eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS"
++shift
++for ac_tag
++do
++ case $ac_tag in
++ :[FHLC]) ac_mode=$ac_tag; continue;;
++ esac
++ case $ac_mode$ac_tag in
++ :[FHL]*:*);;
++ :L* | :C*:*) as_fn_error "invalid tag \`$ac_tag'" "$LINENO" 5;;
++ :[FH]-) ac_tag=-:-;;
++ :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
++ esac
++ ac_save_IFS=$IFS
++ IFS=:
++ set x $ac_tag
++ IFS=$ac_save_IFS
++ shift
++ ac_file=$1
++ shift
++
++ case $ac_mode in
++ :L) ac_source=$1;;
++ :[FH])
++ ac_file_inputs=
++ for ac_f
++ do
++ case $ac_f in
++ -) ac_f="$tmp/stdin";;
++ *) # Look for the file first in the build tree, then in the source tree
++ # (if the path is not absolute). The absolute path cannot be DOS-style,
++ # because $ac_f cannot contain `:'.
++ test -f "$ac_f" ||
++ case $ac_f in
++ [\\/$]*) false;;
++ *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
++ esac ||
++ as_fn_error "cannot find input file: \`$ac_f'" "$LINENO" 5;;
++ esac
++ case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
++ as_fn_append ac_file_inputs " '$ac_f'"
++ done
++
++ # Let's still pretend it is `configure' which instantiates (i.e., don't
++ # use $as_me), people would be surprised to read:
++ # /* config.h. Generated by config.status. */
++ configure_input='Generated from '`
++ $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
++ `' by configure.'
++ if test x"$ac_file" != x-; then
++ configure_input="$ac_file. $configure_input"
++ { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
++$as_echo "$as_me: creating $ac_file" >&6;}
++ fi
++ # Neutralize special characters interpreted by sed in replacement strings.
++ case $configure_input in #(
++ *\&* | *\|* | *\\* )
++ ac_sed_conf_input=`$as_echo "$configure_input" |
++ sed 's/[\\\\&|]/\\\\&/g'`;; #(
++ *) ac_sed_conf_input=$configure_input;;
++ esac
++
++ case $ac_tag in
++ *:-:* | *:-) cat >"$tmp/stdin" \
++ || as_fn_error "could not create $ac_file" "$LINENO" 5 ;;
++ esac
++ ;;
++ esac
++
++ ac_dir=`$as_dirname -- "$ac_file" ||
++$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
++ X"$ac_file" : 'X\(//\)[^/]' \| \
++ X"$ac_file" : 'X\(//\)$' \| \
++ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
++$as_echo X"$ac_file" |
++ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
++ s//\1/
++ q
++ }
++ /^X\(\/\/\)[^/].*/{
++ s//\1/
++ q
++ }
++ /^X\(\/\/\)$/{
++ s//\1/
++ q
++ }
++ /^X\(\/\).*/{
++ s//\1/
++ q
++ }
++ s/.*/./; q'`
++ as_dir="$ac_dir"; as_fn_mkdir_p
++ ac_builddir=.
++
++case "$ac_dir" in
++.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
++*)
++ ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
++ # A ".." for each directory in $ac_dir_suffix.
++ ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
++ case $ac_top_builddir_sub in
++ "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
++ *) ac_top_build_prefix=$ac_top_builddir_sub/ ;;
++ esac ;;
++esac
++ac_abs_top_builddir=$ac_pwd
++ac_abs_builddir=$ac_pwd$ac_dir_suffix
++# for backward compatibility:
++ac_top_builddir=$ac_top_build_prefix
++
++case $srcdir in
++ .) # We are building in place.
++ ac_srcdir=.
++ ac_top_srcdir=$ac_top_builddir_sub
++ ac_abs_top_srcdir=$ac_pwd ;;
++ [\\/]* | ?:[\\/]* ) # Absolute name.
++ ac_srcdir=$srcdir$ac_dir_suffix;
++ ac_top_srcdir=$srcdir
++ ac_abs_top_srcdir=$srcdir ;;
++ *) # Relative name.
++ ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
++ ac_top_srcdir=$ac_top_build_prefix$srcdir
++ ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
++esac
++ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
++
++
++ case $ac_mode in
++ :F)
++ #
++ # CONFIG_FILE
++ #
++
++ case $INSTALL in
++ [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
++ *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
++ esac
++ ac_MKDIR_P=$MKDIR_P
++ case $MKDIR_P in
++ [\\/$]* | ?:[\\/]* ) ;;
++ */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;;
++ esac
++_ACEOF
++
++cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
++# If the template does not know about datarootdir, expand it.
++# FIXME: This hack should be removed a few years after 2.60.
++ac_datarootdir_hack=; ac_datarootdir_seen=
++ac_sed_dataroot='
++/datarootdir/ {
++ p
++ q
++}
++/@datadir@/p
++/@docdir@/p
++/@infodir@/p
++/@localedir@/p
++/@mandir@/p'
++case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
++*datarootdir*) ac_datarootdir_seen=yes;;
++*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
++$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
++_ACEOF
++cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
++ ac_datarootdir_hack='
++ s&@datadir@&$datadir&g
++ s&@docdir@&$docdir&g
++ s&@infodir@&$infodir&g
++ s&@localedir@&$localedir&g
++ s&@mandir@&$mandir&g
++ s&\\\${datarootdir}&$datarootdir&g' ;;
++esac
++_ACEOF
++
++# Neutralize VPATH when `$srcdir' = `.'.
++# Shell code in configure.ac might set extrasub.
++# FIXME: do we really want to maintain this feature?
++cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
++ac_sed_extra="$ac_vpsub
++$extrasub
++_ACEOF
++cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
++:t
++/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
++s|@configure_input@|$ac_sed_conf_input|;t t
++s&@top_builddir@&$ac_top_builddir_sub&;t t
++s&@top_build_prefix@&$ac_top_build_prefix&;t t
++s&@srcdir@&$ac_srcdir&;t t
++s&@abs_srcdir@&$ac_abs_srcdir&;t t
++s&@top_srcdir@&$ac_top_srcdir&;t t
++s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
++s&@builddir@&$ac_builddir&;t t
++s&@abs_builddir@&$ac_abs_builddir&;t t
++s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
++s&@INSTALL@&$ac_INSTALL&;t t
++s&@MKDIR_P@&$ac_MKDIR_P&;t t
++$ac_datarootdir_hack
++"
++eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \
++ || as_fn_error "could not create $ac_file" "$LINENO" 5
++
++test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
++ { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } &&
++ { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } &&
++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
++which seems to be undefined. Please make sure it is defined." >&5
++$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
++which seems to be undefined. Please make sure it is defined." >&2;}
++
++ rm -f "$tmp/stdin"
++ case $ac_file in
++ -) cat "$tmp/out" && rm -f "$tmp/out";;
++ *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";;
++ esac \
++ || as_fn_error "could not create $ac_file" "$LINENO" 5
++ ;;
++ :H)
++ #
++ # CONFIG_HEADER
++ #
++ if test x"$ac_file" != x-; then
++ {
++ $as_echo "/* $configure_input */" \
++ && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs"
++ } >"$tmp/config.h" \
++ || as_fn_error "could not create $ac_file" "$LINENO" 5
++ if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
++$as_echo "$as_me: $ac_file is unchanged" >&6;}
++ else
++ rm -f "$ac_file"
++ mv "$tmp/config.h" "$ac_file" \
++ || as_fn_error "could not create $ac_file" "$LINENO" 5
++ fi
++ else
++ $as_echo "/* $configure_input */" \
++ && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \
++ || as_fn_error "could not create -" "$LINENO" 5
++ fi
++# Compute "$ac_file"'s index in $config_headers.
++_am_arg="$ac_file"
++_am_stamp_count=1
++for _am_header in $config_headers :; do
++ case $_am_header in
++ $_am_arg | $_am_arg:* )
++ break ;;
++ * )
++ _am_stamp_count=`expr $_am_stamp_count + 1` ;;
++ esac
++done
++echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" ||
++$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
++ X"$_am_arg" : 'X\(//\)[^/]' \| \
++ X"$_am_arg" : 'X\(//\)$' \| \
++ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null ||
++$as_echo X"$_am_arg" |
++ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
++ s//\1/
++ q
++ }
++ /^X\(\/\/\)[^/].*/{
++ s//\1/
++ q
++ }
++ /^X\(\/\/\)$/{
++ s//\1/
++ q
++ }
++ /^X\(\/\).*/{
++ s//\1/
++ q
++ }
++ s/.*/./; q'`/stamp-h$_am_stamp_count
++ ;;
++
++ :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5
++$as_echo "$as_me: executing $ac_file commands" >&6;}
++ ;;
++ esac
++
++
++ case $ac_file$ac_mode in
++ "depfiles":C) test x"$AMDEP_TRUE" != x"" || {
++ # Autoconf 2.62 quotes --file arguments for eval, but not when files
++ # are listed without --file. Let's play safe and only enable the eval
++ # if we detect the quoting.
++ case $CONFIG_FILES in
++ *\'*) eval set x "$CONFIG_FILES" ;;
++ *) set x $CONFIG_FILES ;;
++ esac
++ shift
++ for mf
++ do
++ # Strip MF so we end up with the name of the file.
++ mf=`echo "$mf" | sed -e 's/:.*$//'`
++ # Check whether this is an Automake generated Makefile or not.
++ # We used to match only the files named `Makefile.in', but
++ # some people rename them; so instead we look at the file content.
++ # Grep'ing the first line is not enough: some people post-process
++ # each Makefile.in and add a new line on top of each file to say so.
++ # Grep'ing the whole file is not good either: AIX grep has a line
++ # limit of 2048, but all sed's we know have understand at least 4000.
++ if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
++ dirpart=`$as_dirname -- "$mf" ||
++$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
++ X"$mf" : 'X\(//\)[^/]' \| \
++ X"$mf" : 'X\(//\)$' \| \
++ X"$mf" : 'X\(/\)' \| . 2>/dev/null ||
++$as_echo X"$mf" |
++ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
++ s//\1/
++ q
++ }
++ /^X\(\/\/\)[^/].*/{
++ s//\1/
++ q
++ }
++ /^X\(\/\/\)$/{
++ s//\1/
++ q
++ }
++ /^X\(\/\).*/{
++ s//\1/
++ q
++ }
++ s/.*/./; q'`
++ else
++ continue
++ fi
++ # Extract the definition of DEPDIR, am__include, and am__quote
++ # from the Makefile without running `make'.
++ DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
++ test -z "$DEPDIR" && continue
++ am__include=`sed -n 's/^am__include = //p' < "$mf"`
++ test -z "am__include" && continue
++ am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
++ # When using ansi2knr, U may be empty or an underscore; expand it
++ U=`sed -n 's/^U = //p' < "$mf"`
++ # Find all dependency output files, they are included files with
++ # $(DEPDIR) in their names. We invoke sed twice because it is the
++ # simplest approach to changing $(DEPDIR) to its actual value in the
++ # expansion.
++ for file in `sed -n "
++ s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
++ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do
++ # Make sure the directory exists.
++ test -f "$dirpart/$file" && continue
++ fdir=`$as_dirname -- "$file" ||
++$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
++ X"$file" : 'X\(//\)[^/]' \| \
++ X"$file" : 'X\(//\)$' \| \
++ X"$file" : 'X\(/\)' \| . 2>/dev/null ||
++$as_echo X"$file" |
++ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
++ s//\1/
++ q
++ }
++ /^X\(\/\/\)[^/].*/{
++ s//\1/
++ q
++ }
++ /^X\(\/\/\)$/{
++ s//\1/
++ q
++ }
++ /^X\(\/\).*/{
++ s//\1/
++ q
++ }
++ s/.*/./; q'`
++ as_dir=$dirpart/$fdir; as_fn_mkdir_p
++ # echo "creating $dirpart/$file"
++ echo '# dummy' > "$dirpart/$file"
++ done
++ done
++}
++ ;;
++ "libtool":C)
++
++ # See if we are running on zsh, and set the options which allow our
++ # commands through without removal of \ escapes.
++ if test -n "${ZSH_VERSION+set}" ; then
++ setopt NO_GLOB_SUBST
++ fi
++
++ cfgfile="${ofile}T"
++ trap "$RM \"$cfgfile\"; exit 1" 1 2 15
++ $RM "$cfgfile"
++
++ cat <<_LT_EOF >> "$cfgfile"
++#! $SHELL
++
++# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
++# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION
++# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
++# NOTE: Changes made to this file will be lost: look at ltmain.sh.
++#
++# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
++# 2006, 2007, 2008 Free Software Foundation, Inc.
++# Written by Gordon Matzigkeit, 1996
++#
++# This file is part of GNU Libtool.
++#
++# GNU Libtool is free software; you can redistribute it and/or
++# modify it under the terms of the GNU General Public License as
++# published by the Free Software Foundation; either version 2 of
++# the License, or (at your option) any later version.
++#
++# As a special exception to the GNU General Public License,
++# if you distribute this file as part of a program or library that
++# is built using GNU Libtool, you may include this file under the
++# same distribution terms that you use for the rest of that program.
++#
++# GNU Libtool is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with GNU Libtool; see the file COPYING. If not, a copy
++# can be downloaded from http://www.gnu.org/licenses/gpl.html, or
++# obtained by writing to the Free Software Foundation, Inc.,
++# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
++
++
++# The names of the tagged configurations supported by this script.
++available_tags=""
++
++# ### BEGIN LIBTOOL CONFIG
++
++# Which release of libtool.m4 was used?
++macro_version=$macro_version
++macro_revision=$macro_revision
++
++# Whether or not to build shared libraries.
++build_libtool_libs=$enable_shared
++
++# Whether or not to build static libraries.
++build_old_libs=$enable_static
++
++# What type of objects to build.
++pic_mode=$pic_mode
++
++# Whether or not to optimize for fast installation.
++fast_install=$enable_fast_install
++
++# The host system.
++host_alias=$host_alias
++host=$host
++host_os=$host_os
++
++# The build system.
++build_alias=$build_alias
++build=$build
++build_os=$build_os
++
++# A sed program that does not truncate output.
++SED=$lt_SED
++
++# Sed that helps us avoid accidentally triggering echo(1) options like -n.
++Xsed="\$SED -e 1s/^X//"
++
++# A grep program that handles long lines.
++GREP=$lt_GREP
++
++# An ERE matcher.
++EGREP=$lt_EGREP
++
++# A literal string matcher.
++FGREP=$lt_FGREP
++
++# A BSD- or MS-compatible name lister.
++NM=$lt_NM
++
++# Whether we need soft or hard links.
++LN_S=$lt_LN_S
++
++# What is the maximum length of a command?
++max_cmd_len=$max_cmd_len
++
++# Object file suffix (normally "o").
++objext=$ac_objext
++
++# Executable file suffix (normally "").
++exeext=$exeext
++
++# whether the shell understands "unset".
++lt_unset=$lt_unset
++
++# turn spaces into newlines.
++SP2NL=$lt_lt_SP2NL
++
++# turn newlines into spaces.
++NL2SP=$lt_lt_NL2SP
++
++# How to create reloadable object files.
++reload_flag=$lt_reload_flag
++reload_cmds=$lt_reload_cmds
++
++# An object symbol dumper.
++OBJDUMP=$lt_OBJDUMP
++
++# Method to check whether dependent libraries are shared objects.
++deplibs_check_method=$lt_deplibs_check_method
++
++# Command to use when deplibs_check_method == "file_magic".
++file_magic_cmd=$lt_file_magic_cmd
++
++# The archiver.
++AR=$lt_AR
++AR_FLAGS=$lt_AR_FLAGS
++
++# A symbol stripping program.
++STRIP=$lt_STRIP
++
++# Commands used to install an old-style archive.
++RANLIB=$lt_RANLIB
++old_postinstall_cmds=$lt_old_postinstall_cmds
++old_postuninstall_cmds=$lt_old_postuninstall_cmds
++
++# A C compiler.
++LTCC=$lt_CC
++
++# LTCC compiler flags.
++LTCFLAGS=$lt_CFLAGS
++
++# Take the output of nm and produce a listing of raw symbols and C names.
++global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe
++
++# Transform the output of nm in a proper C declaration.
++global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl
++
++# Transform the output of nm in a C name address pair.
++global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address
++
++# Transform the output of nm in a C name address pair when lib prefix is needed.
++global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix
++
++# The name of the directory that contains temporary libtool files.
++objdir=$objdir
++
++# Shell to use when invoking shell scripts.
++SHELL=$lt_SHELL
++
++# An echo program that does not interpret backslashes.
++ECHO=$lt_ECHO
++
++# Used to examine libraries when file_magic_cmd begins with "file".
++MAGIC_CMD=$MAGIC_CMD
++
++# Must we lock files when doing compilation?
++need_locks=$lt_need_locks
++
++# Tool to manipulate archived DWARF debug symbol files on Mac OS X.
++DSYMUTIL=$lt_DSYMUTIL
++
++# Tool to change global to local symbols on Mac OS X.
++NMEDIT=$lt_NMEDIT
++
++# Tool to manipulate fat objects and archives on Mac OS X.
++LIPO=$lt_LIPO
++
++# ldd/readelf like tool for Mach-O binaries on Mac OS X.
++OTOOL=$lt_OTOOL
++
++# ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4.
++OTOOL64=$lt_OTOOL64
++
++# Old archive suffix (normally "a").
++libext=$libext
++
++# Shared library suffix (normally ".so").
++shrext_cmds=$lt_shrext_cmds
++
++# The commands to extract the exported symbol list from a shared archive.
++extract_expsyms_cmds=$lt_extract_expsyms_cmds
++
++# Variables whose values should be saved in libtool wrapper scripts and
++# restored at link time.
++variables_saved_for_relink=$lt_variables_saved_for_relink
++
++# Do we need the "lib" prefix for modules?
++need_lib_prefix=$need_lib_prefix
++
++# Do we need a version for libraries?
++need_version=$need_version
++
++# Library versioning type.
++version_type=$version_type
++
++# Shared library runtime path variable.
++runpath_var=$runpath_var
++
++# Shared library path variable.
++shlibpath_var=$shlibpath_var
++
++# Is shlibpath searched before the hard-coded library search path?
++shlibpath_overrides_runpath=$shlibpath_overrides_runpath
++
++# Format of library name prefix.
++libname_spec=$lt_libname_spec
++
++# List of archive names. First name is the real one, the rest are links.
++# The last name is the one that the linker finds with -lNAME
++library_names_spec=$lt_library_names_spec
++
++# The coded name of the library, if different from the real name.
++soname_spec=$lt_soname_spec
++
++# Command to use after installation of a shared archive.
++postinstall_cmds=$lt_postinstall_cmds
++
++# Command to use after uninstallation of a shared archive.
++postuninstall_cmds=$lt_postuninstall_cmds
++
++# Commands used to finish a libtool library installation in a directory.
++finish_cmds=$lt_finish_cmds
++
++# As "finish_cmds", except a single script fragment to be evaled but
++# not shown.
++finish_eval=$lt_finish_eval
++
++# Whether we should hardcode library paths into libraries.
++hardcode_into_libs=$hardcode_into_libs
++
++# Compile-time system search path for libraries.
++sys_lib_search_path_spec=$lt_sys_lib_search_path_spec
++
++# Run-time system search path for libraries.
++sys_lib_dlsearch_path_spec=$lt_sys_lib_dlsearch_path_spec
++
++# Whether dlopen is supported.
++dlopen_support=$enable_dlopen
++
++# Whether dlopen of programs is supported.
++dlopen_self=$enable_dlopen_self
++
++# Whether dlopen of statically linked programs is supported.
++dlopen_self_static=$enable_dlopen_self_static
++
++# Commands to strip libraries.
++old_striplib=$lt_old_striplib
++striplib=$lt_striplib
++
++
++# The linker used to build libraries.
++LD=$lt_LD
++
++# Commands used to build an old-style archive.
++old_archive_cmds=$lt_old_archive_cmds
++
++# A language specific compiler.
++CC=$lt_compiler
++
++# Is the compiler the GNU compiler?
++with_gcc=$GCC
++
++# Compiler flag to turn off builtin functions.
++no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag
++
++# How to pass a linker flag through the compiler.
++wl=$lt_lt_prog_compiler_wl
++
++# Additional compiler flags for building library objects.
++pic_flag=$lt_lt_prog_compiler_pic
++
++# Compiler flag to prevent dynamic linking.
++link_static_flag=$lt_lt_prog_compiler_static
++
++# Does compiler simultaneously support -c and -o options?
++compiler_c_o=$lt_lt_cv_prog_compiler_c_o
++
++# Whether or not to add -lc for building shared libraries.
++build_libtool_need_lc=$archive_cmds_need_lc
++
++# Whether or not to disallow shared libs when runtime libs are static.
++allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes
++
++# Compiler flag to allow reflexive dlopens.
++export_dynamic_flag_spec=$lt_export_dynamic_flag_spec
++
++# Compiler flag to generate shared objects directly from archives.
++whole_archive_flag_spec=$lt_whole_archive_flag_spec
++
++# Whether the compiler copes with passing no objects directly.
++compiler_needs_object=$lt_compiler_needs_object
++
++# Create an old-style archive from a shared archive.
++old_archive_from_new_cmds=$lt_old_archive_from_new_cmds
++
++# Create a temporary old-style archive to link instead of a shared archive.
++old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds
++
++# Commands used to build a shared archive.
++archive_cmds=$lt_archive_cmds
++archive_expsym_cmds=$lt_archive_expsym_cmds
++
++# Commands used to build a loadable module if different from building
++# a shared archive.
++module_cmds=$lt_module_cmds
++module_expsym_cmds=$lt_module_expsym_cmds
++
++# Whether we are building with GNU ld or not.
++with_gnu_ld=$lt_with_gnu_ld
++
++# Flag that allows shared libraries with undefined symbols to be built.
++allow_undefined_flag=$lt_allow_undefined_flag
++
++# Flag that enforces no undefined symbols.
++no_undefined_flag=$lt_no_undefined_flag
++
++# Flag to hardcode \$libdir into a binary during linking.
++# This must work even if \$libdir does not exist
++hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec
++
++# If ld is used when linking, flag to hardcode \$libdir into a binary
++# during linking. This must work even if \$libdir does not exist.
++hardcode_libdir_flag_spec_ld=$lt_hardcode_libdir_flag_spec_ld
++
++# Whether we need a single "-rpath" flag with a separated argument.
++hardcode_libdir_separator=$lt_hardcode_libdir_separator
++
++# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
++# DIR into the resulting binary.
++hardcode_direct=$hardcode_direct
++
++# Set to "yes" if using DIR/libNAME\${shared_ext} during linking hardcodes
++# DIR into the resulting binary and the resulting library dependency is
++# "absolute",i.e impossible to change by setting \${shlibpath_var} if the
++# library is relocated.
++hardcode_direct_absolute=$hardcode_direct_absolute
++
++# Set to "yes" if using the -LDIR flag during linking hardcodes DIR
++# into the resulting binary.
++hardcode_minus_L=$hardcode_minus_L
++
++# Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
++# into the resulting binary.
++hardcode_shlibpath_var=$hardcode_shlibpath_var
++
++# Set to "yes" if building a shared library automatically hardcodes DIR
++# into the library and all subsequent libraries and executables linked
++# against it.
++hardcode_automatic=$hardcode_automatic
++
++# Set to yes if linker adds runtime paths of dependent libraries
++# to runtime path list.
++inherit_rpath=$inherit_rpath
++
++# Whether libtool must link a program against all its dependency libraries.
++link_all_deplibs=$link_all_deplibs
++
++# Fix the shell variable \$srcfile for the compiler.
++fix_srcfile_path=$lt_fix_srcfile_path
++
++# Set to "yes" if exported symbols are required.
++always_export_symbols=$always_export_symbols
++
++# The commands to list exported symbols.
++export_symbols_cmds=$lt_export_symbols_cmds
++
++# Symbols that should not be listed in the preloaded symbols.
++exclude_expsyms=$lt_exclude_expsyms
++
++# Symbols that must always be exported.
++include_expsyms=$lt_include_expsyms
++
++# Commands necessary for linking programs (against libraries) with templates.
++prelink_cmds=$lt_prelink_cmds
++
++# Specify filename containing input files.
++file_list_spec=$lt_file_list_spec
++
++# How to hardcode a shared library path into an executable.
++hardcode_action=$hardcode_action
++
++# ### END LIBTOOL CONFIG
++
++_LT_EOF
++
++ case $host_os in
++ aix3*)
++ cat <<\_LT_EOF >> "$cfgfile"
++# AIX sometimes has problems with the GCC collect2 program. For some
++# reason, if we set the COLLECT_NAMES environment variable, the problems
++# vanish in a puff of smoke.
++if test "X${COLLECT_NAMES+set}" != Xset; then
++ COLLECT_NAMES=
++ export COLLECT_NAMES
++fi
++_LT_EOF
++ ;;
++ esac
++
++
++ltmain="$ac_aux_dir/ltmain.sh"
++
++
++ # We use sed instead of cat because bash on DJGPP gets confused if
++ # if finds mixed CR/LF and LF-only lines. Since sed operates in
++ # text mode, it properly converts lines to CR/LF. This bash problem
++ # is reportedly fixed, but why not run on old versions too?
++ sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
++ || (rm -f "$cfgfile"; exit 1)
++
++ case $xsi_shell in
++ yes)
++ cat << \_LT_EOF >> "$cfgfile"
++
++# func_dirname file append nondir_replacement
++# Compute the dirname of FILE. If nonempty, add APPEND to the result,
++# otherwise set result to NONDIR_REPLACEMENT.
++func_dirname ()
++{
++ case ${1} in
++ */*) func_dirname_result="${1%/*}${2}" ;;
++ * ) func_dirname_result="${3}" ;;
++ esac
++}
++
++# func_basename file
++func_basename ()
++{
++ func_basename_result="${1##*/}"
++}
++
++# func_dirname_and_basename file append nondir_replacement
++# perform func_basename and func_dirname in a single function
++# call:
++# dirname: Compute the dirname of FILE. If nonempty,
++# add APPEND to the result, otherwise set result
++# to NONDIR_REPLACEMENT.
++# value returned in "$func_dirname_result"
++# basename: Compute filename of FILE.
++# value retuned in "$func_basename_result"
++# Implementation must be kept synchronized with func_dirname
++# and func_basename. For efficiency, we do not delegate to
++# those functions but instead duplicate the functionality here.
++func_dirname_and_basename ()
++{
++ case ${1} in
++ */*) func_dirname_result="${1%/*}${2}" ;;
++ * ) func_dirname_result="${3}" ;;
++ esac
++ func_basename_result="${1##*/}"
++}
++
++# func_stripname prefix suffix name
++# strip PREFIX and SUFFIX off of NAME.
++# PREFIX and SUFFIX must not contain globbing or regex special
++# characters, hashes, percent signs, but SUFFIX may contain a leading
++# dot (in which case that matches only a dot).
++func_stripname ()
++{
++ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
++ # positional parameters, so assign one to ordinary parameter first.
++ func_stripname_result=${3}
++ func_stripname_result=${func_stripname_result#"${1}"}
++ func_stripname_result=${func_stripname_result%"${2}"}
++}
++
++# func_opt_split
++func_opt_split ()
++{
++ func_opt_split_opt=${1%%=*}
++ func_opt_split_arg=${1#*=}
++}
++
++# func_lo2o object
++func_lo2o ()
++{
++ case ${1} in
++ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
++ *) func_lo2o_result=${1} ;;
++ esac
++}
++
++# func_xform libobj-or-source
++func_xform ()
++{
++ func_xform_result=${1%.*}.lo
++}
++
++# func_arith arithmetic-term...
++func_arith ()
++{
++ func_arith_result=$(( $* ))
++}
++
++# func_len string
++# STRING may not start with a hyphen.
++func_len ()
++{
++ func_len_result=${#1}
++}
++
++_LT_EOF
++ ;;
++ *) # Bourne compatible functions.
++ cat << \_LT_EOF >> "$cfgfile"
++
++# func_dirname file append nondir_replacement
++# Compute the dirname of FILE. If nonempty, add APPEND to the result,
++# otherwise set result to NONDIR_REPLACEMENT.
++func_dirname ()
++{
++ # Extract subdirectory from the argument.
++ func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
++ if test "X$func_dirname_result" = "X${1}"; then
++ func_dirname_result="${3}"
++ else
++ func_dirname_result="$func_dirname_result${2}"
++ fi
++}
++
++# func_basename file
++func_basename ()
++{
++ func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
++}
++
++
++# func_stripname prefix suffix name
++# strip PREFIX and SUFFIX off of NAME.
++# PREFIX and SUFFIX must not contain globbing or regex special
++# characters, hashes, percent signs, but SUFFIX may contain a leading
++# dot (in which case that matches only a dot).
++# func_strip_suffix prefix name
++func_stripname ()
++{
++ case ${2} in
++ .*) func_stripname_result=`$ECHO "X${3}" \
++ | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;;
++ *) func_stripname_result=`$ECHO "X${3}" \
++ | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;;
++ esac
++}
++
++# sed scripts:
++my_sed_long_opt='1s/^\(-[^=]*\)=.*/\1/;q'
++my_sed_long_arg='1s/^-[^=]*=//'
++
++# func_opt_split
++func_opt_split ()
++{
++ func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"`
++ func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"`
++}
++
++# func_lo2o object
++func_lo2o ()
++{
++ func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"`
++}
++
++# func_xform libobj-or-source
++func_xform ()
++{
++ func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[^.]*$/.lo/'`
++}
++
++# func_arith arithmetic-term...
++func_arith ()
++{
++ func_arith_result=`expr "$@"`
++}
++
++# func_len string
++# STRING may not start with a hyphen.
++func_len ()
++{
++ func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len`
++}
++
++_LT_EOF
++esac
++
++case $lt_shell_append in
++ yes)
++ cat << \_LT_EOF >> "$cfgfile"
++
++# func_append var value
++# Append VALUE to the end of shell variable VAR.
++func_append ()
++{
++ eval "$1+=\$2"
++}
++_LT_EOF
++ ;;
++ *)
++ cat << \_LT_EOF >> "$cfgfile"
++
++# func_append var value
++# Append VALUE to the end of shell variable VAR.
++func_append ()
++{
++ eval "$1=\$$1\$2"
++}
++
++_LT_EOF
++ ;;
++ esac
++
++
++ sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
++ || (rm -f "$cfgfile"; exit 1)
++
++ mv -f "$cfgfile" "$ofile" ||
++ (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
++ chmod +x "$ofile"
++
++ ;;
++
++ esac
++done # for ac_tag
++
++
++as_fn_exit 0
++_ACEOF
++ac_clean_files=$ac_clean_files_save
++
++test $ac_write_fail = 0 ||
++ as_fn_error "write failure creating $CONFIG_STATUS" "$LINENO" 5
++
++
++# configure is writing to config.log, and then calls config.status.
++# config.status does its own redirection, appending to config.log.
++# Unfortunately, on DOS this fails, as config.log is still kept open
++# by configure, so config.status won't be able to write to it; its
++# output is simply discarded. So we exec the FD to /dev/null,
++# effectively closing config.log, so it can be properly (re)opened and
++# appended to by config.status. When coming back to configure, we
++# need to make the FD available again.
++if test "$no_create" != yes; then
++ ac_cs_success=:
++ ac_config_status_args=
++ test "$silent" = yes &&
++ ac_config_status_args="$ac_config_status_args --quiet"
++ exec 5>/dev/null
++ $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
++ exec 5>>config.log
++ # Use ||, not &&, to avoid exiting from the if with $? = 1, which
++ # would make configure fail if this is the last instruction.
++ $ac_cs_success || as_fn_exit $?
++fi
++if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
++ { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
++$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
++fi
++
++
+Index: libdessert0.86-0.86.14/configure.ac
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/configure.ac 2009-12-09 16:38:27.235595145 +0100
+@@ -0,0 +1,97 @@
++# -*- Autoconf -*-
++# Process this file with autoconf to produce a configure script.
++
++AC_PREREQ([2.61])
++AC_INIT([libdessert], [0.86.14], [des-sert@spline.inf.fu-berlin.de])
++AM_INIT_AUTOMAKE([-Wall gnu dist-bzip2])
++AC_CONFIG_MACRO_DIR([m4])
++
++AC_CONFIG_SRCDIR([src/libdessert/dessert_core.c])
++AC_CONFIG_HEADERS([config.h])
++
++LIBDESSERT_LIBRARY_VERSION=0:86:14
++AC_SUBST([LIBDESSERT_LIBRARY_VERSION])
++
++# Checks for programs.
++AC_PROG_CC
++AC_PROG_INSTALL
++AC_PROG_LN_S
++
++# Checks for libtool
++
++# Debian Stable has no libtool2 yet so use old invocation
++#LT_INIT
++AM_PROG_LIBTOOL
++
++# Checks for net-snmp-config
++AC_CHECK_NET_SNMP
++
++AC_SUBST([SNMP_LIBS])
++AC_SUBST([SNMP_CFLAGS])
++
++# Checks for pcap-config
++AC_CHECK_PCAP
++
++AC_SUBST([PCAP_LIBS])
++AC_SUBST([PCAP_CFLAGS])
++
++# Checks for libcli
++
++AC_CHECK_HEADERS([libcli.h])
++
++AC_SEARCH_LIBS([cli_print],
++ [cli],
++ [AC_DEFINE([CLI_LIBS],[-lcli],[defines linkoption for libcli])],
++ [AC_MSG_ERROR([libcli could not found, please install development package of libcli])]
++)
++
++AC_SUBST([CLI_LIBS])
++
++# Checks for libraries.
++
++AX_PTHREAD(,[
++AC_MSG_ERROR([Your system does not support a pthread variant, libdessert will not work])
++])
++
++# Checks for header files.
++AC_CHECK_HEADERS([arpa/inet.h fcntl.h netinet/in.h stdint.h stdlib.h string.h sys/ioctl.h sys/socket.h syslog.h unistd.h])
++
++# Checks for typedefs, structures, and compiler characteristics.
++AC_HEADER_STDBOOL
++AC_C_INLINE
++AC_TYPE_INT32_T
++AC_TYPE_PID_T
++AC_TYPE_SIZE_T
++AC_TYPE_SSIZE_T
++AC_TYPE_UINT16_T
++AC_TYPE_UINT32_T
++AC_TYPE_UINT64_T
++AC_TYPE_UINT8_T
++
++# Checks for library functions.
++AC_FUNC_FORK
++AC_FUNC_MALLOC
++AC_FUNC_REALLOC
++AC_CHECK_FUNCS([gethostname gettimeofday localtime_r memmove memset socket strdup strerror strtol])
++
++# Checking for documentation generation
++
++DX_HTML_FEATURE([ON])
++DX_CHM_FEATURE([OFF])
++DX_CHI_FEATURE([OFF])
++DX_MAN_FEATURE([OFF])
++DX_RTF_FEATURE([OFF])
++DX_XML_FEATURE([OFF])
++DX_PDF_FEATURE([ON])
++DX_PS_FEATURE([OFF])
++DX_INIT_DOXYGEN([${PACKAGE_NAME}], [DES-SERT.doxyfile], [doxygen])
++
++AC_CONFIG_FILES([Makefile
++ src/Makefile
++ src/snmp/Makefile
++ src/libdessert/Makefile
++ include/Makefile
++ libdessert.pc
++ ])
++AC_OUTPUT
++
+Index: libdessert0.86-0.86.14/depcomp
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/depcomp 2009-12-09 16:38:27.235595145 +0100
+@@ -0,0 +1,630 @@
++#! /bin/sh
++# depcomp - compile a program generating dependencies as side-effects
++
++scriptversion=2009-04-28.21; # UTC
++
++# Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007, 2009 Free
++# Software Foundation, Inc.
++
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2, or (at your option)
++# any later version.
++
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++
++# You should have received a copy of the GNU General Public License
++# along with this program. If not, see <http://www.gnu.org/licenses/>.
++
++# As a special exception to the GNU General Public License, if you
++# distribute this file as part of a program that contains a
++# configuration script generated by Autoconf, you may include it under
++# the same distribution terms that you use for the rest of that program.
++
++# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
++
++case $1 in
++ '')
++ echo "$0: No command. Try \`$0 --help' for more information." 1>&2
++ exit 1;
++ ;;
++ -h | --h*)
++ cat <<\EOF
++Usage: depcomp [--help] [--version] PROGRAM [ARGS]
++
++Run PROGRAMS ARGS to compile a file, generating dependencies
++as side-effects.
++
++Environment variables:
++ depmode Dependency tracking mode.
++ source Source file read by `PROGRAMS ARGS'.
++ object Object file output by `PROGRAMS ARGS'.
++ DEPDIR directory where to store dependencies.
++ depfile Dependency file to output.
++ tmpdepfile Temporary file to use when outputing dependencies.
++ libtool Whether libtool is used (yes/no).
++
++Report bugs to <bug-automake@gnu.org>.
++EOF
++ exit $?
++ ;;
++ -v | --v*)
++ echo "depcomp $scriptversion"
++ exit $?
++ ;;
++esac
++
++if test -z "$depmode" || test -z "$source" || test -z "$object"; then
++ echo "depcomp: Variables source, object and depmode must be set" 1>&2
++ exit 1
++fi
++
++# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
++depfile=${depfile-`echo "$object" |
++ sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
++tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
++
++rm -f "$tmpdepfile"
++
++# Some modes work just like other modes, but use different flags. We
++# parameterize here, but still list the modes in the big case below,
++# to make depend.m4 easier to write. Note that we *cannot* use a case
++# here, because this file can only contain one case statement.
++if test "$depmode" = hp; then
++ # HP compiler uses -M and no extra arg.
++ gccflag=-M
++ depmode=gcc
++fi
++
++if test "$depmode" = dashXmstdout; then
++ # This is just like dashmstdout with a different argument.
++ dashmflag=-xM
++ depmode=dashmstdout
++fi
++
++cygpath_u="cygpath -u -f -"
++if test "$depmode" = msvcmsys; then
++ # This is just like msvisualcpp but w/o cygpath translation.
++ # Just convert the backslash-escaped backslashes to single forward
++ # slashes to satisfy depend.m4
++ cygpath_u="sed s,\\\\\\\\,/,g"
++ depmode=msvisualcpp
++fi
++
++case "$depmode" in
++gcc3)
++## gcc 3 implements dependency tracking that does exactly what
++## we want. Yay! Note: for some reason libtool 1.4 doesn't like
++## it if -MD -MP comes after the -MF stuff. Hmm.
++## Unfortunately, FreeBSD c89 acceptance of flags depends upon
++## the command line argument order; so add the flags where they
++## appear in depend2.am. Note that the slowdown incurred here
++## affects only configure: in makefiles, %FASTDEP% shortcuts this.
++ for arg
++ do
++ case $arg in
++ -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
++ *) set fnord "$@" "$arg" ;;
++ esac
++ shift # fnord
++ shift # $arg
++ done
++ "$@"
++ stat=$?
++ if test $stat -eq 0; then :
++ else
++ rm -f "$tmpdepfile"
++ exit $stat
++ fi
++ mv "$tmpdepfile" "$depfile"
++ ;;
++
++gcc)
++## There are various ways to get dependency output from gcc. Here's
++## why we pick this rather obscure method:
++## - Don't want to use -MD because we'd like the dependencies to end
++## up in a subdir. Having to rename by hand is ugly.
++## (We might end up doing this anyway to support other compilers.)
++## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
++## -MM, not -M (despite what the docs say).
++## - Using -M directly means running the compiler twice (even worse
++## than renaming).
++ if test -z "$gccflag"; then
++ gccflag=-MD,
++ fi
++ "$@" -Wp,"$gccflag$tmpdepfile"
++ stat=$?
++ if test $stat -eq 0; then :
++ else
++ rm -f "$tmpdepfile"
++ exit $stat
++ fi
++ rm -f "$depfile"
++ echo "$object : \\" > "$depfile"
++ alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
++## The second -e expression handles DOS-style file names with drive letters.
++ sed -e 's/^[^:]*: / /' \
++ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
++## This next piece of magic avoids the `deleted header file' problem.
++## The problem is that when a header file which appears in a .P file
++## is deleted, the dependency causes make to die (because there is
++## typically no way to rebuild the header). We avoid this by adding
++## dummy dependencies for each header file. Too bad gcc doesn't do
++## this for us directly.
++ tr ' ' '
++' < "$tmpdepfile" |
++## Some versions of gcc put a space before the `:'. On the theory
++## that the space means something, we add a space to the output as
++## well.
++## Some versions of the HPUX 10.20 sed can't process this invocation
++## correctly. Breaking it into two sed invocations is a workaround.
++ sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
++ rm -f "$tmpdepfile"
++ ;;
++
++hp)
++ # This case exists only to let depend.m4 do its work. It works by
++ # looking at the text of this script. This case will never be run,
++ # since it is checked for above.
++ exit 1
++ ;;
++
++sgi)
++ if test "$libtool" = yes; then
++ "$@" "-Wp,-MDupdate,$tmpdepfile"
++ else
++ "$@" -MDupdate "$tmpdepfile"
++ fi
++ stat=$?
++ if test $stat -eq 0; then :
++ else
++ rm -f "$tmpdepfile"
++ exit $stat
++ fi
++ rm -f "$depfile"
++
++ if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files
++ echo "$object : \\" > "$depfile"
++
++ # Clip off the initial element (the dependent). Don't try to be
++ # clever and replace this with sed code, as IRIX sed won't handle
++ # lines with more than a fixed number of characters (4096 in
++ # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines;
++ # the IRIX cc adds comments like `#:fec' to the end of the
++ # dependency line.
++ tr ' ' '
++' < "$tmpdepfile" \
++ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \
++ tr '
++' ' ' >> "$depfile"
++ echo >> "$depfile"
++
++ # The second pass generates a dummy entry for each header file.
++ tr ' ' '
++' < "$tmpdepfile" \
++ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
++ >> "$depfile"
++ else
++ # The sourcefile does not contain any dependencies, so just
++ # store a dummy comment line, to avoid errors with the Makefile
++ # "include basename.Plo" scheme.
++ echo "#dummy" > "$depfile"
++ fi
++ rm -f "$tmpdepfile"
++ ;;
++
++aix)
++ # The C for AIX Compiler uses -M and outputs the dependencies
++ # in a .u file. In older versions, this file always lives in the
++ # current directory. Also, the AIX compiler puts `$object:' at the
++ # start of each line; $object doesn't have directory information.
++ # Version 6 uses the directory in both cases.
++ dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
++ test "x$dir" = "x$object" && dir=
++ base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
++ if test "$libtool" = yes; then
++ tmpdepfile1=$dir$base.u
++ tmpdepfile2=$base.u
++ tmpdepfile3=$dir.libs/$base.u
++ "$@" -Wc,-M
++ else
++ tmpdepfile1=$dir$base.u
++ tmpdepfile2=$dir$base.u
++ tmpdepfile3=$dir$base.u
++ "$@" -M
++ fi
++ stat=$?
++
++ if test $stat -eq 0; then :
++ else
++ rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
++ exit $stat
++ fi
++
++ for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
++ do
++ test -f "$tmpdepfile" && break
++ done
++ if test -f "$tmpdepfile"; then
++ # Each line is of the form `foo.o: dependent.h'.
++ # Do two passes, one to just change these to
++ # `$object: dependent.h' and one to simply `dependent.h:'.
++ sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
++ # That's a tab and a space in the [].
++ sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
++ else
++ # The sourcefile does not contain any dependencies, so just
++ # store a dummy comment line, to avoid errors with the Makefile
++ # "include basename.Plo" scheme.
++ echo "#dummy" > "$depfile"
++ fi
++ rm -f "$tmpdepfile"
++ ;;
++
++icc)
++ # Intel's C compiler understands `-MD -MF file'. However on
++ # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c
++ # ICC 7.0 will fill foo.d with something like
++ # foo.o: sub/foo.c
++ # foo.o: sub/foo.h
++ # which is wrong. We want:
++ # sub/foo.o: sub/foo.c
++ # sub/foo.o: sub/foo.h
++ # sub/foo.c:
++ # sub/foo.h:
++ # ICC 7.1 will output
++ # foo.o: sub/foo.c sub/foo.h
++ # and will wrap long lines using \ :
++ # foo.o: sub/foo.c ... \
++ # sub/foo.h ... \
++ # ...
++
++ "$@" -MD -MF "$tmpdepfile"
++ stat=$?
++ if test $stat -eq 0; then :
++ else
++ rm -f "$tmpdepfile"
++ exit $stat
++ fi
++ rm -f "$depfile"
++ # Each line is of the form `foo.o: dependent.h',
++ # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
++ # Do two passes, one to just change these to
++ # `$object: dependent.h' and one to simply `dependent.h:'.
++ sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
++ # Some versions of the HPUX 10.20 sed can't process this invocation
++ # correctly. Breaking it into two sed invocations is a workaround.
++ sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" |
++ sed -e 's/$/ :/' >> "$depfile"
++ rm -f "$tmpdepfile"
++ ;;
++
++hp2)
++ # The "hp" stanza above does not work with aCC (C++) and HP's ia64
++ # compilers, which have integrated preprocessors. The correct option
++ # to use with these is +Maked; it writes dependencies to a file named
++ # 'foo.d', which lands next to the object file, wherever that
++ # happens to be.
++ # Much of this is similar to the tru64 case; see comments there.
++ dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
++ test "x$dir" = "x$object" && dir=
++ base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
++ if test "$libtool" = yes; then
++ tmpdepfile1=$dir$base.d
++ tmpdepfile2=$dir.libs/$base.d
++ "$@" -Wc,+Maked
++ else
++ tmpdepfile1=$dir$base.d
++ tmpdepfile2=$dir$base.d
++ "$@" +Maked
++ fi
++ stat=$?
++ if test $stat -eq 0; then :
++ else
++ rm -f "$tmpdepfile1" "$tmpdepfile2"
++ exit $stat
++ fi
++
++ for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
++ do
++ test -f "$tmpdepfile" && break
++ done
++ if test -f "$tmpdepfile"; then
++ sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile"
++ # Add `dependent.h:' lines.
++ sed -ne '2,${
++ s/^ *//
++ s/ \\*$//
++ s/$/:/
++ p
++ }' "$tmpdepfile" >> "$depfile"
++ else
++ echo "#dummy" > "$depfile"
++ fi
++ rm -f "$tmpdepfile" "$tmpdepfile2"
++ ;;
++
++tru64)
++ # The Tru64 compiler uses -MD to generate dependencies as a side
++ # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'.
++ # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
++ # dependencies in `foo.d' instead, so we check for that too.
++ # Subdirectories are respected.
++ dir=`echo "$object" | sed -e 's|/[^/]*$|/|'`
++ test "x$dir" = "x$object" && dir=
++ base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'`
++
++ if test "$libtool" = yes; then
++ # With Tru64 cc, shared objects can also be used to make a
++ # static library. This mechanism is used in libtool 1.4 series to
++ # handle both shared and static libraries in a single compilation.
++ # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d.
++ #
++ # With libtool 1.5 this exception was removed, and libtool now
++ # generates 2 separate objects for the 2 libraries. These two
++ # compilations output dependencies in $dir.libs/$base.o.d and
++ # in $dir$base.o.d. We have to check for both files, because
++ # one of the two compilations can be disabled. We should prefer
++ # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
++ # automatically cleaned when .libs/ is deleted, while ignoring
++ # the former would cause a distcleancheck panic.
++ tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4
++ tmpdepfile2=$dir$base.o.d # libtool 1.5
++ tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5
++ tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504
++ "$@" -Wc,-MD
++ else
++ tmpdepfile1=$dir$base.o.d
++ tmpdepfile2=$dir$base.d
++ tmpdepfile3=$dir$base.d
++ tmpdepfile4=$dir$base.d
++ "$@" -MD
++ fi
++
++ stat=$?
++ if test $stat -eq 0; then :
++ else
++ rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
++ exit $stat
++ fi
++
++ for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4"
++ do
++ test -f "$tmpdepfile" && break
++ done
++ if test -f "$tmpdepfile"; then
++ sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile"
++ # That's a tab and a space in the [].
++ sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile"
++ else
++ echo "#dummy" > "$depfile"
++ fi
++ rm -f "$tmpdepfile"
++ ;;
++
++#nosideeffect)
++ # This comment above is used by automake to tell side-effect
++ # dependency tracking mechanisms from slower ones.
++
++dashmstdout)
++ # Important note: in order to support this mode, a compiler *must*
++ # always write the preprocessed file to stdout, regardless of -o.
++ "$@" || exit $?
++
++ # Remove the call to Libtool.
++ if test "$libtool" = yes; then
++ while test "X$1" != 'X--mode=compile'; do
++ shift
++ done
++ shift
++ fi
++
++ # Remove `-o $object'.
++ IFS=" "
++ for arg
++ do
++ case $arg in
++ -o)
++ shift
++ ;;
++ $object)
++ shift
++ ;;
++ *)
++ set fnord "$@" "$arg"
++ shift # fnord
++ shift # $arg
++ ;;
++ esac
++ done
++
++ test -z "$dashmflag" && dashmflag=-M
++ # Require at least two characters before searching for `:'
++ # in the target name. This is to cope with DOS-style filenames:
++ # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise.
++ "$@" $dashmflag |
++ sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile"
++ rm -f "$depfile"
++ cat < "$tmpdepfile" > "$depfile"
++ tr ' ' '
++' < "$tmpdepfile" | \
++## Some versions of the HPUX 10.20 sed can't process this invocation
++## correctly. Breaking it into two sed invocations is a workaround.
++ sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
++ rm -f "$tmpdepfile"
++ ;;
++
++dashXmstdout)
++ # This case only exists to satisfy depend.m4. It is never actually
++ # run, as this mode is specially recognized in the preamble.
++ exit 1
++ ;;
++
++makedepend)
++ "$@" || exit $?
++ # Remove any Libtool call
++ if test "$libtool" = yes; then
++ while test "X$1" != 'X--mode=compile'; do
++ shift
++ done
++ shift
++ fi
++ # X makedepend
++ shift
++ cleared=no eat=no
++ for arg
++ do
++ case $cleared in
++ no)
++ set ""; shift
++ cleared=yes ;;
++ esac
++ if test $eat = yes; then
++ eat=no
++ continue
++ fi
++ case "$arg" in
++ -D*|-I*)
++ set fnord "$@" "$arg"; shift ;;
++ # Strip any option that makedepend may not understand. Remove
++ # the object too, otherwise makedepend will parse it as a source file.
++ -arch)
++ eat=yes ;;
++ -*|$object)
++ ;;
++ *)
++ set fnord "$@" "$arg"; shift ;;
++ esac
++ done
++ obj_suffix=`echo "$object" | sed 's/^.*\././'`
++ touch "$tmpdepfile"
++ ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
++ rm -f "$depfile"
++ cat < "$tmpdepfile" > "$depfile"
++ sed '1,2d' "$tmpdepfile" | tr ' ' '
++' | \
++## Some versions of the HPUX 10.20 sed can't process this invocation
++## correctly. Breaking it into two sed invocations is a workaround.
++ sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile"
++ rm -f "$tmpdepfile" "$tmpdepfile".bak
++ ;;
++
++cpp)
++ # Important note: in order to support this mode, a compiler *must*
++ # always write the preprocessed file to stdout.
++ "$@" || exit $?
++
++ # Remove the call to Libtool.
++ if test "$libtool" = yes; then
++ while test "X$1" != 'X--mode=compile'; do
++ shift
++ done
++ shift
++ fi
++
++ # Remove `-o $object'.
++ IFS=" "
++ for arg
++ do
++ case $arg in
++ -o)
++ shift
++ ;;
++ $object)
++ shift
++ ;;
++ *)
++ set fnord "$@" "$arg"
++ shift # fnord
++ shift # $arg
++ ;;
++ esac
++ done
++
++ "$@" -E |
++ sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
++ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' |
++ sed '$ s: \\$::' > "$tmpdepfile"
++ rm -f "$depfile"
++ echo "$object : \\" > "$depfile"
++ cat < "$tmpdepfile" >> "$depfile"
++ sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
++ rm -f "$tmpdepfile"
++ ;;
++
++msvisualcpp)
++ # Important note: in order to support this mode, a compiler *must*
++ # always write the preprocessed file to stdout.
++ "$@" || exit $?
++
++ # Remove the call to Libtool.
++ if test "$libtool" = yes; then
++ while test "X$1" != 'X--mode=compile'; do
++ shift
++ done
++ shift
++ fi
++
++ IFS=" "
++ for arg
++ do
++ case "$arg" in
++ -o)
++ shift
++ ;;
++ $object)
++ shift
++ ;;
++ "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
++ set fnord "$@"
++ shift
++ shift
++ ;;
++ *)
++ set fnord "$@" "$arg"
++ shift
++ shift
++ ;;
++ esac
++ done
++ "$@" -E 2>/dev/null |
++ sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
++ rm -f "$depfile"
++ echo "$object : \\" > "$depfile"
++ sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile"
++ echo " " >> "$depfile"
++ sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
++ rm -f "$tmpdepfile"
++ ;;
++
++msvcmsys)
++ # This case exists only to let depend.m4 do its work. It works by
++ # looking at the text of this script. This case will never be run,
++ # since it is checked for above.
++ exit 1
++ ;;
++
++none)
++ exec "$@"
++ ;;
++
++*)
++ echo "Unknown depmode $depmode" 1>&2
++ exit 1
++ ;;
++esac
++
++exit 0
++
++# Local Variables:
++# mode: shell-script
++# sh-indentation: 2
++# eval: (add-hook 'write-file-hooks 'time-stamp)
++# time-stamp-start: "scriptversion="
++# time-stamp-format: "%:y-%02m-%02d.%02H"
++# time-stamp-time-zone: "UTC"
++# time-stamp-end: "; # UTC"
++# End:
+Index: libdessert0.86-0.86.14/dessert.h
+===================================================================
+--- libdessert0.86-0.86.14.orig/dessert.h 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,1334 +0,0 @@
+-/***************************************************************************//**
+- @file
+-
+- @page license License
+-
+- @brief Copyright 2009, The DES-SERT Team, Freie Universitaet Berlin (FUB). \n
+- All rights reserved. \n
+-
+- These sources were originally developed by Philipp Schmidt
+- at Freie Universitaet Berlin (http://www.fu-berlin.de/),
+- Computer Systems and Telematics / Distributed, Embedded Systems (DES) group \n
+- (http://cst.mi.fu-berlin.de/, http://www.des-testbed.net/) \n
+- -----------------------------------------------------------------------------\n
+- This program is free software: you can redistribute it and/or modify it under
+- the terms of the GNU General Public License as published by the Free Software
+- Foundation, either version 3 of the License, or (at your option) any later
+- version. \n
+- \n
+- This program is distributed in the hope that it will be useful, but WITHOUT
+- ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+- FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n
+- \n
+- You should have received a copy of the GNU General Public License along with
+- this program. If not, see http://www.gnu.org/licenses/ . \n
+- -----------------------------------------------------------------------------\n
+- For further information and questions please use the web site \n
+- http://www.des-testbed.net/
+-*******************************************************************************/
+-
+-/***************************************************************************//**
+- *
+- * @mainpage DES-SERT
+- *
+- *
+- * @section intro_sec Introduction
+- *
+- * DES-SERT, the DES Simple and Extensible Routing-Framework for Testbeds,
+- * is a framework designed to assist researchers implementing routing
+- * protocols for testbeds.
+- *
+- * DES-SERT enables the implementation of routing protocols on top of
+- * Ethernet via an underlay (Layer 2.5) in user space.
+- * It introduces an abstraction from OS specific issues and provides
+- * functionality and data structures to implement proactive, reactive,
+- * and hybrid routing protocols.
+-
+- * While generally usable in many application scenarios, it is primarily
+- * used in DES-Mesh (http://www.des-testbed.net/), the multi-transceiver
+- * wireless mesh network testbed part of the DES-Testbed at Freie
+- * Universitaet Berlin, Germany.
+- *
+- * @section arch_sec DES-SERT Architecture
+- *
+- * DES-SERT introduces some concepts to implement routing protocols.
+- * When implementing a routing protocol with DES-SERT, you should be
+- * familiar with these concepts to structure and tailor your implementation.
+- *
+- *
+- * @subsection messages_subsec DES-SERT Messages
+- *
+- * Every packet you send or receive on the mesh is represented as a
+- * DES-SERT message. From a programmers point of view, a DES-SERT message
+- * is just a C-structure:
+- *
+- * @code
+- * typedef struct __attribute__ ((__packed__)) dessert_msg {
+- * struct ether_header l2h;
+- * char proto[DESSERT_PROTO_STRLEN];
+- * uint8_t ver;
+- * uint8_t flags;
+- * union {
+- * uint32_t u32;
+- * struct __attribute__ ((__packed__)) {
+- * uint8_t ttl;
+- * uint8_t u8;
+- * uint16_t u16;
+- * };
+- * };
+- * uint16_t hlen;
+- * uint16_t plen;
+- * } dessert_msg_t;
+- * @endcode
+- *
+- * Every message sent via the underlay carries this structure as a packet
+- * header. All data in a "dessert_msg" is stored in network byte order.
+- * DES-SERT tries to care as automatically as possible of this structure.
+- * Nevertheless you will have to care at least about: "l2h.ether_dhost" and
+- * "ttl".
+- *
+- * If you need to send some data along with every packet, e.g. some kind of
+- * metric or cost your routing protocol uses, you should try to fit this
+- * data into the "u8", "u16" and the upper 4 bits of the "flags" field.
+- * These fields will never be touched by DES-SERT except on initialization
+- * via "dessert_msg_new".
+- *
+- * Because just a C-structure is not really usable as a packet, there are some
+- * utility functions around - please have a look around in "dessert.h" and the
+- * doxygen documentation. The most important ones are: "dessert_msg_new" and
+- * "dessert_msg_destroy", which do not simply allocate memory for a DES-SERT
+- * message, but for a whole packet of maximum size and initialize the
+- * structures for further packet construction/processing.
+- *
+- * @code
+- * int dessert_msg_new(dessert_msg_t **msgout);
+- *
+- * void dessert_msg_destroy(dessert_msg_t* msg);
+- * @endcode
+- *
+- *
+- * @subsection extensions_subsec DES-SERT Extensions
+- *
+- * A DES-SERT extension is some structure used to piggyback data on a
+- * DES-SERT message. It consists of a 8-bit user supplied type field (with
+- * some reserved values), an 8-bit length field and user supplied data of
+- * arbitrary length of 253 bytes at most.
+- *
+- * It can be added to a message via dessert_msg_addext(), retrieved via
+- * dessert_msg_getext() and removed via dessert_msg_delext().
+- *
+- * @code
+- * int dessert_msg_addext(dessert_msg_t* msg, dessert_ext_t** ext,
+- * uint8_t type, size_t len);
+- *
+- * int dessert_msg_delext(dessert_msg_t *msg, dessert_ext_t *ext);
+- *
+- * int dessert_msg_getext(const dessert_msg_t* msg, dessert_ext_t** ext,
+- * uint8_t type, int index);
+- *
+- * @endcode
+- *
+- * It is recommended not to put single data fields in extensions, but
+- * combine semantically related data in a struct and attach this struct
+- * as an extension because every extension carried introduces an 16-bit
+- * overhead to the packet.
+- *
+- *
+- * @subsection pipelines_subsec Processing Pipelines
+- *
+- * Routing algorithms are often split up in several parts like packet
+- * validation, loop-detection or routing table lookup.
+- * To implement these as independent and clear as possible, DES-SERT enables
+- * you to split up your packet processing in as many parts as you like.
+- *
+- * There are two separate processing pipelines - one for packets received
+- * from the kernel via a TUN or TAP interface and one for packets received
+- * via an interface used on the mesh network.
+- *
+- * You can register callbacks to be added to one of these pipelines with
+- * "dessert_sysrxcb_add" or "dessert_meshrxcb_add". Both take an additional
+- * integer argument ("priority") specifying the order the callbacks should
+- * be called. Higher "priority" value results in being called later
+- * within the pipeline.
+- *
+- * @code
+- * int dessert_sysrxcb_add(dessert_sysrxcb_t* c, int prio);
+- *
+- * int dessert_meshrxcb_add(dessert_meshrxcb_t* c, int prio);
+- * @endcode
+- *
+- * If a callback returns "DESSERT_MSG_KEEP" the packed will be processed by
+- * further callbacks, if it returns "DESSERT_MSG_DROP" the message will be
+- * dropped and no further callbacks will be called.
+- *
+- * You do not need to care about the management of the buffers for incoming
+- * messages - DES-SERT does this for you. Nevertheless if you need to add
+- * extensions or enlarge the payload of a message, you need to tell DES-SERT
+- * to enlarge the buffer for you if the flag "DESSERT_FLAG_SPARSE" is set on
+- * the message. You can do this by returning "DESSERT_MSG_NEEDNOSPARSE" from
+- * within a callback. The callback will be called again with a larger buffer
+- * and no "DESSERT_FLAG_SPARSE" flag being set.
+- *
+- *
+- * @subsection buffer_subsec Processing Buffer
+- *
+- * If you need to pass information along several callbacks, you can do this
+- * in the processing buffer passed to the the callbacks. This buffer contains
+- * some local processing flags ("lflags") set by the builtin callback
+- * "dessert_msg_ifaceflags_cb" (e.g. telling you about packet origin or if
+- * the packet is multicast) and 1KB of space for your callbacks to pass
+- * along arbitrary data.
+- *
+- * This buffer might only be allocated after you explicitly request it - in
+- * this case the proc argument is NULL and you can return the value
+- * "DESSERT_MSG_NEEDMSGPROC" from within your callback. The callback will
+- * be called again with a valid processing buffer.
+- *
+- *
+- * @section interfaces_sec Using Interfaces
+- *
+- *
+- * @subsection sysif_subsec Using a TUN/TAP interface
+- *
+- * First you have to choose whether to use a TUN or TAP interface. TUN
+- * interfaces are used to exchange IPv4 / IPv6 datagrams with the kernel
+- * network stack. TAP interfaces are used to exchange Ethernet frames
+- * with the kernel network stack. If you want to route Ethernet frames,
+- * you should choose a TAP interface. If you intend to implement
+- * a custom layer 2 to layer 3 mapping, you should use a TUN interface.
+-
+- * Currently, you can only initialize and use a single sys (TUN/TAP) interface.
+- * This is done by "dessert_sysif_init". You must then set up the interface
+- * config in the kernel yourself e.g. by calling "ifconfig".
+- *
+- * @code
+- *
+- * int dessert_sysif_init(char* name, uint8_t flags);
+- *
+- * @endcode
+- *
+- * In either case, frames you receive from a TUN/TAP interface will be
+- * passed along the callbacks added by "dessert_sysrxcb_add" to the
+- * processing pipeline. Each of them will be called with a pointer to an
+- * Ethernet frame. In case of a TUN interface, "ether_shost" and "ether_dhost"
+- * are set to "00:00:00:00:00:00", and ether_type reflects whether the packet
+- * received is IPv4 oder IPv6.
+- *
+- * Packets are sent to the kernel network stack with "dessert_syssend".
+- * In case of a TUN Interface "ether_shost" and "ether_dhost" will be
+- * ignored.
+- *
+- * @code
+- * int dessert_syssend_msg(dessert_msg_t *msg);
+- *
+- * int dessert_syssend(const struct ether_header *eth, size_t len);
+- * @endcode
+- *
+- *
+- * @subsection meshif_subsec Using a Mesh Interface
+- *
+- * Mesh interfaces are used similar to the TUN/TAP interface with two major
+- * differences: You can have multiple mesh interfaces and they send and
+- * receive DES-SERT messages instead of Ethernet frames.
+- *
+- * You add an mesh interface using "dessert_meshif_add" and can send to it
+- * by calling "dessert_meshsend". If the interface parameter is NULL, the
+- * packet will be transmitted over every interface (good for flooding).
+- *
+- * @code
+- * int dessert_meshif_add(const char* dev, uint8_t flags);
+- *
+- *
+- * int dessert_meshsend(const dessert_msg_t* msgin,
+- * const dessert_meshif_t *iface);
+- *
+- * int dessert_meshsend_hwaddr(const dessert_msg_t* msgin,
+- * const uint8_t hwaddr[ETHER_ADDR_LEN]);
+- *
+- * int dessert_meshsend_allbutone(const dessert_msg_t* msgin,
+- * const dessert_meshif_t *iface);
+- *
+- * int dessert_meshsend_fast(dessert_msg_t* msg,
+- * const dessert_meshif_t *iface);
+- *
+- * int dessert_meshsend_fast_hwaddr(dessert_msg_t* msg,
+- * const uint8_t hwaddr[ETHER_ADDR_LEN]);
+- *
+- * int dessert_meshsend_fast_allbutone(dessert_msg_t* msg,
+- * const dessert_meshif_t *iface);
+- *
+- * int dessert_meshsend_raw(dessert_msg_t* msg,
+- * const dessert_meshif_t *iface);
+- * @endcode
+- *
+- * @section logging_sec Logging
+- *
+- * You can write log messages easily with a bunch of macros provided
+- * by DES-SERT ("dessert_debug", "dessert_info" ,"dessert_notice",
+- * "dessert_warn", "dessert_warning", "dessert_err", "dessert_crit",
+- * "dessert_alert" and "dessert_emerg"). Each of them can be used like
+- * "printf" and logs to Syslog, STDERR, file or a ringbuffer depending
+- * on your configuration.
+- *
+- * DES-SERT also ships with a custom "assert" macro which acts like
+- * the original macro from the standard C library and uses the logging
+- * mechanism described above.
+- *
+- *
+- * @section periodics_sec Periodics
+- *
+- * Periodics help you to perform maintenance or delayed tasks. A task
+- * consists of a callback, which will be called at the time you requested,
+- * and a void pointer the callback is passed. You can add these tasks by
+- * calling "dessert_periodic_add" or "dessert_periodic_add_delayed".
+- *
+- *
+- * @section cli_sec CLI - Command Line Interface
+- *
+- * DES-SERT supports simple configuration and debugging of your routing
+- * protocol implementation by providing a Cisco like command line interface
+- * (cli) and a config file parser based upon it.
+- * This cli is realized through libcli (http://code.google.com/p/libcli/).
+- *
+- * DES-SERT does some of the initialization of libcli. Therefore, it provides
+- * the main cli anchor "dessert_cli" and some anchors to add commands below
+- * "dessert_cli_.*". Because DES-SERT only loosely wraps libcli, you should
+- * make yourself familiar with libcli itself. This may be improved in further
+- * DES-SERT releases.
+- *
+- * You can evaluate a config file by calling "cli_file" and start a thread
+- * enabling a telnet-interface for DES-SERT by calling "dessert_cli_run".
+- *
+- *
+- * @section all_sec Putting it all together
+- *
+- * Now you have learned about the most important aspects of DES-SERT.
+- * To write your own routing protocol implementation, you need to know
+- * how to put all this together.
+- *
+- * You should start with a main() program parsing the command line options
+- * and then calling "dessert_init()". This is needed to set up DES-SERT
+- * correctly. Afterwards you can register callbacks, read the config file
+- * and do what you like. If everything is set up, you call "dessert_run()"
+- * and let the event based framework do its job.
+- *
+- * If you would like to see a complete protocol implementation sample,
+- * have a look at the "gossiping" directory.
+- *
+- *
+- * @section feedback_sec Contact & Feedback
+- *
+- * We love feedback - if you have patches, comments or questions,
+- * please contact us! Recent contact information is available on
+- * http://www.des-testbed.net/des-sert/
+- *
+- ******************************************************************************/
+-
+-#ifndef DESSERT_H
+-#define DESSERT_H
+-
+-#ifdef TARGET_DARWIN
+-#include <net/if_dl.h>
+-#define TUN_BSD
+-#endif
+-
+-#ifdef TARGET_LINUX
+-#define TUN_LINUX
+-#endif
+-
+-#include <net/if.h>
+-#include <net/ethernet.h>
+-#include <pcap.h>
+-#include <stdint.h>
+-#include <syslog.h>
+-#include <stdlib.h>
+-#include <libcli.h>
+-
+-/***************************************************************************//**
+- *
+- * @defgroup global G L O B A L # D E F I N E S and T Y P E D E F S / S T R U C T U R E S
+- *
+- * @brief EXTERNAL / PUBLIC
+- *
+- * @{
+- ******************************************************************************/
+-
+-/******************************************************************************
+- * #defines
+- ******************************************************************************/
+-
+-/** ethernet protocol used on layer 2 */
+-#define DESSERT_ETHPROTO 0x8042
+-
+-/** maximum frame size to assemble as dessert_msg */
+-#define DESSERT_MAXFRAMELEN ETHER_MAX_LEN
+-
+-/** maximum size of the data part in dessert_ext */
+-#define DESSERT_MAXEXTDATALEN 130
+-
+-/** length of protocol string used in dessert_msg */
+-#define DESSERT_PROTO_STRLEN 4
+-
+-/** size of local message processing buffer */
+-#define DESSERT_LBUF_LEN 1024
+-
+-/** return code for many dessert_* functions */
+-#define DESSERT_OK 0
+-
+-/** return code for many dessert_* functions */
+-#define DESSERT_ERR 1
+-
+-/******************************************************************************
+- * typedefs
+- ******************************************************************************/
+-/** runtime-unique frame id */
+-typedef uint64_t dessert_frameid_t;
+-
+-/** A basic message send on des-sert layer2.5. */
+-typedef struct __attribute__ ((__packed__)) dessert_msg {
+- /** the layer2 header on the wire */
+- struct ether_header l2h;
+- /** short name of the protocol as passed to dessert_init() */
+- char proto[DESSERT_PROTO_STRLEN];
+- /** version of the app as passed to dessert_init() */
+- uint8_t ver;
+- /** flags - bits 1-4 reserved for dessert, bits 5-8 for app usage */
+- uint8_t flags;
+- union {
+- /** reserved for app usage */
+- uint32_t u32;
+- struct __attribute__ ((__packed__)) {
+- /** ttl or hopcount field for app usage - 0xff if not used*/
+- uint8_t ttl;
+- /** reserved for app usage - 0x00 if not used */
+- uint8_t u8;
+- /** reserved for app usage - 0xbeef if not used */
+- uint16_t u16;
+- };
+- };
+- /** header length incl. extensions - in network byte order */
+- uint16_t hlen;
+- /** payload length - in network byte order */
+- uint16_t plen;
+-} dessert_msg_t;
+-
+-/** local processing struct for dessert_msg_t */
+-typedef struct dessert_msg_proc {
+- /** 16 bits for local processing flags */
+- uint16_t lflags;
+- /** 16 bits reserved */
+- uint16_t lreserved;
+- /** DESSERT_LBUF_LEN bytes buffer */
+- char lbuf[DESSERT_LBUF_LEN];
+-} dessert_msg_proc_t;
+-
+-/** a extension record to add to a dessert_msg */
+-typedef struct __attribute__ ((__packed__)) dessert_ext {
+- /** type of the extension
+- * user supplied types must be >= DESSERT_EXT_USER */
+- uint8_t type;
+-
+- /** length of the extension in bytes
+- * including the 2 bytes of the extension
+- * header itself*/
+- uint8_t len;
+-
+- /** pointer to the data - real length is len-2 bytes */
+- uint8_t data[DESSERT_MAXEXTDATALEN];
+-} dessert_ext_t;
+-
+-/** an interface used for dessert_msg frames */
+-typedef struct dessert_meshif {
+- /** pointer to next interface */
+- struct dessert_meshif *next;
+- /** pointer to next interface */
+- struct dessert_meshif *prev;
+- /** name of interface */
+- char if_name[IFNAMSIZ];
+- /** system ifindex */
+- unsigned int if_index;
+- /** hardware address of interface */
+- uint8_t hwaddr[ETHER_ADDR_LEN]; /* uthash key*/
+- /** counter mutex */
+- pthread_mutex_t cnt_mutex;
+- /** packet counter in */
+- uint64_t ipkts;
+- /** packet counter out */
+- uint64_t opkts;
+- /** packet counter in */
+- uint64_t ibytes;
+- /** packet counter out */
+- uint64_t obytes;
+- /** libpcap descriptor for the interface */
+- pcap_t *pcap;
+- /** libpcap error message buffer */
+- char pcap_err[PCAP_ERRBUF_SIZE];
+- /** pthread running the request loop */
+- pthread_t worker;
+-} dessert_meshif_t;
+-
+-/** A tun/tap interface used to inject packets to dessert implemented daemons.
+- *
+- * \note Please make sure first fields are equal to dessert_meshif to re-use
+- * _dessert_meshif_gethwaddr().
+- *
+- */
+-typedef struct dessert_sysif {
+- /** pointer to next interface */
+- struct dessert_sysif *next;
+- /** name of interface */
+- char if_name[IFNAMSIZ];
+- /** system ifindex */
+- unsigned int if_index;
+- /** hardware address of the interface */
+- uint8_t hwaddr[ETHER_ADDR_LEN];
+- /** counter mutex */
+- pthread_mutex_t cnt_mutex;
+- /** packet counter in */
+- uint64_t ipkts;
+- /** packet counter out */
+- uint64_t opkts;
+- /** packet counter in */
+- uint64_t ibytes;
+- /** packet counter out */
+- uint64_t obytes;
+- /** file descriptor to read/write from/to */
+- int fd;
+- /** if it is a tun or tap interface */
+- uint8_t flags;
+- /** pthread running the request loop */
+- pthread_t worker;
+-} dessert_sysif_t;
+-
+-/** Callback type to call if a packed is received via a dessert mesh interface.
+- *
+- * @param *msg dessert_msg_t frame received
+- * @param len length of the buffer pointed to from dessert_msg_t
+- * @param *proc local processing buffer passed along the callback pipeline - may be NULL
+- * @param *iface interface received packet on - may be NULL
+- * @param id unique internal frame id of the packet
+- *
+- * @retval DESSERT_MSG_KEEP to continue processing the packet
+- * @retval DESSERT_MSG_DROP to drop it
+- * @retval DESSERT_MSG_NEEDMSGPROC to get a processing buffer
+- * @retval DESSERT_MSG_NEEDNOSPARSE to get a full packet buffer (e.g. needed to add extensions)
+- *
+- * \warning The callbacks are invoked with no locks hold by the thread,
+- * \warning YOU MUST make sure the thread holds no locks after the callback exits.
+- * \warning YOU MUST also make sure not to do anything blocking in a callback!
+- *
+- * If the callback exits with DESSERT_MSG_NEEDMSGPROC or DESSERT_MSG_NEEDNOSPARSE
+- * and the respective buffer is NULL or sparse, the callback is called again after
+- * providing the requested resource.
+- *
+- */
+-typedef int dessert_meshrxcb_t(dessert_msg_t* msg, size_t len, dessert_msg_proc_t *proc, const dessert_meshif_t *iface, dessert_frameid_t id);
+-
+-/** Callback type to call if a packed should be injected into dessert via a tun/tap interface.
+- *
+- * @param *msg dessert msg received - original ethernet frame is encapsulated within
+- * @param len length of ethernet frame received
+- * @param *proc local processing buffer passed along the callback pipeline - may be NULL
+- * @param *sysif interface received packet on
+- * @param id unique internal frame id of the packet
+- *
+- * @retval DESSERT_MSG_KEEP to continue processing the packet
+- * @retval DESSERT_MSG_DROP to drop it
+- *
+- * \warning The callbacks are invoked with no locks hold by the thread,
+- * \warning YOU MUST make sure the thread holds no locks after the callback exits.
+- * \warning YOU MUST also make sure not to do anything blocking in a callback!
+- *
+-*/
+-typedef int dessert_sysrxcb_t(dessert_msg_t *msg, size_t len, dessert_msg_proc_t *proc, dessert_sysif_t *sysif, dessert_frameid_t id);
+-
+-/** callbacks type to call in a periodic task
+- *
+- * The callbacks are invoked with no locks hold by the thread,
+- * YOU MUST make sure the thread holds no locks after the callback exits.
+- * YOU MUST also make sure not to do anything blocking in a callback!
+- *
+- * @arg *data void pointer to pass to the callback
+- * @arg scheduled when this call was scheduled
+- * @arg interval how often this call should be scheduled
+- * ®return should be 0, otherwise the callback is unregistered
+- */
+-typedef int dessert_periodiccallback_t(void *data, struct timeval *scheduled, struct timeval *interval);
+-
+-/** definition of a periodic tasklist entry */
+-typedef struct dessert_periodic {
+- /** callback to call */
+- dessert_periodiccallback_t *c;
+- /** when to call next */
+- struct timeval scheduled;
+- /** call every */
+- struct timeval interval;
+- /** data pointer to pass to callback */
+- void *data;
+- /** internal pointer for task list */
+- struct dessert_periodic *next;
+-} dessert_periodic_t;
+-
+-/***************************************************************************//**
+- * @}
+- *
+- * @defgroup core C O R E
+- *
+- * @brief EXTERNAL / PUBLIC
+- *
+- * @{
+- ******************************************************************************/
+-
+-/******************************************************************************
+- * #defines
+- ******************************************************************************/
+-
+-/** type for local unique packet identification */
+-#define DESSERT_FRAMEID_MAX ((uint64_t)-1)
+-
+-/** flag for dessert_init - daemonize when calling
+- * disables logging to STDERR */
+-#define DESSERT_OPT_DAEMONIZE 0x0100
+-
+-/** flag for dessert_init - do not daemonize when calling */
+-#define DESSERT_OPT_NODAEMONIZE 0x0200
+-
+-/** flag for dessert_init - create and write pid file */
+-#define DESSERT_OPT_PID 0x0400
+-
+-/** flag for dessert_init - do not create and write pid file */
+-#define DESSERT_OPT_NOPID 0x0800
+-
+-/******************************************************************************
+- * globals
+- ******************************************************************************/
+-
+-/** protocol string used in dessert_msg frames */
+-extern char dessert_proto[DESSERT_PROTO_STRLEN+1];
+-
+-/** version int used in dessert_msg frames */
+-extern u_int8_t dessert_ver;
+-
+-/** default src address used for local generated dessert_msg frames */
+-extern u_int8_t dessert_l25_defsrc[ETHER_ADDR_LEN];
+-
+-
+-/** constant holding ethernet broadcast address after dessert_init */
+-extern u_char ether_broadcast[ETHER_ADDR_LEN];
+-
+-/** constant holding ethernet null address after dessert_init */
+-extern u_char ether_null[ETHER_ADDR_LEN];
+-
+-/** the config funnel */
+-extern pthread_rwlock_t dessert_cfglock;
+-
+-/******************************************************************************
+- * functions
+- ******************************************************************************/
+-
+-int dessert_init(const char* proto, int version, uint16_t opts, char* pidfile);
+-
+-int dessert_run(void);
+-void dessert_exit(void);
+-
+-/***************************************************************************//**
+- * @}
+- *
+- * @defgroup cli C L I - C O M M A N D _ L I N E _ I N T E R F A C E
+- *
+- * @brief EXTERNAL / PUBLIC
+- *
+- * @{
+- ******************************************************************************/
+-
+-/******************************************************************************
+- * globals
+- ******************************************************************************/
+-
+-extern struct cli_def *dessert_cli;
+-
+-extern struct cli_command *dessert_cli_show;
+-extern struct cli_command *dessert_cli_cfg_iface;
+-extern struct cli_command *dessert_cli_cfg_no;
+-extern struct cli_command *dessert_cli_cfg_no_iface;
+-extern struct cli_command *dessert_cli_cfg_set;
+-extern struct cli_command *dessert_cli_cfg_logging;
+-extern struct cli_command *dessert_cli_cfg_no_logging;
+-
+-/******************************************************************************
+- * functions
+- ******************************************************************************/
+-
+-int dessert_cli_run(int port);
+-
+-/***************************************************************************//**
+- * @}
+- *
+- * @defgroup log L O G _ F A C I L I T Y
+- *
+- * @brief EXTERNAL / PUBLIC
+- *
+- * @{
+- ******************************************************************************/
+-
+-/******************************************************************************
+- * #defines
+- ******************************************************************************/
+-
+-/** flag for dessert_logcfg - enable syslog logging */
+-#define DESSERT_LOG_SYSLOG 0x0001
+-
+-/** flag for dessert_logcfg - disable syslog logging */
+-#define DESSERT_LOG_NOSYSLOG 0x0002
+-
+-/** flag for dessert_logcfg - enable logfile logging
+- * @warning before using this you MUST use fopen(dessert_logfd, ...) to open the logfile */
+-#define DESSERT_LOG_FILE 0x0004
+-
+-/** flag for dessert_logcfg - disable logfile logging */
+-#define DESSERT_LOG_NOFILE 0x0008
+-
+-/** flag for dessert_logcfg - enable logging to stderr */
+-#define DESSERT_LOG_STDERR 0x0010
+-
+-/** flag for dessert_logcfg - disable logging to stderr */
+-#define DESSERT_LOG_NOSTDERR 0x0020
+-
+-/** flag for dessert_logcfg - enable logging to ringbuffer */
+-#define DESSERT_LOG_RBUF 0x0040
+-
+-/** flag for dessert_logcfg - disable logging to ringbuffer */
+-#define DESSERT_LOG_NORBUF 0x0080
+-
+-/** flag for dessert_logcfg - enable debug loglevel */
+-#define DESSERT_LOG_DEBUG 0x0100
+-
+-/** flag for dessert_logcfg - disable debug loglevel */
+-#define DESSERT_LOG_NODEBUG 0x0200
+-
+-/******************************************************************************
+- * functions
+- ******************************************************************************/
+-int dessert_logcfg(uint16_t opts);
+-void _dessert_log(int level, const char* func, const char* file, int line, const char *fmt, ...);
+-/** log at DEBUG level */
+-#define dessert_debug(...) _dessert_log(LOG_DEBUG, __FUNCTION__, __FILE__, __LINE__, __VA_ARGS__)
+-/** log at INFO level */
+-#define dessert_info(...) _dessert_log(LOG_INFO, __FUNCTION__, __FILE__, __LINE__, __VA_ARGS__)
+-/** log at NOTICE level */
+-#define dessert_notice(...) _dessert_log(LOG_NOTICE, __FUNCTION__, __FILE__, __LINE__, __VA_ARGS__)
+-/** log at WARNING level */
+-#define dessert_warn(...) _dessert_log(LOG_WARNING, __FUNCTION__, __FILE__, __LINE__, __VA_ARGS__)
+-/** log at WARNING level */
+-#define dessert_warning(...) _dessert_log(LOG_WARNING, __FUNCTION__, __FILE__, __LINE__, __VA_ARGS__)
+-/** log at ERR level */
+-#define dessert_err(...) _dessert_log(LOG_ERR, __FUNCTION__, __FILE__, __LINE__, __VA_ARGS__)
+-/** log at CRIT level */
+-#define dessert_crit(...) _dessert_log(LOG_CRIT, __FUNCTION__, __FILE__, __LINE__, __VA_ARGS__)
+-/** log at ALERT level */
+-#define dessert_alert(...) _dessert_log(LOG_ALERT, __FUNCTION__, __FILE__, __LINE__, __VA_ARGS__)
+-/** log at EMERG level */
+-#define dessert_emerg(...) _dessert_log(LOG_EMERG, __FUNCTION__, __FILE__, __LINE__, __VA_ARGS__)
+-
+-/***************************************************************************//**
+- * @}
+- *
+- * @defgroup mesh M E S H - I N T E R F A C E S
+- *
+- * @brief EXTERNAL / PUBLIC
+- *
+- * @{
+- ******************************************************************************/
+-
+-/******************************************************************************
+- * #defines
+- ******************************************************************************/
+-
+-/** return code for dessert_meshrxcb_t - forces to copy the message and call again*/
+-#define DESSERT_MSG_NEEDNOSPARSE 1
+-
+-/** return code for dessert_meshrxcb_t - forces to generate processing info and call again*/
+-#define DESSERT_MSG_NEEDMSGPROC 2
+-
+-/** return code for dessert_meshrxcb_t and dessert_sysrxcb_t */
+-#define DESSERT_MSG_KEEP 0
+-
+-/** return code for dessert_meshrxcb_t and dessert_sysrxcb_t */
+-#define DESSERT_MSG_DROP -1
+-
+-/** flag for dessert_meshif_add - set interface in promiscuous-mode (default) */
+-#define DESSERT_IF_PROMISC 0x0
+-
+-/** flag for dessert_meshif_add - do not set interface in promiscuous-mode */
+-#define DESSERT_IF_NOPROMISC 0x1
+-
+-/** flag for dessert_meshif_add - filter out non-des-sert frames in libpcap (default) */
+-#define DESSERT_IF_FILTER 0x0
+-
+-/** flag for dessert_meshif_add - do not filter out non-des-sert frames in libpcap */
+-#define DESSERT_IF_NOFILTER 0x2
+-
+-/******************************************************************************
+- * functions
+- ******************************************************************************/
+-
+-/* sending messages */
+-int dessert_meshsend(const dessert_msg_t* msgin, const dessert_meshif_t *iface);
+-int dessert_meshsend_allbutone(const dessert_msg_t* msgin, const dessert_meshif_t *iface);
+-int dessert_meshsend_hwaddr(const dessert_msg_t* msgin, const uint8_t hwaddr[ETHER_ADDR_LEN]);
+-int dessert_meshsend_randomized(const dessert_msg_t* msgin);
+-
+-int dessert_meshsend_fast(dessert_msg_t* msg, const dessert_meshif_t *iface);
+-int dessert_meshsend_fast_allbutone(dessert_msg_t* msg, const dessert_meshif_t *iface);
+-int dessert_meshsend_fast_hwaddr(dessert_msg_t* msg, const uint8_t hwaddr[ETHER_ADDR_LEN]);
+-int dessert_meshsend_fast_randomized(dessert_msg_t* msgin);
+-int dessert_meshsend_raw(dessert_msg_t* msg, const dessert_meshif_t *iface);
+-
+-/* meshrx-callback handling */
+-int dessert_meshrxcb_add(dessert_meshrxcb_t* c, int prio);
+-int dessert_meshrxcb_del(dessert_meshrxcb_t* c);
+-
+-/* mesh interface handling */
+-int dessert_meshif_add(const char* dev, uint8_t flags);
+-int dessert_meshif_del(const char* dev);
+-
+-dessert_meshif_t * dessert_meshif_get_name(const char* dev);
+-dessert_meshif_t * dessert_meshif_get_hwaddr(const uint8_t hwaddr[ETHER_ADDR_LEN]);
+-dessert_meshif_t * dessert_meshiflist_get(void);
+-/*\}*/
+-/***************************************************************************//**
+- * @}
+- *
+- * @defgroup sys S Y S - I N T E R F A C E S
+- *
+- * @brief EXTERNAL / PUBLIC
+- *
+- * @{
+- ******************************************************************************/
+-
+-/******************************************************************************
+- * #defines
+- ******************************************************************************/
+-
+-/** flag for dessert_sysif_init - open tun (ip/ipv6) device */
+-#define DESSERT_TUN 0x00
+-
+-/** flag for dessert_sysif_init - open tap (ethernet) device */
+-#define DESSERT_TAP 0x01
+-
+-/** flag for dessert_sysif_init - set dessert_l25_defsrc to mac of tap device */
+-#define DESSERT_MAKE_DEFSRC 0x02
+-
+-/** flag for dessert_sysif_init - get mac for tap failed - try mac in src of first packet */
+-#define _DESSERT_TAP_NOMAC 0x80
+-
+-/******************************************************************************
+- * functions
+- ******************************************************************************/
+-
+-int dessert_sysif_init(char* name, uint8_t flags);
+-
+-int dessert_sysrxcb_add(dessert_sysrxcb_t* c, int prio);
+-int dessert_sysrxcb_del(dessert_sysrxcb_t* c);
+-
+-int dessert_syssend_msg(dessert_msg_t *msg);
+-int dessert_syssend(const struct ether_header *eth, size_t len);
+-
+-/***************************************************************************//**
+- * @}
+- *
+- * @defgroup msg M E S S A G E _ H A N D L I N G
+- *
+- * @brief EXTERNAL / PUBLIC
+- *
+- * @{
+- ******************************************************************************/
+-
+-/******************************************************************************
+- * #defines
+- ******************************************************************************/
+-
+-/** flag for dessert_msg.flags - message len is hlen+plen
+- * if not set buffer len is assumed as DESSERT_MAXFRAMELEN + DESSERT_MSGPROCLEN */
+-#define DESSERT_FLAG_SPARSE 0x1
+-
+-/* *********************** */
+-
+-/** flag for dessert_msg_proc.lflags - l25 src is one of our interfaces */
+-#define DESSERT_LFLAG_SRC_SELF 0x0002
+-
+-/** flag for dessert_msg_proc.lflags - l25 dst is multicast address*/
+-#define DESSERT_LFLAG_DST_MULTICAST 0x0004
+-
+-/** flag for dessert_msg_proc.lflags - l25 dst is one of our interfaces */
+-#define DESSERT_LFLAG_DST_SELF 0x0008
+-
+-/** flag for dessert_msg_proc.lflags - l25 dst is broadcast */
+-#define DESSERT_LFLAG_DST_BROADCAST 0x0010
+-
+-/** flag for dessert_msg_proc.lflags - l2 src is one of our interfaces */
+-#define DESSERT_LFLAG_PREVHOP_SELF 0x0020
+-
+-/** flag for dessert_msg_proc.lflags - l2 dst is one of our interfaces */
+-#define DESSERT_LFLAG_NEXTHOP_SELF 0x0040
+-
+-/** flag for dessert_msg_proc.lflags - l2 dst is broadcast */
+-#define DESSERT_LFLAG_NEXTHOP_BROADCAST 0x0080
+-
+-/** flag for dessert_msg_proc.lflags - l25 dst is one of our interfaces,
+- * but we received the message not via the indented interface, e.g. we
+- * overheard it */
+-#define DESSERT_LFLAG_DST_SELF_OVERHEARD 0x0100
+-
+-/** flag for dessert_msg_proc.lflags - l2 dst is one of our interfaces,
+- * but we received the message not via the indented interface, e.g. we
+- * overheard it */
+-#define DESSERT_LFLAG_NEXTHOP_SELF_OVERHEARD 0x0200
+-
+-/* *********************** */
+-
+-/** length of dessert_ext header */
+-#define DESSERT_EXTLEN (sizeof(struct dessert_ext) - DESSERT_MAXEXTDATALEN)
+-
+-/** dessert_ext type wildcard - any extension */
+-#define DESSERT_EXT_ANY 0x00
+-
+-/** dessert_ext type for ethernet header */
+-#define DESSERT_EXT_ETH 0x01
+-
+-/** dessert_ext type for packet tracing */
+-#define DESSERT_EXT_TRACE 0x02
+-
+-/** first dessert_ext type for usage by the user */
+-#define DESSERT_EXT_USER 0x40
+-
+-/* *********************** */
+-
+-/** packet tracing flag - only record hosts */
+-#define DESSERT_MSG_TRACE_HOST (ETHER_ADDR_LEN)
+-
+-/** packet tracing flag - record interfaces */
+-#define DESSERT_MSG_TRACE_IFACE (3*ETHER_ADDR_LEN)
+-
+-/* *********************** */
+-
+-/** Returns the length of a given extension. */
+-#define dessert_ext_getdatalen(ext) (ext->len - DESSERT_EXTLEN)
+-
+-/******************************************************************************
+- * functions
+- ******************************************************************************/
+-
+-int dessert_msg_new(dessert_msg_t **msgout);
+-int dessert_msg_clone(dessert_msg_t **msgnew, const dessert_msg_t *msgold, uint8_t sparse);
+-int dessert_msg_check(const dessert_msg_t* msg, size_t len);
+-void dessert_msg_dump(const dessert_msg_t* msg, size_t len, char *buf, size_t blen);
+-void dessert_msg_destroy(dessert_msg_t* msg);
+-
+-int dessert_msg_ethencap(const struct ether_header* eth, size_t eth_len, dessert_msg_t **msgout);
+-int dessert_msg_ethdecap(const dessert_msg_t* msg, struct ether_header** ethout);
+-struct ether_header* dessert_msg_getl25ether (const dessert_msg_t* msg);
+-
+-int dessert_msg_proc_clone(dessert_msg_proc_t **procnew, const dessert_msg_proc_t *procold);
+-void dessert_msg_proc_dump(const dessert_msg_t* msg, size_t len, const dessert_msg_proc_t *proc, char *buf, size_t blen);
+-void dessert_msg_proc_destroy(dessert_msg_proc_t* proc);
+-
+-int dessert_msg_addpayload(dessert_msg_t* msg, void** payload, int len);
+-int dessert_msg_getpayload(dessert_msg_t *msg, void **payload);
+-int dessert_msg_addext(dessert_msg_t* msg, dessert_ext_t** ext, uint8_t type, size_t len);
+-int dessert_msg_delext(dessert_msg_t *msg, dessert_ext_t *ext);
+-int dessert_msg_resizeext(dessert_msg_t *msg, dessert_ext_t *ext, size_t new_len);
+-int dessert_msg_getext(const dessert_msg_t* msg, dessert_ext_t** ext, uint8_t type, int index);
+-int dessert_msg_get_ext_count(const dessert_msg_t* msg, uint8_t type);
+-
+-int dessert_msg_trace_initiate(dessert_msg_t* msg, int mode);
+-int dessert_msg_trace_dump(const dessert_msg_t* msg, char* buf, int blen);
+-
+-int dessert_msg_dump_cb(dessert_msg_t* msg, size_t len, dessert_msg_proc_t *proc, const dessert_meshif_t *iface, dessert_frameid_t id);
+-int dessert_msg_check_cb(dessert_msg_t* msg, size_t len, dessert_msg_proc_t *proc, const dessert_meshif_t *iface, dessert_frameid_t id);
+-int dessert_msg_trace_cb(dessert_msg_t* msg, size_t len, dessert_msg_proc_t *proc, const dessert_meshif_t *iface, dessert_frameid_t id);
+-int dessert_msg_ifaceflags_cb(dessert_msg_t* msg, size_t len, dessert_msg_proc_t *proc, const dessert_meshif_t *riface, dessert_frameid_t id);
+-
+-/***************************************************************************//**
+- * @}
+- *
+- * @defgroup periodic P E R I O D I C _ T A S K S
+- *
+- * @brief EXTERNAL / PUBLIC
+- *
+- * @{
+- ******************************************************************************/
+-
+-dessert_periodic_t *dessert_periodic_add(dessert_periodiccallback_t* c, void *data, const struct timeval *scheduled, const struct timeval *interval);
+-dessert_periodic_t *dessert_periodic_add_delayed(dessert_periodiccallback_t* c, void *data, int delay);
+-int dessert_periodic_del(dessert_periodic_t *p);
+-
+-/***************************************************************************//**
+- * @}
+- *
+- * @defgroup agentx NET - S N M P // A G E N T _ X
+- *
+- * @brief EXTERNAL / PUBLIC
+- *
+- * @{
+- ******************************************************************************/
+-
+-/******************************************************************************
+- * #defines
+- ******************************************************************************/
+-/** Flag indicating the dessert_agentx_appstats_t is of type bool. */
+-#define DESSERT_APPSTATS_VALUETYPE_BOOL 0
+-
+-/** Flag indicating the dessert_agentx_appstats_t is of type int32. */
+-#define DESSERT_APPSTATS_VALUETYPE_INT32 1
+-
+-/** Flag indicating the dessert_agentx_appstats_t is of type uint32. */
+-#define DESSERT_APPSTATS_VALUETYPE_UINT32 2
+-
+-/** Flag indicating the dessert_agentx_appstats_t is of type counter64. */
+-#define DESSERT_APPSTATS_VALUETYPE_COUNTER64 3
+-
+-/** Flag indicating the dessert_agentx_appstats_t is of type octetstring. */
+-#define DESSERT_APPSTATS_VALUETYPE_OCTETSTRING 4
+-
+-/* *********************** */
+-
+-/** Flag indicating the dessert_agentx_appstats_t does not contain information regarding a node or a link. */
+-#define DESSERT_APPSTATS_NODEORLINK_NONE 0
+-
+-/** Flag indicating the dessert_agentx_appstats_t contains information regarding a node. */
+-#define DESSERT_APPSTATS_NODEORLINK_NODE 1
+-
+-/** Flag indicating the dessert_agentx_appstats_t contains information regarding a link. */
+-#define DESSERT_APPSTATS_NODEORLINK_LINK 2
+-
+-/* *********************** */
+-
+-/** What is considered to be TRUE in a dessert_agentx_appstats_t. */
+-#define DESSERT_APPSTATS_BOOL_TRUE 1
+-
+-/** What is considered to be FALSE in a dessert_agentx_appstats_t. */
+-#define DESSERT_APPSTATS_BOOL_FALSE 0
+-
+-/* *********************** */
+-
+-/** Flag indicating the dessert_agentx_appparams_t is of type bool. */
+-#define DESSERT_APPPARAMS_VALUETYPE_BOOL 0
+-
+-/** Flag indicating the dessert_agentx_appparams_t is of type int32. */
+-#define DESSERT_APPPARAMS_VALUETYPE_INT32 1
+-
+-/** Flag indicating the dessert_agentx_appparams_t is of type uint32. */
+-#define DESSERT_APPPARAMS_VALUETYPE_UINT32 2
+-
+-/** Flag indicating the dessert_agentx_appparams_t is of type octetstring. */
+-#define DESSERT_APPPARAMS_VALUETYPE_OCTETSTRING 3
+-
+-/* *********************** */
+-
+-/** What is considered to be TRUE in a dessert_agentx_appparams_t. */
+-#define DESSERT_APPPARAMS_BOOL_TRUE 1
+-
+-/** What is considered to be FALSE in a dessert_agentx_appparams_t. */
+-#define DESSERT_APPPARAMS_BOOL_FALSE 0
+-
+-/* *********************** */
+-
+-/** Flag indicating if a appstats callback entry is of type bulk. */
+-#define DESSERT_APPSTATS_CB_BULK 1
+-/** Flag indicating if a appstats callback entry is of type nobulk. */
+-#define DESSERT_APPSTATS_CB_NOBULK 2
+-
+-/******************************************************************************
+- * typedefs
+- ******************************************************************************/
+-
+-/** An abstract data type representing some statistical datum.*/
+-typedef struct dessert_agentx_appstats {
+-
+- /** A prev pointer. @internal */
+- struct dessert_agentx_appstats *prev;
+- /** A next pointer. @internal */
+- struct dessert_agentx_appstats *next;
+-
+- /** The name of the datum. */
+- char name[256];
+- /** A description of the datum*/
+- char desc[256];
+-
+- /** The type of the datum.
+- *
+- * @see For valid values please refer to: \n DESSERT_APPSTATS_VALUETYPE_BOOL
+- * @see DESSERT_APPSTATS_VALUETYPE_INT32
+- * @see DESSERT_APPSTATS_VALUETYPE_UINT32
+- * @see DESSERT_APPSTATS_VALUETYPE_COUNTER64
+- * @see DESSERT_APPSTATS_VALUETYPE_OCTETSTRING
+- */
+- int value_type;
+- /** Indicates if this datum contains information about a node or a link
+- *
+- * @see For valid values please refer to: \n DESSERT_APPSTATS_NODEORLINK_NONE
+- * @see DESSERT_APPSTATS_NODEORLINK_NODE
+- * @see DESSERT_APPSTATS_NODEORLINK_LINK
+- */
+- int node_or_link;
+-
+- /** Field representing a mac address if this datum contains information about a node or a link. */
+- uint8_t macaddress1 [ETHER_ADDR_LEN];
+- /** Field representing a mac address if this datum contains information about a link. */
+- uint8_t macaddress2 [ETHER_ADDR_LEN];
+-
+- union {
+- /** A boolean.
+- *
+- * @see For valid values please refer to: \n DESSERT_APPSTATS_BOOL_TRUE
+- * @see DESSERT_APPSTATS_BOOL_FALSE
+- */
+- uint8_t bool;
+- /** A 32bit signed integer. */
+- int32_t int32;
+- /** A 32bit unsigned integer. */
+- uint32_t uint32;
+- /** A 64bit unsigned integer with counter semantics */
+- uint64_t counter64;
+-
+- struct {
+- /** The length of the octetstring field. */
+- uint8_t octetstring_len;
+- /** Character pointer to some raw bytes. */
+- char *octetstring;
+- };
+- };
+-
+-} dessert_agentx_appstats_t;
+-
+-/** An abstract data type representing some parameter.*/
+-typedef struct dessert_agentx_appparams {
+-
+- /** Internal. @internal */
+- struct dessert_agentx_appparams *prev;
+- /** Internal. @internal */
+- struct dessert_agentx_appparams *next;
+-
+- /** Internal. @internal Internal. */
+- uint8_t index;
+-
+- /** The name of the datum. */
+- char name[256];
+- /** A description of the datum*/
+- char desc[256];
+-
+- /** The type of the parameter.
+- *
+- * @see For valid values please refer to: \n DESSERT_APPPARAMS_VALUETYPE_BOOL
+- * @see DESSERT_APPPARAMS_VALUETYPE_INT32
+- * @see DESSERT_APPPARAMS_VALUETYPE_UINT32
+- * @see DESSERT_APPPARAMS_VALUETYPE_OCTETSTRING
+- */
+- int value_type;
+-
+- union {
+- /** A boolean.
+- *
+- * @see For valid values please refer to: \n DESSERT_APPPARAMS_BOOL_TRUE
+- * @see DESSERT_APPPARAMS_BOOL_FALSE
+- */
+- uint8_t bool;
+- /** A 32bit signed integer. */
+- int32_t int32;
+- /** A 32bit unsigned integer. */
+- uint32_t uint32;
+-
+- struct {
+- /** The length of the octetstring field. */
+- uint16_t octetstring_len;
+- /** Character pointer to some raw bytes. */
+- char *octetstring;
+- };
+- };
+-
+-} dessert_agentx_appparams_t;
+-
+-/** Callback type to call if the AppstatsTable is asked for by some snmp client.
+- *
+- * @param *appstats dessert_agentx_appstats_t the statistical datum to be filled out
+- *
+- *
+- * @retval DESSERT_OK on success
+- * @retval DESSERT_ERR to remove the corresponding callback entry
+- *
+- */
+-typedef int dessert_agentx_appstatscb_get_t(struct dessert_agentx_appstats *appstats);
+-
+-/** Callback type to call if the AppparamsTable is asked for by some snmp client.
+- *
+- * @param *appstats dessert_agentx_appparams_t the parameter to be filled out
+- *
+- *
+- * @retval DESSERT_OK on success
+- * @retval DESSERT_ERR to remove the corresponding callback entry
+- *
+- */
+-typedef int dessert_agentx_appparamscb_get_t(struct dessert_agentx_appparams *appparams);
+-
+-/** Callback type to call if the specific row represented by this callback is
+- * going to be set by some snmp client.
+- *
+- * @param *appstats dessert_agentx_appparams_t the new value
+- *
+- *
+- * @retval DESSERT_OK on success
+- * @retval DESSERT_ERR otherwise
+- *
+- */
+-typedef int dessert_agentx_appparamscb_set_t(struct dessert_agentx_appparams *appparams);
+-
+-/** A callback entry representing a statistical datum. */
+-typedef struct dessert_agentx_appstats_cb_entry {
+-
+- /** Interal. @internal */
+- struct dessert_agentx_appstats_cb_entry *prev;
+- /** Interal. @internal */
+- struct dessert_agentx_appstats_cb_entry *next;
+-
+- /** Flag indicating whether this entry represents a bulk entry.*/
+- uint8_t isbulk_flag;
+-
+- /** The getter callback. */
+- dessert_agentx_appstatscb_get_t *c;
+-
+-} dessert_agentx_appstats_cb_entry_t;
+-
+-/** A callback entry representing a parameter. */
+-typedef struct dessert_agentx_appparams_cb_entry {
+-
+- /** Internal. @internal */
+- struct dessert_agentx_appparams_cb_entry *prev;
+- /** Internal. @internal*/
+- struct dessert_agentx_appparams_cb_entry *next;
+-
+- /** Internal. @internal */
+- uint8_t index;
+-
+- /** The getter callback. */
+- dessert_agentx_appparamscb_get_t *get;
+- /** The setter callback. */
+- dessert_agentx_appparamscb_set_t *set;
+-
+-} dessert_agentx_appparams_cb_entry_t;
+-
+-
+-/******************************************************************************
+- * globals
+- ******************************************************************************/
+-
+-
+-/******************************************************************************
+- * functions
+- ******************************************************************************/
+-dessert_agentx_appstats_t *dessert_agentx_appstats_new(void);
+-void dessert_agentx_appstats_destroy(dessert_agentx_appstats_t *appstat);
+-
+-dessert_agentx_appstats_cb_entry_t *dessert_agentx_appstats_add(dessert_agentx_appstatscb_get_t *c);
+-dessert_agentx_appstats_cb_entry_t *dessert_agentx_appstats_add_bulk(dessert_agentx_appstatscb_get_t *c);
+-int dessert_agentx_appstats_del(dessert_agentx_appstats_cb_entry_t *e);
+-
+-dessert_agentx_appparams_t *dessert_agentx_appparam_new(void);
+-void dessert_agentx_appparam_destroy(dessert_agentx_appparams_t *appparam);
+-
+-dessert_agentx_appparams_cb_entry_t *dessert_agentx_appparams_add(dessert_agentx_appparamscb_get_t *get, dessert_agentx_appparamscb_set_t *set);
+-int dessert_agentx_appparams_del(dessert_agentx_appparams_cb_entry_t *e);
+-
+-/**************************************************************************//**
+- * @}
+- *
+- * @defgroup macros U S E F U L L _ MA C R O S
+- *
+- * @brief EXTERNAL / PUBLIC
+- *
+- * @{
+- ******************************************************************************/
+-
+-/** A convenience macro to safely iterate the list of mesh interfaces.
+- *
+- * @param __interface pointer to a temporal dessert_meshif_t
+- *
+- * @warning You must pair it with an ending MESHIFLIST_ITERATOR_STOP() macro!
+- * Please find an usage example in the Examples paragraph below.
+- *
+- * @par Examples:
+- *
+- * @li The do_something() function will be called for every mesh interface in the list.
+- * @code
+- * dessert_meshif_t *iface;
+- *
+- * MESHIFLIST_ITERATOR_START(iface)
+- * do_something(iface); // do something to every iface
+- * MESHIFLIST_ITERATOR_STOP;
+- * @endcode
+- */
+-#define MESHIFLIST_ITERATOR_START(__interface) \
+-pthread_rwlock_rdlock(&dessert_cfglock); \
+-DL_FOREACH(dessert_meshiflist_get(), __interface) {
+-
+-/** A convenience macro to safely iterate the list of mesh interfaces.
+- *
+- * @see MESHIFLIST_ITERATOR_START()
+- */
+-#define MESHIFLIST_ITERATOR_STOP } pthread_rwlock_unlock(&dessert_cfglock)
+-
+-/** A convenience macro to safely add @a __sec seconds and @a __usec microseconds
+- * to the @c struct @c timeval @a __tv in an <em>invariant respecting</em> manner.
+- *
+- * @param __tv the @c struct @c timeval to add to
+- * @param __sec the number of seconds to add up to @a __tv->tv_sec
+- * @param __usec the number of microseconds to add up to @a __tv.->tv_usec
+- *
+- * %DESCRIPTION: \n
+- * The <a href="http://www.gnu.org/s/libc/manual/html_node/Elapsed-Time.html#Elapsed-Time">GNU C Library Documentation</a>
+- * states about the @c tv_usec member of the @c struct @c timeval: <em>This is the
+- * rest of the elapsed time (a fraction of a second), represented as the number
+- * of microseconds. It is always less than one @a million.</em>
+- *
+- */
+-#define TIMEVAL_ADD(__tv, __sec, __usec) \
+- do { \
+- (__tv)->tv_sec += __sec; \
+- (__tv)->tv_usec += __usec; \
+- if((__tv)->tv_usec >= 1000000) { \
+- ++(__tv)->tv_sec; \
+- (__tv)->tv_usec -= 1000000; \
+- } \
+- } while(0)
+-
+-#define likely(x) (__builtin_expect((x),1))
+-#define unlikely(x) (__builtin_expect((x),0))
+-
+-#define __dessert_assert(func, file, line, e) \
+- ((void)_dessert_log(LOG_EMERG, func, file, line, "assertion `%s' failed!\n", e), abort)
+-
+-#ifdef NDEBUG
+-#define assert(e) ((void)0)
+-#else
+-#define assert(e) \
+- (__builtin_expect(!(e), 0) ? __dessert_assert(__FUNCTION__, __FILE__, __LINE__, #e) : (void)0)
+-#endif
+-
+-/** @} */
+-
+-/******************************************************************************
+- *
+- * ! ! ! ! O L D ! ! ! T O D O ! ! ! !
+- *
+- ******************************************************************************/
+-
+-/** the config-flag variable */
+-//extern uint16_t dessert_cfgflags; // TODO not used! to be removed??!?
+-
+-/** size of a dessert_msg buffer */
+-//#define dessert_msg_buflen(x) ((x->flags&DESSERT_FLAG_SPARSE)?(x->hlen+x->plen):(DESSERT_MAXFRAMELEN+DESSERT_MSGPROCLEN))
+-
+-//#define dessert_frameid_overflow(x, y) ((x>y)&&((x-y)>(DESSERT_FRAMEID_MAX/2)))
+-
+-
+-#endif /* DESSERT_H*/
+Index: libdessert0.86-0.86.14/dessert_agentx.c
+===================================================================
+--- libdessert0.86-0.86.14.orig/dessert_agentx.c 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,563 +0,0 @@
+-/******************************************************************************
+- Copyright 2009, The DES-SERT Team, Freie Universitaet Berlin (FUB).
+- All rights reserved.
+-
+- These sources were originally developed by David Gutzmann
+- at Freie Universitaet Berlin (http://www.fu-berlin.de/),
+- Computer Systems and Telematics / Distributed, Embedded Systems (DES) group
+- (http://cst.mi.fu-berlin.de/, http://www.des-testbed.net/)
+- ------------------------------------------------------------------------------
+- This program is free software: you can redistribute it and/or modify it under
+- the terms of the GNU General Public License as published by the Free Software
+- Foundation, either version 3 of the License, or (at your option) any later
+- version.
+-
+- This program is distributed in the hope that it will be useful, but WITHOUT
+- ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+- FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+-
+- You should have received a copy of the GNU General Public License along with
+- this program. If not, see http://www.gnu.org/licenses/ .
+- ------------------------------------------------------------------------------
+- For further information and questions please use the web site
+- http://www.des-testbed.net/
+- *******************************************************************************/
+-
+-#include "dessert_internal.h"
+-#include "dessert.h"
+-
+-/* global data storage // P U B L I C */
+-
+-/* global data storage // P R I V A T E */
+-pthread_rwlock_t _dessert_appstats_cblist_lock = PTHREAD_RWLOCK_INITIALIZER;
+-dessert_agentx_appstats_cb_entry_t *_dessert_appstats_cblist = NULL;
+-
+-pthread_rwlock_t _dessert_appparams_cblist_lock = PTHREAD_RWLOCK_INITIALIZER;
+-dessert_agentx_appparams_cb_entry_t *_dessert_appparams_cblist = NULL;
+-
+-/* local data storage*/
+-int keep_snmp_running = 1;
+-
+-pthread_mutex_t _dessert_agentx_appparams_nextindex_mutex =
+- PTHREAD_MUTEX_INITIALIZER;
+-uint8_t _dessert_agentx_appparams_nextindex = 0;
+-
+-/* internal functions forward declarations*/
+-static void *_dessert_agentx_worker(void *arg);
+-static dessert_agentx_appstats_cb_entry_t *_dessert_agentx_appstats_add(
+- dessert_agentx_appstatscb_get_t *c, uint8_t bulknobulk_flag);
+-static uint8_t _dessert_agentx_appparams_new_index(void);
+-
+-/******************************************************************************
+- *
+- * EXTERNAL / PUBLIC
+- *
+- * NET - S N M P // A G E N T _ X
+- *
+- ******************************************************************************/
+-
+-/******************************************************************************
+- * appStats
+- ******************************************************************************/
+-
+-/** Creates and initializes a new dessert_agentx_appstats_t.
+- *
+- * @return the new dessert_agentx_appstats_t
+- *
+- * @warning A dessert_agentx_appstats_t allocated with this function must be
+- * freed with dessert_agentx_appstats_destroy().
+- *
+- * @see dessert_agentx_appstats_destroy()
+- *
+- * @par Description:\n
+- *
+- */
+-dessert_agentx_appstats_t *dessert_agentx_appstats_new() {
+- dessert_agentx_appstats_t *appstat;
+-
+- appstat = malloc(sizeof(dessert_agentx_appstats_t));
+-
+- appstat->prev = appstat;
+- appstat->next = NULL;
+-
+- memset(appstat->name,0, sizeof(appstat->name));
+- memset(appstat->desc,0, sizeof(appstat->desc));
+-
+- appstat->value_type = DESSERT_APPSTATS_VALUETYPE_BOOL;
+- appstat->node_or_link = DESSERT_APPSTATS_NODEORLINK_NONE;
+- memset(appstat->macaddress1, 0, ETHER_ADDR_LEN);
+- memset(appstat->macaddress2, 0, ETHER_ADDR_LEN);
+-
+- appstat->bool = DESSERT_APPSTATS_BOOL_FALSE;
+-
+- return appstat;
+-}
+-
+-/** Frees a dessert_agentx_appstats_t.
+- *
+- * @param appstat the dessert_agentx_appstats_t to be freed
+- *
+- * @warning Only use this method to free a dessert_agentx_appstats_t which was allocated with dessert_agentx_appstats_new().
+- *
+- * @see dessert_agentx_appstats_new()
+- *
+- * @par Description:\n
+- */
+-void dessert_agentx_appstats_destroy(dessert_agentx_appstats_t *appstat) {
+- free(appstat);
+-}
+-
+-/** Adds an application statistics callback.
+- *
+- * @param[in] *c the callback to add
+- *
+- * @retval pointer to the corresponding callback entry on success
+- * @retval NULL otherwise
+- *
+- * @par Description:\n
+- *
+- */
+-dessert_agentx_appstats_cb_entry_t *dessert_agentx_appstats_add(
+- dessert_agentx_appstatscb_get_t *c) {
+-
+- return (_dessert_agentx_appstats_add(c, DESSERT_APPSTATS_CB_NOBULK));
+-}
+-
+-/** Adds an application statistics bulk callback.
+- *
+- * @param[in] *c the callback to add
+- *
+- * @retval pointer to the corresponding callback entry on success
+- * @retval NULL otherwise
+- *
+- * @par Description:\n
+- *
+- */
+-dessert_agentx_appstats_cb_entry_t *dessert_agentx_appstats_add_bulk(
+- dessert_agentx_appstatscb_get_t *c) {
+-
+- return (_dessert_agentx_appstats_add(c, DESSERT_APPSTATS_CB_BULK));
+-}
+-
+-/** Deletes an application statistics callback.
+- *
+- * @param *e pointer to a callback entry
+- *
+- * @retval DESSERT_OK on success
+- * @retval DESSERT_ERR otherwise
+- *
+- * @see dessert_agentx_appstats_add()
+- * @see dessert_agentx_appstats_add_bulk()
+- *
+- * @par Description:\n
+- */
+-int dessert_agentx_appstats_del(dessert_agentx_appstats_cb_entry_t *e) {
+-
+- if (e == NULL) {
+- return DESSERT_ERR;
+- }
+-
+- pthread_rwlock_wrlock(&_dessert_appstats_cblist_lock);
+- DL_DELETE(_dessert_appstats_cblist, e);
+- pthread_rwlock_unlock(&_dessert_appstats_cblist_lock);
+-
+- free(e);
+-
+- return DESSERT_OK;
+-}
+-
+-/******************************************************************************
+- * appParams
+- ******************************************************************************/
+-
+-/** Creates and initializes a new dessert_agentx_appparams_t.
+- *
+- * @return the new dessert_agentx_appparams_t
+- *
+- * @warning A dessert_agentx_appparams_t allocated with this function must be
+- * freed with dessert_agentx_appparams_destroy().
+- *
+- * @see dessert_agentx_appparams_destroy()
+- *
+- * @par Description:\n
+- *
+- */
+-dessert_agentx_appparams_t *dessert_agentx_appparam_new() {
+- dessert_agentx_appparams_t *appparam;
+-
+- appparam = malloc(sizeof(dessert_agentx_appparams_t));
+-
+- memset(appparam->name,0, sizeof(appparam->name));
+- memset(appparam->desc,0, sizeof(appparam->desc));
+-
+- appparam->value_type = DESSERT_APPPARAMS_VALUETYPE_BOOL;
+-
+- appparam->bool = DESSERT_APPSTATS_BOOL_FALSE;
+-
+- return appparam;
+-}
+-
+-/** Frees a dessert_agentx_appparams_t.
+- *
+- * @param appparam the dessert_agentx_appparams_t to be freed
+- *
+- * @warning Only use this method to free a dessert_agentx_appparams_t which was
+- * allocated with dessert_agentx_appparams_new().
+- *
+- * @see dessert_agentx_appparams_new()
+- *
+- * @par Description:\n
+- */
+-void dessert_agentx_appparam_destroy(dessert_agentx_appparams_t *appparam) {
+- free(appparam);
+-}
+-
+-/** Adds an application parameter callback.
+- *
+- * @param[in] *c the callback to add
+- *
+- * @retval pointer to the corresponding callback entry on success
+- * @retval NULL otherwise
+- *
+- * @par Description:\n
+- *
+- */
+-dessert_agentx_appparams_cb_entry_t *dessert_agentx_appparams_add(
+- dessert_agentx_appparamscb_get_t *get,
+- dessert_agentx_appparamscb_set_t *set) {
+-
+- dessert_agentx_appparams_cb_entry_t *e;
+-
+- e = malloc(sizeof(dessert_agentx_appparams_cb_entry_t));
+-
+- if (e == NULL) {
+- dessert_err("failed to allocate buffer for new dessert_agentx_appparams_entry_t");
+- return (NULL);
+- }
+-
+- e->index = _dessert_agentx_appparams_new_index();
+- e->get = get;
+- e->set = set;
+-
+- pthread_rwlock_wrlock(&_dessert_appparams_cblist_lock);
+- DL_APPEND(_dessert_appparams_cblist, e);
+- pthread_rwlock_unlock(&_dessert_appparams_cblist_lock);
+-
+- return (e);
+-}
+-
+-/** Deletes an application parameter callback.
+- *
+- * @param *e pointer to a callback entry
+- *
+- * @retval DESSERT_OK on success
+- * @retval DESSERT_ERR otherwise
+- *
+- * @see dessert_agentx_appparams_add()
+- *
+- * @par Description:\n
+- */
+-int dessert_agentx_appparams_del(dessert_agentx_appparams_cb_entry_t *e) {
+-
+- if (e == NULL) {
+- return DESSERT_ERR;
+- }
+-
+- pthread_rwlock_wrlock(&_dessert_appparams_cblist_lock);
+- DL_DELETE(_dessert_appparams_cblist, e);
+- pthread_rwlock_unlock(&_dessert_appparams_cblist_lock);
+-
+- /* TODO: invalidate row*/
+-
+- return DESSERT_OK;
+-}
+-
+-/******************************************************************************
+- *
+- * INTERNAL / PRIVATE
+- *
+- * NET - S N M P // A G E N T _ X
+- *
+- ******************************************************************************/
+-
+-/******************************************************************************
+- * appStats
+- ******************************************************************************/
+-
+-void _dessert_agentx_appstats_free(dessert_agentx_appstats_t *appstat){
+- if (appstat->value_type == DESSERT_APPSTATS_VALUETYPE_OCTETSTRING
+- && appstat->octetstring != NULL) {
+- free(appstat->octetstring);
+- }
+- dessert_agentx_appstats_destroy(appstat);
+-}
+-
+-void _dessert_agentx_appstats_free_list(
+- dessert_agentx_appstats_t **appstats_list) {
+- dessert_agentx_appstats_t *appstat;
+- dessert_agentx_appstats_t *tbf;
+-
+- for (appstat = (*appstats_list); appstat;) {
+- tbf = appstat;
+- appstat = appstat->next;
+- _dessert_agentx_appstats_free(tbf);
+- }
+-}
+-
+-int _dessert_agentx_appstats_harvest_callbacks(
+- dessert_agentx_appstats_t **appstats_list) {
+- dessert_agentx_appstats_cb_entry_t *cbe;
+- dessert_agentx_appstats_t *new_appstat;
+- dessert_agentx_appstats_t *appstat;
+- int res = 0;
+-
+- pthread_rwlock_rdlock(&_dessert_appstats_cblist_lock);
+- DL_FOREACH(_dessert_appstats_cblist, cbe) {
+-
+- new_appstat = dessert_agentx_appstats_new();
+- if (new_appstat == NULL) {
+- dessert_err("failed to allocate buffer for new dessert_agentx_appstats_entry_t");
+-
+- dessert_err("freeing appstats harvested so far...");
+- _dessert_agentx_appstats_free_list(appstats_list);
+-
+- return DESSERT_ERR;
+- }
+-
+- res = cbe->c(new_appstat);
+-
+- if (res == DESSERT_OK) {
+- if (cbe->isbulk_flag & DESSERT_APPSTATS_CB_NOBULK) {
+-
+- DL_APPEND(*appstats_list, new_appstat);
+- } else { // DESSERT_APPSTATS_BULK
+- dessert_agentx_appstats_t temp;
+- DL_FOREACH(new_appstat, appstat ) {
+- temp.next = appstat->next;
+- temp.prev = appstat->prev;
+- DL_APPEND(*appstats_list, appstat);
+- appstat = &temp;
+- }
+- }
+- } else {
+- dessert_err("freeing list of appstats received from callback...");
+- _dessert_agentx_appstats_free_list(&new_appstat);
+- pthread_rwlock_unlock(&_dessert_appstats_cblist_lock);
+- dessert_agentx_appstats_del(cbe);
+- pthread_rwlock_rdlock(&_dessert_appstats_cblist_lock);
+- }
+-
+- }
+- pthread_rwlock_unlock(&_dessert_appstats_cblist_lock);
+-
+- return DESSERT_OK;
+-}
+-
+-/******************************************************************************
+- * appParams
+- ******************************************************************************/
+-
+-void _dessert_agentx_appparams_free(dessert_agentx_appparams_t *appparam) {
+- if (appparam->value_type == DESSERT_APPPARAMS_VALUETYPE_OCTETSTRING
+- && appparam->octetstring != NULL) {
+- free(appparam->octetstring);
+- }
+- dessert_agentx_appparam_destroy(appparam);
+-}
+-
+-void _dessert_agentx_appparams_free_list(
+- dessert_agentx_appparams_t **appparams_list) {
+- dessert_agentx_appparams_t *appparam;
+- dessert_agentx_appparams_t *tbf;
+-
+- for (appparam = (*appparams_list); appparam;) {
+- tbf = appparam;
+- appparam = appparam->next;
+- _dessert_agentx_appparams_free(tbf);
+- }
+-}
+-
+-int _dessert_agentx_appparams_harvest_callbacks(
+- dessert_agentx_appparams_t **appparams_list) {
+- dessert_agentx_appparams_cb_entry_t *cbe;
+- dessert_agentx_appparams_t *new_appparam;
+- int res = 0;
+-
+- pthread_rwlock_rdlock(&_dessert_appparams_cblist_lock);
+- DL_FOREACH(_dessert_appparams_cblist, cbe) {
+- new_appparam = dessert_agentx_appparam_new();
+-
+- if (new_appparam == NULL) {
+- dessert_err("failed to allocate buffer for new dessert_agentx_appparams_entry_t");
+-
+- dessert_err("freeing appstats harvested so far...");
+- _dessert_agentx_appparams_free_list(appparams_list);
+-
+- return DESSERT_ERR;
+- }
+-
+- res = cbe->get(new_appparam);
+- new_appparam->index = cbe->index;
+-
+- if (res == DESSERT_OK) {
+- DL_APPEND(*appparams_list, new_appparam);
+- } else {
+- _dessert_agentx_appparams_free(new_appparam);
+- pthread_rwlock_unlock(&_dessert_appparams_cblist_lock);
+- dessert_agentx_appparams_del(cbe);
+- pthread_rwlock_rdlock(&_dessert_appparams_cblist_lock);
+- }
+-
+- } // DL_FOREACH
+-
+- pthread_rwlock_unlock(&_dessert_appparams_cblist_lock);
+-
+- return DESSERT_OK;
+-}
+-
+-dessert_agentx_appparamscb_set_t *_dessert_agentx_appparams_getsettercbforindex(
+- int index) {
+- dessert_agentx_appparams_cb_entry_t *cbe;
+-
+- pthread_rwlock_rdlock(&_dessert_appparams_cblist_lock);
+- DL_FOREACH(_dessert_appparams_cblist, cbe)
+- if (cbe->index == index)
+- break;
+- pthread_rwlock_unlock(&_dessert_appparams_cblist_lock);
+-
+- if (cbe->index == index)
+-
+- return cbe->set;
+- else {
+-
+- return NULL;
+- }
+-}
+-
+-/******************************************************************************
+- * other
+- ******************************************************************************/
+-
+-/** setup and initialize net-snmp subagent (via agent x)*/
+-void _dessert_agentx_init_subagent() {
+- /**************************************************************************
+- * setup snmp handling....
+- *************************************************************************/
+-
+- pthread_t snmp_worker;
+-
+- snmp_enable_calllog();
+- //debug_register_tokens("trace");
+- //debug_register_tokens("tdomain");
+- debug_register_tokens(AGENT);
+- //debug_register_tokens("snmp_agent");
+- //debug_register_tokens("helper:table:req");
+-
+- debug_register_tokens("dessertAppParamsTable");
+- debug_register_tokens("verbose:dessertAppParamsTable");
+- debug_register_tokens("internal:dessertAppParamsTable");
+-
+- debug_register_tokens("dessertAppParamsTable");
+- debug_register_tokens("verbose:dessertAppStatsTable");
+- debug_register_tokens("internal:dessertAppStatsTable");
+-
+- snmp_set_do_debugging(1);
+-
+- netsnmp_log_handler *logh;
+-
+- logh = netsnmp_register_loghandler(NETSNMP_LOGHANDLER_FILE, LOG_DEBUG);
+- if (logh) {
+- logh->pri_max = LOG_EMERG;
+- logh->token = strdup("/tmp/dessertAGENTX.log");
+- }
+-
+- netsnmp_ds_set_boolean(NETSNMP_DS_APPLICATION_ID, NETSNMP_DS_AGENT_ROLE, 1);
+-
+- //SOCK_STARTUP;
+- init_agent(AGENT);
+-
+- /*
+- * initialize the scalars
+- */
+- init_dessertObjects();
+-
+- /*
+- * init dessert{Mesh, Sys}ifTable mib code
+- */
+- init_dessertMeshifTable();
+- init_dessertSysifTable();
+-
+- /*
+- * init dessertApp{Stats, Param}Table mib code
+- */
+- init_dessertAppParamsTable();
+- init_dessertAppStatsTable();
+-
+- init_snmp(AGENT);
+- DEBUGMSGTL((AGENT, "Initialized agent and snmp.\n"));
+-
+- pthread_create(&snmp_worker, NULL, _dessert_agentx_worker, NULL);
+-}
+-
+-void dessert_agentx_stop_subagent() {
+- keep_snmp_running = 0;
+-}
+-
+-/******************************************************************************
+- *
+- * LOCAL
+- *
+- * NET - S N M P // A G E N T _ X
+- *
+- ******************************************************************************/
+-
+-static dessert_agentx_appstats_cb_entry_t *_dessert_agentx_appstats_add(
+- dessert_agentx_appstatscb_get_t *c, uint8_t bulknobulk_flag) {
+-
+- dessert_agentx_appstats_cb_entry_t *e;
+-
+- e = malloc(sizeof(dessert_agentx_appstats_cb_entry_t));
+-
+- if (e == NULL) {
+- dessert_err("failed to allocate buffer for new dessert_agentx_appstats_entry_t");
+- return (NULL);
+- }
+-
+- e->isbulk_flag |= bulknobulk_flag;
+- e->c = c;
+-
+- pthread_rwlock_wrlock(&_dessert_appstats_cblist_lock);
+- DL_APPEND(_dessert_appstats_cblist, e);
+- pthread_rwlock_unlock(&_dessert_appstats_cblist_lock);
+-
+- return (e);
+-}
+-
+-static uint8_t _dessert_agentx_appparams_new_index(void) {
+- uint8_t index;
+-
+- pthread_mutex_lock(&_dessert_agentx_appparams_nextindex_mutex);
+- index = _dessert_agentx_appparams_nextindex++;
+- pthread_mutex_unlock(&_dessert_agentx_appparams_nextindex_mutex);
+-
+- return index;
+-}
+-
+-static void *_dessert_agentx_worker(void *arg) {
+- DEBUGMSGTL((AGENT, "snmp_worker running...\n"));
+- dessert_info("snmp_worker running...");
+-
+- while (keep_snmp_running) {
+- /*
+- * if you use select(), see snmp_select_info() in snmp_api(3)
+- */
+- /*
+- * --- OR ---
+- */
+- agent_check_and_process(1); /* 0 == don't block */
+- }
+-
+- dessert_info("snmp_worker exiting...");
+-
+- return (NULL);
+-}
+Index: libdessert0.86-0.86.14/dessert_cli.c
+===================================================================
+--- libdessert0.86-0.86.14.orig/dessert_cli.c 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,255 +0,0 @@
+-/******************************************************************************
+- Copyright 2009, The DES-SERT Team, Freie Universitaet Berlin (FUB).
+- All rights reserved.
+-
+- These sources were originally developed by Philipp Schmidt
+- at Freie Universitaet Berlin (http://www.fu-berlin.de/),
+- Computer Systems and Telematics / Distributed, Embedded Systems (DES) group
+- (http://cst.mi.fu-berlin.de/, http://www.des-testbed.net/)
+- ------------------------------------------------------------------------------
+- This program is free software: you can redistribute it and/or modify it under
+- the terms of the GNU General Public License as published by the Free Software
+- Foundation, either version 3 of the License, or (at your option) any later
+- version.
+-
+- This program is distributed in the hope that it will be useful, but WITHOUT
+- ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+- FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+-
+- You should have received a copy of the GNU General Public License along with
+- this program. If not, see http://www.gnu.org/licenses/ .
+- ------------------------------------------------------------------------------
+- For further information and questions please use the web site
+- http://www.des-testbed.net/
+- *******************************************************************************/
+-
+-#include "dessert_internal.h"
+-#include "dessert.h"
+-
+-#ifndef HOST_NAME_MAX
+-#define HOST_NAME_MAX 32
+-#endif
+-
+-/* global data storage // P U B L I C */
+-struct cli_def *dessert_cli;
+-struct cli_command *dessert_cli_show;
+-struct cli_command *dessert_cli_cfg_iface;
+-struct cli_command *dessert_cli_cfg_no;
+-struct cli_command *dessert_cli_cfg_no_iface;
+-struct cli_command *dessert_cli_cfg_logging;
+-struct cli_command *dessert_cli_cfg_no_logging;
+-
+-/* global data storage // P R I V A T E */
+-/* nothing here - yet */
+-
+-/* local data storage*/
+-int _dessert_cli_sock;
+-struct sockaddr_in6 _dessert_cli_addr;
+-char _dessert_cli_hostname[HOST_NAME_MAX + DESSERT_PROTO_STRLEN + 1];
+-pthread_t _dessert_cli_worker;
+-
+-/* internal functions forward declarations*/
+-static void *_dessert_cli_accept_thread(void* arg);
+-static int _dessert_cli_cmd_dessertinfo(struct cli_def *cli, char *command,
+- char *argv[], int argc);
+-
+-/******************************************************************************
+- *
+- * EXTERNAL / PUBLIC
+- *
+- * C L I - C O M M A N D L I N E I N T E R F A C E
+- *
+- ******************************************************************************/
+-
+-/** Start up the command line interface.
+- *
+- * @param[in] port port to listen on
+- *
+- * @retval DESSERT_OK on success
+- * @retval -errno otherwise
+- *
+- * %DESCRIPTION:
+- *
+- */
+-int dessert_cli_run(int port) {
+- int on = 1;
+-
+- /* listen for connections */
+- _dessert_cli_sock = socket(AF_INET6, SOCK_STREAM, 0);
+- setsockopt(_dessert_cli_sock, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on));
+- memset(&_dessert_cli_addr, 0, sizeof(_dessert_cli_addr));
+- _dessert_cli_addr.sin6_family = AF_INET6;
+- _dessert_cli_addr.sin6_addr = in6addr_any;
+- _dessert_cli_addr.sin6_port = htons(port);
+- if (bind(_dessert_cli_sock, (struct sockaddr *) &_dessert_cli_addr,
+- sizeof(_dessert_cli_addr))) {
+- dessert_err("cli socket bind to port %d failed - %s", port, strerror(errno));
+- return -errno;
+- }
+- listen(_dessert_cli_sock, 8);
+- dessert_debug("starting worker thread for cli");
+- pthread_create(&_dessert_cli_worker, NULL, _dessert_cli_accept_thread,
+- &_dessert_cli_sock);
+- return DESSERT_OK;
+-}
+-
+-/******************************************************************************
+- *
+- * INTERNAL / PRIVATE
+- *
+- * C L I - C O M M A N D L I N E I N T E R F A C E
+- *
+- ******************************************************************************/
+-
+-/** internal function to initialize libcli */
+-int _dessert_cli_init() {
+-
+- dessert_cli = cli_init();
+-
+- /* set host name */
+- memset(_dessert_cli_hostname, 0x0, HOST_NAME_MAX + DESSERT_PROTO_STRLEN + 1);
+- gethostname(_dessert_cli_hostname, HOST_NAME_MAX);
+- strncpy(_dessert_cli_hostname + strlen(_dessert_cli_hostname), ":", 1);
+- strncpy(_dessert_cli_hostname + strlen(_dessert_cli_hostname),
+- dessert_proto, DESSERT_PROTO_STRLEN);
+- cli_set_hostname(dessert_cli, _dessert_cli_hostname);
+-
+- /* initialize show commands */
+- dessert_cli_show = cli_register_command(dessert_cli, NULL, "show", NULL,
+- PRIVILEGE_UNPRIVILEGED, MODE_EXEC, "display information");
+- cli_register_command(dessert_cli, dessert_cli_show, "dessert-info",
+- _dessert_cli_cmd_dessertinfo, PRIVILEGE_UNPRIVILEGED, MODE_EXEC,
+- "display information about this program");
+- cli_register_command(dessert_cli, dessert_cli_show, "logging",
+- _dessert_cli_cmd_logging, PRIVILEGE_UNPRIVILEGED, MODE_EXEC,
+- "show logging ringbuffer");
+-
+- /* initialize config mode commands */
+- dessert_cli_cfg_iface = cli_register_command(dessert_cli, NULL,
+- "interface", NULL, PRIVILEGE_PRIVILEGED, MODE_CONFIG,
+- "create or configure interfaces");
+- dessert_cli_cfg_no = cli_register_command(dessert_cli, NULL, "no", NULL,
+- PRIVILEGE_PRIVILEGED, MODE_CONFIG, "negate command");
+- dessert_cli_cfg_no_iface = cli_register_command(dessert_cli,
+- dessert_cli_cfg_no, "interface", NULL, PRIVILEGE_PRIVILEGED,
+- MODE_CONFIG, "remove interface or negate interface config");
+- dessert_cli_cfg_logging = cli_register_command(dessert_cli, NULL,
+- "logging", NULL, PRIVILEGE_PRIVILEGED, MODE_CONFIG,
+- "change logging config");
+- dessert_cli_cfg_no_logging = cli_register_command(dessert_cli,
+- dessert_cli_cfg_no, "logging", NULL, PRIVILEGE_PRIVILEGED,
+- MODE_CONFIG, "disable logging for...");
+- cli_register_command(dessert_cli, dessert_cli_cfg_logging, "ringbuffer",
+- _dessert_cli_logging_ringbuffer, PRIVILEGE_PRIVILEGED, MODE_CONFIG,
+- "set logging ringbuffer size (in lines)");
+- cli_register_command(dessert_cli, dessert_cli_cfg_no_logging, "ringbuffer",
+- _dessert_cli_logging_ringbuffer, PRIVILEGE_PRIVILEGED, MODE_CONFIG,
+- "disable logging to ringbuffer");
+- cli_register_command(dessert_cli, dessert_cli_cfg_logging, "file",
+- _dessert_cli_logging_file, PRIVILEGE_PRIVILEGED, MODE_CONFIG,
+- "set logfile and enable file logging");
+- cli_register_command(dessert_cli, dessert_cli_cfg_no_logging, "file",
+- _dessert_cli_logging_file, PRIVILEGE_PRIVILEGED, MODE_CONFIG,
+- "set logfile disable file logging");
+-
+- /* initialize other commands */
+- cli_register_command(dessert_cli, NULL, "shutdown",
+- _dessert_cli_cmd_shutdown, PRIVILEGE_PRIVILEGED, MODE_EXEC,
+- "shut daemon down");
+-
+- return DESSERT_OK;
+-}
+-
+-/******************************************************************************
+- *
+- * LOCAL
+- *
+- * C L I - C O M M A N D L I N E I N T E R F A C E
+- *
+- ******************************************************************************/
+-
+-/** command "show dessert-info" */
+-static int _dessert_cli_cmd_dessertinfo(struct cli_def *cli, char *command,
+- char *argv[], int argc) {
+- cli_print(cli, "\nprotocol running: %s v %d", dessert_proto, dessert_ver);
+- cli_print(cli, "libdessert version: %s", SHLIB_VERSION);
+- cli_print(
+- cli,
+- " ------------------------------------------------------------------------------ ");
+- cli_print(
+- cli,
+- " Copyright 2009, The DES-SERT Team, Freie Universitaet Berlin (FUB). ");
+- cli_print(
+- cli,
+- " All rights reserved. ");
+- cli_print(
+- cli,
+- " ");
+- cli_print(
+- cli,
+- " These sources were originally developed by Philipp Schmidt ");
+- cli_print(
+- cli,
+- " at Freie Universitaet Berlin (http://www.fu-berlin.de/), ");
+- cli_print(
+- cli,
+- " Computer Systems and Telematics / Distributed, Embedded Systems (DES) group ");
+- cli_print(
+- cli,
+- " (http://cst.mi.fu-berlin.de/, http://www.des-testbed.net/) ");
+- cli_print(
+- cli,
+- " ------------------------------------------------------------------------------ ");
+- cli_print(
+- cli,
+- " This program is free software: you can redistribute it and/or modify it under ");
+- cli_print(
+- cli,
+- " the terms of the GNU General Public License as published by the Free Software ");
+- cli_print(
+- cli,
+- " Foundation, either version 3 of the License, or (at your option) any later ");
+- cli_print(
+- cli,
+- " version. ");
+- cli_print(
+- cli,
+- " ");
+- cli_print(
+- cli,
+- " This program is distributed in the hope that it will be useful, but WITHOUT ");
+- cli_print(
+- cli,
+- " ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS ");
+- cli_print(
+- cli,
+- " FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ");
+- cli_print(
+- cli,
+- " ");
+- cli_print(
+- cli,
+- " You should have received a copy of the GNU General Public License along with ");
+- cli_print(
+- cli,
+- " this program. If not, see http://www.gnu.org/licenses/ . ");
+- cli_print(
+- cli,
+- " ------------------------------------------------------------------------------ ");
+- return CLI_OK;
+-}
+-
+-/** internal thread function running the cli */
+-static void *_dessert_cli_accept_thread(void* arg) {
+- int *s = (int *) arg;
+- int c;
+-
+- while ((c = accept(*s, NULL, 0))) {
+- cli_loop(dessert_cli, c); /* pass the connection off to libcli */
+- close(c);
+- }
+-
+- cli_done(dessert_cli); /* free data structures */
+-
+- return (NULL);
+-}
+Index: libdessert0.86-0.86.14/dessert_core.c
+===================================================================
+--- libdessert0.86-0.86.14.orig/dessert_core.c 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,241 +0,0 @@
+-/******************************************************************************
+- Copyright 2009, The DES-SERT Team, Freie Universitaet Berlin (FUB).
+- All rights reserved.
+-
+- These sources were originally developed by Philipp Schmidt
+- at Freie Universitaet Berlin (http://www.fu-berlin.de/),
+- Computer Systems and Telematics / Distributed, Embedded Systems (DES) group
+- (http://cst.mi.fu-berlin.de/, http://www.des-testbed.net/)
+- ------------------------------------------------------------------------------
+- This program is free software: you can redistribute it and/or modify it under
+- the terms of the GNU General Public License as published by the Free Software
+- Foundation, either version 3 of the License, or (at your option) any later
+- version.
+-
+- This program is distributed in the hope that it will be useful, but WITHOUT
+- ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+- FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+-
+- You should have received a copy of the GNU General Public License along with
+- this program. If not, see http://www.gnu.org/licenses/ .
+- ------------------------------------------------------------------------------
+- For further information and questions please use the web site
+- http://www.des-testbed.net/
+- *******************************************************************************/
+-
+-#include "dessert_internal.h"
+-#include "dessert.h"
+-#include <sys/stat.h>
+-
+-/* global data storage // P U B L I C */
+-char dessert_proto[DESSERT_PROTO_STRLEN + 1];
+-u_int8_t dessert_ver;
+-u_int8_t dessert_l25_defsrc[ETHER_ADDR_LEN];
+-u_char ether_broadcast[ETHER_ADDR_LEN];
+-u_char ether_null[ETHER_ADDR_LEN];
+-pthread_rwlock_t dessert_cfglock = PTHREAD_RWLOCK_INITIALIZER;
+-
+-/* global data storage // P R I V A T E */
+-int _dessert_status = 0x0;
+-
+-/* local data storage*/
+-dessert_frameid_t _dessert_nextframeid = 0;
+-pthread_mutex_t _dessert_nextframeid_mutex = PTHREAD_MUTEX_INITIALIZER;
+-pthread_mutex_t _dessert_exit_mutex = PTHREAD_MUTEX_INITIALIZER;
+-pthread_cond_t _dessert_exit_do = PTHREAD_COND_INITIALIZER;
+-int _dessert_exit_code = 0;
+-char *dessert_pidfile_name;
+-
+-/* internal functions forward declarations*/
+-static void _dessert_cleanup(void);
+-static void _dessert_daemonize(void);
+-static int _dessert_pid(char* pidfile);
+-
+-/******************************************************************************
+- *
+- * EXTERNAL / PUBLIC
+- *
+- * C O R E
+- *
+- ******************************************************************************/
+-
+-/** Initializes dessert framework and sets up logging
+- * @arg *proto 4 char string for protocol name
+- * @arg version version number of protocol
+- * @arg opts @see DESSERT_OPT_*
+- * @returns DESSERT_OK on success, DESSERT_ERR otherwise
+- **/
+-int dessert_init(const char* proto, int version, uint16_t opts, char* pidfile) {
+-
+- pthread_rwlock_wrlock(&dessert_cfglock);
+-
+- /* save global config */
+- memset(dessert_proto, 0x0, DESSERT_PROTO_STRLEN + 1);
+- strncpy(dessert_proto, proto, DESSERT_PROTO_STRLEN);
+- dessert_ver = version;
+-
+- /* initialize pseudo constants */
+- memset(ether_broadcast, 255, ETHER_ADDR_LEN);
+- memset(ether_null, 0, ETHER_ADDR_LEN);
+-
+- pthread_rwlock_unlock(&dessert_cfglock);
+-
+- /* daemonize if needed */
+- if ((opts & DESSERT_OPT_DAEMONIZE) && !(opts & DESSERT_OPT_NODAEMONIZE)) {
+- _dessert_daemonize();
+- }
+-
+- /* write pid to file if needed */
+- if (pidfile != NULL) {
+- dessert_pidfile_name = pidfile;
+- _dessert_pid(pidfile);
+- }
+-
+- /* initialize cli */
+- _dessert_cli_init();
+-
+- /* start periodic thread */
+- _dessert_periodic_init();
+-
+- /* initialize net-snmp subagent */
+- _dessert_agentx_init_subagent();
+-
+- return DESSERT_OK;
+-}
+-
+-/** main loop - wait until dessert_exit() is called or killed
+- * @return arg to dessert_exit
+- */
+-int dessert_run() {
+- pthread_mutex_lock(&_dessert_exit_mutex);
+- pthread_cond_wait(&_dessert_exit_do, &_dessert_exit_mutex);
+- _dessert_cleanup();
+- pthread_mutex_unlock(&_dessert_exit_mutex);
+- return (_dessert_exit_code);
+-}
+-
+-/**Causes dessert_run() to break out of the main loop.
+- */
+-void dessert_exit() {
+- /* kill snmp_worker thread */
+- dessert_agentx_stop_subagent();
+- pthread_cond_signal(&_dessert_exit_do);
+-}
+-
+-/** generates a new, runtime-unique frame id
+- * @returns runtime-unique frame id
+- **/
+-dessert_frameid_t _dessert_newframeid() {
+- dessert_frameid_t x;
+- pthread_mutex_lock(&_dessert_nextframeid_mutex);
+- x = _dessert_nextframeid++;
+- pthread_mutex_unlock(&_dessert_nextframeid_mutex);
+- return (x);
+-}
+-
+-/******************************************************************************
+- *
+- * INTERNAL / PRIVATE
+- *
+- * C O R E
+- *
+- ******************************************************************************/
+-
+-/** command "shutdown" */
+-int _dessert_cli_cmd_shutdown(struct cli_def *cli, char *command, char *argv[],
+- int argc) {
+- cli_print(cli, "daemon will shut down now!");
+- pthread_mutex_lock(&_dessert_exit_mutex);
+- pthread_cond_broadcast(&_dessert_exit_do);
+- pthread_mutex_unlock(&_dessert_exit_mutex);
+-
+- return CLI_OK;
+-}
+-
+-/******************************************************************************
+- *
+- * LOCAL
+- *
+- * C O R E
+- *
+- ******************************************************************************/
+-
+-/** internal function to clean up things */
+-void _dessert_cleanup(void) {
+- /* remove pidfile */
+- if (dessert_pidfile_name != NULL) {
+- unlink(dessert_pidfile_name);
+- }
+-}
+-
+-/** internal daemonize helper */
+-void _dessert_daemonize(void) {
+- pid_t pid, sid;
+-
+- /* Fork off the parent process */
+- pid = fork();
+- if (pid < 0) {
+- perror("could not create daemon process!");
+- exit(EXIT_FAILURE);
+- }
+- /* If we got a good PID, then
+- we can exit the parent process. */
+- if (pid > 0) {
+- exit(EXIT_SUCCESS);
+- }
+-
+- /* Change the file mode mask */
+- umask(0);
+-
+- /* Open any logs here */
+-
+- /* Create a new SID for the child process */
+- sid = setsid();
+- if (sid < 0) {
+- perror("could not set sid!");
+- exit(EXIT_FAILURE);
+- }
+-
+- /* Change the current working directory */
+- if ((chdir("/")) < 0) {
+- perror("could not chdir /!");
+- exit(EXIT_FAILURE);
+- }
+-
+- /* Close out the standard file descriptors */
+- close(STDIN_FILENO);
+- close(STDOUT_FILENO);
+- close(STDERR_FILENO);
+-
+- /* write config */
+- pthread_rwlock_wrlock(&dessert_cfglock);
+- _dessert_status |= _DESSERT_STATUS_DAEMON;
+- pthread_rwlock_unlock(&dessert_cfglock);
+-
+- /* adopt logging */
+- dessert_logcfg(0x0);
+-}
+-
+-/** internal pid-write helper */
+-int _dessert_pid(char* pidfile) {
+- FILE *fd;
+-
+- fd = fopen(pidfile, "w");
+- if (fd == 0) {
+- dessert_warn("could not open pid file");
+- return 1;
+- } else {
+- int r;
+- r = fprintf(fd, "%d\n", getpid());
+- if (r < 0) {
+- dessert_warn("could not write to pid file");
+- return DESSERT_ERR;
+- }
+-
+- if (fclose(fd) != 0) {
+- dessert_warn("failed to close pid file");
+- }
+- }
+-
+- return DESSERT_OK;
+-}
+Index: libdessert0.86-0.86.14/dessert_internal.h
+===================================================================
+--- libdessert0.86-0.86.14.orig/dessert_internal.h 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,219 +0,0 @@
+-/******************************************************************************
+- Copyright 2009, The DES-SERT Team, Freie Universitaet Berlin (FUB).
+- All rights reserved.
+-
+- These sources were originally developed by Philipp Schmidt
+- at Freie Universitaet Berlin (http://www.fu-berlin.de/),
+- Computer Systems and Telematics / Distributed, Embedded Systems (DES) group
+- (http://cst.mi.fu-berlin.de/, http://www.des-testbed.net/)
+- ------------------------------------------------------------------------------
+- This program is free software: you can redistribute it and/or modify it under
+- the terms of the GNU General Public License as published by the Free Software
+- Foundation, either version 3 of the License, or (at your option) any later
+- version.
+-
+- This program is distributed in the hope that it will be useful, but WITHOUT
+- ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+- FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+-
+- You should have received a copy of the GNU General Public License along with
+- this program. If not, see http://www.gnu.org/licenses/ .
+- ------------------------------------------------------------------------------
+- For further information and questions please use the web site
+- http://www.des-testbed.net/
+-*******************************************************************************/
+-
+-#ifndef DESSERT_INTERNAL_H
+-#define DESSERT_INTERNAL_H
+-
+-/* load needed libs - quite dirty */
+-#include <stdlib.h>
+-#include <stdio.h>
+-#include <fcntl.h>
+-#include <string.h>
+-#include <stdarg.h>
+-#include <unistd.h>
+-#include <errno.h>
+-#include <pthread.h>
+-#include <syslog.h>
+-#include <sys/socket.h>
+-#include <sys/ioctl.h>
+-#include <sys/sysctl.h>
+-#include <net/route.h>
+-#include <arpa/inet.h>
+-#include <netinet/in.h>
+-#include <libcli.h>
+-#include <net-snmp/net-snmp-config.h>
+-#include <net-snmp/net-snmp-includes.h>
+-#include <net-snmp/agent/net-snmp-agent-includes.h>
+-#include "utlist.h"
+-
+-
+-#include "snmp/dessertObjects.h"
+-#include "snmp/dessertMeshifTable.h"
+-#include "snmp/dessertSysifTable.h"
+-#include "snmp/dessertAppStatsTable.h"
+-#include "snmp/dessertAppParamsTable.h"
+-
+-/******************************************************************************
+- *
+- * INTERNAL / PRIVATE
+- *
+- * C O R E
+- *
+- ******************************************************************************/
+-
+-/** flag for _dessert_status - program is daemon */
+-#define _DESSERT_STATUS_DAEMON 0x1
+-
+-/** global status flag holder */
+-extern int _dessert_status;
+-
+-dessert_frameid_t _dessert_newframeid(void);
+-
+-int _dessert_cli_cmd_shutdown(struct cli_def *cli, char *command, char *argv[], int argc);
+-
+-/******************************************************************************
+- *
+- * INTERNAL / PRIVATE
+- *
+- * C L I - C O M M A N D L I N E I N T E R F A C E
+- *
+- ******************************************************************************/
+-
+-int _dessert_cli_init(void);
+-
+-/******************************************************************************
+- *
+- * INTERNAL / PRIVATE
+- *
+- * L O G F A C I L I T Y
+- *
+- ******************************************************************************/
+-
+-/** maximum size of a log line */
+-#define DESSERT_LOGLINE_MAX 1024
+-
+-/** logfile file pointer to use with DESSERT_OPT_LOGFILE */
+-extern FILE *dessert_logfd;
+-
+-int _dessert_cli_cmd_logging(struct cli_def *cli, char *command, char *argv[], int argc);
+-int _dessert_cli_logging_file(struct cli_def *cli, char *command, char *argv[], int argc);
+-int _dessert_cli_no_logging_file(struct cli_def *cli, char *command, char *argv[], int argc);
+-int _dessert_cli_logging_ringbuffer(struct cli_def *cli, char *command, char *argv[], int argc);
+-int _dessert_cli_no_logging_ringbuffer(struct cli_def *cli, char *command, char *argv[], int argc);
+-
+-/******************************************************************************
+- *
+- * INTERNAL / PRIVATE
+- *
+- * M E S H - I N T E R F A C E S
+- *
+- ******************************************************************************/
+-
+-/** callback list entry for dessert mesh interface callbacks */
+-typedef struct dessert_meshrxcbe {
+- /** pointer to callback to call */
+- dessert_meshrxcb_t *c;
+- /** priority - lowest first */
+- int prio;
+- /** next entry in list */
+- struct dessert_meshrxcbe *next;
+-} dessert_meshrxcbe_t;
+-
+-int _dessert_meshif_gethwaddr(dessert_meshif_t *meshif);
+-int _dessert_meshrxcb_runall(dessert_msg_t* msg_in, size_t len, dessert_msg_proc_t *proc_in, const dessert_meshif_t *meshif, dessert_frameid_t id);
+-
+-/******************************************************************************
+- *
+- * INTERNAL / PRIVATE
+- *
+- * S Y S - I N T E R F A C E S
+- *
+- ******************************************************************************/
+-
+-/** callback list entry for tun/tap callbacks */
+-typedef struct dessert_sysrxcbe {
+- /** pointer to callback to call */
+- dessert_sysrxcb_t *c;
+- /** priority - lowest first */
+- int prio;
+- /** next entry in list */
+- struct dessert_sysrxcbe *next;
+-} dessert_sysrxcbe_t;
+-
+-extern struct dessert_sysif *_dessert_sysif;
+-
+-/******************************************************************************
+- *
+- * INTERNAL / PRIVATE
+- *
+- * M E S S A G E H A N D L I N G
+- *
+- ******************************************************************************/
+-
+-/** size of a dessert_msg struct */
+-#define DESSERT_MSGLEN sizeof(struct dessert_msg)
+-
+-/** size of a dessert_msg_proc struct */
+-#define DESSERT_MSGPROCLEN sizeof(struct dessert_msg_proc)
+-
+-/** maximum frame size to assemble as dessert_msg */
+-#define DESSERT_MAXFRAMEBUFLEN DESSERT_MAXFRAMELEN
+-
+-/******************************************************************************
+- *
+- * INTERNAL / PRIVATE
+- *
+- * P E R I O D I C T A S K S
+- *
+- ******************************************************************************/
+-
+-void _dessert_periodic_init(void);
+-
+-/******************************************************************************
+- *
+- * INTERNAL / PRIVATE
+- *
+- * NET - S N M P // A G E N T _ X
+- *
+- ******************************************************************************/
+-
+-/******************************************************************************
+- * #defines
+- ******************************************************************************/
+-
+-#define AGENT "dessertAGENTX"
+-
+-#define DESSERT_AGENTX_SYSIFTABLE_CACHE_TIMEOUT 10
+-#define DESSERT_AGENTX_MESHIFTABLE_CACHE_TIMEOUT 10
+-#define DESSERT_AGENTX_APPSTATSTABLE_CACHE_TIMEOUT 10
+-#define DESSERT_AGENTX_APPPARAMTABLE_CACHE_TIMEOUT 1
+-
+-/******************************************************************************
+- * globals
+- ******************************************************************************/
+-
+-extern pthread_rwlock_t _dessert_appstats_cblist_lock;
+-extern dessert_agentx_appstats_cb_entry_t *_dessert_appstats_cblist;
+-
+-extern pthread_rwlock_t _dessert_appparams_cblist_lock;
+-extern dessert_agentx_appparams_cb_entry_t *_dessert_appparams_cblist;
+-
+-/******************************************************************************
+- * functions
+- ******************************************************************************/
+-int _dessert_agentx_appstats_harvest_callbacks(dessert_agentx_appstats_t **appstats_list);
+-void _dessert_agentx_appstats_free(dessert_agentx_appstats_t *appstat);
+-void _dessert_agentx_appstats_free_list(dessert_agentx_appstats_t **appstats_list);
+-
+-int _dessert_agentx_appparams_harvest_callbacks(dessert_agentx_appparams_t **appparams_list);
+-void _dessert_agentx_appparams_free(dessert_agentx_appparams_t *appparam);
+-void _dessert_agentx_appparams_free_list(dessert_agentx_appparams_t **appparams_list);
+-dessert_agentx_appparamscb_set_t *_dessert_agentx_appparams_getsettercbforindex(int index);
+-
+-void _dessert_agentx_init_subagent(void);
+-void dessert_agentx_stop_subagent(void);
+-
+-
+-#endif /* DESSERT_INTERNAL_H */
+Index: libdessert0.86-0.86.14/dessert_log.c
+===================================================================
+--- libdessert0.86-0.86.14.orig/dessert_log.c 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,417 +0,0 @@
+-/******************************************************************************
+- Copyright 2009, The DES-SERT Team, Freie Universitaet Berlin (FUB).
+- All rights reserved.
+-
+- These sources were originally developed by Philipp Schmidt
+- at Freie Universitaet Berlin (http://www.fu-berlin.de/),
+- Computer Systems and Telematics / Distributed, Embedded Systems (DES) group
+- (http://cst.mi.fu-berlin.de/, http://www.des-testbed.net/)
+- ------------------------------------------------------------------------------
+- This program is free software: you can redistribute it and/or modify it under
+- the terms of the GNU General Public License as published by the Free Software
+- Foundation, either version 3 of the License, or (at your option) any later
+- version.
+-
+- This program is distributed in the hope that it will be useful, but WITHOUT
+- ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+- FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+-
+- You should have received a copy of the GNU General Public License along with
+- this program. If not, see http://www.gnu.org/licenses/ .
+- ------------------------------------------------------------------------------
+- For further information and questions please use the web site
+- http://www.des-testbed.net/
+- *******************************************************************************/
+-
+-#include "dessert_internal.h"
+-#include "dessert.h"
+-#include <sys/stat.h>
+-
+-/* data storage */
+-FILE *dessert_logfd = NULL;
+-char dessert_logprefix[12];
+-
+-#define _DESSERT_LOGFLAG_SYSLOG 0x1
+-#define _DESSERT_LOGFLAG_LOGFILE 0x2
+-#define _DESSERT_LOGFLAG_STDERR 0x4
+-#define _DESSERT_LOGFLAG_RBUF 0x8
+-int _dessert_logflags = _DESSERT_LOGFLAG_STDERR;
+-int _dessert_loglevel = LOG_DEBUG;
+-
+-/* the logging ringbuffer */
+-char *_dessert_logrbuf = NULL; /* pointer to begin */
+-int _dessert_logrbuf_len = 0; /* length in lines (DESSERT_LOGLINE_MAX*_dessert_logrbuf_len*sizeof(char) would be in bytes) */
+-int _dessert_logrbuf_cur = 0; /* current position */
+-int _dessert_logrbuf_used = 0; /* used slots */
+-pthread_rwlock_t _dessert_logrbuf_len_lock = PTHREAD_RWLOCK_INITIALIZER; /* for resizing */
+-pthread_mutex_t _dessert_logrbuf_mutex = PTHREAD_MUTEX_INITIALIZER; /* for moving _dessert_logrbuf_cur */
+-
+-/* internal functions forward declarations TODO: cleanup */
+-
+-/******************************************************************************
+- *
+- * EXTERNAL / PUBLIC
+- *
+- * L O G F A C I L I T Y
+- *
+- ******************************************************************************/
+-
+-/** Configure dessert logging framework and sets up logging.
+- *
+- * @arg opts OR'd flags - @see DESSERT_LOG_*
+- *
+- * %DESCRIPTION:
+- *
+- **/
+-int dessert_logcfg(uint16_t opts) {
+- snprintf(dessert_logprefix, 12, "dessert/%s", dessert_proto);
+-
+- pthread_rwlock_wrlock(&dessert_cfglock);
+-
+- /* configure logging */
+- if ((opts & DESSERT_LOG_SYSLOG) && !(opts & DESSERT_LOG_NOSYSLOG)) {
+- if (!(_dessert_logflags & _DESSERT_LOGFLAG_SYSLOG)) {
+- /* initialize syslog channel */
+- openlog(dessert_logprefix, LOG_PID, LOG_DAEMON);
+- }
+- _dessert_logflags |= _DESSERT_LOGFLAG_SYSLOG;
+- } else if (!(opts & DESSERT_LOG_SYSLOG) && (opts & DESSERT_LOG_NOSYSLOG)) {
+- if (_dessert_logflags & _DESSERT_LOGFLAG_SYSLOG) {
+- /* close syslog channel */
+- closelog();
+- }
+- _dessert_logflags &= ~_DESSERT_LOGFLAG_SYSLOG;
+- }
+- if ((opts & DESSERT_LOG_STDERR) && !(opts & DESSERT_LOG_NOSTDERR)
+- && !(_dessert_status & _DESSERT_STATUS_DAEMON)) {
+- _dessert_logflags |= _DESSERT_LOGFLAG_STDERR;
+- } else if ((!(opts & DESSERT_LOG_STDERR) && (opts & DESSERT_LOG_NOSTDERR))
+- || (_dessert_status & _DESSERT_STATUS_DAEMON)) {
+- _dessert_logflags &= ~_DESSERT_LOGFLAG_STDERR;
+- }
+- if ((opts & DESSERT_LOG_FILE) && !(opts & DESSERT_LOG_NOFILE)
+- && dessert_logfd != NULL) {
+- _dessert_logflags |= _DESSERT_LOGFLAG_LOGFILE;
+- } else if ((!(opts & DESSERT_LOG_FILE) && (opts & DESSERT_LOG_NOFILE))
+- || dessert_logfd == NULL) {
+- _dessert_logflags &= ~_DESSERT_LOGFLAG_LOGFILE;
+- }
+- if ((opts & DESSERT_LOG_DEBUG) && !(opts & DESSERT_LOG_NODEBUG)) {
+- _dessert_loglevel = LOG_DEBUG;
+- } else if (!(opts & DESSERT_LOG_DEBUG) && (opts & DESSERT_LOG_NODEBUG)) {
+- _dessert_loglevel = LOG_INFO;
+- }
+- if ((opts & DESSERT_LOG_RBUF) && !(opts & DESSERT_LOG_NORBUF)) {
+- _dessert_logflags |= _DESSERT_LOGFLAG_RBUF;
+- } else if (!(opts & DESSERT_LOG_RBUF) && (opts & DESSERT_LOG_NORBUF)) {
+- _dessert_logflags &= ~_DESSERT_LOGFLAG_RBUF;
+- }
+-
+- pthread_rwlock_unlock(&dessert_cfglock);
+-
+- return 0;
+-}
+-
+-/******************************************************************************
+- *
+- * INTERNAL / PRIVATE
+- *
+- * L O G F A C I L I T Y
+- *
+- ******************************************************************************/
+-
+-char* _dessert_log_rbuf_nextline(void) {
+- char* r = NULL;
+- pthread_mutex_lock(&_dessert_logrbuf_mutex);
+- if (_dessert_logrbuf_len > 0) {
+- if (_dessert_logrbuf_cur >= _dessert_logrbuf_len) {
+- _dessert_logrbuf_cur = 0;
+- }
+- r = _dessert_logrbuf + (DESSERT_LOGLINE_MAX * _dessert_logrbuf_cur);
+- _dessert_logrbuf_cur++;
+- if (_dessert_logrbuf_used < _dessert_logrbuf_len - 1) {
+- _dessert_logrbuf_used++;
+- }
+- }
+- pthread_mutex_unlock(&_dessert_logrbuf_mutex);
+-
+- return (r);
+-}
+-
+-/** internal log function
+- *
+- * @internal
+- *
+- * @param[in] level loglevel from <syslog.h>
+- * @param[in] *func function name called from
+- * @param[in] *file file name called from
+- * @param[in] *line line called from
+- * @param[in] *fmt printf format string
+- * @param[in] ... (var-arg) printf like variables
+- **/
+-void _dessert_log(int level, const char* func, const char* file, int line,
+- const char *fmt, ...) {
+- va_list args;
+- char *rbuf_line = NULL;
+- char buf[DESSERT_LOGLINE_MAX];
+- char lf[80];
+- char *lt;
+- char lds[27];
+- struct tm ldd;
+- time_t ldi;
+- int lf_slen, buf_slen;
+-
+- if (_dessert_loglevel < level)
+- return;
+-
+- snprintf(lf, 80, " (%s@%s:%d)", func, file, line);
+- lf_slen = strlen(lf);
+-
+- va_start(args, fmt);
+- vsnprintf(buf, DESSERT_LOGLINE_MAX, fmt, args);
+- va_end(args);
+- buf_slen = strlen(buf);
+-
+- if (_dessert_logflags | _DESSERT_LOGFLAG_SYSLOG) {
+- syslog(level, "%s%s", buf, lf);
+- }
+-
+- if (_dessert_logflags & _DESSERT_LOGFLAG_RBUF) {
+- pthread_rwlock_rdlock(&_dessert_logrbuf_len_lock);
+- rbuf_line = _dessert_log_rbuf_nextline();
+- }
+-
+- if (_dessert_logflags | (_DESSERT_LOGFLAG_LOGFILE | _DESSERT_LOGFLAG_STDERR
+- | _DESSERT_LOGFLAG_RBUF)) {
+-
+- time(&ldi);
+- localtime_r(&ldi, &ldd);
+- snprintf(lds, 26, "%04d-%02d-%02d %02d:%02d:%02d%+05.1f ", ldd.tm_year
+- + 1900, ldd.tm_mon + 1, ldd.tm_mday, ldd.tm_hour, ldd.tm_min,
+- ldd.tm_sec, (double) ldd.tm_gmtoff / 3600);
+-
+- switch (level) {
+- case LOG_EMERG:
+- lt = "EMERG: ";
+- break;
+- case LOG_ALERT:
+- lt = "ALERT: ";
+- break;
+- case LOG_CRIT:
+- lt = "CRIT: ";
+- break;
+- case LOG_ERR:
+- lt = "ERR: ";
+- break;
+- case LOG_WARNING:
+- lt = "WARN: ";
+- break;
+- case LOG_NOTICE:
+- lt = "NOTICE:";
+- break;
+- case LOG_INFO:
+- lt = "INFO: ";
+- break;
+- default:
+- lt = "DEBUG: ";
+- break;
+- }
+-
+- if (32 + buf_slen + lf_slen > 80) {
+- if (_dessert_logflags & _DESSERT_LOGFLAG_LOGFILE && dessert_logfd
+- != NULL)
+- fprintf(dessert_logfd, "%s%s%s\n%80s\n", lds, lt, buf, lf);
+- if (_dessert_logflags & _DESSERT_LOGFLAG_STDERR)
+- fprintf(stderr, "%s%s%s\n%80s\n", lds, lt, buf, lf);
+- if (_dessert_logflags & _DESSERT_LOGFLAG_RBUF && rbuf_line != NULL)
+- snprintf(rbuf_line, DESSERT_LOGLINE_MAX, "%s%s%s\n%80s", lds,
+- lt, buf, lf);
+- } else {
+- while (32 + buf_slen + lf_slen < 80) {
+- buf[buf_slen++] = ' ';
+- }
+- buf[buf_slen] = '\0';
+- if (_dessert_logflags & _DESSERT_LOGFLAG_LOGFILE && dessert_logfd
+- != NULL)
+- fprintf(dessert_logfd, "%s%s%s%s\n", lds, lt, buf, lf);
+- if (_dessert_logflags & _DESSERT_LOGFLAG_STDERR)
+- fprintf(stderr, "%s%s%s%s\n", lds, lt, buf, lf);
+- if (_dessert_logflags & _DESSERT_LOGFLAG_RBUF && rbuf_line != NULL)
+- snprintf(rbuf_line, DESSERT_LOGLINE_MAX, "%s%s%s%s", lds, lt,
+- buf, lf);
+- }
+-
+- if (_dessert_logflags & _DESSERT_LOGFLAG_LOGFILE && dessert_logfd
+- != NULL) {
+- fflush(dessert_logfd);
+- }
+- if (_dessert_logflags & _DESSERT_LOGFLAG_RBUF) {
+- pthread_rwlock_unlock(&_dessert_logrbuf_len_lock);
+- }
+-
+- }
+-}
+-
+-/** command "logging file" */
+-int _dessert_cli_logging_file(struct cli_def *cli, char *command, char *argv[],
+- int argc) {
+- FILE *newlogdf;
+-
+- if (argc != 1) {
+- cli_print(cli, "usage %s filename\n", command);
+- return CLI_ERROR;
+- }
+-
+- newlogdf = fopen(argv[0], "a");
+-
+- if (newlogdf == NULL) {
+- dessert_err("failed o open %s as logfile\n", argv[0]);
+- cli_print(cli, "failed o open %s as logfile\n", argv[0]);
+- return CLI_ERROR;
+- }
+-
+- /* clean up old logfile first */
+- if (dessert_logfd != NULL) {
+- dessert_logcfg(DESSERT_LOG_NOFILE);
+- fclose(dessert_logfd);
+- }
+-
+- dessert_logfd = newlogdf;
+- dessert_logcfg(DESSERT_LOG_FILE);
+-
+- return CLI_OK;
+-}
+-
+-/** command "logging file" */
+-int _dessert_cli_no_logging_file(struct cli_def *cli, char *command,
+- char *argv[], int argc) {
+- dessert_logcfg(DESSERT_LOG_NOFILE);
+- if (dessert_logfd != NULL) {
+- fclose(dessert_logfd);
+- }
+- dessert_logfd = NULL;
+- return CLI_OK;
+-}
+-
+-/** command "logging ringbuffer" */
+-int _dessert_cli_logging_ringbuffer(struct cli_def *cli, char *command,
+- char *argv[], int argc) {
+- int newlen = -1;
+- if (argc != 1 || (newlen = (int) strtol(argv[0], NULL, 10)) < 0) {
+- cli_print(cli, "usage %s [buffer length]\n", command);
+- return CLI_ERROR;
+- }
+-
+- if (newlen == _dessert_logrbuf_len)
+- return CLI_OK;
+-
+- if (newlen == 0) {
+- cli_print(cli,
+- "will not set buffer length to 0 - use no logging ringbuffer instead\n");
+- return CLI_ERROR;
+- }
+-
+- pthread_rwlock_wrlock(&_dessert_logrbuf_len_lock);
+-
+- /* make logging buffer larger - easy if not ENOMEM*/
+- if (newlen > _dessert_logrbuf_len) {
+- _dessert_logrbuf = realloc(_dessert_logrbuf, newlen
+- * DESSERT_LOGLINE_MAX * sizeof(char));
+- if (_dessert_logrbuf == NULL) {
+- _dessert_logrbuf_len = 0;
+- _dessert_logrbuf_cur = 0;
+- } else {
+- _dessert_logrbuf_len = newlen;
+- }
+- dessert_logcfg(DESSERT_LOG_RBUF);
+- /* make logging buffer smaller - pain in the ass */
+- } else if (newlen < _dessert_logrbuf_len) {
+- /* move current log buffer if needed */
+- if (_dessert_logrbuf_cur > newlen) {
+- memmove(_dessert_logrbuf, _dessert_logrbuf + (DESSERT_LOGLINE_MAX
+- * (_dessert_logrbuf_cur - newlen)), newlen
+- * DESSERT_LOGLINE_MAX * sizeof(char));
+- _dessert_logrbuf_cur -= newlen;
+- }
+- _dessert_logrbuf = realloc(_dessert_logrbuf, newlen
+- * DESSERT_LOGLINE_MAX * sizeof(char));
+- if (_dessert_logrbuf == NULL) {
+- _dessert_logrbuf_len = 0;
+- _dessert_logrbuf_cur = 0;
+- } else {
+- _dessert_logrbuf_len = newlen;
+- }
+- } else {
+- dessert_err("this never happens");
+- }
+- if (_dessert_logrbuf_used > _dessert_logrbuf_len - 1)
+- _dessert_logrbuf_used = _dessert_logrbuf_len - 1;
+- pthread_rwlock_unlock(&_dessert_logrbuf_len_lock);
+- return CLI_OK;
+-
+-}
+-
+-/** command "no logging ringbuffer" */
+-int _dessert_cli_no_logging_ringbuffer(struct cli_def *cli, char *command,
+- char *argv[], int argc) {
+- if (_dessert_logrbuf == NULL) {
+- return CLI_OK;
+- } else {
+- pthread_rwlock_wrlock(&_dessert_logrbuf_len_lock);
+- dessert_logcfg(DESSERT_LOG_NORBUF);
+- free(_dessert_logrbuf);
+- _dessert_logrbuf = NULL;
+- _dessert_logrbuf_len = 0;
+- _dessert_logrbuf_cur = 0;
+- pthread_rwlock_unlock(&_dessert_logrbuf_len_lock);
+- return CLI_OK;
+- }
+-
+-}
+-
+-/** command "show logging" */
+-int _dessert_cli_cmd_logging(struct cli_def *cli, char *command, char *argv[],
+- int argc) {
+- pthread_rwlock_rdlock(&_dessert_logrbuf_len_lock);
+- int i = 0;
+- int max = _dessert_logrbuf_len - 1;
+- char* line;
+-
+- if (_dessert_logrbuf_len < 1) {
+- cli_print(
+- cli,
+- "logging to ringbuffer is disables - use \"logging ringbuffer [int]\" in config-mode first");
+- pthread_rwlock_unlock(&_dessert_logrbuf_len_lock);
+- return CLI_ERROR;
+- }
+-
+- if (argc == 1) {
+- int max2 = (int) strtol(argv[0], NULL, 10);
+- if (max2 > 0) {
+- max = max2;
+- }
+- }
+-
+- /* where to start and print? */
+- if (max > _dessert_logrbuf_used) {
+- max = _dessert_logrbuf_used;
+- }
+- i = _dessert_logrbuf_cur - max - 1;
+- if (i < 0) {
+- i += _dessert_logrbuf_len;
+- }
+-
+- while (max > 0) {
+- i++;
+- max--;
+- if (i == _dessert_logrbuf_len) {
+- i = 0;
+- }
+- line = _dessert_logrbuf + (DESSERT_LOGLINE_MAX * i);
+- cli_print(cli, "%s", line);
+- }
+-
+- pthread_rwlock_unlock(&_dessert_logrbuf_len_lock);
+-
+- return CLI_OK;
+-}
+Index: libdessert0.86-0.86.14/dessert_meshiface.c
+===================================================================
+--- libdessert0.86-0.86.14.orig/dessert_meshiface.c 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,1220 +0,0 @@
+-/******************************************************************************
+- Copyright 2009, The DES-SERT Team, Freie Universitaet Berlin (FUB).
+- All rights reserved.
+-
+- These sources were originally developed by Philipp Schmidt
+- at Freie Universitaet Berlin (http://www.fu-berlin.de/),
+- Computer Systems and Telematics / Distributed, Embedded Systems (DES) group
+- (http://cst.mi.fu-berlin.de/, http://www.des-testbed.net/)
+- ------------------------------------------------------------------------------
+- This program is free software: you can redistribute it and/or modify it under
+- the terms of the GNU General Public License as published by the Free Software
+- Foundation, either version 3 of the License, or (at your option) any later
+- version.
+-
+- This program is distributed in the hope that it will be useful, but WITHOUT
+- ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+- FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+-
+- You should have received a copy of the GNU General Public License along with
+- this program. If not, see http://www.gnu.org/licenses/ .
+- ------------------------------------------------------------------------------
+- For further information and questions please use the web site
+- http://www.des-testbed.net/
+- *******************************************************************************/
+-
+-#include "dessert_internal.h"
+-#include "dessert.h"
+-#ifdef TARGET_FREEBSD
+-#include <ifaddrs.h>
+-#include <net/if_dl.h>
+-#endif
+-
+-/* global data storage // P U B L I C */
+-/* nothing here - yet */
+-
+-/* global data storage // P R I V A T E */
+-/* nothing here - yet */
+-
+-/* local data storage*/
+-dessert_meshif_t *_dessert_meshiflist = NULL;
+-
+-pthread_mutex_t _dessert_meshiflist_mutex = PTHREAD_MUTEX_INITIALIZER;
+-int _dessert_meshiflist_len = 0;
+-int _dessert_meshiflist_perm_count = 0;
+-int _dessert_meshiflist_current_perm = 0;
+-dessert_meshif_t ***_dessert_meshiflist_perms = NULL;
+-
+-dessert_meshrxcbe_t *_dessert_meshrxcblist;
+-int _dessert_meshrxcblistver = 0;
+-
+-/* internal functions forward declarations*/
+-static void _dessert_packet_process(u_char *args,
+- const struct pcap_pkthdr *header, const u_char *packet);
+-static void *_dessert_meshif_add_thread(void* arg);
+-static inline int _dessert_meshsend_if2(dessert_msg_t* msg,
+- dessert_meshif_t *iface);
+-static void _dessert_meshif_cleanup(dessert_meshif_t *meshif);
+-static void _dessert_meshiflist_update_permutations(void);
+-static inline int DL_LENGTH(dessert_meshif_t *l);
+-static inline void list2array(dessert_meshif_t *l, dessert_meshif_t **a,
+- int len);
+-static inline int fact(int i);
+-static inline void permutation(int k, int len, dessert_meshif_t **a);
+-
+-/******************************************************************************
+- *
+- * EXTERNAL / PUBLIC
+- *
+- * M E S H - I N T E R F A C E S
+- *
+- ******************************************************************************/
+-
+-/******************************************************************************
+- * sending messages
+- ******************************************************************************/
+-
+-/** Sends a \b dessert \b message via the specified interface or all interfaces.
+- *
+- * The original message buffer will not be altered, and the ethernet src address
+- * will be set correctly
+- *
+- * @param[in] *msgin message to send
+- * @param[in] *iface interface to send from - use NULL for all interfaces
+- *
+- * @retval DESSERT_OK on success
+- * @retval EINVAL if message is broken
+- * @retval EIO if message was not sent successfully
+- *
+- * %DESCRIPTION:
+- *
+- **/
+-int dessert_meshsend(const dessert_msg_t* msgin, const dessert_meshif_t *iface) {
+- dessert_msg_t* msg;
+- int res;
+-
+- /* check message - we only send valid messages! */
+- if (dessert_msg_check(msgin, msgin->hlen + msgin->plen)) {
+- dessert_warn("will not send invalid message - aborting");
+- return EINVAL;
+- }
+-
+- /* clone message */
+- dessert_msg_clone(&msg, msgin, 1);
+- res = dessert_meshsend_fast(msg, iface);
+- dessert_msg_destroy(msg);
+-
+- return res;
+-
+-}
+-
+-/** Sends a \b dessert \b message via all interfaces, except via the specified interface.
+- *
+- * The original message buffer will not be altered, and the ethernet src address will be set correctly.
+- *
+- * @param[in] *msgin message to send
+- * @param[in] *iface interface NOT to send from - use NULL for all interfaces
+-
+- * @retval DESSERT_OK on success
+- * @retval EINVAL if message is broken
+- * @retval EIO if message was not sent successfully
+- *
+- * %DESCRIPTION:
+- *
+- **/
+-int dessert_meshsend_allbutone(const dessert_msg_t* msgin,
+- const dessert_meshif_t *iface) {
+- dessert_msg_t* msg;
+- int res;
+-
+- /* check message - we only send valid messages! */
+- if (dessert_msg_check(msgin, msgin->hlen + msgin->plen)) {
+- dessert_warn("will not send invalid message - aborting");
+- return EINVAL;
+- }
+-
+- /* clone message */
+- dessert_msg_clone(&msg, msgin, 1);
+- res = dessert_meshsend_fast_allbutone(msg, iface);
+- dessert_msg_destroy(msg);
+-
+- return res;
+-
+-}
+-
+-/** Sends a \b dessert \b message via the interface which is identified by the given hardware address.
+- *
+- * The original message buffer will not be altered, and the ethernet src address
+- * will be set correctly.
+- *
+- * @param[in] *msgin message to send
+- * @param[in] *hwaddr hardware address of the interface to send from
+- *
+- * @retval DESSERT_OK on success
+- * @retval EINVAL if message is broken
+- * @retval EIO if message was not sent successfully
+- *
+- * %DESCRIPTION:
+- *
+- **/
+-int dessert_meshsend_hwaddr(const dessert_msg_t* msgin,
+- const uint8_t hwaddr[ETHER_ADDR_LEN]) {
+- dessert_msg_t* msg;
+- int res;
+-
+- /* check message - we only send valid messages! */
+- if (dessert_msg_check(msgin, msgin->hlen + msgin->plen)) {
+- dessert_warn("will not send invalid message - aborting");
+- return EINVAL;
+- }
+-
+- /* clone message */
+- dessert_msg_clone(&msg, msgin, 1);
+- res = dessert_meshsend_fast_hwaddr(msg, hwaddr);
+- dessert_msg_destroy(msg);
+-
+- return res;
+-}
+-
+-/** Sends a \b dessert \b message via all interfaces in a randomized fashion.
+- *
+- * The original message buffer will not be altered, and the ethernet src address
+- * will be set correctly.
+- *
+- * @param[in] *msgin message to send
+- *
+- * @retval DESSERT_OK on success
+- * @retval EINVAL if message is broken
+- * @retval EIO if message was not sent successfully
+- *
+- * %DESCRIPTION:
+- *
+- **/
+-int dessert_meshsend_randomized(const dessert_msg_t* msgin) {
+- dessert_msg_t* msg;
+- int res;
+-
+- /* check message - we only send valid messages! */
+- if (dessert_msg_check(msgin, msgin->hlen + msgin->plen)) {
+- dessert_warn("will not send invalid message - aborting");
+- return EINVAL;
+- }
+-
+- /* clone message */
+- dessert_msg_clone(&msg, msgin, 1);
+- res = dessert_meshsend_fast_randomized(msg);
+- dessert_msg_destroy(msg);
+-
+- return res;
+-}
+-
+-/** Sends a \b dessert \b message fast via the specified interface or all interfaces.
+- *
+- * This method is faster than dessert_meshsend(), but does not check the message
+- * and may alter the message buffer.
+- *
+- * @param[in] *msg message to send
+- * @param[in] *iface interface to send from
+- *
+- * @retval DESSERT_OK on success
+- * @retval EINVAL if message is broken
+- * @retval EIO if message was not sent successfully
+- *
+- * %DESCRIPTION:
+- *
+- **/
+-int dessert_meshsend_fast(dessert_msg_t* msg, const dessert_meshif_t *iface) {
+- int res = 0;
+-
+- /* we have no iface - send on all! */
+- if (iface == NULL) {
+- pthread_rwlock_rdlock(&dessert_cfglock);
+- DL_FOREACH(_dessert_meshiflist, iface) {
+- /* set shost */
+- memcpy(msg->l2h.ether_shost, iface->hwaddr, ETHER_ADDR_LEN);
+- /* send */
+- res = _dessert_meshsend_if2(msg, iface);
+- if (res) {
+- break;
+- }
+- }
+- pthread_rwlock_unlock(&dessert_cfglock);
+- } else {
+- /* set shost */
+- memcpy(msg->l2h.ether_shost, iface->hwaddr, ETHER_ADDR_LEN);
+- /* send */
+- res = _dessert_meshsend_if2(msg, iface);
+- }
+-
+- return (res);
+-
+-}
+-
+-/** Sends a \b dessert \b message fast via all interfaces, except the specified interface.
+- *
+- * This method is faster than dessert_meshsend_allbutone(), but does not check the message
+- * and may alter the message buffer.
+- *
+- * @param[in] *msg message to send
+- * @param[in] *iface interface to NOT send from - use NULL for all interfaces
+- *
+- * @retval DESSERT_OK on success
+- * @retval EINVAL if message is broken
+- * @retval EIO if message was not sent successfully
+- *
+- * %DESCRIPTION:
+- *
+- **/
+-int dessert_meshsend_fast_allbutone(dessert_msg_t* msg,
+- const dessert_meshif_t *iface) {
+- dessert_meshif_t *curr_iface;
+- int res = 0;
+-
+- /* we have no iface - send on all! */
+- if (iface == NULL) {
+- pthread_rwlock_rdlock(&dessert_cfglock);
+- DL_FOREACH(_dessert_meshiflist, curr_iface) {
+- /* set shost */
+- memcpy(msg->l2h.ether_shost, iface->hwaddr, ETHER_ADDR_LEN);
+- /* send */
+- res = _dessert_meshsend_if2(msg, iface);
+- if (res) {
+- break;
+- }
+- }
+- pthread_rwlock_unlock(&dessert_cfglock);
+- } else {
+- pthread_rwlock_rdlock(&dessert_cfglock);
+- DL_FOREACH(_dessert_meshiflist, curr_iface) {
+-
+- /* skip if it is the 'allbutone' interface */
+- if (curr_iface == iface)
+- curr_iface = curr_iface->next;
+-
+- /* set shost */
+- memcpy(msg->l2h.ether_shost, iface->hwaddr, ETHER_ADDR_LEN);
+- /* send */
+- res = _dessert_meshsend_if2(msg, iface);
+- if (res) {
+- break;
+- }
+- }
+- pthread_rwlock_unlock(&dessert_cfglock);
+- }
+-
+- return (res);
+-
+-}
+-
+-/** Sends a \b dessert \b message fast via the interface specified by the given
+- * hardware address.
+- *
+- * This method is faster than dessert_meshsend_hwaddr(), but does not check the message
+- * and may alter the message buffer.
+- *
+- * @param[in] *msg message to send
+- * @param[in] *hwaddr hardware address of the interface to send from
+- *
+- * @retval DESSERT_OK on success
+- * @retval EINVAL if message is broken
+- * @retval EIO if message was not sent successfully
+- *
+- * %DESCRIPTION:
+- *
+- **/
+-int dessert_meshsend_fast_hwaddr(dessert_msg_t* msg,
+- const uint8_t hwaddr[ETHER_ADDR_LEN]) {
+- int res;
+- dessert_meshif_t *meshif;
+-
+- pthread_rwlock_rdlock(&dessert_cfglock);
+- DL_FOREACH(_dessert_meshiflist, meshif) {
+- if (memcmp(meshif->hwaddr, hwaddr, ETHER_ADDR_LEN) == 0)
+- break;
+- }
+- pthread_rwlock_unlock(&dessert_cfglock);
+- if (likely(meshif != NULL)) {
+- /* set shost */
+- memcpy(msg->l2h.ether_shost, meshif->hwaddr, ETHER_ADDR_LEN);
+- /* send */
+- res = _dessert_meshsend_if2(msg, meshif);
+- } else {
+- dessert_err("No such interface - aborting");
+- return ENODEV;
+- }
+-
+- return (res);
+-}
+-
+-/** Sends a \b dessert \b message fast via all interfaces in a randomized fashion.
+- *
+- * This method is faster than dessert_meshsend_randomized(), but does not check
+- * the message and may alter the message buffer.
+- *
+- * @param[in] *msgin message to send
+- *
+- * @retval DESSERT_OK on success
+- * @retval EINVAL if message is broken
+- * @retval EIO if message was not sent successfully
+- *
+- * %DESCRIPTION:
+- *
+- **/
+-int dessert_meshsend_fast_randomized(dessert_msg_t* msgin) {
+- int i;
+- int res = 0;
+-
+- pthread_mutex_lock(&_dessert_meshiflist_mutex);
+- for (i = 0; i < _dessert_meshiflist_len; i++) {
+- res = dessert_meshsend_fast(msgin, _dessert_meshiflist_perms[_dessert_meshiflist_current_perm][i]);
+- if (res) {
+- break;
+- }
+- }
+- _dessert_meshiflist_current_perm = (_dessert_meshiflist_current_perm+1) % _dessert_meshiflist_perm_count;
+- pthread_mutex_unlock(&_dessert_meshiflist_mutex);
+-
+- return res;
+-}
+-
+-/** Sends a @b dessert @b message @a msg via the specified interface @a iface or
+- * all interfaces.
+- *
+- * This method is faster than dessert_meshsend(), but does not check the message
+- * and may alter the message buffer. In contrast to dessert_meshsend_fast() it
+- * does not write the ether_shost address.
+- *
+- * @param[in] *msg message to send
+- * @param[in] *iface interface to send from
+- *
+- * @retval DESSERT_OK on success
+- * @retval EINVAL if message is broken
+- * @retval EIO if message was not sent successfully
+- *
+- * %DESCRIPTION:
+- *
+- **/
+-int dessert_meshsend_raw(dessert_msg_t* msg, const dessert_meshif_t *iface) {
+- int res = 0;
+-
+- if (iface == NULL) {
+- pthread_rwlock_rdlock(&dessert_cfglock);
+- DL_FOREACH(_dessert_meshiflist, iface) {
+- res = _dessert_meshsend_if2(msg, iface);
+- if (res) {
+- break;
+- }
+- }
+- pthread_rwlock_unlock(&dessert_cfglock);
+- } else {
+- res = _dessert_meshsend_if2(msg, iface);
+- }
+-
+- return (res);
+-
+-}
+-
+-/******************************************************************************
+- * meshrx-callback handling
+- ******************************************************************************/
+-
+-/** Removes all occurrences of the given callback function @a c from the meshrx
+- * pipeline.
+- *
+- * @param[in] c callback function pointer
+- *
+- * @retval DESSERT_OK on success
+- * @retval DESSERT_ERR otherwise
+- *
+- * %DESCRIPTION:
+- *
+- **/
+-int dessert_meshrxcb_del(dessert_meshrxcb_t* c) {
+- int count = 0;
+- dessert_meshrxcbe_t *i, *last;
+-
+- pthread_rwlock_wrlock(&dessert_cfglock);
+-
+- if (_dessert_meshrxcblist == NULL) {
+- count++;
+- goto dessert_meshrxcb_del_out;
+- }
+-
+- while (_dessert_meshrxcblist->c == c) {
+- count++;
+- i = _dessert_meshrxcblist;
+- _dessert_meshrxcblist = _dessert_meshrxcblist->next;
+- free(i);
+- if (_dessert_meshrxcblist == NULL) {
+- goto dessert_meshrxcb_del_out;
+- }
+- }
+-
+- for (i = _dessert_meshrxcblist; i->next != NULL; i = i->next) {
+- if (i->c == c) {
+- count++;
+- last->next = i->next;
+- free(i);
+- i = last;
+- }
+- last = i;
+- }
+-
+- dessert_meshrxcb_del_out: _dessert_meshrxcblistver++;
+- pthread_rwlock_unlock(&dessert_cfglock);
+- return ((count > 0) ? DESSERT_OK : DESSERT_ERR);
+-
+-}
+-
+-/** Adds a callback function to the meshrx pipeline.
+- *
+- * The callback going to get called if a packet is received via a dessert interface.
+- *
+- * @param[in] c callback function
+- * @param[in] prio priority of the function - lower first!
+- *
+- * @retval DESSERT_OK on success
+- * @retval -errno on error
+- *
+- * %DESCRIPTION:
+- *
+- **/
+-int dessert_meshrxcb_add(dessert_meshrxcb_t* c, int prio) {
+- dessert_meshrxcbe_t *cb, *i;
+-
+- cb = (dessert_meshrxcbe_t *) malloc(sizeof(dessert_meshrxcbe_t));
+- if (cb == NULL)
+- return (-errno);
+-
+- pthread_rwlock_wrlock(&dessert_cfglock);
+-
+- cb->c = c;
+- cb->prio = prio;
+- cb->next = NULL;
+-
+- if (_dessert_meshrxcblist == NULL) {
+- _dessert_meshrxcblist = cb;
+- _dessert_meshrxcblistver++;
+-
+- pthread_rwlock_unlock(&dessert_cfglock);
+- return DESSERT_OK;
+- }
+-
+- if (_dessert_meshrxcblist->prio > cb->prio) {
+- cb->next = _dessert_meshrxcblist;
+- _dessert_meshrxcblist = cb;
+- _dessert_meshrxcblistver++;
+-
+- pthread_rwlock_unlock(&dessert_cfglock);
+- return DESSERT_OK;
+- }
+-
+- /* find right place for callback */
+- for (i = _dessert_meshrxcblist; i->next != NULL && i->next->prio
+- <= cb->prio; i = i->next)
+- ;
+-
+- /* insert it */
+- cb->next = i->next;
+- i->next = cb;
+- _dessert_meshrxcblistver++;
+-
+- pthread_rwlock_unlock(&dessert_cfglock);
+- return DESSERT_OK;
+-}
+-
+-/******************************************************************************
+- * mesh interface handling
+- ******************************************************************************/
+-
+-/** Returns the head of the list of mesh interfaces (_desert_meshiflist).
+- *
+- * @retval pointer if list is not empty
+- * @retval NULL otherwise
+- *
+- * %DESCRIPTION:
+- *
+- */
+-dessert_meshif_t* dessert_meshiflist_get() {
+- return _dessert_meshiflist;
+-}
+-
+-/** Looks for mesh interface with name @a dev in the list of mesh interfaces and
+- * returns a pointer to it.
+- *
+- * @param[in] *dev interface name
+- *
+- * @retval pointer if the interface is found
+- * @retval NULL otherwise
+- *
+- * %DESCRIPTION:
+- *
+- **/
+-dessert_meshif_t* dessert_meshif_get_name(const char* dev) {
+- dessert_meshif_t *meshif = NULL;
+-
+- /* search dev name in iflist */
+- //meshif = _dessert_meshiflist;
+- pthread_rwlock_rdlock(&dessert_cfglock);
+- DL_FOREACH(_dessert_meshiflist, meshif) {
+- if (strncmp(meshif->if_name, dev, IF_NAMESIZE) == 0)
+- break;
+- }
+- pthread_rwlock_unlock(&dessert_cfglock);
+-
+- return (meshif);
+-}
+-
+-/** Looks for mesh interface with hardware address @a hwaddr in the list of mesh
+- * interfaces and returns a pointer to it.
+- *
+- * @param[in] *hwaddr interface hardware address
+- *
+- * @retval pointer if the interface is found
+- * @retval NULL otherwise
+- *
+- * %DESCRIPTION:
+- *
+- */
+-dessert_meshif_t* dessert_meshif_get_hwaddr(const uint8_t hwaddr[ETHER_ADDR_LEN]) {
+- dessert_meshif_t *meshif = NULL;
+-
+- pthread_rwlock_rdlock(&dessert_cfglock);
+- DL_FOREACH(_dessert_meshiflist, meshif) {
+- if (memcmp(meshif->hwaddr, hwaddr, ETHER_ADDR_LEN) == 0)
+- break;
+- }
+- pthread_rwlock_unlock(&dessert_cfglock);
+-
+- return meshif;
+-}
+-
+-/** Removes the corresponding dessert_meshif struct from _dessert_meshiflist and does some cleanup.
+- *
+- * @param[in] dev interface name to remove from list
+- *
+- * @retval DESSERT_OK on success
+- * @retval -errno on error
+- *
+- * %DESCRIPTION:
+- *
+- */
+-int dessert_meshif_del(const char* dev) {
+- dessert_meshif_t *meshif;
+- // dessert_meshif_t *meshif_prev; TODO MESHIF_HASH
+-
+- /* lock the list */
+- pthread_rwlock_wrlock(&dessert_cfglock);
+- /* search dev name in iflist */
+- DL_FOREACH(_dessert_meshiflist, meshif) {
+- if (strncmp(meshif->if_name, dev, IF_NAMESIZE) == 0)
+- break;
+- }
+-
+- if (meshif == NULL) {
+- pthread_rwlock_unlock(&dessert_cfglock);
+- return (ENODEV);
+- }
+-
+- /* remove it from list */
+- DL_DELETE(_dessert_meshiflist, meshif);
+- _dessert_meshiflist_update_permutations();
+- pthread_rwlock_unlock(&dessert_cfglock);
+-
+- /* tell pcap not to further process packets */
+- pcap_breakloop(meshif->pcap);
+-
+- /* the remaining cleanup is done in the interface thread *
+- * using _dessert_meshif_cleanup */
+-
+- return DESSERT_OK;
+-
+-}
+-
+-/** Initializes given mesh interface, starts up the packet processor thread.
+-
+- * @param[in] *dev interface name
+- * @param[in] flags @todo Document the flags parameter.
+- *
+- * @retval DESSERT_OK on success
+- * @retval DESSERT_ERR on error
+- *
+- *
+- *
+- * %DESCRIPTION:
+- *
+- */
+-int dessert_meshif_add(const char* dev, uint8_t flags) {
+- dessert_meshif_t *meshif;
+-
+- uint8_t promisc = (flags & DESSERT_IF_NOPROMISC) ? 0 : 1;
+- struct bpf_program fp; /* filter program for libpcap */
+- char fe[64]; /* filter expression for libpcap */
+-
+- snprintf(fe, 64, "ether proto 0x%04x", DESSERT_ETHPROTO);
+-
+- /* init new interface entry */
+- meshif = (dessert_meshif_t*) malloc(sizeof(dessert_meshif_t));
+- if (meshif == NULL)
+- return (-errno);
+- memset((void *) meshif, 0, sizeof(dessert_meshif_t));
+- strncpy(meshif->if_name, dev, IF_NAMESIZE);
+- meshif->if_name[IF_NAMESIZE - 1] = '\0';
+- meshif->if_index = if_nametoindex(dev);
+- pthread_mutex_init(&(meshif->cnt_mutex), NULL);
+-
+- /* check if interface exists */
+- if (!meshif->if_index) {
+- dessert_err("interface %s - no such interface", meshif->if_name);
+- goto dessert_meshif_add_err;
+- }
+-
+- /* initialize libpcap */
+- meshif->pcap = pcap_open_live(meshif->if_name, DESSERT_MAXFRAMELEN,
+- promisc, 10, meshif->pcap_err);
+- if (meshif->pcap == NULL) {
+- dessert_err("pcap_open_live failed for interface %s(%d):\n%s",
+- meshif->if_name, meshif->if_index, meshif->pcap_err);
+- goto dessert_meshif_add_err;
+- }
+- if (pcap_datalink(meshif->pcap) != DLT_EN10MB) {
+- dessert_err("interface %s(%d) is not an ethernet interface!",
+- meshif->if_name, meshif->if_index);
+- goto dessert_meshif_add_err;
+- }
+-
+- /* pcap filter */
+- if (!(flags & DESSERT_IF_NOFILTER)) {
+- if (pcap_compile(meshif->pcap, &fp, fe, 0, 0) == -1) {
+- dessert_err("couldn't parse filter %s: %s\n", fe, pcap_geterr(meshif->pcap));
+- goto dessert_meshif_add_err;
+- }
+- if (pcap_setfilter(meshif->pcap, &fp) == -1) {
+- dessert_err("couldn't install filter %s: %s\n", fe, pcap_geterr(meshif->pcap));
+- goto dessert_meshif_add_err;
+- }
+- /* else { TODO: pcap_freecode() } */
+- }
+-
+- /* get hardware address */
+- if (_dessert_meshif_gethwaddr(meshif) != 0) {
+- dessert_err("failed to get hwaddr of interface %s(%d)",
+- meshif->if_name, meshif->if_index);
+- goto dessert_meshif_add_err;
+- }
+-
+- /* check whether we need to set defsrc (default source) */
+- if (memcmp(dessert_l25_defsrc, ether_null, ETHER_ADDR_LEN) == 0) {
+- memcpy(dessert_l25_defsrc, meshif->hwaddr, ETHER_ADDR_LEN);
+- dessert_info("set dessert_l25_defsrc to hwaddr %02x:%02x:%02x:%02x:%02x:%02x",
+- dessert_l25_defsrc[0], dessert_l25_defsrc[1],dessert_l25_defsrc[2],
+- dessert_l25_defsrc[3], dessert_l25_defsrc[4], dessert_l25_defsrc[5]);
+- }
+-
+- dessert_info("starting worker thread for interface %s(%d) hwaddr %02x:%02x:%02x:%02x:%02x:%02x",
+- meshif->if_name, meshif->if_index,
+- meshif->hwaddr[0], meshif->hwaddr[1], meshif->hwaddr[2],
+- meshif->hwaddr[3], meshif->hwaddr[4], meshif->hwaddr[5]);
+-
+- /* start worker thread */
+- if (pthread_create(&(meshif->worker), NULL, _dessert_meshif_add_thread,
+- (void *) meshif)) {
+- dessert_err("creating worker thread failed for interface %s(%d)",
+- meshif->if_name, meshif->if_index);
+- goto dessert_meshif_add_err;
+- }
+-
+- /* prepend to interface list */
+- pthread_rwlock_wrlock(&dessert_cfglock);
+- DL_PREPEND(_dessert_meshiflist, meshif);
+- _dessert_meshiflist_update_permutations();
+- pthread_rwlock_unlock(&dessert_cfglock);
+-
+- return (DESSERT_OK);
+-
+- dessert_meshif_add_err:
+-
+- if (meshif->pcap != NULL) {
+- pcap_close(meshif->pcap);
+- }
+- free(meshif);
+- return (DESSERT_ERR);
+-}
+-
+-/*****************************************************************************
+- *
+- * INTERNAL / PRIVATE
+- *
+- * M E S H - I N T E R F A C E S
+- *
+- ******************************************************************************/
+-
+-/** Run all registered callbacks.
+- *
+- * @internal
+- *
+- * @return the return status of the last callback called
+- *
+- * @warning Use with care - never register as callback!
+- *
+- * %DESCRIPTION:
+- *
+- */
+-int _dessert_meshrxcb_runall(dessert_msg_t* msg_in, size_t len,
+- dessert_msg_proc_t *proc_in, const dessert_meshif_t *meshif,
+- dessert_frameid_t id) {
+- dessert_msg_t *msg = msg_in;
+- dessert_msg_proc_t *proc = proc_in;
+- dessert_meshrxcbe_t *cb;
+- int res = 0;
+- dessert_meshrxcb_t **cbl = NULL;
+- int cbllen = 0;
+- int cblcur = -1;
+-
+- /* copy callbacks to internal list to release dessert_cfglock before invoking callbacks*/
+- pthread_rwlock_rdlock(&dessert_cfglock);
+- cbllen = 0;
+- for (cb = _dessert_meshrxcblist; cb != NULL; cb = cb->next)
+- cbllen++;
+- cbl = malloc(cbllen * sizeof(dessert_meshrxcb_t *));
+- if (cbl == NULL) {
+- dessert_err("failed to allocate memory for internal callback list");
+- pthread_rwlock_unlock(&dessert_cfglock);
+- return DESSERT_MSG_DROP;
+- }
+-
+- cblcur = 0;
+- for (cb = _dessert_meshrxcblist; cb != NULL; cb = cb->next)
+- cbl[cblcur++] = cb->c;
+-
+- pthread_rwlock_unlock(&dessert_cfglock);
+-
+- /* call the interested */
+- res = 0;
+- cblcur = 0;
+- while (res > DESSERT_MSG_DROP && cblcur < cbllen) {
+-
+- _dessert_packet_process_cbagain: res = cbl[cblcur](msg, len, proc,
+- meshif, id);
+-
+- if (res == DESSERT_MSG_NEEDNOSPARSE && msg == msg_in) {
+- dessert_msg_clone(&msg, msg_in, 0);
+- len = DESSERT_MAXFRAMEBUFLEN;
+- goto _dessert_packet_process_cbagain;
+- } else if (res == DESSERT_MSG_NEEDNOSPARSE && msg != msg_in) {
+- dessert_warn("bogus DESSERT_MSG_NEEDNOSPARSE returned from callback!");
+- }
+-
+- if (res == DESSERT_MSG_NEEDMSGPROC && proc == NULL) {
+- proc = malloc(DESSERT_MSGPROCLEN);
+- memset(proc, 0, DESSERT_MSGPROCLEN);
+- goto _dessert_packet_process_cbagain;
+- } else if (res == DESSERT_MSG_NEEDMSGPROC && proc != NULL) {
+- dessert_warn("bogus DESSERT_MSG_NEEDMSGPROC returned from callback!");
+- }
+-
+- cblcur++;
+- }
+-
+- free(cbl);
+-
+- if (msg != msg_in)
+- dessert_msg_destroy(msg);
+-
+- if (proc != proc_in)
+- free(proc);
+-
+- return (res);
+-}
+-
+-/** Get the hardware address of the ethernet device behind meshif.
+- *
+- * @internal
+- *
+- * @param *meshif pointer to dessert_meshif_t to query
+- *
+- * @retval DESSERT_OK on success
+- *
+- * \warning This is a platform depended function!
+- *
+- * %DESCRIPTION:
+- *
+- **/
+-int _dessert_meshif_gethwaddr(dessert_meshif_t *meshif)
+-#ifdef TARGET_DARWIN
+-{
+- /* the Apple way... */
+-
+- int mib[6];
+- size_t len;
+- uint8_t *buf, *next;
+- struct if_msghdr *ifm;
+- struct sockaddr_dl *sdl;
+- int ret = DESSERT_ERR;
+-
+- mib[0] = CTL_NET;
+- mib[1] = AF_ROUTE;
+- mib[2] = 0;
+- mib[3] = AF_LINK;
+- mib[4] = NET_RT_IFLIST;
+- mib[5] = 0;
+-
+- if (sysctl(mib, 6, NULL, &len, NULL, 0) < 0) {
+- dessert_err("Acquiring hwaddr failed: sysctl 1 error");
+- return(DESSERT_ERR);
+- }
+-
+- if ((buf = malloc(len)) == NULL) {
+- dessert_err("acquiring hwaddr failed: malloc error");
+- return(DESSERT_ERR);
+- }
+-
+- if (sysctl(mib, 6, buf, &len, NULL, 0) < 0) {
+- dessert_err("acquiring hwaddr failed: sysctl 2 error");
+- return(DESSERT_ERR);
+- }
+-
+- for (next = buf; next < buf+len; next += ifm->ifm_msglen) {
+- ifm = (struct if_msghdr *)next;
+- if (ifm->ifm_type == RTM_IFINFO) {
+- sdl = (struct sockaddr_dl *)(ifm + 1);
+- if (strncmp(&sdl->sdl_data[0], meshif->if_name, sdl->sdl_len) == 0) {
+- memcpy(meshif->hwaddr, LLADDR(sdl), ETHER_ADDR_LEN);
+- ret = DESSERT_OK;
+- break;
+- }
+- }
+- }
+-
+- free(buf);
+- return ret;
+-}
+-#elif TARGET_FREEBSD
+-{
+- struct ifaddrs *ifaphead;
+- struct ifaddrs *ifap;
+- struct sockaddr_dl *sdl = NULL;
+-
+- if (getifaddrs(&ifaphead) != 0)
+- {
+- dessert_err("getifaddrs() failed");
+- return(DESSERT_ERR);
+- }
+-
+- for (ifap = ifaphead; ifap; ifap = ifap->ifa_next)
+- {
+- if ((ifap->ifa_addr->sa_family == AF_LINK))
+- {
+- if (strcmp(ifap->ifa_name,meshif->if_name) == 0)
+- {
+- sdl = (struct sockaddr_dl *)ifap->ifa_addr;
+- if (sdl)
+- {
+- memcpy(meshif->hwaddr, LLADDR(sdl), ETHER_ADDR_LEN);
+- return(DESSERT_OK);
+- }
+- }
+- }
+- }
+- return(DESSERT_ERR);
+-}
+-#elif TARGET_LINUX
+-{
+- /* the linux and solaris way */
+- int sockfd;
+- struct ifreq ifr;
+-
+- /* we need some socket to do that */
+- sockfd = socket(AF_INET, SOCK_STREAM, 0);
+-
+- /* set interface options and get hardware address */
+- strncpy(ifr.ifr_name, meshif->if_name, sizeof(ifr.ifr_name));
+-
+-#ifdef SIOCGIFHWADDR
+- if (ioctl(sockfd, SIOCGIFHWADDR, &ifr) >= 0) {
+- memcpy(meshif->hwaddr, &ifr.ifr_hwaddr.sa_data, ETHER_ADDR_LEN);
+- /* } */
+-#elif defined SIOCGENADDR
+- if ( ioctl(sd, SIOCGENADDR, &ifr_work) >= 0 ) {
+- memcpy( meshif->hwaddr, &ifr.ifr_enaddr, ETHER_ADDR_LEN );
+- /* } */
+-#else
+- if (false) {
+-#endif
+- close(sockfd);
+- return (DESSERT_OK);
+- } else {
+- dessert_err("acquiring hwaddr failed");
+- close(sockfd);
+- return (DESSERT_ERR);
+- }
+-}
+-#else
+-{
+- dessert_err("acquiring hwaddr failed - platform not supported");
+- return(DESSERT_ERR);
+-}
+-#endif
+-
+-/******************************************************************************
+- *
+- * LOCAL
+- *
+- * M E S H - I N T E R F A C E S
+- *
+- ******************************************************************************/
+-
+-/** Function to send packet via a single interface.
+- *
+- * @internal
+- *
+- * @param[in] *msg the message to send
+- * @param[in] *iface the interface the message should be send via
+- *
+- * @retval DESSERT_OK on success
+- * @retval EINVAL if *iface is NULL
+- * @retval EIO if there was a problem sending the message
+- *
+- * %DESCRIPTION:
+- *
+- */
+-static inline int _dessert_meshsend_if2(dessert_msg_t* msg,
+- dessert_meshif_t *iface) {
+- int res;
+- uint8_t oldflags;
+- size_t msglen = ntohs(msg->hlen) + ntohs(msg->plen);
+-
+- /* check for null meshInterface */
+- if (iface == NULL) {
+- dessert_err("NULL-pointer given as interface - programming error!");
+- return EINVAL;
+- }
+-
+- /* send packet - temporally setting DESSERT_FLAG_SPARSE */
+- oldflags = msg->flags;
+- msg->flags &= ~DESSERT_FLAG_SPARSE;
+- res = pcap_inject(iface->pcap, (u_char *) msg, msglen);
+- msg->flags = oldflags;
+-
+- if (res != msglen) {
+- if (res == -1) {
+- dessert_warn("couldn't send message: %s\n", pcap_geterr(iface->pcap));
+- } else {
+- dessert_warn("couldn't send message: sent only %d of %d bytes\n",
+- res, msglen);
+- }
+- return (EIO);
+- }
+-
+- pthread_mutex_lock(&(iface->cnt_mutex));
+- iface->opkts++;
+- iface->obytes += res;
+- pthread_mutex_unlock(&(iface->cnt_mutex));
+-
+- return (DESSERT_OK);
+-
+-}
+-
+-/** Callback doing the main work for packets received through a dessert interface.
+- *
+- * @internal
+- *
+- * @param arg - meshif-pointer carried by libpcap in something else
+- * @param header - pointer to the header by libpcap
+- * @param packet - pointer to the packet by libpcap
+- *
+- * %DESCRIPTION:
+- *
+- */
+-static void _dessert_packet_process(u_char *args,
+- const struct pcap_pkthdr *header, const u_char *packet) {
+- dessert_meshif_t *meshif = (dessert_meshif_t *) args;
+- dessert_msg_t *msg = (dessert_msg_t *) packet;
+- size_t len = header->caplen;
+- dessert_frameid_t id;
+- dessert_msg_proc_t proc;
+-
+- /* is it something I understand? */
+- if (ntohs(msg->l2h.ether_type) != DESSERT_ETHPROTO) {
+- dessert_debug("got packet with ethertype %04x - discarding", ntohs(msg->l2h.ether_type));
+- return;
+- }
+-
+- /* check message */
+- if (header->caplen < header->len) {
+- dessert_warn("packet too short - check pcap_open_live() parameters");
+- return;
+- }
+- if (header->caplen < DESSERT_MSGLEN) {
+- dessert_notice("packet too short - shorter than DESSERT_MSGLEN");
+- return;
+- }
+-
+- /* generate frame id */
+- id = _dessert_newframeid();
+- memset(&proc, 0, DESSERT_MSGPROCLEN);
+-
+- /* count packet */
+- pthread_mutex_lock(&(meshif->cnt_mutex));
+- meshif->ipkts++;
+- meshif->ibytes += header->caplen;
+- pthread_mutex_unlock(&(meshif->cnt_mutex));
+-
+- _dessert_meshrxcb_runall(msg, len, &proc, meshif, id);
+-
+-}
+-
+-/** Internal routine called before interface thread finishes.
+- *
+- * @internal
+- *
+- * @param *meshif the interface to be cleaned up
+- *
+- * %DESCRIPTION:
+- *
+- */
+-static void _dessert_meshif_cleanup(dessert_meshif_t *meshif) {
+- pcap_close(meshif->pcap);
+- free(meshif);
+-}
+-
+-/** Internal thread function running the capture loop.
+- *
+- * @internal
+- *
+- * @param *arg a void pointer representing a dessert_meshif_t interface
+- *
+- * %DESCRIPTION:
+- */
+-static void *_dessert_meshif_add_thread(void* arg) {
+-
+- dessert_meshif_t *meshif = (dessert_meshif_t *) arg;
+-
+- pcap_loop(meshif->pcap, -1, _dessert_packet_process, (u_char *) meshif);
+-
+- _dessert_meshif_cleanup(meshif);
+-
+- return (NULL);
+-
+-}
+-
+-/** Internal function to update the lookup table of permutations of the current _dessert_meshiflist.
+- *
+- * @internal
+- *
+- * %DESCRIPTION: \n
+- */
+-static void _dessert_meshiflist_update_permutations() {
+- int i, r;
+-
+- pthread_mutex_lock(&_dessert_meshiflist_mutex);
+- _dessert_meshiflist_len = DL_LENGTH(_dessert_meshiflist);
+-
+- dessert_meshif_t **a = calloc(sizeof(a) * _dessert_meshiflist_len, 1);
+- list2array(_dessert_meshiflist, a, _dessert_meshiflist_len);
+-
+- _dessert_meshiflist_perm_count = fact(_dessert_meshiflist_len);
+-
+- if (_dessert_meshiflist_perms != NULL) {
+- free(_dessert_meshiflist_perms);
+- }
+- _dessert_meshiflist_perms = calloc(sizeof(dessert_meshif_t **) * _dessert_meshiflist_perm_count + sizeof(dessert_meshif_t *) * _dessert_meshiflist_perm_count * _dessert_meshiflist_len, 1);
+- for (i = 0; i < _dessert_meshiflist_perm_count; ++i) {
+- _dessert_meshiflist_perms[i]
+- = (dessert_meshif_t **) (((char *) _dessert_meshiflist_perms)
+- + sizeof(dessert_meshif_t **)
+- * _dessert_meshiflist_perm_count + i
+- * _dessert_meshiflist_len * sizeof(dessert_meshif_t *));
+- }
+-
+- for (r = 0; r < _dessert_meshiflist_perm_count; r++) {
+- memcpy(_dessert_meshiflist_perms[r], a, sizeof(dessert_meshif_t *)
+- * _dessert_meshiflist_len);
+- }
+- free(a);
+-
+- for(r = 0; r < _dessert_meshiflist_perm_count; r++){
+- permutation(r, _dessert_meshiflist_len, _dessert_meshiflist_perms[r]);
+- }
+-
+- pthread_mutex_unlock(&_dessert_meshiflist_mutex);
+-}
+-
+-/** Internal function to get the length of a double-linked utlist.
+- *
+- * @internal
+- *
+- * @param[in] *l a pointer to the list head
+- *
+- * @return the number of elements in the list
+- *
+- * %DESCRIPTION: \n
+- */
+-static inline int DL_LENGTH(dessert_meshif_t *l) {
+- int len = 0;
+- dessert_meshif_t *temp;
+- DL_FOREACH(l, temp)
+- len++;
+- return len;
+-}
+-
+-/** Internal function to copy the element pointers of the _dessert_meshiflist to an array.
+- *
+- * @internal
+- *
+- * @param[in] *l a pointer to the list head
+- * @param[out] **a a pointer to an array of dessert_meshif_t
+- *
+- * %DESCRIPTION: \n
+- */
+-static inline void list2array(dessert_meshif_t *l, dessert_meshif_t **a,
+- int len) {
+- dessert_meshif_t *t;
+- int i = 0;
+- DL_FOREACH(l, t) {
+- a[i++] = t;
+- if (--len == 0)
+- break;
+- }
+-}
+-
+-/** Internal function to compute the factorial of a given number.
+- *
+- * @internal
+- *
+- * @param[in] i the number
+- *
+- * @return the factorial
+- *
+- * %DESCRIPTION: \n
+- */
+-static inline int fact(int i){
+- int fact = 1;
+- while (i > 0) fact *= i--;
+- return fact;
+-}
+-
+-/** Internal function to produce a permutation of @a a.
+- *
+- * @internal
+- *
+- * @param[in] k the permutation to generate
+- * @param[in] len the number of elements in the array
+- * @param[out] the array to permute
+- *
+- * @note Algorithm adopted from the Wikipedia article on
+- * <a href="http://en.wikipedia.org/wiki/Permutation">Permutations</a>.
+- *
+- * %DESCRIPTION: \n
+- */
+-static inline void permutation(int k, int len, dessert_meshif_t **a) {
+- dessert_meshif_t *temp;
+- int j;
+-
+- for(j = 2 ; j <= len; j++ ) {
+- temp = a[(k%j)];
+- a[(k%j)] = a[j-1];
+- a[j-1] = temp;
+- k = k / j;
+- }
+-}
+Index: libdessert0.86-0.86.14/dessert_msg.c
+===================================================================
+--- libdessert0.86-0.86.14.orig/dessert_msg.c 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,876 +0,0 @@
+-/******************************************************************************
+- Copyright 2009, The DES-SERT Team, Freie Universitaet Berlin (FUB).
+- All rights reserved.
+-
+- These sources were originally developed by Philipp Schmidt
+- at Freie Universitaet Berlin (http://www.fu-berlin.de/),
+- Computer Systems and Telematics / Distributed, Embedded Systems (DES) group
+- (http://cst.mi.fu-berlin.de/, http://www.des-testbed.net/)
+- ------------------------------------------------------------------------------
+- This program is free software: you can redistribute it and/or modify it under
+- the terms of the GNU General Public License as published by the Free Software
+- Foundation, either version 3 of the License, or (at your option) any later
+- version.
+-
+- This program is distributed in the hope that it will be useful, but WITHOUT
+- ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+- FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+-
+- You should have received a copy of the GNU General Public License along with
+- this program. If not, see http://www.gnu.org/licenses/ .
+- ------------------------------------------------------------------------------
+- For further information and questions please use the web site
+- http://www.des-testbed.net/
+- *******************************************************************************/
+-
+-#include "dessert_internal.h"
+-#include "dessert.h"
+-
+-/* global data storage // P U B L I C */
+-
+-/* global data storage // P R I V A T E */
+-
+-/* local data storage*/
+-
+-/* internal functions forward declarations*/
+-
+-/******************************************************************************
+- *
+- * EXTERNAL / PUBLIC
+- *
+- * M E S S A G E H A N D L I N G
+- *
+- ******************************************************************************/
+-
+-/** creates a new dessert_msg_t and initializes it.
+- * @arg **msgout (out) pointer to return message address
+- * @return 0 on success, -errno on error
+- **/
+-int dessert_msg_new(dessert_msg_t **msgout) {
+- dessert_msg_t *msg;
+-
+- msg = malloc(DESSERT_MAXFRAMEBUFLEN);
+-
+- if (msg == NULL) {
+- dessert_err("failed to allocate buffer for new message!");
+- return (-ENOMEM);
+- }
+-
+- memset(msg, 0, DESSERT_MAXFRAMEBUFLEN);
+- msg->l2h.ether_type = htons(DESSERT_ETHPROTO);
+- memset(msg->l2h.ether_dhost, 255, ETHER_ADDR_LEN);
+- memcpy(msg->proto, dessert_proto, DESSERT_PROTO_STRLEN);
+- msg->ver = dessert_ver;
+- msg->ttl = 0xff;
+- msg->u8 = 0x00;
+- msg->u16 = htons(0xbeef);
+- msg->hlen = htons(sizeof(dessert_msg_t));
+- msg->plen = htons(0);
+-
+- *msgout = msg;
+- return (DESSERT_OK);
+-
+-}
+-
+-/** generates a copy of a dessert_msg
+- * @arg **msgnew (out) pointer to return message address
+- * @arg *msgold pointer to the message to clone
+- * @arg sparse whether to allocate DESSERT_MAXFRAMELEN or only hlen+plen
+- * @return DESSERT_OK on success, -errno otherwise
+- **/
+-int dessert_msg_clone(dessert_msg_t **msgnew, const dessert_msg_t *msgold,
+- uint8_t sparse) {
+- dessert_msg_t *msg;
+- size_t msglen = ntohs(msgold->hlen) + ntohs(msgold->plen);
+-
+- if (sparse) {
+- msg = malloc(msglen);
+- } else {
+- msg = malloc(DESSERT_MAXFRAMEBUFLEN);
+- }
+-
+- if (msg == NULL) {
+- return (-errno);
+- }
+-
+- memcpy(msg, msgold, msglen);
+-
+- if (sparse) {
+- msg->flags |= DESSERT_FLAG_SPARSE;
+- } else {
+- msg->flags &= DESSERT_FLAG_SPARSE ^ DESSERT_FLAG_SPARSE;
+- }
+-
+- *msgnew = msg;
+- return (DESSERT_OK);
+-
+-}
+-
+-/** checks whether a dessert_msg is consistent
+- * @arg msg the message to be checked
+- * @arg len the length of the buffer
+- * @return DESSERT_OK on success
+- * @return -1 of the message is too large for the buffer
+- * @return -2 if the message was not intended to this daemon
+- * @return -3 if some extension is not consistent
+- * %DESCRIPTION:
+- ***********************************************************************/
+-int dessert_msg_check(const dessert_msg_t* msg, size_t len) {
+- dessert_ext_t *ext;
+-
+- /* is the message large enough to at least carry the header */
+- if (len < DESSERT_MSGLEN) {
+- dessert_info("message too short - shorter than DESSERT_MSGLEN");
+- return (-1);
+- }
+- if (ntohs(msg->hlen) + ntohs(msg->plen) > len) {
+- dessert_info("message too short - shorter than header + payload");
+- return (-1);
+- }
+-
+- /* right protocol and version */
+- if (msg->proto[0] != dessert_proto[0] || msg->proto[1] != dessert_proto[1]
+- || msg->proto[2] != dessert_proto[2] || msg->proto[3]
+- != dessert_proto[3]) {
+- dessert_info("wrong dessert protocol");
+- return (-2);
+- }
+- if (msg->ver != dessert_ver) {
+- dessert_info("wrong dessert protocol version");
+- return (-2);
+- }
+-
+- /* now check extensions.... */
+- ext = (dessert_ext_t *) ((uint8_t *) msg + DESSERT_MSGLEN);
+- while ((uint8_t *) ext < ((uint8_t *) msg + (size_t) ntohs(msg->hlen))) {
+- /* does current extension fit into the header? */
+- if (((uint8_t *) ext + (size_t) ext->len) > ((uint8_t *) msg
+- + (size_t) ntohs(msg->hlen))) {
+- dessert_info("extension %x too long", ext->type);
+- return (-3);
+- }
+- if (ext->len < 2) {
+- dessert_info("extension %x too short", ext->type);
+- return (-3);
+- }
+-
+- ext = (dessert_ext_t *) ((uint8_t *) ext + (size_t) ext->len);
+- }
+-
+- /* message is valid */
+- return DESSERT_OK;
+-}
+-
+-/** dump a dessert_msg_t to a string
+- * @arg *msg the message to be dumped
+- * @arg len the length of the buffer
+- * @arg *buf text output buffer
+- * @arg blen text output buffer length
+- **/
+-void dessert_msg_dump(const dessert_msg_t* msg, size_t len, char *buf,
+- size_t blen) {
+- dessert_msg_proc_dump(msg, len, NULL, buf, blen);
+-}
+-
+-/** free a dessert_msg
+- * @arg *msg message to free
+- **/
+-void dessert_msg_destroy(dessert_msg_t* msg) {
+- free(msg);
+-}
+-
+-/** creates a new dessert_msg from an ethernet frame.
+- * @arg *eth ethernet frame to encapsulate
+- * @arg len length of the ethernet frame
+- * @arg **msgout (out) pointer to return message address
+- * @return DESSERT_OK on success, -errno otherwise
+- **/
+-int dessert_msg_ethencap(const struct ether_header* eth, size_t eth_len,
+- dessert_msg_t** msgout) {
+- int res;
+- dessert_ext_t *ext;
+- void *payload;
+-
+- /* check len */
+- if (eth_len > DESSERT_MAXFRAMELEN - DESSERT_MSGLEN + ETHER_HDR_LEN) {
+- dessert_debug("failed to encapsulate ethernet frame of %d bytes (max=%d)",
+- eth_len, DESSERT_MAXFRAMELEN - DESSERT_MSGLEN + ETHER_HDR_LEN);
+- return (-EMSGSIZE);
+- }
+-
+- /* create message */
+- res = dessert_msg_new(msgout);
+- if (res) {
+- return res;
+- }
+-
+- /* add ether header */
+- res = dessert_msg_addext(*msgout, &ext, DESSERT_EXT_ETH, ETHER_HDR_LEN);
+- if (res) {
+- return res;
+- }
+- memcpy(ext->data, eth, ETHER_HDR_LEN);
+-
+- /* copy message */
+- dessert_msg_addpayload(*msgout, &payload, (eth_len - ETHER_HDR_LEN));
+- memcpy(payload, ((uint8_t *) eth) + ETHER_HDR_LEN,
+- (eth_len - ETHER_HDR_LEN));
+-
+- return (DESSERT_OK);
+-}
+-
+-/** extracts an ethernet frame from a dessert_msg
+- * @arg *msg pointer to dessert_msg message to decapsulate
+- * @arg **ethout (out) pointer to return ethernet message
+- * @return eth_len on success, -1 otherwise
+- **/
+-int dessert_msg_ethdecap(const dessert_msg_t* msg, struct ether_header** ethout) {
+- dessert_ext_t *ext;
+- int res;
+-
+- /* create message */
+- size_t eth_len = ntohs(msg->plen) + ETHER_HDR_LEN;
+- *ethout = malloc(eth_len);
+- if (*ethout == NULL) {
+- return (-1);
+- }
+-
+- /* copy header */
+- res = dessert_msg_getext(msg, &ext, DESSERT_EXT_ETH, 0);
+- if (res != 1) {
+- free(ethout);
+- return (-1);
+- }
+- memcpy(*ethout, ext->data, ETHER_HDR_LEN);
+-
+- /* copy message */
+- memcpy(((uint8_t *) (*ethout)) + ETHER_HDR_LEN, (((uint8_t *) msg)
+- +ntohs(msg->hlen)), ntohs(msg->plen));
+-
+- return (eth_len);
+-}
+-
+-/** get the ether_header sent as DESSERT_EXT_ETH in a dessert_msg
+- * @arg *msg the message
+- * @return pointer to ether_header data, NULL if DESSERT_EXT_ETH not present
+- **/
+-struct ether_header* dessert_msg_getl25ether(const dessert_msg_t* msg) {
+- dessert_ext_t *ext;
+- struct ether_header *l25h;
+- int res;
+-
+- res = dessert_msg_getext(msg, &ext, DESSERT_EXT_ETH, 0);
+- if (res != 1) {
+- l25h = NULL;
+- } else {
+- l25h = (struct ether_header *) ext->data;
+- }
+-
+- return l25h;
+-}
+-
+-/** generates a copy of a dessert_msg_proc
+- * @arg **procnew (out) pointer to return message address
+- * @arg *procold pointer to the message to clone
+- * @return DESSERT_OK on success, -errno otherwise
+- **/
+-int dessert_msg_proc_clone(dessert_msg_proc_t **procnew,
+- const dessert_msg_proc_t *procold) {
+- if (procold == NULL) {
+- *procnew = procold;
+- return (DESSERT_OK);
+- }
+-
+- dessert_msg_proc_t *proc;
+-
+- proc = malloc(DESSERT_MSGPROCLEN);
+-
+- if (proc == NULL) {
+- return (-errno);
+- }
+-
+- memcpy(proc, procold, DESSERT_MSGPROCLEN);
+-
+- *procnew = proc;
+- return (DESSERT_OK);
+-
+-}
+-
+-/** dump a dessert_msg_t to a string
+- * @arg *msg the message to be dumped
+- * @arg len the length of the buffer
+- * @arg *proc the processing buffer
+- * @arg *buf text output buffer
+- * @arg blen text output buffer length
+- **/
+-void dessert_msg_proc_dump(const dessert_msg_t* msg, size_t len,
+- const dessert_msg_proc_t *proc, char *buf, size_t blen) {
+- dessert_ext_t *ext;
+- int extidx = 0;
+- int i;
+- struct ether_header *l25h;
+-
+-#define _dessert_msg_check_append(...) snprintf(buf+strlen(buf), blen-strlen(buf), __VA_ARGS__)
+- memset((void *) buf, 0, blen);
+-
+- _dessert_msg_check_append("\tl2_dhost: %02x:%02x:%02x:%02x:%02x:%02x\n",
+- msg->l2h.ether_dhost[0], msg->l2h.ether_dhost[1], msg->l2h.ether_dhost[2],
+- msg->l2h.ether_dhost[3], msg->l2h.ether_dhost[4], msg->l2h.ether_dhost[5]);
+- _dessert_msg_check_append("\tl2_shost: %02x:%02x:%02x:%02x:%02x:%02x\n",
+- msg->l2h.ether_shost[0], msg->l2h.ether_shost[1], msg->l2h.ether_shost[2],
+- msg->l2h.ether_shost[3], msg->l2h.ether_shost[4], msg->l2h.ether_shost[5]);
+- _dessert_msg_check_append("\tl2_type: %x\n\n", ntohs(msg->l2h.ether_type));
+-
+- _dessert_msg_check_append("\tproto: ");
+- strncpy(buf + strlen(buf), msg->proto, DESSERT_PROTO_STRLEN);
+- _dessert_msg_check_append("\n\tver: %d\n", msg->ver);
+-
+- _dessert_msg_check_append("\tflags: ");
+- if (msg->flags & DESSERT_FLAG_SPARSE)
+- _dessert_msg_check_append(" SPARSE");
+-
+- _dessert_msg_check_append("\n\tttl: %x\n", (msg->ttl));
+- _dessert_msg_check_append("\tu8: %x\n", (msg->u8));
+- _dessert_msg_check_append("\tu16: %x\n", ntohs(msg->u16));
+- _dessert_msg_check_append("\thlen: %d\n", ntohs(msg->hlen));
+- _dessert_msg_check_append("\tplen: %d\n\n", ntohs(msg->plen));
+-
+- /* get l2.5 header if possible */
+- if ((l25h = dessert_msg_getl25ether(msg)) != NULL) {
+- _dessert_msg_check_append("\tl25 proto: ethernet\n");
+-
+- _dessert_msg_check_append("\tl25_dhost: %02x:%02x:%02x:%02x:%02x:%02x\n",
+- l25h->ether_dhost[0], l25h->ether_dhost[1], l25h->ether_dhost[2],
+- l25h->ether_dhost[3], l25h->ether_dhost[4], l25h->ether_dhost[5]);
+- _dessert_msg_check_append("\tl25_shost: %02x:%02x:%02x:%02x:%02x:%02x\n",
+- l25h->ether_shost[0], l25h->ether_shost[1], l25h->ether_shost[2],
+- l25h->ether_shost[3], l25h->ether_shost[4], l25h->ether_shost[5]);
+- _dessert_msg_check_append("\tl25_type: %x\n\n", ntohs(l25h->ether_type));
+-
+- }
+-
+- /* we have a trace */
+- if (dessert_msg_trace_dump(msg, buf, blen - strlen(buf)) > 1)
+- _dessert_msg_check_append("\n");
+-
+- /* now other extensions.... */
+- ext = (dessert_ext_t *) ((uint8_t *) msg + DESSERT_MSGLEN);
+- while ((uint8_t *) ext < ((uint8_t *) msg + (size_t) ntohs(msg->hlen))) {
+- _dessert_msg_check_append("\textension %d:\n", extidx);
+-
+- /* does current extension fit into the header? */
+- if ((((uint8_t *) ext + (size_t) ext->len) > ((uint8_t *) msg
+- + (size_t) ntohs(msg->hlen))) || (ext->len < 2)) {
+- _dessert_msg_check_append("\t\tbroken extension - giving up!\n");
+- break;
+- }
+-
+- _dessert_msg_check_append("\t\ttype: 0x%02x\n", ext->type);
+- _dessert_msg_check_append("\t\tlen: %d\n", ext->len);
+-
+- if (ext->type != DESSERT_EXT_ETH && ext->type != DESSERT_EXT_TRACE) {
+- _dessert_msg_check_append("\t\tdata: ");
+- for (i = 0; i < dessert_ext_getdatalen(ext); i++) {
+- _dessert_msg_check_append("0x%x ", ext->data[i]);
+- if (i % 12 == 1 && i != 1)
+- _dessert_msg_check_append("\t\t ");
+- }
+- }
+- _dessert_msg_check_append("\n");
+-
+- ext = (dessert_ext_t *) ((uint8_t *) ext + (size_t) ext->len);
+- extidx++;
+- }
+-
+- if (proc != NULL) {
+- _dessert_msg_check_append("\tlocal processing header:\n");
+- _dessert_msg_check_append("\tlflags: ");
+-
+- if (proc->lflags & DESSERT_LFLAG_SRC_SELF)
+- _dessert_msg_check_append(" DESSERT_FLAG_SRC_SELF");
+- if (proc->lflags & DESSERT_LFLAG_DST_SELF)
+- _dessert_msg_check_append(" DESSERT_FLAG_DST_MULTICAST");
+- if (proc->lflags & DESSERT_LFLAG_DST_MULTICAST)
+- _dessert_msg_check_append(" DESSERT_FLAG_DST_SELF");
+- if (proc->lflags & DESSERT_LFLAG_DST_BROADCAST)
+- _dessert_msg_check_append(" DESSERT_FLAG_DST_BROADCAST");
+- if (proc->lflags & DESSERT_LFLAG_PREVHOP_SELF)
+- _dessert_msg_check_append(" DESSERT_FLAG_PREVHOP_SELF");
+- if (proc->lflags & DESSERT_LFLAG_NEXTHOP_SELF)
+- _dessert_msg_check_append(" NEXTHOP_SELF");
+- if (proc->lflags & DESSERT_LFLAG_NEXTHOP_BROADCAST)
+- _dessert_msg_check_append(" NEXTHOP_BROADCAST");
+- }
+-
+-}
+-
+-/** free a dessert_prc_msg
+- * @arg *proc processing buffer to free
+- **/
+-void dessert_msg_proc_destroy(dessert_msg_proc_t* proc) {
+- free(proc);
+-}
+-
+-/** add or replace payload to a dessert_msg
+- * @arg *msg the message the payload should be added to
+- * @arg **payload (out) the pointer to place the payload
+- * @arg len the length of the payload
+- * @return DESSERT_OK on success, DESSERT_ERR otherwise
+- **/
+-int dessert_msg_addpayload(dessert_msg_t* msg, void** payload, int len) {
+- /* check payload */
+- if (len > DESSERT_MAXFRAMELEN - ntohs(msg->hlen)) {
+- return DESSERT_ERR; /* too big */
+- }
+-
+- /* export payload pointer */
+- *payload = ((uint8_t *) msg + ntohs(msg->hlen));
+- msg->plen = htons(len);
+-
+- return DESSERT_OK;
+-}
+-
+-/** Retrieves a pointer to the payload of a dessert message @a msg.
+- *
+- * @param[in] *msg the message the payload should be retrieved from
+- * @param[out] **payload the pointer to place the payload in
+- *
+- * @return the length of the payload in bytes if any, 0 otherwise
+- */
+-int dessert_msg_getpayload(dessert_msg_t *msg, void** payload) {
+-
+- /* test if payload is present in msg */
+- if (msg->plen == 0) {
+- *payload = NULL;
+- return 0;
+- }
+-
+- *payload = (uint8_t *) msg + ntohs(msg->hlen);
+-
+- return msg->plen;
+-}
+-
+-
+-/** add an extension record to a dessert_msg
+- * @arg *msg the message the extension should be added to
+- * @arg **ext (out) the extension pointer to the reserved extension space
+- * @arg type the type of the extension
+- * @arg len the length of the ext data (without 2 byte extension header)
+- * @return DESSERT_OK on success,
+- **/
+-int dessert_msg_addext(dessert_msg_t *msg, dessert_ext_t **ext, uint8_t type,
+- size_t len) {
+-
+- /* check if sparse message */
+- if ((msg->flags & DESSERT_FLAG_SPARSE) > 0) {
+- dessert_debug("tried to add extension to a sparse message - use dessert_msg_clone() first!");
+- return -1;
+- }
+-
+- /* add DESSERT_EXTLEN to len for convenience*/
+- len += DESSERT_EXTLEN;
+-
+- /* check ext */
+- if (len > DESSERT_MAXFRAMELEN - ntohs(msg->hlen) - ntohs(msg->plen)) {
+- dessert_debug("message would be too large after adding extension!");
+- return -2; /* too big */
+- } else if (len < DESSERT_EXTLEN) {
+- dessert_debug("extension too small!");
+- return -3; /* too small */
+- } else if (len > 255) {
+- dessert_debug("extension too big!");
+- return -2; /* too big */
+- }
+-
+- /* move payload if necessary */
+- if (ntohs(msg->plen) > 0) {
+- memmove(((uint8_t *) msg + ntohs(msg->hlen) + len), ((uint8_t *) msg
+- + ntohs(msg->hlen)), ntohs(msg->plen));
+- }
+-
+- /* get ext addr */
+- *ext = (dessert_ext_t *) ((uint8_t *) msg + ntohs(msg->hlen));
+-
+- /* update msg hlen */
+- msg->hlen = htons(ntohs(msg->hlen) + len);
+-
+- /* copy in extension data */
+- (*ext)->len = len;
+- (*ext)->type = type;
+-
+- return DESSERT_OK;
+-}
+-
+-/** remove an extension record from a dessert_msg
+- * @arg *msg the message the extension should be added to
+- * @arg *ext (out) the extension pointer to the extension to be removed
+- * @return DESSERT_OK on success,
+- **/
+-int dessert_msg_delext(dessert_msg_t *msg, dessert_ext_t *ext) {
+-
+- /* check ext */
+- if ((((uint8_t *) ext) < ((uint8_t *) msg)) || (((uint8_t *) ext)
+- > (((uint8_t *) msg) + ntohs(msg->hlen)))) {
+- dessert_debug("extension not within packet header - won't remove");
+- return DESSERT_ERR;
+- }
+-
+- msg->hlen = htons(ntohs(msg->hlen) - ext->len);
+-
+- memmove(ext, ((uint8_t *) ext) + ext->len, (ntohs(msg->hlen)
+- + ntohs(msg->plen)) - (((uint8_t *) ext) - ((uint8_t *) msg)));
+-
+- return DESSERT_OK;
+-}
+-
+-/** Resizes a given extension record @a ext within in a @b dessert @b message
+- * @a msg to the new length @a new_len.
+- *
+- * @param[in] *msg the message
+- * @param[in] *ext the extension record
+- * @param[in] new_len the new length of the extension record
+- *
+- * @retval DESSERT_OK on success
+- *
+- * %DESCRIPTION:
+- *
+- **/
+-int dessert_msg_resizeext(dessert_msg_t *msg, dessert_ext_t *ext, size_t new_len) {
+-
+- int old_len = ext->len;
+-
+- /* check ext */
+- if (new_len > DESSERT_MAXFRAMELEN - ntohs(msg->hlen) - ntohs(msg->plen) - old_len) {
+- dessert_debug("message would be too large after adding extension!");
+- return -2; /* too big */
+- } else if (new_len < DESSERT_EXTLEN) {
+- dessert_debug("extension too small!");
+- return -3; /* too small */
+- } else if (new_len > 255) {
+- dessert_debug("extension too big!");
+- return -2; /* too big */
+- }
+-
+- memmove(((uint8_t *)ext) + new_len,((uint8_t *)ext) + ext->len, ntohs(msg->hlen)
+- + ntohs(msg->plen) - (((uint8_t *) ext) - ((uint8_t *) msg)) - ext->len);
+-
+- msg->hlen = htons(ntohs(msg->hlen) - (ext->len - new_len));
+- ext->len = new_len;
+-
+- return DESSERT_OK;
+-}
+-
+-/** get an specific or all extensions
+- *
+- * @arg *msg the message
+- * @arg **ext (out) pointer to extracted extension
+- * sets *ext=NULL if extension not found
+- * may be NULL in this case only count/existence matters
+- * @arg type type of the ext to retrieve - use DESSERT_EXT_ANY to get any ext
+- * @arg index the index of the extension of that type, starting with 0
+- * @return 0 if the message has no such extension,
+- * @return count of extensions of that type if count > index
+- * @return -count of extensions of that type if count <= index
+- **/
+-int dessert_msg_getext(const dessert_msg_t* msg, dessert_ext_t** ext,
+- uint8_t type, int index) {
+- int i = 0;
+- dessert_ext_t *exti;
+-
+- if (ext != NULL)
+- *ext = NULL;
+-
+- exti = (dessert_ext_t *) ((uint8_t *) msg + DESSERT_MSGLEN);
+- while ((uint8_t *) exti < ((uint8_t *) msg + (size_t) ntohs(msg->hlen))) {
+- /* does current extension fit into the header? */
+- if (type == exti->type || type == DESSERT_EXT_ANY) {
+- if (i == index && ext != NULL) {
+- *ext = exti;
+- }
+- i++;
+- }
+- exti = (dessert_ext_t *) (((uint8_t *) exti) + (size_t) exti->len);
+- }
+-
+- if (i <= index) {
+- i = -i;
+- }
+- return (i);
+-
+-}
+-
+-/** get an specific or all extensions
+- *
+- * @arg *msg the message
+- * @arg type type of the ext to retrieve - use DESSERT_EXT_ANY to get any ext
+- * @return 0 if the message has no such extension,
+- * @return count of extensions of that type
+- **/
+-int dessert_msg_get_ext_count(const dessert_msg_t* msg, uint8_t type) {
+- return dessert_msg_getext(msg, NULL, type, 0);
+-}
+-
+-/** add initial trace header to dessert message
+- * @arg *msg dessert_msg_t message used for tracing
+- * @arg mode trace mode
+- * use DESSERT_MSG_TRACE_HOST to only record default mac of hosts on the way
+- * use DESSERT_MSG_TRACE_IFACE to also trace input interface and last hop
+- * ®return DESSERT_OK on success
+- **/
+-int dessert_msg_trace_initiate(dessert_msg_t* msg, int mode) {
+-
+- dessert_ext_t *ext;
+- struct ether_header *l25h;
+-
+- if (mode != DESSERT_MSG_TRACE_HOST && mode != DESSERT_MSG_TRACE_IFACE)
+- return EINVAL;
+-
+- if (msg->flags & DESSERT_FLAG_SPARSE)
+- return DESSERT_MSG_NEEDNOSPARSE;
+-
+- dessert_msg_addext(msg, &ext, DESSERT_EXT_TRACE, mode);
+- memcpy((ext->data), dessert_l25_defsrc, ETHER_ADDR_LEN);
+- if (mode == DESSERT_MSG_TRACE_IFACE) {
+- memcpy((ext->data) + ETHER_ADDR_LEN, msg->l2h.ether_shost,
+- ETHER_ADDR_LEN);
+- l25h = dessert_msg_getl25ether(msg);
+- if (l25h == NULL) {
+- memcpy((ext->data) + ETHER_ADDR_LEN, ether_null, ETHER_ADDR_LEN);
+- } else {
+- memcpy((ext->data) + ETHER_ADDR_LEN * 2, l25h->ether_shost,
+- ETHER_ADDR_LEN);
+- }
+- }
+-
+- return DESSERT_OK;
+-
+-}
+-
+-/** dump packet trace to string
+- * @arg *msg dessert_msg_t message used for tracing
+- * @arg *buf char buffer to place string
+- * use DESSERT_MSG_TRACE_HOST to only record default mac of hosts on the way
+- * use DESSERT_MSG_TRACE_IFACE to also trace input interface and last hop
+- * ®return length of the string - 0 if msg has no trace header
+- **/
+-int dessert_msg_trace_dump(const dessert_msg_t* msg, char* buf, int blen) {
+-
+- dessert_ext_t *ext;
+- int x, i = 0;
+-
+-#define _dessert_msg_trace_dump_append(...) snprintf(buf+strlen(buf), blen-strlen(buf), __VA_ARGS__)
+-
+- x = dessert_msg_getext(msg, &ext, DESSERT_EXT_TRACE, 0);
+- if (x < 1)
+- return 0;
+-
+- _dessert_msg_trace_dump_append("\tpacket trace:\n");
+- _dessert_msg_trace_dump_append("\t\tfrom %02x:%02x:%02x:%02x:%02x:%02x\n",
+- ext->data[0], ext->data[1], ext->data[2],
+- ext->data[3], ext->data[4], ext->data[5]);
+-
+- if (dessert_ext_getdatalen(ext) == DESSERT_MSG_TRACE_IFACE) {
+- _dessert_msg_trace_dump_append("\t\t received on %02x:%02x:%02x:%02x:%02x:%02x\n",
+- ext->data[6], ext->data[7], ext->data[8],
+- ext->data[9], ext->data[10], ext->data[11]);
+- _dessert_msg_trace_dump_append("\t\t l2.5 src %02x:%02x:%02x:%02x:%02x:%02x\n",
+- ext->data[12], ext->data[13], ext->data[14],
+- ext->data[15], ext->data[16], ext->data[17]);
+- }
+-
+- for (i = 1; i < x; i++) {
+- dessert_msg_getext(msg, &ext, DESSERT_EXT_TRACE, i);
+- _dessert_msg_trace_dump_append("\t\t#%3d %02x:%02x:%02x:%02x:%02x:%02x\n", i,
+- ext->data[0], ext->data[1], ext->data[2],
+- ext->data[3], ext->data[4], ext->data[5]);
+-
+- if (dessert_ext_getdatalen(ext) == DESSERT_MSG_TRACE_IFACE) {
+- _dessert_msg_trace_dump_append("\t\t received from %02x:%02x:%02x:%02x:%02x:%02x\n",
+- ext->data[12], ext->data[13], ext->data[14],
+- ext->data[15], ext->data[16], ext->data[17]);
+- _dessert_msg_trace_dump_append("\t\t receiving iface %02x:%02x:%02x:%02x:%02x:%02x\n",
+- ext->data[6], ext->data[7], ext->data[8],
+- ext->data[9], ext->data[10], ext->data[11]);
+- }
+- }
+-
+- return strlen(buf);
+-
+-}
+-
+-/** callback that checks whether a dessert_msg is consistent
+- * @arg *msg dessert_msg_t frame received
+- * @arg len length of ethernet frame received
+- * @arg *iface interface received packet on
+- * @return DESSERT_MSG_KEEP if message is valid, DESSERT_MSG_DROP otherwise
+- **/
+-int dessert_msg_check_cb(dessert_msg_t* msg, size_t len,
+- dessert_msg_proc_t *proc, const dessert_meshif_t *iface,
+- dessert_frameid_t id) {
+- if (dessert_msg_check(msg, len)) {
+- dessert_debug("invalid package - discarding");
+- return DESSERT_MSG_DROP;
+- }
+- return DESSERT_MSG_KEEP;
+-}
+-
+-/** dump a dessert_msg_t to debug log
+- * @arg *msg dessert_msg_t frame received
+- * @arg len length of ethernet frame received
+- * @arg *iface interface received packet on
+- * ®return DESSERT_MSG_KEEP always
+- **/
+-int dessert_msg_dump_cb(dessert_msg_t* msg, size_t len,
+- dessert_msg_proc_t *proc, const dessert_meshif_t *iface,
+- dessert_frameid_t id) {
+- char buf[1024];
+-
+- dessert_msg_proc_dump(msg, len, proc, buf, 1024);
+- dessert_debug("received frame #%lu on interface %s - dump:\n%s", (unsigned long) id, iface->if_name, buf);
+-
+- return DESSERT_MSG_KEEP;
+-}
+-
+-/** check if the message carries a trace extension and add the current trace info
+- * if iface is NULL, the packet is ignored
+- * @arg *msg dessert_msg_t frame received
+- * @arg len length of ethernet frame received
+- * @arg *iface interface received packet on
+- * ®return DESSERT_MSG_KEEP always
+- **/
+-int dessert_msg_trace_cb(dessert_msg_t* msg, size_t len,
+- dessert_msg_proc_t *proc, const dessert_meshif_t *iface,
+- dessert_frameid_t id) {
+- dessert_ext_t *ext;
+-
+- /* abort if message has no trace extension */
+- if (dessert_msg_getext(msg, &ext, DESSERT_EXT_TRACE, 0) == 0)
+- return DESSERT_MSG_KEEP;
+-
+- /* abort if iface is NULL */
+- if (iface == NULL)
+- return DESSERT_MSG_KEEP;
+-
+- /* we cannot add header to sparse messages */
+- if (msg->flags & DESSERT_FLAG_SPARSE)
+- return DESSERT_MSG_NEEDNOSPARSE;
+-
+- /* get the trace mode (hop vs interface) */
+- if (dessert_ext_getdatalen(ext) == DESSERT_MSG_TRACE_HOST) {
+- dessert_msg_addext(msg, &ext, DESSERT_EXT_TRACE, DESSERT_MSG_TRACE_HOST);
+- memcpy((ext->data), dessert_l25_defsrc, ETHER_ADDR_LEN);
+- } else if (dessert_ext_getdatalen(ext) == DESSERT_MSG_TRACE_IFACE) {
+- dessert_msg_addext(msg, &ext, DESSERT_EXT_TRACE,
+- DESSERT_MSG_TRACE_IFACE);
+- memcpy((ext->data), dessert_l25_defsrc, ETHER_ADDR_LEN);
+- memcpy((ext->data) + ETHER_ADDR_LEN, iface->hwaddr, ETHER_ADDR_LEN);
+- memcpy((ext->data) + ETHER_ADDR_LEN * 2, msg->l2h.ether_shost,
+- ETHER_ADDR_LEN);
+- } else {
+- dessert_warn("got packet with %d bytes trace extension - ignoring");
+- }
+- return DESSERT_MSG_KEEP;
+-}
+-
+-/** callback to set the local processing flags in dessert_msg_proc_t on an arriving dessert_msg_t
+- * @arg *msg dessert_msg_t frame received
+- * @arg len length of ethernet frame received
+- * @arg *iface interface received packet on
+- * ®return DESSERT_MSG_KEEP or DESSERT_MSG_NEEDMSGPROC
+- **/
+-int dessert_msg_ifaceflags_cb(dessert_msg_t* msg, size_t len,
+- dessert_msg_proc_t *proc, const dessert_meshif_t *riface,
+- dessert_frameid_t id) {
+-
+- dessert_meshif_t *iface;
+- struct ether_header *l25h;
+-
+- /* check if we have an processing header */
+- if (proc == NULL)
+- return DESSERT_MSG_NEEDMSGPROC;
+-
+- /* get l2.5 header if possible */
+- l25h = dessert_msg_getl25ether(msg);
+-
+- /* clear flags */
+- proc->lflags &= ~(DESSERT_LFLAG_DST_SELF | DESSERT_LFLAG_SRC_SELF
+- | DESSERT_LFLAG_NEXTHOP_SELF | DESSERT_LFLAG_PREVHOP_SELF
+- | DESSERT_LFLAG_NEXTHOP_BROADCAST
+- | DESSERT_LFLAG_DST_SELF_OVERHEARD
+- | DESSERT_LFLAG_NEXTHOP_SELF_OVERHEARD);
+-
+- /* checks against defaults */
+- if (l25h != NULL && memcmp(l25h->ether_dhost, ether_broadcast,
+- ETHER_ADDR_LEN) == 0) {
+- proc->lflags |= DESSERT_LFLAG_DST_BROADCAST;
+- } else if (l25h != NULL && l25h->ether_dhost[0] & 0x01) { /* broadcast also has this bit set */
+- proc->lflags |= DESSERT_LFLAG_DST_MULTICAST;
+- }
+-
+- if (l25h != NULL && memcmp(l25h->ether_dhost, dessert_l25_defsrc,
+- ETHER_ADDR_LEN) == 0) {
+- proc->lflags |= DESSERT_LFLAG_DST_SELF;
+- }
+- if (l25h != NULL && memcmp(l25h->ether_shost, dessert_l25_defsrc,
+- ETHER_ADDR_LEN) == 0) {
+- proc->lflags |= DESSERT_LFLAG_SRC_SELF;
+- }
+- if (memcmp(msg->l2h.ether_dhost, dessert_l25_defsrc, ETHER_ADDR_LEN) == 0) {
+- proc->lflags |= DESSERT_LFLAG_NEXTHOP_SELF;
+- }
+- if (memcmp(msg->l2h.ether_shost, dessert_l25_defsrc, ETHER_ADDR_LEN) == 0) {
+- proc->lflags |= DESSERT_LFLAG_PREVHOP_SELF;
+- }
+- if (memcmp(msg->l2h.ether_dhost, ether_broadcast, ETHER_ADDR_LEN) == 0) {
+- proc->lflags |= DESSERT_LFLAG_NEXTHOP_BROADCAST;
+- }
+-
+- /* checks against interfaces in list */
+- pthread_rwlock_rdlock(&dessert_cfglock);
+- DL_FOREACH(dessert_meshiflist_get(), iface) {
+- if (l25h != NULL && memcmp(l25h->ether_dhost, iface->hwaddr,
+- ETHER_ADDR_LEN) == 0) {
+- proc->lflags |= DESSERT_LFLAG_DST_SELF;
+- if (memcmp(l25h->ether_dhost, riface->hwaddr, ETHER_ADDR_LEN) != 0) {
+- proc->lflags |= DESSERT_LFLAG_DST_SELF_OVERHEARD;
+- }
+- }
+- if (l25h != NULL && memcmp(l25h->ether_shost, iface->hwaddr,
+- ETHER_ADDR_LEN) == 0) {
+- proc->lflags |= DESSERT_LFLAG_SRC_SELF;
+- }
+- if (memcmp(msg->l2h.ether_dhost, iface->hwaddr, ETHER_ADDR_LEN) == 0) {
+- proc->lflags |= DESSERT_LFLAG_NEXTHOP_SELF;
+- if (memcmp(msg->l2h.ether_dhost, riface->hwaddr, ETHER_ADDR_LEN)
+- != 0) {
+- proc->lflags |= DESSERT_LFLAG_NEXTHOP_SELF_OVERHEARD;
+- }
+- }
+- if (memcmp(msg->l2h.ether_shost, iface->hwaddr, ETHER_ADDR_LEN) == 0) {
+- proc->lflags |= DESSERT_LFLAG_PREVHOP_SELF;
+- }
+- }
+- pthread_rwlock_unlock(&dessert_cfglock);
+-
+- return DESSERT_MSG_KEEP;
+-}
+-
+-/******************************************************************************
+- *
+- * INTERNAL / PRIVATE
+- *
+- * M E S S A G E H A N D L I N G
+- *
+- ******************************************************************************/
+-
+-/* nothing here - yet */
+-
+-/******************************************************************************
+- *
+- * LOCAL
+- *
+- * M E S S A G E H A N D L I N G
+- *
+- ******************************************************************************/
+-
+-/* nothing here - yet */
+Index: libdessert0.86-0.86.14/dessert_periodic.c
+===================================================================
+--- libdessert0.86-0.86.14.orig/dessert_periodic.c 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,326 +0,0 @@
+-/******************************************************************************
+- Copyright 2009, The DES-SERT Team, Freie Universitaet Berlin (FUB).
+- All rights reserved.
+-
+- These sources were originally developed by Philipp Schmidt
+- at Freie Universitaet Berlin (http://www.fu-berlin.de/),
+- Computer Systems and Telematics / Distributed, Embedded Systems (DES) group
+- (http://cst.mi.fu-berlin.de/, http://www.des-testbed.net/)
+- ------------------------------------------------------------------------------
+- This program is free software: you can redistribute it and/or modify it under
+- the terms of the GNU General Public License as published by the Free Software
+- Foundation, either version 3 of the License, or (at your option) any later
+- version.
+-
+- This program is distributed in the hope that it will be useful, but WITHOUT
+- ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+- FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+-
+- You should have received a copy of the GNU General Public License along with
+- this program. If not, see http://www.gnu.org/licenses/ .
+- ------------------------------------------------------------------------------
+- For further information and questions please use the web site
+- http://www.des-testbed.net/
+- *******************************************************************************/
+-
+-#include "dessert_internal.h"
+-#include "dessert.h"
+-
+-/* global data storage // P U B L I C */
+-
+-/* global data storage // P R I V A T E */
+-dessert_periodic_t *_tasklist = NULL;
+-pthread_mutex_t _dessert_periodic_mutex = PTHREAD_MUTEX_INITIALIZER;
+-pthread_cond_t _dessert_periodic_changed = PTHREAD_COND_INITIALIZER;
+-pthread_t _dessert_periodic_worker;
+-int _dessert_periodic_worker_running = 0;
+-
+-/* local data storage*/
+-
+-/* local functions forward declarations*/
+-static int _dessert_periodic_add_periodic_t(dessert_periodic_t *task);
+-static void *_dessert_periodic_thread(void* arg);
+-
+-/******************************************************************************
+- *
+- * EXTERNAL / PUBLIC
+- *
+- * P E R I O D I C T A S K S
+- *
+- ******************************************************************************/
+-
+-/** Adds a delayed/periodic task to the task list
+- *
+- * @param[in] c callback to call when task is scheduled
+- * @param[in] data data to give to the callback
+- * @param[in] scheduled when should the callback be called the first time
+- * @param[in] interval how often should it be called (set to NULL if only once)
+- *
+- * @retval pointer if the callback was added successfully
+- * @retval NULL otherwise
+- *
+- * @note The <a href="http://www.gnu.org/s/libc/manual/html_node/Elapsed-Time.html#Elapsed-Time">GNU C Library Documentation</a>
+- * states about the @c tv_usec member of the @c struct @c timeval: <em>This is the
+- * rest of the elapsed time (a fraction of a second), represented as the number
+- * of microseconds. It is always less than one @a million.</em> So, to make sure
+- * this invariant is always met, consider using the provided TIMEVAL_ADD() macro.
+- *
+- * @par Description:
+- *
+- * @par Examples:
+- * @li Register a callback function to be executed every 1.5 seconds - and
+- * delay the first call to it for another 1.5 seconds:
+- * @code
+- * struct timeval interval;
+- * interval.tv_sec = 1;
+- * interval.tv_usec = 500000;
+- *
+- * struct timeval schedule;
+- * gettimeofday(&schedule, NULL);
+- * TIMEVAL_ADD(&schedule, 1, 500000);
+- *
+- * dessert_periodic_add(callback, NULL, &schedule, &interval);
+- * @endcode
+- *
+- *
+- */
+-dessert_periodic_t *dessert_periodic_add(dessert_periodiccallback_t* c,
+- void *data, const struct timeval *scheduled,
+- const struct timeval *interval) {
+- struct timeval now;
+- dessert_periodic_t *task;
+-
+- if (scheduled == NULL) {
+- gettimeofday(&now, NULL);
+- scheduled = &now;
+- }
+- assert(scheduled != NULL);
+-
+- /* sanity checks */
+- if (c == NULL) {
+- return (NULL);
+- }
+-
+- /* get task memory */
+- task = malloc(sizeof(dessert_periodic_t));
+- if (task == NULL) {
+- return NULL;
+- }
+-
+- /* copy data */
+- task->c = c;
+- task->data = data;
+- memcpy(&(task->scheduled), scheduled, sizeof(struct timeval));
+- if (interval == NULL) {
+- task->interval.tv_sec = 0;
+- task->interval.tv_usec = 0;
+- } else {
+- memcpy(&(task->interval), interval, sizeof(struct timeval));
+- }
+- task->next = NULL;
+-
+- pthread_mutex_lock(&_dessert_periodic_mutex);
+- _dessert_periodic_add_periodic_t(task);
+- pthread_mutex_unlock(&_dessert_periodic_mutex);
+-
+- return (task);
+-}
+-
+-/** Adds a delayed task to the task list
+- *
+- * This is an easier version of dessert_periodic_add() taking a single delay as parameter.
+- *
+- * @param[in] c callback to call when task is scheduled
+- * @param[in] data data to give to the callback
+- * @param[in] delay the delay in seconds
+- *
+- * %DESCRIPTION: \n
+- */
+-dessert_periodic_t *dessert_periodic_add_delayed(dessert_periodiccallback_t* c,
+- void *data, int delay) {
+- struct timeval at;
+- gettimeofday(&at, NULL);
+-
+- at.tv_sec += delay;
+-
+- return (dessert_periodic_add(c, data, &at, NULL));
+-}
+-
+-/** Removes a delayed/periodic task from the task list.
+- *
+- * @param[in] p pointer to task description
+- *
+- * @return -1 on failure, 0 if the task was removed
+- *
+- * %DESCRIPTION: \n
+- */
+-int dessert_periodic_del(dessert_periodic_t *p) {
+- dessert_periodic_t *i;
+- int x = -1;
+-
+- assert(p != NULL);
+-
+- pthread_mutex_lock(&_dessert_periodic_mutex);
+-
+- if (p == _tasklist) {
+- _tasklist = _tasklist->next;
+- x++;
+- }
+-
+- i = _tasklist;
+- while (i != NULL) {
+- if (i->next == p) {
+- i->next = p->next;
+- x++;
+- }
+- i = i->next;
+- }
+-
+- pthread_mutex_unlock(&_dessert_periodic_mutex);
+-
+- assert(x < 2);
+-
+- free(p);
+- return (x);
+-
+-}
+-
+-/******************************************************************************
+- *
+- * INTERNAL / PRIVATE
+- *
+- * P E R I O D I C T A S K S
+- *
+- ******************************************************************************/
+-
+-/** internal function to start periodic worker */
+-void _dessert_periodic_init() {
+- if (_dessert_periodic_worker_running == 0) {
+- _dessert_periodic_worker_running = 1;
+- pthread_create(&_dessert_periodic_worker, NULL,
+- _dessert_periodic_thread, NULL);
+- }
+-}
+-
+-/******************************************************************************
+- *
+- * LOCAL / PRIVATE
+- *
+- * P E R I O D I C T A S K S
+- *
+- ******************************************************************************/
+-
+-/* internal task list modifier - only call while holding _dessert_periodic_mutex */
+-static int _dessert_periodic_add_periodic_t(dessert_periodic_t *task) {
+-
+- dessert_periodic_t *i;
+-
+- /* first task? */
+- if (_tasklist == task) {
+- dessert_err("infinite loop in periodic tasklist requested - aborting!");
+- return (-1);
+- } else if (_tasklist == NULL) {
+- _tasklist = task;
+- pthread_cond_broadcast(&_dessert_periodic_changed);
+- }
+- /* is next task.... */
+- else if (task->scheduled.tv_sec < _tasklist->scheduled.tv_sec
+- || (task->scheduled.tv_sec == _tasklist->scheduled.tv_sec
+- && task->scheduled.tv_usec < _tasklist->scheduled.tv_usec)) {
+- task->next = _tasklist;
+- _tasklist = task;
+- pthread_cond_broadcast(&_dessert_periodic_changed);
+- }
+- /* search right place */
+- else {
+- i = _tasklist;
+- while (i->next != NULL && (i->next->scheduled.tv_sec
+- < task->scheduled.tv_sec || (i->next->scheduled.tv_sec
+- == task->scheduled.tv_sec && i->next->scheduled.tv_usec
+- <= task->scheduled.tv_usec))) {
+- i = i->next;
+- if (i->next == task) {
+- dessert_err("infinite loop in periodic tasklist requested - aborting!");
+- return (-1);
+- }
+- }
+- /* last or right place */
+- task->next = i->next;
+- i->next = task;
+- /* no need to tell periodic thread to check
+- again - next task has not changed */
+- }
+-
+- return (0);
+-
+-}
+-
+-/* internal worker for the task list */
+-static void *_dessert_periodic_thread(void* arg) {
+- dessert_periodic_t *next_task;
+- dessert_periodic_t task;
+- struct timeval now;
+- struct timespec ts;
+-
+- pthread_mutex_lock(&_dessert_periodic_mutex);
+-
+- while (1) {
+-
+- gettimeofday(&now, NULL);
+-
+- if (_tasklist == NULL) {
+- if (pthread_cond_wait(&_dessert_periodic_changed,
+- &_dessert_periodic_mutex) == EINVAL) {
+- dessert_err("sleeping failed in periodic scheduler - scheduler died");
+- break;
+- }
+- continue;
+- } else if (now.tv_sec < _tasklist->scheduled.tv_sec || (now.tv_sec
+- == _tasklist->scheduled.tv_sec && now.tv_usec
+- < _tasklist->scheduled.tv_usec)) {
+- ts.tv_sec = _tasklist->scheduled.tv_sec;
+- ts.tv_nsec = _tasklist->scheduled.tv_usec * 1000;
+- if (pthread_cond_timedwait(&_dessert_periodic_changed,
+- &_dessert_periodic_mutex, &ts) == EINVAL) {
+- dessert_err("sleeping failed in periodic scheduler - scheduler died");
+- break;
+- }
+- continue;
+- }
+-
+- /* run next task */
+- next_task = _tasklist;
+- _tasklist = next_task->next;
+-
+- /* safe task to local variable */
+- memcpy(&task, next_task, sizeof(dessert_periodic_t));
+-
+- /* periodic task - re-add */
+- if (next_task->interval.tv_sec != 0 || next_task->interval.tv_usec != 0) {
+- next_task->scheduled.tv_sec += next_task->interval.tv_sec;
+- next_task->scheduled.tv_usec += next_task->interval.tv_usec;
+- if (next_task->scheduled.tv_usec >= 1000000) {
+- next_task->scheduled.tv_sec += 1;
+- next_task->scheduled.tv_usec -= 1000000;
+- }
+- _dessert_periodic_add_periodic_t(next_task);
+- }
+- /* otherwise free memory */
+- else {
+- free(next_task);
+- }
+-
+- /* run the callback */
+- pthread_mutex_unlock(&_dessert_periodic_mutex);
+- /* call the callback - remove it from list if exits with nonzero code */
+- if (task.c(task.data, &(task.scheduled), &(task.interval))) {
+- dessert_periodic_del(next_task);
+- }
+- pthread_mutex_lock(&_dessert_periodic_mutex);
+- }
+-
+- pthread_mutex_unlock(&_dessert_periodic_mutex);
+- _dessert_periodic_worker_running = 0;
+-
+- return (NULL);
+-}
+Index: libdessert0.86-0.86.14/dessert_sysiface.c
+===================================================================
+--- libdessert0.86-0.86.14.orig/dessert_sysiface.c 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,487 +0,0 @@
+-/******************************************************************************
+- Copyright 2009, The DES-SERT Team, Freie Universitaet Berlin (FUB).
+- All rights reserved.
+-
+- These sources were originally developed by Philipp Schmidt
+- at Freie Universitaet Berlin (http://www.fu-berlin.de/),
+- Computer Systems and Telematics / Distributed, Embedded Systems (DES) group
+- (http://cst.mi.fu-berlin.de/, http://www.des-testbed.net/)
+- ------------------------------------------------------------------------------
+- This program is free software: you can redistribute it and/or modify it under
+- the terms of the GNU General Public License as published by the Free Software
+- Foundation, either version 3 of the License, or (at your option) any later
+- version.
+-
+- This program is distributed in the hope that it will be useful, but WITHOUT
+- ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
+- FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
+-
+- You should have received a copy of the GNU General Public License along with
+- this program. If not, see http://www.gnu.org/licenses/ .
+- ------------------------------------------------------------------------------
+- For further information and questions please use the web site
+- http://www.des-testbed.net/
+- *******************************************************************************/
+-
+-#include "dessert_internal.h"
+-#include "dessert.h"
+-
+-#ifdef TARGET_DARWIN
+-#define TUNSIFHEAD _IOW('t', 96, int)
+-#define TUNGIFHEAD _IOR('t', 97, int)
+-#endif
+-
+-#ifdef TARGET_FREEBSD
+-#include <net/if_tun.h>
+-#endif
+-
+-#ifdef TARGET_LINUX
+-#include <linux/if_tun.h>
+-#endif
+-
+-uint8_t dessert_sysif_hwaddr[ETHER_ADDR_LEN]; // TODO unused! to be removed ??!?
+-
+-/* global data storage // P U B L I C */
+-/* nothing here - yet */
+-
+-/* global data storage // P R I V A T E */
+-dessert_sysif_t *_dessert_sysif = NULL;
+-
+-/* local data storage*/
+-dessert_sysrxcbe_t *_dessert_sysrxcblist = NULL;
+-int _dessert_sysrxcblistver = 0;
+-
+-/* internal functions forward declarations*/
+-static void *_dessert_sysif_init_thread(void* arg);
+-static int _dessert_sysif_init_getmachack(dessert_msg_t *msg, size_t len,
+- dessert_msg_proc_t *proc, dessert_sysif_t *sysif, dessert_frameid_t id);
+-
+-/******************************************************************************
+- *
+- * EXTERNAL / PUBLIC
+- *
+- * S Y S - I N T E R F A C E S
+- *
+- ******************************************************************************/
+-
+-/** Initializes the tun/tap Interface dev for des-sert.
+- * @arg *device interface name
+- * @arg flags @see DESSERT_TUN @see DESSERT_TAP @see DESSERT_MAKE_DEFSRC
+- * @return 0 -- on success
+- * @return EINVAL -- if message is broken
+- * @return EFAULT -- if interface not specified and not guessed
+- **/
+-int dessert_sysif_init(char* device, uint8_t flags) {
+-
+- char *buf;
+-
+-#ifdef TARGET_LINUX
+- struct ifreq ifr;
+-#endif
+-
+- /* initialize _dessert_sysif */
+- _dessert_sysif = malloc(sizeof(dessert_sysif_t));
+- if (_dessert_sysif == NULL)
+- return (-errno);
+- memset((void *) _dessert_sysif, 0, sizeof(dessert_sysif_t));
+- _dessert_sysif->flags = flags;
+- strncpy(_dessert_sysif->if_name, device, IF_NAMESIZE);
+- _dessert_sysif->if_name[IF_NAMESIZE - 1] = '\0';
+- pthread_mutex_init(&(_dessert_sysif->cnt_mutex), NULL);
+-
+-#ifdef TARGET_BSD
+-
+- /* open device */
+- buf = malloc(IF_NAMESIZE+6);
+- snprintf(buf, IF_NAMESIZE+6, "/dev/%s", device);
+- _dessert_sysif->fd = open(buf, O_RDWR);
+- if(_dessert_sysif->fd < 0) {
+- dessert_err("could not open interface %s using %s: %s", device, buf, strerror(errno));
+- free(buf);
+- return (-errno);
+- }
+- free(buf);
+-
+- /* set header mode on for mode tun */
+- if(flags & DESSERT_TUN) {
+- const int one = 1;
+- if(ioctl(_dessert_sysif->fd, TUNSIFHEAD, &one, sizeof one) == -1) {
+- dessert_err("setting TUNSIFHEAD failed: %s",strerror(errno));
+- goto dessert_sysif_init_err;
+- return (-errno);
+- }
+- }
+-
+-#elif TARGET_LINUX
+-
+- /* open device */
+- buf = "/dev/net/tun";
+- _dessert_sysif->fd = open(buf, O_RDWR);
+- memset(&ifr, 0, sizeof(ifr));
+- if (flags & DESSERT_TUN) {
+- ifr.ifr_flags = IFF_TUN; /* we want the service flag - no IFF_NO_PI */
+- } else {
+- ifr.ifr_flags = IFF_TAP | IFF_NO_PI; /* we want the service flag and IFF_NO_PI */
+- }
+- strcpy(ifr.ifr_name, _dessert_sysif->if_name);
+- if (ioctl(_dessert_sysif->fd, TUNSETIFF, (void *) &ifr) < 0) {
+- dessert_err("ioctl(TUNSETIFF) failed: %s", strerror(errno));
+- goto dessert_sysif_init_err;
+- return (-errno);
+- }
+- strcpy(_dessert_sysif->if_name, ifr.ifr_name);
+-
+-#else
+-
+- goto not_implemented;
+-
+-#endif
+-
+- /* check interface - abusing dessert_meshif methods */
+- _dessert_sysif->if_index = if_nametoindex(device);
+- if (!_dessert_sysif->if_index) {
+- dessert_err("interface %s - no such interface", _dessert_sysif->if_name);
+- goto dessert_sysif_init_err;
+- }
+-
+- /* do ifconfig to set the interface up - strange things happen otherwise */
+- buf = malloc(IF_NAMESIZE + 16);
+- snprintf(buf, IF_NAMESIZE + 15, "ifconfig %s up", _dessert_sysif->if_name);
+- system(buf);
+- free(buf);
+-
+- /* get hardware address in tap mode if possible */
+- if (flags & DESSERT_TAP) {
+- if (_dessert_meshif_gethwaddr((dessert_meshif_t *) _dessert_sysif) != 0) {
+- dessert_err("failed to get hwaddr of interface %s(%d) - hope src of first packet received from is it",
+- _dessert_sysif->if_name, _dessert_sysif->if_index, _dessert_sysif);
+- _dessert_sysif->flags |= _DESSERT_TAP_NOMAC;
+- dessert_sysrxcb_add(_dessert_sysif_init_getmachack, 0);
+- } else {
+- /* check whether we need to set defsrc */
+- if ((flags & DESSERT_MAKE_DEFSRC) || memcmp(dessert_l25_defsrc,
+- ether_null, ETHER_ADDR_LEN) == 0) {
+- memcpy(dessert_l25_defsrc, _dessert_sysif->hwaddr,
+- ETHER_ADDR_LEN);
+- dessert_info("set dessert_l25_defsrc to hwaddr %02x:%02x:%02x:%02x:%02x:%02x",
+- dessert_l25_defsrc[0], dessert_l25_defsrc[1],dessert_l25_defsrc[2],
+- dessert_l25_defsrc[3], dessert_l25_defsrc[4], dessert_l25_defsrc[5]);
+- }
+- }
+- }
+-
+- /* info message */
+- if (flags & DESSERT_TAP) {
+- dessert_info("starting worker thread for tap interface %s(%d) hwaddr %02x:%02x:%02x:%02x:%02x:%02x",
+- _dessert_sysif->if_name, _dessert_sysif->if_index,
+- _dessert_sysif->hwaddr[0], _dessert_sysif->hwaddr[1], _dessert_sysif->hwaddr[2],
+- _dessert_sysif->hwaddr[3], _dessert_sysif->hwaddr[4], _dessert_sysif->hwaddr[5]);
+- } else {
+- dessert_info("starting worker thread for tap interface %s(%d) fd %d",
+- _dessert_sysif->if_name, _dessert_sysif->if_index, _dessert_sysif->fd);
+- }
+-
+- /* start worker thread */
+- if (pthread_create(&(_dessert_sysif->worker), NULL,
+- _dessert_sysif_init_thread, (void *) _dessert_sysif)) {
+- dessert_err("creating worker thread failed for interface %s(%d)",
+- _dessert_sysif->if_name, _dessert_sysif->if_index);
+- goto dessert_sysif_init_err;
+- }
+-
+- /* done */
+- return (DESSERT_OK);
+-
+- dessert_sysif_init_err: close(_dessert_sysif->fd);
+-
+- return (-errno);
+-}
+-
+-/** adds a callback function to call if a packet should be injected into dessert via a tun/tap interface
+- * @arg *c callback function
+- * @arg prio priority of the function - lower first!
+- * @return DESSERT_OK on success
+- * @return -errno on error
+- **/
+-int dessert_sysrxcb_add(dessert_sysrxcb_t* c, int prio) {
+- dessert_sysrxcbe_t *cb, *i;
+-
+- cb = (struct dessert_sysrxcbe*) malloc(sizeof(struct dessert_sysrxcbe));
+- if (cb == NULL) {
+- dessert_err("failed to allocate memory for registering sys callback: %s", strerror(errno));
+- return (-errno);
+- }
+-
+- if (c == NULL) {
+- dessert_err("tried to add a null pointer as dessert_sysrxcb");
+- return (-EINVAL);
+- }
+-
+- pthread_rwlock_wrlock(&dessert_cfglock);
+-
+- cb->c = c;
+- cb->prio = prio;
+- cb->next = NULL;
+-
+- if (_dessert_sysrxcblist == NULL) {
+- _dessert_sysrxcblist = cb;
+- _dessert_sysrxcblistver++;
+-
+- pthread_rwlock_unlock(&dessert_cfglock);
+- return DESSERT_OK;
+- }
+-
+- if (_dessert_sysrxcblist->prio > cb->prio) {
+- cb->next = _dessert_sysrxcblist;
+- _dessert_sysrxcblist = cb;
+- _dessert_sysrxcblistver++;
+-
+- pthread_rwlock_unlock(&dessert_cfglock);
+- return DESSERT_OK;
+- }
+-
+- /* find right place for callback */
+- for (i = _dessert_sysrxcblist; i->next != NULL && i->next->prio <= cb->prio; i
+- = i->next)
+- ;
+-
+- /* insert it */
+- cb->next = i->next;
+- i->next = cb;
+- _dessert_sysrxcblistver++;
+-
+- pthread_rwlock_unlock(&dessert_cfglock);
+- return DESSERT_OK;
+-}
+-
+-/** removes all occurrences of the callback function from the list of callbacks.
+- * @arg c callback function
+- * @return DESSERT_OK on success, DESSERT_ERR on error
+- **/
+-int dessert_sysrxcb_del(dessert_sysrxcb_t* c) {
+- int count = 0;
+- dessert_sysrxcbe_t *i, *last;
+-
+- pthread_rwlock_wrlock(&dessert_cfglock);
+-
+- if (_dessert_sysrxcblist == NULL) {
+- goto dessert_sysrxcb_del_out;
+- }
+-
+- while (_dessert_sysrxcblist->c == c) {
+- count++;
+- i = _dessert_sysrxcblist;
+- _dessert_sysrxcblist = _dessert_sysrxcblist->next;
+- free(i);
+- if (_dessert_sysrxcblist == NULL) {
+- goto dessert_sysrxcb_del_out;
+- }
+- }
+-
+- for (i = _dessert_sysrxcblist; i->next != NULL; i = i->next) {
+- if (i->c == c) {
+- count++;
+- last->next = i->next;
+- free(i);
+- i = last;
+- }
+- last = i;
+- }
+-
+- dessert_sysrxcb_del_out: _dessert_sysrxcblistver++;
+- pthread_rwlock_unlock(&dessert_cfglock);
+- return ((count > 0) ? DESSERT_OK : DESSERT_ERR);
+-
+-}
+-
+-/** sends a packet via tun/tap interface to the kernel
+- * @arg *msg message to send
+- * @return DESSERT_OK on success
+- * @return -EIO if message failed to be sent
+- **/
+-int dessert_syssend_msg(dessert_msg_t *msg) {
+- struct ether_header *eth;
+- size_t eth_len;
+-
+- eth_len = dessert_msg_ethdecap(msg, &eth);
+- if (eth_len == -1) {
+- return (-EIO);
+- }
+- dessert_syssend(eth, eth_len);
+- free(eth);
+-
+- return DESSERT_OK;
+-}
+-
+-/** sends a packet via tun/tap interface to the kernel
+- * @arg *eth message to send
+- * @arg len length of message to send
+- * @return DESSERT_OK on success
+- * @return -EIO if message failed to be sent
+- **/
+-int dessert_syssend(const struct ether_header *eth, size_t len) {
+- ssize_t res = 0;
+-
+- if (_dessert_sysif == NULL)
+- return (-EIO);
+-
+- if (_dessert_sysif->flags & DESSERT_TUN) {
+- eth
+- = (struct ether_header *) (((uint8_t *) eth) + (ETHER_ADDR_LEN
+- * 2));
+- len -= (ETHER_ADDR_LEN * 2);
+- }
+-
+- res = write(_dessert_sysif->fd, (const void *) eth, len);
+-
+- if (res == len) {
+- pthread_mutex_lock(&(_dessert_sysif->cnt_mutex));
+- _dessert_sysif->opkts++;
+- _dessert_sysif->obytes += res;
+- pthread_mutex_unlock(&(_dessert_sysif->cnt_mutex));
+- return (DESSERT_OK);
+- } else {
+-
+- return (-EIO);
+- }
+-}
+-
+-/******************************************************************************
+- *
+- * INTERNAL / PRIVATE
+- *
+- * S Y S - I N T E R F A C E S
+- *
+- ******************************************************************************/
+-
+-/* nothing here - yet */
+-
+-/******************************************************************************
+- *
+- * LOCAL
+- *
+- * S Y S - I N T E R F A C E S
+- *
+- ******************************************************************************/
+-
+-/** internal callback which gets registered if we can't find out mac address of tap interface */
+-static int _dessert_sysif_init_getmachack(dessert_msg_t *msg, size_t len,
+- dessert_msg_proc_t *proc, dessert_sysif_t *sysif, dessert_frameid_t id) {
+-
+- struct ether_header *eth;
+- dessert_msg_ethdecap(msg, &eth);
+-
+- /* hack to get the hardware address */
+- if (sysif->flags & _DESSERT_TAP_NOMAC) {
+- /* copy from first packet received */
+- memcpy(sysif->hwaddr, eth->ether_shost, ETHER_ADDR_LEN);
+- dessert_info("guessed hwaddr for %s: %02x:%02x:%02x:%02x:%02x:%02x", sysif->if_name,
+- sysif->hwaddr[0], sysif->hwaddr[1], sysif->hwaddr[2],
+- sysif->hwaddr[3], sysif->hwaddr[4], sysif->hwaddr[5]);
+- /* check whether we need to set defsrc */
+- if ((sysif->flags & DESSERT_MAKE_DEFSRC) || memcmp(dessert_l25_defsrc,
+- ether_null, ETHER_ADDR_LEN) == 0) {
+- memcpy(dessert_l25_defsrc, sysif->hwaddr, ETHER_ADDR_LEN);
+- dessert_info("set dessert_l25_defsrc to hwaddr %02x:%02x:%02x:%02x:%02x:%02x",
+- dessert_l25_defsrc[0], dessert_l25_defsrc[1],dessert_l25_defsrc[2],
+- dessert_l25_defsrc[3], dessert_l25_defsrc[4], dessert_l25_defsrc[5]);
+- }
+- sysif->flags &= ~_DESSERT_TAP_NOMAC;
+- }
+-
+- /* unregister me */
+- dessert_sysrxcb_del(_dessert_sysif_init_getmachack);
+-
+- return DESSERT_MSG_KEEP;
+-}
+-
+-/** internal packet processing thread body */
+-static void *_dessert_sysif_init_thread(void* arg) {
+-
+- dessert_sysif_t *sysif = (dessert_sysif_t *) arg;
+- size_t len;
+- size_t buflen = ETHER_MAX_LEN;
+- char buf[buflen];
+- dessert_msg_proc_t proc;
+- dessert_frameid_t id;
+- dessert_sysrxcbe_t *cb;
+- int res;
+- int ex = 0;
+- dessert_sysrxcb_t **cbl = NULL;
+- int cbllen = 0;
+- int cblcur = -1;
+- int cblver = -1;
+-
+- while (!ex) {
+-
+- memset(buf, 0, buflen);
+-
+- if (sysif->flags & DESSERT_TUN) {
+- len = read((sysif->fd), buf + (ETHER_ADDR_LEN * 2), buflen
+- - (ETHER_ADDR_LEN * 2));
+- } else {
+- len = read((sysif->fd), buf, buflen);
+- }
+-
+- if (len == -1) {
+- dessert_debug("got %s while reading on %s (fd %d) - is the sys (tun/tap) interface up?", strerror(errno), sysif->if_name, sysif->fd);
+- sleep(1);
+- continue;
+- }
+- if (sysif->flags & DESSERT_TUN) {
+- len += (ETHER_ADDR_LEN * 2);
+- }
+-
+- /* copy callbacks to internal list to release dessert_cfglock before invoking callbacks*/
+- pthread_rwlock_rdlock(&dessert_cfglock);
+- if (cblver < _dessert_sysrxcblistver) {
+- /* callback list changed - rebuild it */
+- cbllen = 0;
+- for (cb = _dessert_sysrxcblist; cb != NULL; cb = cb->next)
+- cbllen++;
+- cbl = realloc(cbl, cbllen * sizeof(dessert_sysrxcb_t *));
+- if (cbl == NULL) {
+- dessert_err("failed to allocate memory for internal callback list");
+- pthread_rwlock_unlock(&dessert_cfglock);
+- return (NULL);
+- }
+-
+- cblcur = 0;
+- for (cb = _dessert_sysrxcblist; cb != NULL; cb = cb->next)
+- cbl[cblcur++] = cb->c;
+-
+- cblver = _dessert_sysrxcblistver;
+- }
+- pthread_rwlock_unlock(&dessert_cfglock);
+-
+- /* generate frame id */
+- id = _dessert_newframeid();
+-
+- /* count packet */
+- pthread_mutex_lock(&(sysif->cnt_mutex));
+- sysif->ipkts++;
+- sysif->ibytes += len;
+- pthread_mutex_unlock(&(sysif->cnt_mutex));
+-
+- /* call the interested */
+- res = 0;
+- cblcur = 0;
+- memset(&proc, 0, DESSERT_MSGPROCLEN);
+- dessert_msg_t *msg;
+- while (res > DESSERT_MSG_DROP && cblcur < cbllen) {
+- if (dessert_msg_ethencap((struct ether_header *) buf, len, &msg)
+- < 0) {
+- dessert_err("failed to encapsulate ethernet frame on host-to-network-pipeline: %s", errno);
+- };
+- res = cbl[cblcur++](msg, len, &proc, sysif, id);
+- }
+- dessert_msg_destroy(msg);
+-
+- }
+- dessert_info("stopped reading on %s (fd %d): %s", sysif->if_name, sysif->fd, strerror(errno));
+-
+- free(cbl);
+- close(sysif->fd);
+-
+- return (NULL);
+-}
+Index: libdessert0.86-0.86.14/doxygen-include.am
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/doxygen-include.am 2009-12-09 16:38:27.242678444 +0100
+@@ -0,0 +1,203 @@
++# ---------------------------------------------------------------------------
++# Licensed to the Apache Software Foundation (ASF) under one or more
++# contributor license agreements. See the NOTICE file distributed with
++# this work for additional information regarding copyright ownership.
++# The ASF licenses this file to You under the Apache License, Version 2.0
++# (the "License"); you may not use this file except in compliance with
++# the License. You may obtain a copy of the License at
++#
++# http://www.apache.org/licenses/LICENSE-2.0
++#
++# Unless required by applicable law or agreed to in writing, software
++# distributed under the License is distributed on an "AS IS" BASIS,
++# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
++# See the License for the specific language governing permissions and
++# limitations under the License.
++# ---------------------------------------------------------------------------
++
++# Copyright (C) 2004 Oren Ben-Kiki
++# This file is distributed under the same terms as the Automake macro files.
++
++# Generate automatic documentation using Doxygen. Goals and variables values
++# are controlled by the various DX_COND_??? conditionals set by autoconf.
++#
++# The provided goals are:
++# doxygen-doc: Generate all doxygen documentation.
++# doxygen-run: Run doxygen, which will generate some of the documentation
++# (HTML, CHM, CHI, MAN, RTF, XML) but will not do the post
++# processing required for the rest of it (PS, PDF, and some MAN).
++# doxygen-man: Rename some doxygen generated man pages.
++# doxygen-ps: Generate doxygen PostScript documentation.
++# doxygen-pdf: Generate doxygen PDF documentation.
++#
++# Note that by default these are not integrated into the automake goals. If
++# doxygen is used to generate man pages, you can achieve this integration by
++# setting man3_MANS to the list of man pages generated and then adding the
++# dependency:
++#
++# $(man3_MANS): doxygen-doc
++#
++# This will cause make to run doxygen and generate all the documentation.
++#
++# The following variable is intended for use in Makefile.am:
++#
++# DX_CLEANFILES = everything to clean.
++#
++# This is usually added to MOSTLYCLEANFILES.
++
++## --------------------------------- ##
++## Format-independent Doxygen rules. ##
++## --------------------------------- ##
++
++if DX_COND_doc
++
++## ------------------------------- ##
++## Rules specific for HTML output. ##
++## ------------------------------- ##
++
++if DX_COND_html
++
++DX_CLEAN_HTML = @DX_DOCDIR@/html
++
++endif DX_COND_html
++
++## ------------------------------ ##
++## Rules specific for CHM output. ##
++## ------------------------------ ##
++
++if DX_COND_chm
++
++DX_CLEAN_CHM = @DX_DOCDIR@/chm
++
++if DX_COND_chi
++
++DX_CLEAN_CHI = @DX_DOCDIR@/@PACKAGE@.chi
++
++endif DX_COND_chi
++
++endif DX_COND_chm
++
++## ------------------------------ ##
++## Rules specific for MAN output. ##
++## ------------------------------ ##
++
++if DX_COND_man
++
++DX_CLEAN_MAN = @DX_DOCDIR@/man
++
++endif DX_COND_man
++
++## ------------------------------ ##
++## Rules specific for RTF output. ##
++## ------------------------------ ##
++
++if DX_COND_rtf
++
++DX_CLEAN_RTF = @DX_DOCDIR@/rtf
++
++endif DX_COND_rtf
++
++## ------------------------------ ##
++## Rules specific for XML output. ##
++## ------------------------------ ##
++
++if DX_COND_xml
++
++DX_CLEAN_XML = @DX_DOCDIR@/xml
++
++endif DX_COND_xml
++
++## ----------------------------- ##
++## Rules specific for PS output. ##
++## ----------------------------- ##
++
++if DX_COND_ps
++
++DX_CLEAN_PS = @DX_DOCDIR@/@PACKAGE@.ps
++
++DX_PS_GOAL = doxygen-ps
++
++doxygen-ps: @DX_DOCDIR@/@PACKAGE@.ps
++
++@DX_DOCDIR@/@PACKAGE@.ps: @DX_DOCDIR@/@PACKAGE@.tag
++ cd @DX_DOCDIR@/latex; \
++ rm -f *.aux *.toc *.idx *.ind *.ilg *.log *.out; \
++ $(DX_LATEX) refman.tex; \
++ $(MAKEINDEX_PATH) refman.idx; \
++ $(DX_LATEX) refman.tex; \
++ countdown=5; \
++ while $(DX_EGREP) 'Rerun (LaTeX|to get cross-references right)' \
++ refman.log > /dev/null 2>&1 \
++ && test $$countdown -gt 0; do \
++ $(DX_LATEX) refman.tex; \
++ countdown=`expr $$countdown - 1`; \
++ done; \
++ $(DX_DVIPS) -o ../@PACKAGE@.ps refman.dvi
++
++endif DX_COND_ps
++
++## ------------------------------ ##
++## Rules specific for PDF output. ##
++## ------------------------------ ##
++
++if DX_COND_pdf
++
++DX_CLEAN_PDF = @DX_DOCDIR@/@PACKAGE@.pdf
++
++DX_PDF_GOAL = doxygen-pdf
++
++doxygen-pdf: @DX_DOCDIR@/@PACKAGE@.pdf
++
++@DX_DOCDIR@/@PACKAGE@.pdf: @DX_DOCDIR@/@PACKAGE@.tag
++ cd @DX_DOCDIR@/latex; \
++ rm -f *.aux *.toc *.idx *.ind *.ilg *.log *.out; \
++ $(DX_PDFLATEX) refman.tex; \
++ $(DX_MAKEINDEX) refman.idx; \
++ $(DX_PDFLATEX) refman.tex; \
++ countdown=5; \
++ while $(DX_EGREP) 'Rerun (LaTeX|to get cross-references right)' \
++ refman.log > /dev/null 2>&1 \
++ && test $$countdown -gt 0; do \
++ $(DX_PDFLATEX) refman.tex; \
++ countdown=`expr $$countdown - 1`; \
++ done; \
++ mv refman.pdf ../@PACKAGE@.pdf
++
++endif DX_COND_pdf
++
++## ------------------------------------------------- ##
++## Rules specific for LaTeX (shared for PS and PDF). ##
++## ------------------------------------------------- ##
++
++if DX_COND_latex
++
++DX_CLEAN_LATEX = @DX_DOCDIR@/latex
++
++endif DX_COND_latex
++
++.PHONY: doxygen-run doxygen-doc $(DX_PS_GOAL) $(DX_PDF_GOAL)
++
++.INTERMEDIATE: doxygen-run $(DX_PS_GOAL) $(DX_PDF_GOAL)
++
++doxygen-run: @DX_DOCDIR@/@PACKAGE@.tag
++
++doxygen-doc: doxygen-run $(DX_PS_GOAL) $(DX_PDF_GOAL)
++
++@DX_DOCDIR@/@PACKAGE@.tag: $(DX_CONFIG) $(pkginclude_HEADERS)
++ rm -rf @DX_DOCDIR@
++ $(DX_ENV) $(DX_DOXYGEN) $(srcdir)/$(DX_CONFIG)
++
++DX_CLEANFILES = \
++ @DX_DOCDIR@/@PACKAGE@.tag \
++ -r \
++ $(DX_CLEAN_HTML) \
++ $(DX_CLEAN_CHM) \
++ $(DX_CLEAN_CHI) \
++ $(DX_CLEAN_MAN) \
++ $(DX_CLEAN_RTF) \
++ $(DX_CLEAN_XML) \
++ $(DX_CLEAN_PS) \
++ $(DX_CLEAN_PDF) \
++ $(DX_CLEAN_LATEX)
++
++endif DX_COND_doc
+Index: libdessert0.86-0.86.14/include/Makefile.am
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/include/Makefile.am 2009-12-09 16:38:27.242678444 +0100
+@@ -0,0 +1,3 @@
++
++nobase_include_HEADERS = dessert/dessert.h dessert/utlist.h
++
+Index: libdessert0.86-0.86.14/include/Makefile.in
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/include/Makefile.in 2009-12-09 16:38:51.048502815 +0100
+@@ -0,0 +1,490 @@
++# Makefile.in generated by automake 1.11 from Makefile.am.
++# @configure_input@
++
++# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
++# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
++# Inc.
++# This Makefile.in is free software; the Free Software Foundation
++# gives unlimited permission to copy and/or distribute it,
++# with or without modifications, as long as this notice is preserved.
++
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
++# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
++# PARTICULAR PURPOSE.
++
++@SET_MAKE@
++
++VPATH = @srcdir@
++pkgdatadir = $(datadir)/@PACKAGE@
++pkgincludedir = $(includedir)/@PACKAGE@
++pkglibdir = $(libdir)/@PACKAGE@
++pkglibexecdir = $(libexecdir)/@PACKAGE@
++am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
++install_sh_DATA = $(install_sh) -c -m 644
++install_sh_PROGRAM = $(install_sh) -c
++install_sh_SCRIPT = $(install_sh) -c
++INSTALL_HEADER = $(INSTALL_DATA)
++transform = $(program_transform_name)
++NORMAL_INSTALL = :
++PRE_INSTALL = :
++POST_INSTALL = :
++NORMAL_UNINSTALL = :
++PRE_UNINSTALL = :
++POST_UNINSTALL = :
++build_triplet = @build@
++host_triplet = @host@
++subdir = include
++DIST_COMMON = $(nobase_include_HEADERS) $(srcdir)/Makefile.am \
++ $(srcdir)/Makefile.in
++ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
++am__aclocal_m4_deps = $(top_srcdir)/m4/ac_doxygen.m4 \
++ $(top_srcdir)/m4/ax_pthread.m4 $(top_srcdir)/m4/libtool.m4 \
++ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
++ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
++ $(top_srcdir)/m4/net-snmp.m4 $(top_srcdir)/m4/pcap.m4 \
++ $(top_srcdir)/configure.ac
++am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
++ $(ACLOCAL_M4)
++mkinstalldirs = $(install_sh) -d
++CONFIG_HEADER = $(top_builddir)/config.h
++CONFIG_CLEAN_FILES =
++CONFIG_CLEAN_VPATH_FILES =
++SOURCES =
++DIST_SOURCES =
++am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
++am__vpath_adj = case $$p in \
++ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
++ *) f=$$p;; \
++ esac;
++am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
++am__install_max = 40
++am__nobase_strip_setup = \
++ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
++am__nobase_strip = \
++ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
++am__nobase_list = $(am__nobase_strip_setup); \
++ for p in $$list; do echo "$$p $$p"; done | \
++ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
++ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
++ if (++n[$$2] == $(am__install_max)) \
++ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
++ END { for (dir in files) print dir, files[dir] }'
++am__base_list = \
++ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
++ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
++am__installdirs = "$(DESTDIR)$(includedir)"
++HEADERS = $(nobase_include_HEADERS)
++ETAGS = etags
++CTAGS = ctags
++DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
++ACLOCAL = @ACLOCAL@
++AMTAR = @AMTAR@
++AR = @AR@
++AUTOCONF = @AUTOCONF@
++AUTOHEADER = @AUTOHEADER@
++AUTOMAKE = @AUTOMAKE@
++AWK = @AWK@
++CC = @CC@
++CCDEPMODE = @CCDEPMODE@
++CFLAGS = @CFLAGS@
++CLI_LIBS = @CLI_LIBS@
++CPP = @CPP@
++CPPFLAGS = @CPPFLAGS@
++CYGPATH_W = @CYGPATH_W@
++DEFS = @DEFS@
++DEPDIR = @DEPDIR@
++DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@
++DSYMUTIL = @DSYMUTIL@
++DUMPBIN = @DUMPBIN@
++DX_CONFIG = @DX_CONFIG@
++DX_DOCDIR = @DX_DOCDIR@
++DX_DOT = @DX_DOT@
++DX_DOXYGEN = @DX_DOXYGEN@
++DX_DVIPS = @DX_DVIPS@
++DX_EGREP = @DX_EGREP@
++DX_ENV = @DX_ENV@
++DX_FLAG_chi = @DX_FLAG_chi@
++DX_FLAG_chm = @DX_FLAG_chm@
++DX_FLAG_doc = @DX_FLAG_doc@
++DX_FLAG_dot = @DX_FLAG_dot@
++DX_FLAG_html = @DX_FLAG_html@
++DX_FLAG_man = @DX_FLAG_man@
++DX_FLAG_pdf = @DX_FLAG_pdf@
++DX_FLAG_ps = @DX_FLAG_ps@
++DX_FLAG_rtf = @DX_FLAG_rtf@
++DX_FLAG_xml = @DX_FLAG_xml@
++DX_HHC = @DX_HHC@
++DX_LATEX = @DX_LATEX@
++DX_MAKEINDEX = @DX_MAKEINDEX@
++DX_PDFLATEX = @DX_PDFLATEX@
++DX_PERL = @DX_PERL@
++DX_PROJECT = @DX_PROJECT@
++ECHO_C = @ECHO_C@
++ECHO_N = @ECHO_N@
++ECHO_T = @ECHO_T@
++EGREP = @EGREP@
++EXEEXT = @EXEEXT@
++FGREP = @FGREP@
++GREP = @GREP@
++INSTALL = @INSTALL@
++INSTALL_DATA = @INSTALL_DATA@
++INSTALL_PROGRAM = @INSTALL_PROGRAM@
++INSTALL_SCRIPT = @INSTALL_SCRIPT@
++INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
++LD = @LD@
++LDFLAGS = @LDFLAGS@
++LIBDESSERT_LIBRARY_VERSION = @LIBDESSERT_LIBRARY_VERSION@
++LIBOBJS = @LIBOBJS@
++LIBS = @LIBS@
++LIBTOOL = @LIBTOOL@
++LIPO = @LIPO@
++LN_S = @LN_S@
++LTLIBOBJS = @LTLIBOBJS@
++MAKEINFO = @MAKEINFO@
++MKDIR_P = @MKDIR_P@
++NM = @NM@
++NMEDIT = @NMEDIT@
++OBJDUMP = @OBJDUMP@
++OBJEXT = @OBJEXT@
++OTOOL = @OTOOL@
++OTOOL64 = @OTOOL64@
++PACKAGE = @PACKAGE@
++PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
++PACKAGE_NAME = @PACKAGE_NAME@
++PACKAGE_STRING = @PACKAGE_STRING@
++PACKAGE_TARNAME = @PACKAGE_TARNAME@
++PACKAGE_URL = @PACKAGE_URL@
++PACKAGE_VERSION = @PACKAGE_VERSION@
++PATH_SEPARATOR = @PATH_SEPARATOR@
++PCAP_CFLAGS = @PCAP_CFLAGS@
++PCAP_CFLGAS = @PCAP_CFLGAS@
++PCAP_LIBS = @PCAP_LIBS@
++PTHREAD_CC = @PTHREAD_CC@
++PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
++PTHREAD_LIBS = @PTHREAD_LIBS@
++RANLIB = @RANLIB@
++SED = @SED@
++SET_MAKE = @SET_MAKE@
++SHELL = @SHELL@
++SNMP_CFLAGS = @SNMP_CFLAGS@
++SNMP_CFLGAS = @SNMP_CFLGAS@
++SNMP_LIBS = @SNMP_LIBS@
++STRIP = @STRIP@
++VERSION = @VERSION@
++abs_builddir = @abs_builddir@
++abs_srcdir = @abs_srcdir@
++abs_top_builddir = @abs_top_builddir@
++abs_top_srcdir = @abs_top_srcdir@
++ac_ct_CC = @ac_ct_CC@
++ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
++am__include = @am__include@
++am__leading_dot = @am__leading_dot@
++am__quote = @am__quote@
++am__tar = @am__tar@
++am__untar = @am__untar@
++ax_pthread_config = @ax_pthread_config@
++bindir = @bindir@
++build = @build@
++build_alias = @build_alias@
++build_cpu = @build_cpu@
++build_os = @build_os@
++build_vendor = @build_vendor@
++builddir = @builddir@
++datadir = @datadir@
++datarootdir = @datarootdir@
++docdir = @docdir@
++dvidir = @dvidir@
++exec_prefix = @exec_prefix@
++host = @host@
++host_alias = @host_alias@
++host_cpu = @host_cpu@
++host_os = @host_os@
++host_vendor = @host_vendor@
++htmldir = @htmldir@
++includedir = @includedir@
++infodir = @infodir@
++install_sh = @install_sh@
++libdir = @libdir@
++libexecdir = @libexecdir@
++localedir = @localedir@
++localstatedir = @localstatedir@
++lt_ECHO = @lt_ECHO@
++mandir = @mandir@
++mkdir_p = @mkdir_p@
++oldincludedir = @oldincludedir@
++pdfdir = @pdfdir@
++prefix = @prefix@
++program_transform_name = @program_transform_name@
++psdir = @psdir@
++sbindir = @sbindir@
++sharedstatedir = @sharedstatedir@
++srcdir = @srcdir@
++sysconfdir = @sysconfdir@
++target_alias = @target_alias@
++top_build_prefix = @top_build_prefix@
++top_builddir = @top_builddir@
++top_srcdir = @top_srcdir@
++nobase_include_HEADERS = dessert/dessert.h dessert/utlist.h
++all: all-am
++
++.SUFFIXES:
++$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
++ @for dep in $?; do \
++ case '$(am__configure_deps)' in \
++ *$$dep*) \
++ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
++ && { if test -f $@; then exit 0; else break; fi; }; \
++ exit 1;; \
++ esac; \
++ done; \
++ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/Makefile'; \
++ $(am__cd) $(top_srcdir) && \
++ $(AUTOMAKE) --gnu include/Makefile
++.PRECIOUS: Makefile
++Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
++ @case '$?' in \
++ *config.status*) \
++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
++ *) \
++ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
++ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
++ esac;
++
++$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
++
++$(top_srcdir)/configure: $(am__configure_deps)
++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
++$(ACLOCAL_M4): $(am__aclocal_m4_deps)
++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
++$(am__aclocal_m4_deps):
++
++mostlyclean-libtool:
++ -rm -f *.lo
++
++clean-libtool:
++ -rm -rf .libs _libs
++install-nobase_includeHEADERS: $(nobase_include_HEADERS)
++ @$(NORMAL_INSTALL)
++ test -z "$(includedir)" || $(MKDIR_P) "$(DESTDIR)$(includedir)"
++ @list='$(nobase_include_HEADERS)'; test -n "$(includedir)" || list=; \
++ $(am__nobase_list) | while read dir files; do \
++ xfiles=; for file in $$files; do \
++ if test -f "$$file"; then xfiles="$$xfiles $$file"; \
++ else xfiles="$$xfiles $(srcdir)/$$file"; fi; done; \
++ test -z "$$xfiles" || { \
++ test "x$$dir" = x. || { \
++ echo "$(MKDIR_P) '$(DESTDIR)$(includedir)/$$dir'"; \
++ $(MKDIR_P) "$(DESTDIR)$(includedir)/$$dir"; }; \
++ echo " $(INSTALL_HEADER) $$xfiles '$(DESTDIR)$(includedir)/$$dir'"; \
++ $(INSTALL_HEADER) $$xfiles "$(DESTDIR)$(includedir)/$$dir" || exit $$?; }; \
++ done
++
++uninstall-nobase_includeHEADERS:
++ @$(NORMAL_UNINSTALL)
++ @list='$(nobase_include_HEADERS)'; test -n "$(includedir)" || list=; \
++ $(am__nobase_strip_setup); files=`$(am__nobase_strip)`; \
++ test -n "$$files" || exit 0; \
++ echo " ( cd '$(DESTDIR)$(includedir)' && rm -f" $$files ")"; \
++ cd "$(DESTDIR)$(includedir)" && rm -f $$files
++
++ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
++ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
++ unique=`for i in $$list; do \
++ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
++ done | \
++ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
++ END { if (nonempty) { for (i in files) print i; }; }'`; \
++ mkid -fID $$unique
++tags: TAGS
++
++TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
++ $(TAGS_FILES) $(LISP)
++ set x; \
++ here=`pwd`; \
++ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
++ unique=`for i in $$list; do \
++ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
++ done | \
++ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
++ END { if (nonempty) { for (i in files) print i; }; }'`; \
++ shift; \
++ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
++ test -n "$$unique" || unique=$$empty_fix; \
++ if test $$# -gt 0; then \
++ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
++ "$$@" $$unique; \
++ else \
++ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
++ $$unique; \
++ fi; \
++ fi
++ctags: CTAGS
++CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
++ $(TAGS_FILES) $(LISP)
++ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
++ unique=`for i in $$list; do \
++ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
++ done | \
++ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
++ END { if (nonempty) { for (i in files) print i; }; }'`; \
++ test -z "$(CTAGS_ARGS)$$unique" \
++ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
++ $$unique
++
++GTAGS:
++ here=`$(am__cd) $(top_builddir) && pwd` \
++ && $(am__cd) $(top_srcdir) \
++ && gtags -i $(GTAGS_ARGS) "$$here"
++
++distclean-tags:
++ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
++
++distdir: $(DISTFILES)
++ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
++ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
++ list='$(DISTFILES)'; \
++ dist_files=`for file in $$list; do echo $$file; done | \
++ sed -e "s|^$$srcdirstrip/||;t" \
++ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
++ case $$dist_files in \
++ */*) $(MKDIR_P) `echo "$$dist_files" | \
++ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
++ sort -u` ;; \
++ esac; \
++ for file in $$dist_files; do \
++ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
++ if test -d $$d/$$file; then \
++ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
++ if test -d "$(distdir)/$$file"; then \
++ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
++ fi; \
++ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
++ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
++ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
++ fi; \
++ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
++ else \
++ test -f "$(distdir)/$$file" \
++ || cp -p $$d/$$file "$(distdir)/$$file" \
++ || exit 1; \
++ fi; \
++ done
++check-am: all-am
++check: check-am
++all-am: Makefile $(HEADERS)
++installdirs:
++ for dir in "$(DESTDIR)$(includedir)"; do \
++ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
++ done
++install: install-am
++install-exec: install-exec-am
++install-data: install-data-am
++uninstall: uninstall-am
++
++install-am: all-am
++ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
++
++installcheck: installcheck-am
++install-strip:
++ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
++ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
++ `test -z '$(STRIP)' || \
++ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
++mostlyclean-generic:
++
++clean-generic:
++
++distclean-generic:
++ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
++ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
++
++maintainer-clean-generic:
++ @echo "This command is intended for maintainers to use"
++ @echo "it deletes files that may require special tools to rebuild."
++clean: clean-am
++
++clean-am: clean-generic clean-libtool mostlyclean-am
++
++distclean: distclean-am
++ -rm -f Makefile
++distclean-am: clean-am distclean-generic distclean-tags
++
++dvi: dvi-am
++
++dvi-am:
++
++html: html-am
++
++html-am:
++
++info: info-am
++
++info-am:
++
++install-data-am: install-nobase_includeHEADERS
++
++install-dvi: install-dvi-am
++
++install-dvi-am:
++
++install-exec-am:
++
++install-html: install-html-am
++
++install-html-am:
++
++install-info: install-info-am
++
++install-info-am:
++
++install-man:
++
++install-pdf: install-pdf-am
++
++install-pdf-am:
++
++install-ps: install-ps-am
++
++install-ps-am:
++
++installcheck-am:
++
++maintainer-clean: maintainer-clean-am
++ -rm -f Makefile
++maintainer-clean-am: distclean-am maintainer-clean-generic
++
++mostlyclean: mostlyclean-am
++
++mostlyclean-am: mostlyclean-generic mostlyclean-libtool
++
++pdf: pdf-am
++
++pdf-am:
++
++ps: ps-am
++
++ps-am:
++
++uninstall-am: uninstall-nobase_includeHEADERS
++
++.MAKE: install-am install-strip
++
++.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
++ clean-libtool ctags distclean distclean-generic \
++ distclean-libtool distclean-tags distdir dvi dvi-am html \
++ html-am info info-am install install-am install-data \
++ install-data-am install-dvi install-dvi-am install-exec \
++ install-exec-am install-html install-html-am install-info \
++ install-info-am install-man install-nobase_includeHEADERS \
++ install-pdf install-pdf-am install-ps install-ps-am \
++ install-strip installcheck installcheck-am installdirs \
++ maintainer-clean maintainer-clean-generic mostlyclean \
++ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
++ tags uninstall uninstall-am uninstall-nobase_includeHEADERS
++
++
++# Tell versions [3.59,3.63) of GNU make to not export all variables.
++# Otherwise a system limit (for SysV at least) may be exceeded.
++.NOEXPORT:
+Index: libdessert0.86-0.86.14/include/dessert/dessert.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/include/dessert/dessert.h 2009-12-09 16:38:27.246011666 +0100
+@@ -0,0 +1,1334 @@
++/***************************************************************************//**
++ @file
++
++ @page license License
++
++ @brief Copyright 2009, The DES-SERT Team, Freie Universitaet Berlin (FUB). \n
++ All rights reserved. \n
++
++ These sources were originally developed by Philipp Schmidt
++ at Freie Universitaet Berlin (http://www.fu-berlin.de/),
++ Computer Systems and Telematics / Distributed, Embedded Systems (DES) group \n
++ (http://cst.mi.fu-berlin.de/, http://www.des-testbed.net/) \n
++ -----------------------------------------------------------------------------\n
++ This program is free software: you can redistribute it and/or modify it under
++ the terms of the GNU General Public License as published by the Free Software
++ Foundation, either version 3 of the License, or (at your option) any later
++ version. \n
++ \n
++ This program is distributed in the hope that it will be useful, but WITHOUT
++ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
++ FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.\n
++ \n
++ You should have received a copy of the GNU General Public License along with
++ this program. If not, see http://www.gnu.org/licenses/ . \n
++ -----------------------------------------------------------------------------\n
++ For further information and questions please use the web site \n
++ http://www.des-testbed.net/
++*******************************************************************************/
++
++/***************************************************************************//**
++ *
++ * @mainpage DES-SERT
++ *
++ *
++ * @section intro_sec Introduction
++ *
++ * DES-SERT, the DES Simple and Extensible Routing-Framework for Testbeds,
++ * is a framework designed to assist researchers implementing routing
++ * protocols for testbeds.
++ *
++ * DES-SERT enables the implementation of routing protocols on top of
++ * Ethernet via an underlay (Layer 2.5) in user space.
++ * It introduces an abstraction from OS specific issues and provides
++ * functionality and data structures to implement proactive, reactive,
++ * and hybrid routing protocols.
++
++ * While generally usable in many application scenarios, it is primarily
++ * used in DES-Mesh (http://www.des-testbed.net/), the multi-transceiver
++ * wireless mesh network testbed part of the DES-Testbed at Freie
++ * Universitaet Berlin, Germany.
++ *
++ * @section arch_sec DES-SERT Architecture
++ *
++ * DES-SERT introduces some concepts to implement routing protocols.
++ * When implementing a routing protocol with DES-SERT, you should be
++ * familiar with these concepts to structure and tailor your implementation.
++ *
++ *
++ * @subsection messages_subsec DES-SERT Messages
++ *
++ * Every packet you send or receive on the mesh is represented as a
++ * DES-SERT message. From a programmers point of view, a DES-SERT message
++ * is just a C-structure:
++ *
++ * @code
++ * typedef struct __attribute__ ((__packed__)) dessert_msg {
++ * struct ether_header l2h;
++ * char proto[DESSERT_PROTO_STRLEN];
++ * uint8_t ver;
++ * uint8_t flags;
++ * union {
++ * uint32_t u32;
++ * struct __attribute__ ((__packed__)) {
++ * uint8_t ttl;
++ * uint8_t u8;
++ * uint16_t u16;
++ * };
++ * };
++ * uint16_t hlen;
++ * uint16_t plen;
++ * } dessert_msg_t;
++ * @endcode
++ *
++ * Every message sent via the underlay carries this structure as a packet
++ * header. All data in a "dessert_msg" is stored in network byte order.
++ * DES-SERT tries to care as automatically as possible of this structure.
++ * Nevertheless you will have to care at least about: "l2h.ether_dhost" and
++ * "ttl".
++ *
++ * If you need to send some data along with every packet, e.g. some kind of
++ * metric or cost your routing protocol uses, you should try to fit this
++ * data into the "u8", "u16" and the upper 4 bits of the "flags" field.
++ * These fields will never be touched by DES-SERT except on initialization
++ * via "dessert_msg_new".
++ *
++ * Because just a C-structure is not really usable as a packet, there are some
++ * utility functions around - please have a look around in "dessert.h" and the
++ * doxygen documentation. The most important ones are: "dessert_msg_new" and
++ * "dessert_msg_destroy", which do not simply allocate memory for a DES-SERT
++ * message, but for a whole packet of maximum size and initialize the
++ * structures for further packet construction/processing.
++ *
++ * @code
++ * int dessert_msg_new(dessert_msg_t **msgout);
++ *
++ * void dessert_msg_destroy(dessert_msg_t* msg);
++ * @endcode
++ *
++ *
++ * @subsection extensions_subsec DES-SERT Extensions
++ *
++ * A DES-SERT extension is some structure used to piggyback data on a
++ * DES-SERT message. It consists of a 8-bit user supplied type field (with
++ * some reserved values), an 8-bit length field and user supplied data of
++ * arbitrary length of 253 bytes at most.
++ *
++ * It can be added to a message via dessert_msg_addext(), retrieved via
++ * dessert_msg_getext() and removed via dessert_msg_delext().
++ *
++ * @code
++ * int dessert_msg_addext(dessert_msg_t* msg, dessert_ext_t** ext,
++ * uint8_t type, size_t len);
++ *
++ * int dessert_msg_delext(dessert_msg_t *msg, dessert_ext_t *ext);
++ *
++ * int dessert_msg_getext(const dessert_msg_t* msg, dessert_ext_t** ext,
++ * uint8_t type, int index);
++ *
++ * @endcode
++ *
++ * It is recommended not to put single data fields in extensions, but
++ * combine semantically related data in a struct and attach this struct
++ * as an extension because every extension carried introduces an 16-bit
++ * overhead to the packet.
++ *
++ *
++ * @subsection pipelines_subsec Processing Pipelines
++ *
++ * Routing algorithms are often split up in several parts like packet
++ * validation, loop-detection or routing table lookup.
++ * To implement these as independent and clear as possible, DES-SERT enables
++ * you to split up your packet processing in as many parts as you like.
++ *
++ * There are two separate processing pipelines - one for packets received
++ * from the kernel via a TUN or TAP interface and one for packets received
++ * via an interface used on the mesh network.
++ *
++ * You can register callbacks to be added to one of these pipelines with
++ * "dessert_sysrxcb_add" or "dessert_meshrxcb_add". Both take an additional
++ * integer argument ("priority") specifying the order the callbacks should
++ * be called. Higher "priority" value results in being called later
++ * within the pipeline.
++ *
++ * @code
++ * int dessert_sysrxcb_add(dessert_sysrxcb_t* c, int prio);
++ *
++ * int dessert_meshrxcb_add(dessert_meshrxcb_t* c, int prio);
++ * @endcode
++ *
++ * If a callback returns "DESSERT_MSG_KEEP" the packed will be processed by
++ * further callbacks, if it returns "DESSERT_MSG_DROP" the message will be
++ * dropped and no further callbacks will be called.
++ *
++ * You do not need to care about the management of the buffers for incoming
++ * messages - DES-SERT does this for you. Nevertheless if you need to add
++ * extensions or enlarge the payload of a message, you need to tell DES-SERT
++ * to enlarge the buffer for you if the flag "DESSERT_FLAG_SPARSE" is set on
++ * the message. You can do this by returning "DESSERT_MSG_NEEDNOSPARSE" from
++ * within a callback. The callback will be called again with a larger buffer
++ * and no "DESSERT_FLAG_SPARSE" flag being set.
++ *
++ *
++ * @subsection buffer_subsec Processing Buffer
++ *
++ * If you need to pass information along several callbacks, you can do this
++ * in the processing buffer passed to the the callbacks. This buffer contains
++ * some local processing flags ("lflags") set by the builtin callback
++ * "dessert_msg_ifaceflags_cb" (e.g. telling you about packet origin or if
++ * the packet is multicast) and 1KB of space for your callbacks to pass
++ * along arbitrary data.
++ *
++ * This buffer might only be allocated after you explicitly request it - in
++ * this case the proc argument is NULL and you can return the value
++ * "DESSERT_MSG_NEEDMSGPROC" from within your callback. The callback will
++ * be called again with a valid processing buffer.
++ *
++ *
++ * @section interfaces_sec Using Interfaces
++ *
++ *
++ * @subsection sysif_subsec Using a TUN/TAP interface
++ *
++ * First you have to choose whether to use a TUN or TAP interface. TUN
++ * interfaces are used to exchange IPv4 / IPv6 datagrams with the kernel
++ * network stack. TAP interfaces are used to exchange Ethernet frames
++ * with the kernel network stack. If you want to route Ethernet frames,
++ * you should choose a TAP interface. If you intend to implement
++ * a custom layer 2 to layer 3 mapping, you should use a TUN interface.
++
++ * Currently, you can only initialize and use a single sys (TUN/TAP) interface.
++ * This is done by "dessert_sysif_init". You must then set up the interface
++ * config in the kernel yourself e.g. by calling "ifconfig".
++ *
++ * @code
++ *
++ * int dessert_sysif_init(char* name, uint8_t flags);
++ *
++ * @endcode
++ *
++ * In either case, frames you receive from a TUN/TAP interface will be
++ * passed along the callbacks added by "dessert_sysrxcb_add" to the
++ * processing pipeline. Each of them will be called with a pointer to an
++ * Ethernet frame. In case of a TUN interface, "ether_shost" and "ether_dhost"
++ * are set to "00:00:00:00:00:00", and ether_type reflects whether the packet
++ * received is IPv4 oder IPv6.
++ *
++ * Packets are sent to the kernel network stack with "dessert_syssend".
++ * In case of a TUN Interface "ether_shost" and "ether_dhost" will be
++ * ignored.
++ *
++ * @code
++ * int dessert_syssend_msg(dessert_msg_t *msg);
++ *
++ * int dessert_syssend(const struct ether_header *eth, size_t len);
++ * @endcode
++ *
++ *
++ * @subsection meshif_subsec Using a Mesh Interface
++ *
++ * Mesh interfaces are used similar to the TUN/TAP interface with two major
++ * differences: You can have multiple mesh interfaces and they send and
++ * receive DES-SERT messages instead of Ethernet frames.
++ *
++ * You add an mesh interface using "dessert_meshif_add" and can send to it
++ * by calling "dessert_meshsend". If the interface parameter is NULL, the
++ * packet will be transmitted over every interface (good for flooding).
++ *
++ * @code
++ * int dessert_meshif_add(const char* dev, uint8_t flags);
++ *
++ *
++ * int dessert_meshsend(const dessert_msg_t* msgin,
++ * const dessert_meshif_t *iface);
++ *
++ * int dessert_meshsend_hwaddr(const dessert_msg_t* msgin,
++ * const uint8_t hwaddr[ETHER_ADDR_LEN]);
++ *
++ * int dessert_meshsend_allbutone(const dessert_msg_t* msgin,
++ * const dessert_meshif_t *iface);
++ *
++ * int dessert_meshsend_fast(dessert_msg_t* msg,
++ * const dessert_meshif_t *iface);
++ *
++ * int dessert_meshsend_fast_hwaddr(dessert_msg_t* msg,
++ * const uint8_t hwaddr[ETHER_ADDR_LEN]);
++ *
++ * int dessert_meshsend_fast_allbutone(dessert_msg_t* msg,
++ * const dessert_meshif_t *iface);
++ *
++ * int dessert_meshsend_raw(dessert_msg_t* msg,
++ * const dessert_meshif_t *iface);
++ * @endcode
++ *
++ * @section logging_sec Logging
++ *
++ * You can write log messages easily with a bunch of macros provided
++ * by DES-SERT ("dessert_debug", "dessert_info" ,"dessert_notice",
++ * "dessert_warn", "dessert_warning", "dessert_err", "dessert_crit",
++ * "dessert_alert" and "dessert_emerg"). Each of them can be used like
++ * "printf" and logs to Syslog, STDERR, file or a ringbuffer depending
++ * on your configuration.
++ *
++ * DES-SERT also ships with a custom "assert" macro which acts like
++ * the original macro from the standard C library and uses the logging
++ * mechanism described above.
++ *
++ *
++ * @section periodics_sec Periodics
++ *
++ * Periodics help you to perform maintenance or delayed tasks. A task
++ * consists of a callback, which will be called at the time you requested,
++ * and a void pointer the callback is passed. You can add these tasks by
++ * calling "dessert_periodic_add" or "dessert_periodic_add_delayed".
++ *
++ *
++ * @section cli_sec CLI - Command Line Interface
++ *
++ * DES-SERT supports simple configuration and debugging of your routing
++ * protocol implementation by providing a Cisco like command line interface
++ * (cli) and a config file parser based upon it.
++ * This cli is realized through libcli (http://code.google.com/p/libcli/).
++ *
++ * DES-SERT does some of the initialization of libcli. Therefore, it provides
++ * the main cli anchor "dessert_cli" and some anchors to add commands below
++ * "dessert_cli_.*". Because DES-SERT only loosely wraps libcli, you should
++ * make yourself familiar with libcli itself. This may be improved in further
++ * DES-SERT releases.
++ *
++ * You can evaluate a config file by calling "cli_file" and start a thread
++ * enabling a telnet-interface for DES-SERT by calling "dessert_cli_run".
++ *
++ *
++ * @section all_sec Putting it all together
++ *
++ * Now you have learned about the most important aspects of DES-SERT.
++ * To write your own routing protocol implementation, you need to know
++ * how to put all this together.
++ *
++ * You should start with a main() program parsing the command line options
++ * and then calling "dessert_init()". This is needed to set up DES-SERT
++ * correctly. Afterwards you can register callbacks, read the config file
++ * and do what you like. If everything is set up, you call "dessert_run()"
++ * and let the event based framework do its job.
++ *
++ * If you would like to see a complete protocol implementation sample,
++ * have a look at the "gossiping" directory.
++ *
++ *
++ * @section feedback_sec Contact & Feedback
++ *
++ * We love feedback - if you have patches, comments or questions,
++ * please contact us! Recent contact information is available on
++ * http://www.des-testbed.net/des-sert/
++ *
++ ******************************************************************************/
++
++#ifndef DESSERT_H
++#define DESSERT_H
++
++#ifdef __DARWIN__
++#include <net/if_dl.h>
++#define TUN_BSD
++#endif
++
++#ifdef __linux__
++#define TUN_LINUX
++#endif
++
++#include <net/if.h>
++#include <net/ethernet.h>
++#include <pcap.h>
++#include <stdint.h>
++#include <syslog.h>
++#include <stdlib.h>
++#include <libcli.h>
++
++/***************************************************************************//**
++ *
++ * @defgroup global G L O B A L # D E F I N E S and T Y P E D E F S / S T R U C T U R E S
++ *
++ * @brief EXTERNAL / PUBLIC
++ *
++ * @{
++ ******************************************************************************/
++
++/******************************************************************************
++ * #defines
++ ******************************************************************************/
++
++/** ethernet protocol used on layer 2 */
++#define DESSERT_ETHPROTO 0x8042
++
++/** maximum frame size to assemble as dessert_msg */
++#define DESSERT_MAXFRAMELEN ETHER_MAX_LEN
++
++/** maximum size of the data part in dessert_ext */
++#define DESSERT_MAXEXTDATALEN 130
++
++/** length of protocol string used in dessert_msg */
++#define DESSERT_PROTO_STRLEN 4
++
++/** size of local message processing buffer */
++#define DESSERT_LBUF_LEN 1024
++
++/** return code for many dessert_* functions */
++#define DESSERT_OK 0
++
++/** return code for many dessert_* functions */
++#define DESSERT_ERR 1
++
++/******************************************************************************
++ * typedefs
++ ******************************************************************************/
++/** runtime-unique frame id */
++typedef uint64_t dessert_frameid_t;
++
++/** A basic message send on des-sert layer2.5. */
++typedef struct __attribute__ ((__packed__)) dessert_msg {
++ /** the layer2 header on the wire */
++ struct ether_header l2h;
++ /** short name of the protocol as passed to dessert_init() */
++ char proto[DESSERT_PROTO_STRLEN];
++ /** version of the app as passed to dessert_init() */
++ uint8_t ver;
++ /** flags - bits 1-4 reserved for dessert, bits 5-8 for app usage */
++ uint8_t flags;
++ union {
++ /** reserved for app usage */
++ uint32_t u32;
++ struct __attribute__ ((__packed__)) {
++ /** ttl or hopcount field for app usage - 0xff if not used*/
++ uint8_t ttl;
++ /** reserved for app usage - 0x00 if not used */
++ uint8_t u8;
++ /** reserved for app usage - 0xbeef if not used */
++ uint16_t u16;
++ };
++ };
++ /** header length incl. extensions - in network byte order */
++ uint16_t hlen;
++ /** payload length - in network byte order */
++ uint16_t plen;
++} dessert_msg_t;
++
++/** local processing struct for dessert_msg_t */
++typedef struct dessert_msg_proc {
++ /** 16 bits for local processing flags */
++ uint16_t lflags;
++ /** 16 bits reserved */
++ uint16_t lreserved;
++ /** DESSERT_LBUF_LEN bytes buffer */
++ char lbuf[DESSERT_LBUF_LEN];
++} dessert_msg_proc_t;
++
++/** a extension record to add to a dessert_msg */
++typedef struct __attribute__ ((__packed__)) dessert_ext {
++ /** type of the extension
++ * user supplied types must be >= DESSERT_EXT_USER */
++ uint8_t type;
++
++ /** length of the extension in bytes
++ * including the 2 bytes of the extension
++ * header itself*/
++ uint8_t len;
++
++ /** pointer to the data - real length is len-2 bytes */
++ uint8_t data[DESSERT_MAXEXTDATALEN];
++} dessert_ext_t;
++
++/** an interface used for dessert_msg frames */
++typedef struct dessert_meshif {
++ /** pointer to next interface */
++ struct dessert_meshif *next;
++ /** pointer to next interface */
++ struct dessert_meshif *prev;
++ /** name of interface */
++ char if_name[IFNAMSIZ];
++ /** system ifindex */
++ unsigned int if_index;
++ /** hardware address of interface */
++ uint8_t hwaddr[ETHER_ADDR_LEN]; /* uthash key*/
++ /** counter mutex */
++ pthread_mutex_t cnt_mutex;
++ /** packet counter in */
++ uint64_t ipkts;
++ /** packet counter out */
++ uint64_t opkts;
++ /** packet counter in */
++ uint64_t ibytes;
++ /** packet counter out */
++ uint64_t obytes;
++ /** libpcap descriptor for the interface */
++ pcap_t *pcap;
++ /** libpcap error message buffer */
++ char pcap_err[PCAP_ERRBUF_SIZE];
++ /** pthread running the request loop */
++ pthread_t worker;
++} dessert_meshif_t;
++
++/** A tun/tap interface used to inject packets to dessert implemented daemons.
++ *
++ * \note Please make sure first fields are equal to dessert_meshif to re-use
++ * _dessert_meshif_gethwaddr().
++ *
++ */
++typedef struct dessert_sysif {
++ /** pointer to next interface */
++ struct dessert_sysif *next;
++ /** name of interface */
++ char if_name[IFNAMSIZ];
++ /** system ifindex */
++ unsigned int if_index;
++ /** hardware address of the interface */
++ uint8_t hwaddr[ETHER_ADDR_LEN];
++ /** counter mutex */
++ pthread_mutex_t cnt_mutex;
++ /** packet counter in */
++ uint64_t ipkts;
++ /** packet counter out */
++ uint64_t opkts;
++ /** packet counter in */
++ uint64_t ibytes;
++ /** packet counter out */
++ uint64_t obytes;
++ /** file descriptor to read/write from/to */
++ int fd;
++ /** if it is a tun or tap interface */
++ uint8_t flags;
++ /** pthread running the request loop */
++ pthread_t worker;
++} dessert_sysif_t;
++
++/** Callback type to call if a packed is received via a dessert mesh interface.
++ *
++ * @param *msg dessert_msg_t frame received
++ * @param len length of the buffer pointed to from dessert_msg_t
++ * @param *proc local processing buffer passed along the callback pipeline - may be NULL
++ * @param *iface interface received packet on - may be NULL
++ * @param id unique internal frame id of the packet
++ *
++ * @retval DESSERT_MSG_KEEP to continue processing the packet
++ * @retval DESSERT_MSG_DROP to drop it
++ * @retval DESSERT_MSG_NEEDMSGPROC to get a processing buffer
++ * @retval DESSERT_MSG_NEEDNOSPARSE to get a full packet buffer (e.g. needed to add extensions)
++ *
++ * \warning The callbacks are invoked with no locks hold by the thread,
++ * \warning YOU MUST make sure the thread holds no locks after the callback exits.
++ * \warning YOU MUST also make sure not to do anything blocking in a callback!
++ *
++ * If the callback exits with DESSERT_MSG_NEEDMSGPROC or DESSERT_MSG_NEEDNOSPARSE
++ * and the respective buffer is NULL or sparse, the callback is called again after
++ * providing the requested resource.
++ *
++ */
++typedef int dessert_meshrxcb_t(dessert_msg_t* msg, size_t len, dessert_msg_proc_t *proc, const dessert_meshif_t *iface, dessert_frameid_t id);
++
++/** Callback type to call if a packed should be injected into dessert via a tun/tap interface.
++ *
++ * @param *msg dessert msg received - original ethernet frame is encapsulated within
++ * @param len length of ethernet frame received
++ * @param *proc local processing buffer passed along the callback pipeline - may be NULL
++ * @param *sysif interface received packet on
++ * @param id unique internal frame id of the packet
++ *
++ * @retval DESSERT_MSG_KEEP to continue processing the packet
++ * @retval DESSERT_MSG_DROP to drop it
++ *
++ * \warning The callbacks are invoked with no locks hold by the thread,
++ * \warning YOU MUST make sure the thread holds no locks after the callback exits.
++ * \warning YOU MUST also make sure not to do anything blocking in a callback!
++ *
++*/
++typedef int dessert_sysrxcb_t(dessert_msg_t *msg, size_t len, dessert_msg_proc_t *proc, dessert_sysif_t *sysif, dessert_frameid_t id);
++
++/** callbacks type to call in a periodic task
++ *
++ * The callbacks are invoked with no locks hold by the thread,
++ * YOU MUST make sure the thread holds no locks after the callback exits.
++ * YOU MUST also make sure not to do anything blocking in a callback!
++ *
++ * @arg *data void pointer to pass to the callback
++ * @arg scheduled when this call was scheduled
++ * @arg interval how often this call should be scheduled
++ * ®return should be 0, otherwise the callback is unregistered
++ */
++typedef int dessert_periodiccallback_t(void *data, struct timeval *scheduled, struct timeval *interval);
++
++/** definition of a periodic tasklist entry */
++typedef struct dessert_periodic {
++ /** callback to call */
++ dessert_periodiccallback_t *c;
++ /** when to call next */
++ struct timeval scheduled;
++ /** call every */
++ struct timeval interval;
++ /** data pointer to pass to callback */
++ void *data;
++ /** internal pointer for task list */
++ struct dessert_periodic *next;
++} dessert_periodic_t;
++
++/***************************************************************************//**
++ * @}
++ *
++ * @defgroup core C O R E
++ *
++ * @brief EXTERNAL / PUBLIC
++ *
++ * @{
++ ******************************************************************************/
++
++/******************************************************************************
++ * #defines
++ ******************************************************************************/
++
++/** type for local unique packet identification */
++#define DESSERT_FRAMEID_MAX ((uint64_t)-1)
++
++/** flag for dessert_init - daemonize when calling
++ * disables logging to STDERR */
++#define DESSERT_OPT_DAEMONIZE 0x0100
++
++/** flag for dessert_init - do not daemonize when calling */
++#define DESSERT_OPT_NODAEMONIZE 0x0200
++
++/** flag for dessert_init - create and write pid file */
++#define DESSERT_OPT_PID 0x0400
++
++/** flag for dessert_init - do not create and write pid file */
++#define DESSERT_OPT_NOPID 0x0800
++
++/******************************************************************************
++ * globals
++ ******************************************************************************/
++
++/** protocol string used in dessert_msg frames */
++extern char dessert_proto[DESSERT_PROTO_STRLEN+1];
++
++/** version int used in dessert_msg frames */
++extern u_int8_t dessert_ver;
++
++/** default src address used for local generated dessert_msg frames */
++extern u_int8_t dessert_l25_defsrc[ETHER_ADDR_LEN];
++
++
++/** constant holding ethernet broadcast address after dessert_init */
++extern u_char ether_broadcast[ETHER_ADDR_LEN];
++
++/** constant holding ethernet null address after dessert_init */
++extern u_char ether_null[ETHER_ADDR_LEN];
++
++/** the config funnel */
++extern pthread_rwlock_t dessert_cfglock;
++
++/******************************************************************************
++ * functions
++ ******************************************************************************/
++
++int dessert_init(const char* proto, int version, uint16_t opts, char* pidfile);
++
++int dessert_run(void);
++void dessert_exit(void);
++
++/***************************************************************************//**
++ * @}
++ *
++ * @defgroup cli C L I - C O M M A N D _ L I N E _ I N T E R F A C E
++ *
++ * @brief EXTERNAL / PUBLIC
++ *
++ * @{
++ ******************************************************************************/
++
++/******************************************************************************
++ * globals
++ ******************************************************************************/
++
++extern struct cli_def *dessert_cli;
++
++extern struct cli_command *dessert_cli_show;
++extern struct cli_command *dessert_cli_cfg_iface;
++extern struct cli_command *dessert_cli_cfg_no;
++extern struct cli_command *dessert_cli_cfg_no_iface;
++extern struct cli_command *dessert_cli_cfg_set;
++extern struct cli_command *dessert_cli_cfg_logging;
++extern struct cli_command *dessert_cli_cfg_no_logging;
++
++/******************************************************************************
++ * functions
++ ******************************************************************************/
++
++int dessert_cli_run(int port);
++
++/***************************************************************************//**
++ * @}
++ *
++ * @defgroup log L O G _ F A C I L I T Y
++ *
++ * @brief EXTERNAL / PUBLIC
++ *
++ * @{
++ ******************************************************************************/
++
++/******************************************************************************
++ * #defines
++ ******************************************************************************/
++
++/** flag for dessert_logcfg - enable syslog logging */
++#define DESSERT_LOG_SYSLOG 0x0001
++
++/** flag for dessert_logcfg - disable syslog logging */
++#define DESSERT_LOG_NOSYSLOG 0x0002
++
++/** flag for dessert_logcfg - enable logfile logging
++ * @warning before using this you MUST use fopen(dessert_logfd, ...) to open the logfile */
++#define DESSERT_LOG_FILE 0x0004
++
++/** flag for dessert_logcfg - disable logfile logging */
++#define DESSERT_LOG_NOFILE 0x0008
++
++/** flag for dessert_logcfg - enable logging to stderr */
++#define DESSERT_LOG_STDERR 0x0010
++
++/** flag for dessert_logcfg - disable logging to stderr */
++#define DESSERT_LOG_NOSTDERR 0x0020
++
++/** flag for dessert_logcfg - enable logging to ringbuffer */
++#define DESSERT_LOG_RBUF 0x0040
++
++/** flag for dessert_logcfg - disable logging to ringbuffer */
++#define DESSERT_LOG_NORBUF 0x0080
++
++/** flag for dessert_logcfg - enable debug loglevel */
++#define DESSERT_LOG_DEBUG 0x0100
++
++/** flag for dessert_logcfg - disable debug loglevel */
++#define DESSERT_LOG_NODEBUG 0x0200
++
++/******************************************************************************
++ * functions
++ ******************************************************************************/
++int dessert_logcfg(uint16_t opts);
++void _dessert_log(int level, const char* func, const char* file, int line, const char *fmt, ...);
++/** log at DEBUG level */
++#define dessert_debug(...) _dessert_log(LOG_DEBUG, __FUNCTION__, __FILE__, __LINE__, __VA_ARGS__)
++/** log at INFO level */
++#define dessert_info(...) _dessert_log(LOG_INFO, __FUNCTION__, __FILE__, __LINE__, __VA_ARGS__)
++/** log at NOTICE level */
++#define dessert_notice(...) _dessert_log(LOG_NOTICE, __FUNCTION__, __FILE__, __LINE__, __VA_ARGS__)
++/** log at WARNING level */
++#define dessert_warn(...) _dessert_log(LOG_WARNING, __FUNCTION__, __FILE__, __LINE__, __VA_ARGS__)
++/** log at WARNING level */
++#define dessert_warning(...) _dessert_log(LOG_WARNING, __FUNCTION__, __FILE__, __LINE__, __VA_ARGS__)
++/** log at ERR level */
++#define dessert_err(...) _dessert_log(LOG_ERR, __FUNCTION__, __FILE__, __LINE__, __VA_ARGS__)
++/** log at CRIT level */
++#define dessert_crit(...) _dessert_log(LOG_CRIT, __FUNCTION__, __FILE__, __LINE__, __VA_ARGS__)
++/** log at ALERT level */
++#define dessert_alert(...) _dessert_log(LOG_ALERT, __FUNCTION__, __FILE__, __LINE__, __VA_ARGS__)
++/** log at EMERG level */
++#define dessert_emerg(...) _dessert_log(LOG_EMERG, __FUNCTION__, __FILE__, __LINE__, __VA_ARGS__)
++
++/***************************************************************************//**
++ * @}
++ *
++ * @defgroup mesh M E S H - I N T E R F A C E S
++ *
++ * @brief EXTERNAL / PUBLIC
++ *
++ * @{
++ ******************************************************************************/
++
++/******************************************************************************
++ * #defines
++ ******************************************************************************/
++
++/** return code for dessert_meshrxcb_t - forces to copy the message and call again*/
++#define DESSERT_MSG_NEEDNOSPARSE 1
++
++/** return code for dessert_meshrxcb_t - forces to generate processing info and call again*/
++#define DESSERT_MSG_NEEDMSGPROC 2
++
++/** return code for dessert_meshrxcb_t and dessert_sysrxcb_t */
++#define DESSERT_MSG_KEEP 0
++
++/** return code for dessert_meshrxcb_t and dessert_sysrxcb_t */
++#define DESSERT_MSG_DROP -1
++
++/** flag for dessert_meshif_add - set interface in promiscuous-mode (default) */
++#define DESSERT_IF_PROMISC 0x0
++
++/** flag for dessert_meshif_add - do not set interface in promiscuous-mode */
++#define DESSERT_IF_NOPROMISC 0x1
++
++/** flag for dessert_meshif_add - filter out non-des-sert frames in libpcap (default) */
++#define DESSERT_IF_FILTER 0x0
++
++/** flag for dessert_meshif_add - do not filter out non-des-sert frames in libpcap */
++#define DESSERT_IF_NOFILTER 0x2
++
++/******************************************************************************
++ * functions
++ ******************************************************************************/
++
++/* sending messages */
++int dessert_meshsend(const dessert_msg_t* msgin, const dessert_meshif_t *iface);
++int dessert_meshsend_allbutone(const dessert_msg_t* msgin, const dessert_meshif_t *iface);
++int dessert_meshsend_hwaddr(const dessert_msg_t* msgin, const uint8_t hwaddr[ETHER_ADDR_LEN]);
++int dessert_meshsend_randomized(const dessert_msg_t* msgin);
++
++int dessert_meshsend_fast(dessert_msg_t* msg, const dessert_meshif_t *iface);
++int dessert_meshsend_fast_allbutone(dessert_msg_t* msg, const dessert_meshif_t *iface);
++int dessert_meshsend_fast_hwaddr(dessert_msg_t* msg, const uint8_t hwaddr[ETHER_ADDR_LEN]);
++int dessert_meshsend_fast_randomized(dessert_msg_t* msgin);
++int dessert_meshsend_raw(dessert_msg_t* msg, const dessert_meshif_t *iface);
++
++/* meshrx-callback handling */
++int dessert_meshrxcb_add(dessert_meshrxcb_t* c, int prio);
++int dessert_meshrxcb_del(dessert_meshrxcb_t* c);
++
++/* mesh interface handling */
++int dessert_meshif_add(const char* dev, uint8_t flags);
++int dessert_meshif_del(const char* dev);
++
++dessert_meshif_t * dessert_meshif_get_name(const char* dev);
++dessert_meshif_t * dessert_meshif_get_hwaddr(const uint8_t hwaddr[ETHER_ADDR_LEN]);
++dessert_meshif_t * dessert_meshiflist_get(void);
++/*\}*/
++/***************************************************************************//**
++ * @}
++ *
++ * @defgroup sys S Y S - I N T E R F A C E S
++ *
++ * @brief EXTERNAL / PUBLIC
++ *
++ * @{
++ ******************************************************************************/
++
++/******************************************************************************
++ * #defines
++ ******************************************************************************/
++
++/** flag for dessert_sysif_init - open tun (ip/ipv6) device */
++#define DESSERT_TUN 0x00
++
++/** flag for dessert_sysif_init - open tap (ethernet) device */
++#define DESSERT_TAP 0x01
++
++/** flag for dessert_sysif_init - set dessert_l25_defsrc to mac of tap device */
++#define DESSERT_MAKE_DEFSRC 0x02
++
++/** flag for dessert_sysif_init - get mac for tap failed - try mac in src of first packet */
++#define _DESSERT_TAP_NOMAC 0x80
++
++/******************************************************************************
++ * functions
++ ******************************************************************************/
++
++int dessert_sysif_init(char* name, uint8_t flags);
++
++int dessert_sysrxcb_add(dessert_sysrxcb_t* c, int prio);
++int dessert_sysrxcb_del(dessert_sysrxcb_t* c);
++
++int dessert_syssend_msg(dessert_msg_t *msg);
++int dessert_syssend(const struct ether_header *eth, size_t len);
++
++/***************************************************************************//**
++ * @}
++ *
++ * @defgroup msg M E S S A G E _ H A N D L I N G
++ *
++ * @brief EXTERNAL / PUBLIC
++ *
++ * @{
++ ******************************************************************************/
++
++/******************************************************************************
++ * #defines
++ ******************************************************************************/
++
++/** flag for dessert_msg.flags - message len is hlen+plen
++ * if not set buffer len is assumed as DESSERT_MAXFRAMELEN + DESSERT_MSGPROCLEN */
++#define DESSERT_FLAG_SPARSE 0x1
++
++/* *********************** */
++
++/** flag for dessert_msg_proc.lflags - l25 src is one of our interfaces */
++#define DESSERT_LFLAG_SRC_SELF 0x0002
++
++/** flag for dessert_msg_proc.lflags - l25 dst is multicast address*/
++#define DESSERT_LFLAG_DST_MULTICAST 0x0004
++
++/** flag for dessert_msg_proc.lflags - l25 dst is one of our interfaces */
++#define DESSERT_LFLAG_DST_SELF 0x0008
++
++/** flag for dessert_msg_proc.lflags - l25 dst is broadcast */
++#define DESSERT_LFLAG_DST_BROADCAST 0x0010
++
++/** flag for dessert_msg_proc.lflags - l2 src is one of our interfaces */
++#define DESSERT_LFLAG_PREVHOP_SELF 0x0020
++
++/** flag for dessert_msg_proc.lflags - l2 dst is one of our interfaces */
++#define DESSERT_LFLAG_NEXTHOP_SELF 0x0040
++
++/** flag for dessert_msg_proc.lflags - l2 dst is broadcast */
++#define DESSERT_LFLAG_NEXTHOP_BROADCAST 0x0080
++
++/** flag for dessert_msg_proc.lflags - l25 dst is one of our interfaces,
++ * but we received the message not via the indented interface, e.g. we
++ * overheard it */
++#define DESSERT_LFLAG_DST_SELF_OVERHEARD 0x0100
++
++/** flag for dessert_msg_proc.lflags - l2 dst is one of our interfaces,
++ * but we received the message not via the indented interface, e.g. we
++ * overheard it */
++#define DESSERT_LFLAG_NEXTHOP_SELF_OVERHEARD 0x0200
++
++/* *********************** */
++
++/** length of dessert_ext header */
++#define DESSERT_EXTLEN (sizeof(struct dessert_ext) - DESSERT_MAXEXTDATALEN)
++
++/** dessert_ext type wildcard - any extension */
++#define DESSERT_EXT_ANY 0x00
++
++/** dessert_ext type for ethernet header */
++#define DESSERT_EXT_ETH 0x01
++
++/** dessert_ext type for packet tracing */
++#define DESSERT_EXT_TRACE 0x02
++
++/** first dessert_ext type for usage by the user */
++#define DESSERT_EXT_USER 0x40
++
++/* *********************** */
++
++/** packet tracing flag - only record hosts */
++#define DESSERT_MSG_TRACE_HOST (ETHER_ADDR_LEN)
++
++/** packet tracing flag - record interfaces */
++#define DESSERT_MSG_TRACE_IFACE (3*ETHER_ADDR_LEN)
++
++/* *********************** */
++
++/** Returns the length of a given extension. */
++#define dessert_ext_getdatalen(ext) (ext->len - DESSERT_EXTLEN)
++
++/******************************************************************************
++ * functions
++ ******************************************************************************/
++
++int dessert_msg_new(dessert_msg_t **msgout);
++int dessert_msg_clone(dessert_msg_t **msgnew, const dessert_msg_t *msgold, uint8_t sparse);
++int dessert_msg_check(const dessert_msg_t* msg, size_t len);
++void dessert_msg_dump(const dessert_msg_t* msg, size_t len, char *buf, size_t blen);
++void dessert_msg_destroy(dessert_msg_t* msg);
++
++int dessert_msg_ethencap(const struct ether_header* eth, size_t eth_len, dessert_msg_t **msgout);
++int dessert_msg_ethdecap(const dessert_msg_t* msg, struct ether_header** ethout);
++struct ether_header* dessert_msg_getl25ether (const dessert_msg_t* msg);
++
++int dessert_msg_proc_clone(dessert_msg_proc_t **procnew, const dessert_msg_proc_t *procold);
++void dessert_msg_proc_dump(const dessert_msg_t* msg, size_t len, const dessert_msg_proc_t *proc, char *buf, size_t blen);
++void dessert_msg_proc_destroy(dessert_msg_proc_t* proc);
++
++int dessert_msg_addpayload(dessert_msg_t* msg, void** payload, int len);
++int dessert_msg_getpayload(dessert_msg_t *msg, void **payload);
++int dessert_msg_addext(dessert_msg_t* msg, dessert_ext_t** ext, uint8_t type, size_t len);
++int dessert_msg_delext(dessert_msg_t *msg, dessert_ext_t *ext);
++int dessert_msg_resizeext(dessert_msg_t *msg, dessert_ext_t *ext, size_t new_len);
++int dessert_msg_getext(const dessert_msg_t* msg, dessert_ext_t** ext, uint8_t type, int index);
++int dessert_msg_get_ext_count(const dessert_msg_t* msg, uint8_t type);
++
++int dessert_msg_trace_initiate(dessert_msg_t* msg, int mode);
++int dessert_msg_trace_dump(const dessert_msg_t* msg, char* buf, int blen);
++
++int dessert_msg_dump_cb(dessert_msg_t* msg, size_t len, dessert_msg_proc_t *proc, const dessert_meshif_t *iface, dessert_frameid_t id);
++int dessert_msg_check_cb(dessert_msg_t* msg, size_t len, dessert_msg_proc_t *proc, const dessert_meshif_t *iface, dessert_frameid_t id);
++int dessert_msg_trace_cb(dessert_msg_t* msg, size_t len, dessert_msg_proc_t *proc, const dessert_meshif_t *iface, dessert_frameid_t id);
++int dessert_msg_ifaceflags_cb(dessert_msg_t* msg, size_t len, dessert_msg_proc_t *proc, const dessert_meshif_t *riface, dessert_frameid_t id);
++
++/***************************************************************************//**
++ * @}
++ *
++ * @defgroup periodic P E R I O D I C _ T A S K S
++ *
++ * @brief EXTERNAL / PUBLIC
++ *
++ * @{
++ ******************************************************************************/
++
++dessert_periodic_t *dessert_periodic_add(dessert_periodiccallback_t* c, void *data, const struct timeval *scheduled, const struct timeval *interval);
++dessert_periodic_t *dessert_periodic_add_delayed(dessert_periodiccallback_t* c, void *data, int delay);
++int dessert_periodic_del(dessert_periodic_t *p);
++
++/***************************************************************************//**
++ * @}
++ *
++ * @defgroup agentx NET - S N M P // A G E N T _ X
++ *
++ * @brief EXTERNAL / PUBLIC
++ *
++ * @{
++ ******************************************************************************/
++
++/******************************************************************************
++ * #defines
++ ******************************************************************************/
++/** Flag indicating the dessert_agentx_appstats_t is of type bool. */
++#define DESSERT_APPSTATS_VALUETYPE_BOOL 0
++
++/** Flag indicating the dessert_agentx_appstats_t is of type int32. */
++#define DESSERT_APPSTATS_VALUETYPE_INT32 1
++
++/** Flag indicating the dessert_agentx_appstats_t is of type uint32. */
++#define DESSERT_APPSTATS_VALUETYPE_UINT32 2
++
++/** Flag indicating the dessert_agentx_appstats_t is of type counter64. */
++#define DESSERT_APPSTATS_VALUETYPE_COUNTER64 3
++
++/** Flag indicating the dessert_agentx_appstats_t is of type octetstring. */
++#define DESSERT_APPSTATS_VALUETYPE_OCTETSTRING 4
++
++/* *********************** */
++
++/** Flag indicating the dessert_agentx_appstats_t does not contain information regarding a node or a link. */
++#define DESSERT_APPSTATS_NODEORLINK_NONE 0
++
++/** Flag indicating the dessert_agentx_appstats_t contains information regarding a node. */
++#define DESSERT_APPSTATS_NODEORLINK_NODE 1
++
++/** Flag indicating the dessert_agentx_appstats_t contains information regarding a link. */
++#define DESSERT_APPSTATS_NODEORLINK_LINK 2
++
++/* *********************** */
++
++/** What is considered to be TRUE in a dessert_agentx_appstats_t. */
++#define DESSERT_APPSTATS_BOOL_TRUE 1
++
++/** What is considered to be FALSE in a dessert_agentx_appstats_t. */
++#define DESSERT_APPSTATS_BOOL_FALSE 0
++
++/* *********************** */
++
++/** Flag indicating the dessert_agentx_appparams_t is of type bool. */
++#define DESSERT_APPPARAMS_VALUETYPE_BOOL 0
++
++/** Flag indicating the dessert_agentx_appparams_t is of type int32. */
++#define DESSERT_APPPARAMS_VALUETYPE_INT32 1
++
++/** Flag indicating the dessert_agentx_appparams_t is of type uint32. */
++#define DESSERT_APPPARAMS_VALUETYPE_UINT32 2
++
++/** Flag indicating the dessert_agentx_appparams_t is of type octetstring. */
++#define DESSERT_APPPARAMS_VALUETYPE_OCTETSTRING 3
++
++/* *********************** */
++
++/** What is considered to be TRUE in a dessert_agentx_appparams_t. */
++#define DESSERT_APPPARAMS_BOOL_TRUE 1
++
++/** What is considered to be FALSE in a dessert_agentx_appparams_t. */
++#define DESSERT_APPPARAMS_BOOL_FALSE 0
++
++/* *********************** */
++
++/** Flag indicating if a appstats callback entry is of type bulk. */
++#define DESSERT_APPSTATS_CB_BULK 1
++/** Flag indicating if a appstats callback entry is of type nobulk. */
++#define DESSERT_APPSTATS_CB_NOBULK 2
++
++/******************************************************************************
++ * typedefs
++ ******************************************************************************/
++
++/** An abstract data type representing some statistical datum.*/
++typedef struct dessert_agentx_appstats {
++
++ /** A prev pointer. @internal */
++ struct dessert_agentx_appstats *prev;
++ /** A next pointer. @internal */
++ struct dessert_agentx_appstats *next;
++
++ /** The name of the datum. */
++ char name[256];
++ /** A description of the datum*/
++ char desc[256];
++
++ /** The type of the datum.
++ *
++ * @see For valid values please refer to: \n DESSERT_APPSTATS_VALUETYPE_BOOL
++ * @see DESSERT_APPSTATS_VALUETYPE_INT32
++ * @see DESSERT_APPSTATS_VALUETYPE_UINT32
++ * @see DESSERT_APPSTATS_VALUETYPE_COUNTER64
++ * @see DESSERT_APPSTATS_VALUETYPE_OCTETSTRING
++ */
++ int value_type;
++ /** Indicates if this datum contains information about a node or a link
++ *
++ * @see For valid values please refer to: \n DESSERT_APPSTATS_NODEORLINK_NONE
++ * @see DESSERT_APPSTATS_NODEORLINK_NODE
++ * @see DESSERT_APPSTATS_NODEORLINK_LINK
++ */
++ int node_or_link;
++
++ /** Field representing a mac address if this datum contains information about a node or a link. */
++ uint8_t macaddress1 [ETHER_ADDR_LEN];
++ /** Field representing a mac address if this datum contains information about a link. */
++ uint8_t macaddress2 [ETHER_ADDR_LEN];
++
++ union {
++ /** A boolean.
++ *
++ * @see For valid values please refer to: \n DESSERT_APPSTATS_BOOL_TRUE
++ * @see DESSERT_APPSTATS_BOOL_FALSE
++ */
++ uint8_t bool;
++ /** A 32bit signed integer. */
++ int32_t int32;
++ /** A 32bit unsigned integer. */
++ uint32_t uint32;
++ /** A 64bit unsigned integer with counter semantics */
++ uint64_t counter64;
++
++ struct {
++ /** The length of the octetstring field. */
++ uint8_t octetstring_len;
++ /** Character pointer to some raw bytes. */
++ char *octetstring;
++ };
++ };
++
++} dessert_agentx_appstats_t;
++
++/** An abstract data type representing some parameter.*/
++typedef struct dessert_agentx_appparams {
++
++ /** Internal. @internal */
++ struct dessert_agentx_appparams *prev;
++ /** Internal. @internal */
++ struct dessert_agentx_appparams *next;
++
++ /** Internal. @internal Internal. */
++ uint8_t index;
++
++ /** The name of the datum. */
++ char name[256];
++ /** A description of the datum*/
++ char desc[256];
++
++ /** The type of the parameter.
++ *
++ * @see For valid values please refer to: \n DESSERT_APPPARAMS_VALUETYPE_BOOL
++ * @see DESSERT_APPPARAMS_VALUETYPE_INT32
++ * @see DESSERT_APPPARAMS_VALUETYPE_UINT32
++ * @see DESSERT_APPPARAMS_VALUETYPE_OCTETSTRING
++ */
++ int value_type;
++
++ union {
++ /** A boolean.
++ *
++ * @see For valid values please refer to: \n DESSERT_APPPARAMS_BOOL_TRUE
++ * @see DESSERT_APPPARAMS_BOOL_FALSE
++ */
++ uint8_t bool;
++ /** A 32bit signed integer. */
++ int32_t int32;
++ /** A 32bit unsigned integer. */
++ uint32_t uint32;
++
++ struct {
++ /** The length of the octetstring field. */
++ uint16_t octetstring_len;
++ /** Character pointer to some raw bytes. */
++ char *octetstring;
++ };
++ };
++
++} dessert_agentx_appparams_t;
++
++/** Callback type to call if the AppstatsTable is asked for by some snmp client.
++ *
++ * @param *appstats dessert_agentx_appstats_t the statistical datum to be filled out
++ *
++ *
++ * @retval DESSERT_OK on success
++ * @retval DESSERT_ERR to remove the corresponding callback entry
++ *
++ */
++typedef int dessert_agentx_appstatscb_get_t(struct dessert_agentx_appstats *appstats);
++
++/** Callback type to call if the AppparamsTable is asked for by some snmp client.
++ *
++ * @param *appstats dessert_agentx_appparams_t the parameter to be filled out
++ *
++ *
++ * @retval DESSERT_OK on success
++ * @retval DESSERT_ERR to remove the corresponding callback entry
++ *
++ */
++typedef int dessert_agentx_appparamscb_get_t(struct dessert_agentx_appparams *appparams);
++
++/** Callback type to call if the specific row represented by this callback is
++ * going to be set by some snmp client.
++ *
++ * @param *appstats dessert_agentx_appparams_t the new value
++ *
++ *
++ * @retval DESSERT_OK on success
++ * @retval DESSERT_ERR otherwise
++ *
++ */
++typedef int dessert_agentx_appparamscb_set_t(struct dessert_agentx_appparams *appparams);
++
++/** A callback entry representing a statistical datum. */
++typedef struct dessert_agentx_appstats_cb_entry {
++
++ /** Interal. @internal */
++ struct dessert_agentx_appstats_cb_entry *prev;
++ /** Interal. @internal */
++ struct dessert_agentx_appstats_cb_entry *next;
++
++ /** Flag indicating whether this entry represents a bulk entry.*/
++ uint8_t isbulk_flag;
++
++ /** The getter callback. */
++ dessert_agentx_appstatscb_get_t *c;
++
++} dessert_agentx_appstats_cb_entry_t;
++
++/** A callback entry representing a parameter. */
++typedef struct dessert_agentx_appparams_cb_entry {
++
++ /** Internal. @internal */
++ struct dessert_agentx_appparams_cb_entry *prev;
++ /** Internal. @internal*/
++ struct dessert_agentx_appparams_cb_entry *next;
++
++ /** Internal. @internal */
++ uint8_t index;
++
++ /** The getter callback. */
++ dessert_agentx_appparamscb_get_t *get;
++ /** The setter callback. */
++ dessert_agentx_appparamscb_set_t *set;
++
++} dessert_agentx_appparams_cb_entry_t;
++
++
++/******************************************************************************
++ * globals
++ ******************************************************************************/
++
++
++/******************************************************************************
++ * functions
++ ******************************************************************************/
++dessert_agentx_appstats_t *dessert_agentx_appstats_new(void);
++void dessert_agentx_appstats_destroy(dessert_agentx_appstats_t *appstat);
++
++dessert_agentx_appstats_cb_entry_t *dessert_agentx_appstats_add(dessert_agentx_appstatscb_get_t *c);
++dessert_agentx_appstats_cb_entry_t *dessert_agentx_appstats_add_bulk(dessert_agentx_appstatscb_get_t *c);
++int dessert_agentx_appstats_del(dessert_agentx_appstats_cb_entry_t *e);
++
++dessert_agentx_appparams_t *dessert_agentx_appparam_new(void);
++void dessert_agentx_appparam_destroy(dessert_agentx_appparams_t *appparam);
++
++dessert_agentx_appparams_cb_entry_t *dessert_agentx_appparams_add(dessert_agentx_appparamscb_get_t *get, dessert_agentx_appparamscb_set_t *set);
++int dessert_agentx_appparams_del(dessert_agentx_appparams_cb_entry_t *e);
++
++/**************************************************************************//**
++ * @}
++ *
++ * @defgroup macros U S E F U L L _ MA C R O S
++ *
++ * @brief EXTERNAL / PUBLIC
++ *
++ * @{
++ ******************************************************************************/
++
++/** A convenience macro to safely iterate the list of mesh interfaces.
++ *
++ * @param __interface pointer to a temporal dessert_meshif_t
++ *
++ * @warning You must pair it with an ending MESHIFLIST_ITERATOR_STOP() macro!
++ * Please find an usage example in the Examples paragraph below.
++ *
++ * @par Examples:
++ *
++ * @li The do_something() function will be called for every mesh interface in the list.
++ * @code
++ * dessert_meshif_t *iface;
++ *
++ * MESHIFLIST_ITERATOR_START(iface)
++ * do_something(iface); // do something to every iface
++ * MESHIFLIST_ITERATOR_STOP;
++ * @endcode
++ */
++#define MESHIFLIST_ITERATOR_START(__interface) \
++pthread_rwlock_rdlock(&dessert_cfglock); \
++DL_FOREACH(dessert_meshiflist_get(), __interface) {
++
++/** A convenience macro to safely iterate the list of mesh interfaces.
++ *
++ * @see MESHIFLIST_ITERATOR_START()
++ */
++#define MESHIFLIST_ITERATOR_STOP } pthread_rwlock_unlock(&dessert_cfglock)
++
++/** A convenience macro to safely add @a __sec seconds and @a __usec microseconds
++ * to the @c struct @c timeval @a __tv in an <em>invariant respecting</em> manner.
++ *
++ * @param __tv the @c struct @c timeval to add to
++ * @param __sec the number of seconds to add up to @a __tv->tv_sec
++ * @param __usec the number of microseconds to add up to @a __tv.->tv_usec
++ *
++ * %DESCRIPTION: \n
++ * The <a href="http://www.gnu.org/s/libc/manual/html_node/Elapsed-Time.html#Elapsed-Time">GNU C Library Documentation</a>
++ * states about the @c tv_usec member of the @c struct @c timeval: <em>This is the
++ * rest of the elapsed time (a fraction of a second), represented as the number
++ * of microseconds. It is always less than one @a million.</em>
++ *
++ */
++#define TIMEVAL_ADD(__tv, __sec, __usec) \
++ do { \
++ (__tv)->tv_sec += __sec; \
++ (__tv)->tv_usec += __usec; \
++ if((__tv)->tv_usec >= 1000000) { \
++ ++(__tv)->tv_sec; \
++ (__tv)->tv_usec -= 1000000; \
++ } \
++ } while(0)
++
++#define likely(x) (__builtin_expect((x),1))
++#define unlikely(x) (__builtin_expect((x),0))
++
++#define __dessert_assert(func, file, line, e) \
++ ((void)_dessert_log(LOG_EMERG, func, file, line, "assertion `%s' failed!\n", e), abort)
++
++#ifdef NDEBUG
++#define assert(e) ((void)0)
++#else
++#define assert(e) \
++ (__builtin_expect(!(e), 0) ? __dessert_assert(__FUNCTION__, __FILE__, __LINE__, #e) : (void)0)
++#endif
++
++/** @} */
++
++/******************************************************************************
++ *
++ * ! ! ! ! O L D ! ! ! T O D O ! ! ! !
++ *
++ ******************************************************************************/
++
++/** the config-flag variable */
++//extern uint16_t dessert_cfgflags; // TODO not used! to be removed??!?
++
++/** size of a dessert_msg buffer */
++//#define dessert_msg_buflen(x) ((x->flags&DESSERT_FLAG_SPARSE)?(x->hlen+x->plen):(DESSERT_MAXFRAMELEN+DESSERT_MSGPROCLEN))
++
++//#define dessert_frameid_overflow(x, y) ((x>y)&&((x-y)>(DESSERT_FRAMEID_MAX/2)))
++
++
++#endif /* DESSERT_H*/
+Index: libdessert0.86-0.86.14/include/dessert/utlist.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/include/dessert/utlist.h 2009-12-09 16:38:27.246011666 +0100
+@@ -0,0 +1,349 @@
++/*
++Copyright (c) 2007-2009, Troy D. Hanson
++All rights reserved.
++
++Redistribution and use in source and binary forms, with or without
++modification, are permitted provided that the following conditions are met:
++
++ * Redistributions of source code must retain the above copyright
++ notice, this list of conditions and the following disclaimer.
++
++THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
++IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
++TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
++PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
++OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
++EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
++PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
++PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
++LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
++NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
++SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
++*/
++
++#ifndef UTLIST_H
++#define UTLIST_H
++
++#define UTLIST_VERSION 1.8
++
++/*
++ * This file contains macros to manipulate singly and doubly-linked lists.
++ *
++ * 1. LL_ macros: singly-linked lists.
++ * 2. DL_ macros: doubly-linked lists.
++ * 3. CDL_ macros: circular doubly-linked lists.
++ *
++ * To use singly-linked lists, your structure must have a "next" pointer.
++ * To use doubly-linked lists, your structure must "prev" and "next" pointers.
++ * Either way, the pointer to the head of the list must be initialized to NULL.
++ *
++ * ----------------.EXAMPLE -------------------------
++ * struct item {
++ * int id;
++ * struct item *prev, *next;
++ * }
++ *
++ * struct item *list = NULL:
++ *
++ * int main() {
++ * struct item *item;
++ * ... allocate and populate item ...
++ * DL_APPEND(list, item);
++ * }
++ * --------------------------------------------------
++ *
++ * For doubly-linked lists, the append and delete macros are O(1)
++ * For singly-linked lists, append and delete are O(n) but prepend is O(1)
++ * The sort macro is O(n log(n)) for all types of single/double/circular lists.
++ */
++
++/******************************************************************************
++ * The sort macro is an adaptation of Simon Tatham's O(n log(n)) mergesort *
++ * Unwieldy variable names used here to avoid shadowing passed-in variables. *
++ *****************************************************************************/
++#define LL_SORT(list, cmp) \
++do { \
++ __typeof__(list) _ls_p, _ls_q, _ls_e, _ls_tail, _ls_oldhead; \
++ int _ls_insize, _ls_nmerges, _ls_psize, _ls_qsize, _ls_i, _ls_looping; \
++ if (list) { \
++ _ls_insize = 1; \
++ _ls_looping = 1; \
++ while (_ls_looping) { \
++ _ls_p = list; \
++ _ls_oldhead = list; \
++ list = NULL; \
++ _ls_tail = NULL; \
++ _ls_nmerges = 0; \
++ while (_ls_p) { \
++ _ls_nmerges++; \
++ _ls_q = _ls_p; \
++ _ls_psize = 0; \
++ for (_ls_i = 0; _ls_i < _ls_insize; _ls_i++) { \
++ _ls_psize++; \
++ _ls_q = _ls_q->next; \
++ if (!_ls_q) break; \
++ } \
++ _ls_qsize = _ls_insize; \
++ while (_ls_psize > 0 || (_ls_qsize > 0 && _ls_q)) { \
++ if (_ls_psize == 0) { \
++ _ls_e = _ls_q; _ls_q = _ls_q->next; _ls_qsize--; \
++ } else if (_ls_qsize == 0 || !_ls_q) { \
++ _ls_e = _ls_p; _ls_p = _ls_p->next; _ls_psize--; \
++ } else if (cmp(_ls_p,_ls_q) <= 0) { \
++ _ls_e = _ls_p; _ls_p = _ls_p->next; _ls_psize--; \
++ } else { \
++ _ls_e = _ls_q; _ls_q = _ls_q->next; _ls_qsize--; \
++ } \
++ if (_ls_tail) { \
++ _ls_tail->next = _ls_e; \
++ } else { \
++ list = _ls_e; \
++ } \
++ _ls_tail = _ls_e; \
++ } \
++ _ls_p = _ls_q; \
++ } \
++ _ls_tail->next = NULL; \
++ if (_ls_nmerges <= 1) { \
++ _ls_looping=0; \
++ } \
++ _ls_insize *= 2; \
++ } \
++ } \
++} while (0)
++
++#define DL_SORT(list, cmp) \
++do { \
++ __typeof__(list) _ls_p, _ls_q, _ls_e, _ls_tail, _ls_oldhead; \
++ int _ls_insize, _ls_nmerges, _ls_psize, _ls_qsize, _ls_i, _ls_looping; \
++ if (list) { \
++ _ls_insize = 1; \
++ _ls_looping = 1; \
++ while (_ls_looping) { \
++ _ls_p = list; \
++ _ls_oldhead = list; \
++ list = NULL; \
++ _ls_tail = NULL; \
++ _ls_nmerges = 0; \
++ while (_ls_p) { \
++ _ls_nmerges++; \
++ _ls_q = _ls_p; \
++ _ls_psize = 0; \
++ for (_ls_i = 0; _ls_i < _ls_insize; _ls_i++) { \
++ _ls_psize++; \
++ _ls_q = _ls_q->next; \
++ if (!_ls_q) break; \
++ } \
++ _ls_qsize = _ls_insize; \
++ while (_ls_psize > 0 || (_ls_qsize > 0 && _ls_q)) { \
++ if (_ls_psize == 0) { \
++ _ls_e = _ls_q; _ls_q = _ls_q->next; _ls_qsize--; \
++ } else if (_ls_qsize == 0 || !_ls_q) { \
++ _ls_e = _ls_p; _ls_p = _ls_p->next; _ls_psize--; \
++ } else if (cmp(_ls_p,_ls_q) <= 0) { \
++ _ls_e = _ls_p; _ls_p = _ls_p->next; _ls_psize--; \
++ } else { \
++ _ls_e = _ls_q; _ls_q = _ls_q->next; _ls_qsize--; \
++ } \
++ if (_ls_tail) { \
++ _ls_tail->next = _ls_e; \
++ } else { \
++ list = _ls_e; \
++ } \
++ _ls_e->prev = _ls_tail; \
++ _ls_tail = _ls_e; \
++ } \
++ _ls_p = _ls_q; \
++ } \
++ list->prev = _ls_tail; \
++ _ls_tail->next = NULL; \
++ if (_ls_nmerges <= 1) { \
++ _ls_looping=0; \
++ } \
++ _ls_insize *= 2; \
++ } \
++ } \
++} while (0)
++
++#define CDL_SORT(list, cmp) \
++do { \
++ __typeof__(list) _ls_p, _ls_q, _ls_e, _ls_tail, _ls_oldhead; \
++ int _ls_insize, _ls_nmerges, _ls_psize, _ls_qsize, _ls_i, _ls_looping; \
++ if (list) { \
++ _ls_insize = 1; \
++ _ls_looping = 1; \
++ while (_ls_looping) { \
++ _ls_p = list; \
++ _ls_oldhead = list; \
++ list = NULL; \
++ _ls_tail = NULL; \
++ _ls_nmerges = 0; \
++ while (_ls_p) { \
++ _ls_nmerges++; \
++ _ls_q = _ls_p; \
++ _ls_psize = 0; \
++ for (_ls_i = 0; _ls_i < _ls_insize; _ls_i++) { \
++ _ls_psize++; \
++ _ls_q = ((_ls_q->next == _ls_oldhead) ? NULL : _ls_q->next); \
++ if (!_ls_q) break; \
++ } \
++ _ls_qsize = _ls_insize; \
++ while (_ls_psize > 0 || (_ls_qsize > 0 && _ls_q)) { \
++ if (_ls_psize == 0) { \
++ _ls_e = _ls_q; _ls_q = _ls_q->next; _ls_qsize--; \
++ if (_ls_q == _ls_oldhead) { _ls_q = NULL; } \
++ } else if (_ls_qsize == 0 || !_ls_q) { \
++ _ls_e = _ls_p; _ls_p = _ls_p->next; _ls_psize--; \
++ if (_ls_p == _ls_oldhead) { _ls_p = NULL; } \
++ } else if (cmp(_ls_p,_ls_q) <= 0) { \
++ _ls_e = _ls_p; _ls_p = _ls_p->next; _ls_psize--; \
++ if (_ls_p == _ls_oldhead) { _ls_p = NULL; } \
++ } else { \
++ _ls_e = _ls_q; _ls_q = _ls_q->next; _ls_qsize--; \
++ if (_ls_q == _ls_oldhead) { _ls_q = NULL; } \
++ } \
++ if (_ls_tail) { \
++ _ls_tail->next = _ls_e; \
++ } else { \
++ list = _ls_e; \
++ } \
++ _ls_e->prev = _ls_tail; \
++ _ls_tail = _ls_e; \
++ } \
++ _ls_p = _ls_q; \
++ } \
++ list->prev = _ls_tail; \
++ _ls_tail->next = list; \
++ if (_ls_nmerges <= 1) { \
++ _ls_looping=0; \
++ } \
++ _ls_insize *= 2; \
++ } \
++ } \
++} while (0)
++
++/******************************************************************************
++ * singly linked list macros (non-circular) *
++ *****************************************************************************/
++#define LL_PREPEND(head,add) \
++do { \
++ (add)->next = head; \
++ head = add; \
++} while (0)
++
++#define LL_APPEND(head,add) \
++do { \
++ __typeof__(head) _tmp; \
++ (add)->next=NULL; \
++ if (head) { \
++ _tmp = head; \
++ while (_tmp->next) { _tmp = _tmp->next; } \
++ _tmp->next=(add); \
++ } else { \
++ (head)=(add); \
++ } \
++} while (0)
++
++#define LL_DELETE(head,del) \
++do { \
++ __typeof__(head) _tmp; \
++ if ((head) == (del)) { \
++ (head)=(head)->next; \
++ } else { \
++ _tmp = head; \
++ while (_tmp->next && (_tmp->next != (del))) { \
++ _tmp = _tmp->next; \
++ } \
++ if (_tmp->next) { \
++ _tmp->next = ((del)->next); \
++ } \
++ } \
++} while (0)
++
++#define LL_FOREACH(head,el) \
++ for(el=head;el;el=el->next)
++
++/******************************************************************************
++ * doubly linked list macros (non-circular) *
++ *****************************************************************************/
++#define DL_PREPEND(head,add) \
++do { \
++ (add)->next = head; \
++ if (head) { \
++ (add)->prev = (head)->prev; \
++ (head)->prev = (add); \
++ } else { \
++ (add)->prev = (add); \
++ } \
++ (head) = (add); \
++} while (0)
++
++#define DL_APPEND(head,add) \
++do { \
++ if (head) { \
++ (add)->prev = (head)->prev; \
++ (head)->prev->next = (add); \
++ (head)->prev = (add); \
++ (add)->next = NULL; \
++ } else { \
++ (head)=(add); \
++ (head)->prev = (head); \
++ (head)->next = NULL; \
++ } \
++} while (0);
++
++#define DL_DELETE(head,del) \
++do { \
++ if ((del)->prev == (del)) { \
++ (head)=NULL; \
++ } else if ((del)==(head)) { \
++ (del)->next->prev = (del)->prev; \
++ (head) = (del)->next; \
++ } else { \
++ (del)->prev->next = (del)->next; \
++ if ((del)->next) { \
++ (del)->next->prev = (del)->prev; \
++ } else { \
++ (head)->prev = (del)->prev; \
++ } \
++ } \
++} while (0);
++
++
++#define DL_FOREACH(head,el) \
++ for(el=head;el;el=el->next)
++
++/******************************************************************************
++ * circular doubly linked list macros *
++ *****************************************************************************/
++#define CDL_PREPEND(head,add) \
++do { \
++ if (head) { \
++ (add)->prev = (head)->prev; \
++ (add)->next = (head); \
++ (head)->prev = (add); \
++ (add)->prev->next = (add); \
++ } else { \
++ (add)->prev = (add); \
++ (add)->next = (add); \
++ } \
++(head)=(add); \
++} while (0)
++
++#define CDL_DELETE(head,del) \
++do { \
++ if ( ((head)==(del)) && ((head)->next == (head))) { \
++ (head) = 0L; \
++ } else { \
++ (del)->next->prev = (del)->prev; \
++ (del)->prev->next = (del)->next; \
++ if ((del) == (head)) (head)=(del)->next; \
++ } \
++} while (0);
++
++#define CDL_FOREACH(head,el) \
++ for(el=head;el;el= (el->next==head ? 0L : el->next))
++
++
++#endif /* UTLIST_H */
++
+Index: libdessert0.86-0.86.14/install-sh
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/install-sh 2009-12-09 16:38:27.246011666 +0100
+@@ -0,0 +1,520 @@
++#!/bin/sh
++# install - install a program, script, or datafile
++
++scriptversion=2009-04-28.21; # UTC
++
++# This originates from X11R5 (mit/util/scripts/install.sh), which was
++# later released in X11R6 (xc/config/util/install.sh) with the
++# following copyright and license.
++#
++# Copyright (C) 1994 X Consortium
++#
++# Permission is hereby granted, free of charge, to any person obtaining a copy
++# of this software and associated documentation files (the "Software"), to
++# deal in the Software without restriction, including without limitation the
++# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
++# sell copies of the Software, and to permit persons to whom the Software is
++# furnished to do so, subject to the following conditions:
++#
++# The above copyright notice and this permission notice shall be included in
++# all copies or substantial portions of the Software.
++#
++# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
++# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
++# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
++# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
++# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
++#
++# Except as contained in this notice, the name of the X Consortium shall not
++# be used in advertising or otherwise to promote the sale, use or other deal-
++# ings in this Software without prior written authorization from the X Consor-
++# tium.
++#
++#
++# FSF changes to this file are in the public domain.
++#
++# Calling this script install-sh is preferred over install.sh, to prevent
++# `make' implicit rules from creating a file called install from it
++# when there is no Makefile.
++#
++# This script is compatible with the BSD install script, but was written
++# from scratch.
++
++nl='
++'
++IFS=" "" $nl"
++
++# set DOITPROG to echo to test this script
++
++# Don't use :- since 4.3BSD and earlier shells don't like it.
++doit=${DOITPROG-}
++if test -z "$doit"; then
++ doit_exec=exec
++else
++ doit_exec=$doit
++fi
++
++# Put in absolute file names if you don't have them in your path;
++# or use environment vars.
++
++chgrpprog=${CHGRPPROG-chgrp}
++chmodprog=${CHMODPROG-chmod}
++chownprog=${CHOWNPROG-chown}
++cmpprog=${CMPPROG-cmp}
++cpprog=${CPPROG-cp}
++mkdirprog=${MKDIRPROG-mkdir}
++mvprog=${MVPROG-mv}
++rmprog=${RMPROG-rm}
++stripprog=${STRIPPROG-strip}
++
++posix_glob='?'
++initialize_posix_glob='
++ test "$posix_glob" != "?" || {
++ if (set -f) 2>/dev/null; then
++ posix_glob=
++ else
++ posix_glob=:
++ fi
++ }
++'
++
++posix_mkdir=
++
++# Desired mode of installed file.
++mode=0755
++
++chgrpcmd=
++chmodcmd=$chmodprog
++chowncmd=
++mvcmd=$mvprog
++rmcmd="$rmprog -f"
++stripcmd=
++
++src=
++dst=
++dir_arg=
++dst_arg=
++
++copy_on_change=false
++no_target_directory=
++
++usage="\
++Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
++ or: $0 [OPTION]... SRCFILES... DIRECTORY
++ or: $0 [OPTION]... -t DIRECTORY SRCFILES...
++ or: $0 [OPTION]... -d DIRECTORIES...
++
++In the 1st form, copy SRCFILE to DSTFILE.
++In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
++In the 4th, create DIRECTORIES.
++
++Options:
++ --help display this help and exit.
++ --version display version info and exit.
++
++ -c (ignored)
++ -C install only if different (preserve the last data modification time)
++ -d create directories instead of installing files.
++ -g GROUP $chgrpprog installed files to GROUP.
++ -m MODE $chmodprog installed files to MODE.
++ -o USER $chownprog installed files to USER.
++ -s $stripprog installed files.
++ -t DIRECTORY install into DIRECTORY.
++ -T report an error if DSTFILE is a directory.
++
++Environment variables override the default commands:
++ CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
++ RMPROG STRIPPROG
++"
++
++while test $# -ne 0; do
++ case $1 in
++ -c) ;;
++
++ -C) copy_on_change=true;;
++
++ -d) dir_arg=true;;
++
++ -g) chgrpcmd="$chgrpprog $2"
++ shift;;
++
++ --help) echo "$usage"; exit $?;;
++
++ -m) mode=$2
++ case $mode in
++ *' '* | *' '* | *'
++'* | *'*'* | *'?'* | *'['*)
++ echo "$0: invalid mode: $mode" >&2
++ exit 1;;
++ esac
++ shift;;
++
++ -o) chowncmd="$chownprog $2"
++ shift;;
++
++ -s) stripcmd=$stripprog;;
++
++ -t) dst_arg=$2
++ shift;;
++
++ -T) no_target_directory=true;;
++
++ --version) echo "$0 $scriptversion"; exit $?;;
++
++ --) shift
++ break;;
++
++ -*) echo "$0: invalid option: $1" >&2
++ exit 1;;
++
++ *) break;;
++ esac
++ shift
++done
++
++if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
++ # When -d is used, all remaining arguments are directories to create.
++ # When -t is used, the destination is already specified.
++ # Otherwise, the last argument is the destination. Remove it from $@.
++ for arg
++ do
++ if test -n "$dst_arg"; then
++ # $@ is not empty: it contains at least $arg.
++ set fnord "$@" "$dst_arg"
++ shift # fnord
++ fi
++ shift # arg
++ dst_arg=$arg
++ done
++fi
++
++if test $# -eq 0; then
++ if test -z "$dir_arg"; then
++ echo "$0: no input file specified." >&2
++ exit 1
++ fi
++ # It's OK to call `install-sh -d' without argument.
++ # This can happen when creating conditional directories.
++ exit 0
++fi
++
++if test -z "$dir_arg"; then
++ trap '(exit $?); exit' 1 2 13 15
++
++ # Set umask so as not to create temps with too-generous modes.
++ # However, 'strip' requires both read and write access to temps.
++ case $mode in
++ # Optimize common cases.
++ *644) cp_umask=133;;
++ *755) cp_umask=22;;
++
++ *[0-7])
++ if test -z "$stripcmd"; then
++ u_plus_rw=
++ else
++ u_plus_rw='% 200'
++ fi
++ cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
++ *)
++ if test -z "$stripcmd"; then
++ u_plus_rw=
++ else
++ u_plus_rw=,u+rw
++ fi
++ cp_umask=$mode$u_plus_rw;;
++ esac
++fi
++
++for src
++do
++ # Protect names starting with `-'.
++ case $src in
++ -*) src=./$src;;
++ esac
++
++ if test -n "$dir_arg"; then
++ dst=$src
++ dstdir=$dst
++ test -d "$dstdir"
++ dstdir_status=$?
++ else
++
++ # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
++ # might cause directories to be created, which would be especially bad
++ # if $src (and thus $dsttmp) contains '*'.
++ if test ! -f "$src" && test ! -d "$src"; then
++ echo "$0: $src does not exist." >&2
++ exit 1
++ fi
++
++ if test -z "$dst_arg"; then
++ echo "$0: no destination specified." >&2
++ exit 1
++ fi
++
++ dst=$dst_arg
++ # Protect names starting with `-'.
++ case $dst in
++ -*) dst=./$dst;;
++ esac
++
++ # If destination is a directory, append the input filename; won't work
++ # if double slashes aren't ignored.
++ if test -d "$dst"; then
++ if test -n "$no_target_directory"; then
++ echo "$0: $dst_arg: Is a directory" >&2
++ exit 1
++ fi
++ dstdir=$dst
++ dst=$dstdir/`basename "$src"`
++ dstdir_status=0
++ else
++ # Prefer dirname, but fall back on a substitute if dirname fails.
++ dstdir=`
++ (dirname "$dst") 2>/dev/null ||
++ expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
++ X"$dst" : 'X\(//\)[^/]' \| \
++ X"$dst" : 'X\(//\)$' \| \
++ X"$dst" : 'X\(/\)' \| . 2>/dev/null ||
++ echo X"$dst" |
++ sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
++ s//\1/
++ q
++ }
++ /^X\(\/\/\)[^/].*/{
++ s//\1/
++ q
++ }
++ /^X\(\/\/\)$/{
++ s//\1/
++ q
++ }
++ /^X\(\/\).*/{
++ s//\1/
++ q
++ }
++ s/.*/./; q'
++ `
++
++ test -d "$dstdir"
++ dstdir_status=$?
++ fi
++ fi
++
++ obsolete_mkdir_used=false
++
++ if test $dstdir_status != 0; then
++ case $posix_mkdir in
++ '')
++ # Create intermediate dirs using mode 755 as modified by the umask.
++ # This is like FreeBSD 'install' as of 1997-10-28.
++ umask=`umask`
++ case $stripcmd.$umask in
++ # Optimize common cases.
++ *[2367][2367]) mkdir_umask=$umask;;
++ .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
++
++ *[0-7])
++ mkdir_umask=`expr $umask + 22 \
++ - $umask % 100 % 40 + $umask % 20 \
++ - $umask % 10 % 4 + $umask % 2
++ `;;
++ *) mkdir_umask=$umask,go-w;;
++ esac
++
++ # With -d, create the new directory with the user-specified mode.
++ # Otherwise, rely on $mkdir_umask.
++ if test -n "$dir_arg"; then
++ mkdir_mode=-m$mode
++ else
++ mkdir_mode=
++ fi
++
++ posix_mkdir=false
++ case $umask in
++ *[123567][0-7][0-7])
++ # POSIX mkdir -p sets u+wx bits regardless of umask, which
++ # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
++ ;;
++ *)
++ tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
++ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
++
++ if (umask $mkdir_umask &&
++ exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
++ then
++ if test -z "$dir_arg" || {
++ # Check for POSIX incompatibilities with -m.
++ # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
++ # other-writeable bit of parent directory when it shouldn't.
++ # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
++ ls_ld_tmpdir=`ls -ld "$tmpdir"`
++ case $ls_ld_tmpdir in
++ d????-?r-*) different_mode=700;;
++ d????-?--*) different_mode=755;;
++ *) false;;
++ esac &&
++ $mkdirprog -m$different_mode -p -- "$tmpdir" && {
++ ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
++ test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
++ }
++ }
++ then posix_mkdir=:
++ fi
++ rmdir "$tmpdir/d" "$tmpdir"
++ else
++ # Remove any dirs left behind by ancient mkdir implementations.
++ rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
++ fi
++ trap '' 0;;
++ esac;;
++ esac
++
++ if
++ $posix_mkdir && (
++ umask $mkdir_umask &&
++ $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
++ )
++ then :
++ else
++
++ # The umask is ridiculous, or mkdir does not conform to POSIX,
++ # or it failed possibly due to a race condition. Create the
++ # directory the slow way, step by step, checking for races as we go.
++
++ case $dstdir in
++ /*) prefix='/';;
++ -*) prefix='./';;
++ *) prefix='';;
++ esac
++
++ eval "$initialize_posix_glob"
++
++ oIFS=$IFS
++ IFS=/
++ $posix_glob set -f
++ set fnord $dstdir
++ shift
++ $posix_glob set +f
++ IFS=$oIFS
++
++ prefixes=
++
++ for d
++ do
++ test -z "$d" && continue
++
++ prefix=$prefix$d
++ if test -d "$prefix"; then
++ prefixes=
++ else
++ if $posix_mkdir; then
++ (umask=$mkdir_umask &&
++ $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
++ # Don't fail if two instances are running concurrently.
++ test -d "$prefix" || exit 1
++ else
++ case $prefix in
++ *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
++ *) qprefix=$prefix;;
++ esac
++ prefixes="$prefixes '$qprefix'"
++ fi
++ fi
++ prefix=$prefix/
++ done
++
++ if test -n "$prefixes"; then
++ # Don't fail if two instances are running concurrently.
++ (umask $mkdir_umask &&
++ eval "\$doit_exec \$mkdirprog $prefixes") ||
++ test -d "$dstdir" || exit 1
++ obsolete_mkdir_used=true
++ fi
++ fi
++ fi
++
++ if test -n "$dir_arg"; then
++ { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
++ { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
++ { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
++ test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
++ else
++
++ # Make a couple of temp file names in the proper directory.
++ dsttmp=$dstdir/_inst.$$_
++ rmtmp=$dstdir/_rm.$$_
++
++ # Trap to clean up those temp files at exit.
++ trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
++
++ # Copy the file name to the temp name.
++ (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
++
++ # and set any options; do chmod last to preserve setuid bits.
++ #
++ # If any of these fail, we abort the whole thing. If we want to
++ # ignore errors from any of these, just make sure not to ignore
++ # errors from the above "$doit $cpprog $src $dsttmp" command.
++ #
++ { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
++ { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
++ { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
++ { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
++
++ # If -C, don't bother to copy if it wouldn't change the file.
++ if $copy_on_change &&
++ old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` &&
++ new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` &&
++
++ eval "$initialize_posix_glob" &&
++ $posix_glob set -f &&
++ set X $old && old=:$2:$4:$5:$6 &&
++ set X $new && new=:$2:$4:$5:$6 &&
++ $posix_glob set +f &&
++
++ test "$old" = "$new" &&
++ $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
++ then
++ rm -f "$dsttmp"
++ else
++ # Rename the file to the real destination.
++ $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
++
++ # The rename failed, perhaps because mv can't rename something else
++ # to itself, or perhaps because mv is so ancient that it does not
++ # support -f.
++ {
++ # Now remove or move aside any old file at destination location.
++ # We try this two ways since rm can't unlink itself on some
++ # systems and the destination file might be busy for other
++ # reasons. In this case, the final cleanup might fail but the new
++ # file should still install successfully.
++ {
++ test ! -f "$dst" ||
++ $doit $rmcmd -f "$dst" 2>/dev/null ||
++ { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
++ { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
++ } ||
++ { echo "$0: cannot unlink or rename $dst" >&2
++ (exit 1); exit 1
++ }
++ } &&
++
++ # Now rename the file to the real destination.
++ $doit $mvcmd "$dsttmp" "$dst"
++ }
++ fi || exit 1
++
++ trap '' 0
++ fi
++done
++
++# Local variables:
++# eval: (add-hook 'write-file-hooks 'time-stamp)
++# time-stamp-start: "scriptversion="
++# time-stamp-format: "%:y-%02m-%02d.%02H"
++# time-stamp-time-zone: "UTC"
++# time-stamp-end: "; # UTC"
++# End:
+Index: libdessert0.86-0.86.14/libdessert.pc.in
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/libdessert.pc.in 2009-12-09 16:38:27.246011666 +0100
+@@ -0,0 +1,11 @@
++prefix=@prefix@
++exec_prefix=@exec_prefix@
++libdir=@libdir@
++includedir=@includedir@
++
++Name: @PACKAGE_NAME@
++Description: DES-SERT - an Extensible Routing-Framework for Testbeds
++Version: @VERSION@
++Libs: @PTHREAD_LIBS@ -L${libdir} -ldessert
++Cflags: @PTHREAD_CFLAGS@ -I${includedir}
++
+Index: libdessert0.86-0.86.14/ltmain.sh
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/ltmain.sh 2009-12-09 16:38:27.254756172 +0100
+@@ -0,0 +1,8413 @@
++# Generated from ltmain.m4sh.
++
++# ltmain.sh (GNU libtool) 2.2.6
++# Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
++
++# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, 2007 2008 Free Software Foundation, Inc.
++# This is free software; see the source for copying conditions. There is NO
++# warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
++
++# GNU Libtool is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2 of the License, or
++# (at your option) any later version.
++#
++# As a special exception to the GNU General Public License,
++# if you distribute this file as part of a program or library that
++# is built using GNU Libtool, you may include this file under the
++# same distribution terms that you use for the rest of that program.
++#
++# GNU Libtool is distributed in the hope that it will be useful, but
++# WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
++# General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with GNU Libtool; see the file COPYING. If not, a copy
++# can be downloaded from http://www.gnu.org/licenses/gpl.html,
++# or obtained by writing to the Free Software Foundation, Inc.,
++# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
++
++# Usage: $progname [OPTION]... [MODE-ARG]...
++#
++# Provide generalized library-building support services.
++#
++# --config show all configuration variables
++# --debug enable verbose shell tracing
++# -n, --dry-run display commands without modifying any files
++# --features display basic configuration information and exit
++# --mode=MODE use operation mode MODE
++# --preserve-dup-deps don't remove duplicate dependency libraries
++# --quiet, --silent don't print informational messages
++# --tag=TAG use configuration variables from tag TAG
++# -v, --verbose print informational messages (default)
++# --version print version information
++# -h, --help print short or long help message
++#
++# MODE must be one of the following:
++#
++# clean remove files from the build directory
++# compile compile a source file into a libtool object
++# execute automatically set library path, then run a program
++# finish complete the installation of libtool libraries
++# install install libraries or executables
++# link create a library or an executable
++# uninstall remove libraries from an installed directory
++#
++# MODE-ARGS vary depending on the MODE.
++# Try `$progname --help --mode=MODE' for a more detailed description of MODE.
++#
++# When reporting a bug, please describe a test case to reproduce it and
++# include the following information:
++#
++# host-triplet: $host
++# shell: $SHELL
++# compiler: $LTCC
++# compiler flags: $LTCFLAGS
++# linker: $LD (gnu? $with_gnu_ld)
++# $progname: (GNU libtool) 2.2.6 Debian-2.2.6a-4
++# automake: $automake_version
++# autoconf: $autoconf_version
++#
++# Report bugs to <bug-libtool@gnu.org>.
++
++PROGRAM=ltmain.sh
++PACKAGE=libtool
++VERSION="2.2.6 Debian-2.2.6a-4"
++TIMESTAMP=""
++package_revision=1.3012
++
++# Be Bourne compatible
++if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
++ emulate sh
++ NULLCMD=:
++ # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
++ # is contrary to our usage. Disable this feature.
++ alias -g '${1+"$@"}'='"$@"'
++ setopt NO_GLOB_SUBST
++else
++ case `(set -o) 2>/dev/null` in *posix*) set -o posix;; esac
++fi
++BIN_SH=xpg4; export BIN_SH # for Tru64
++DUALCASE=1; export DUALCASE # for MKS sh
++
++# NLS nuisances: We save the old values to restore during execute mode.
++# Only set LANG and LC_ALL to C if already set.
++# These must not be set unconditionally because not all systems understand
++# e.g. LANG=C (notably SCO).
++lt_user_locale=
++lt_safe_locale=
++for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
++do
++ eval "if test \"\${$lt_var+set}\" = set; then
++ save_$lt_var=\$$lt_var
++ $lt_var=C
++ export $lt_var
++ lt_user_locale=\"$lt_var=\\\$save_\$lt_var; \$lt_user_locale\"
++ lt_safe_locale=\"$lt_var=C; \$lt_safe_locale\"
++ fi"
++done
++
++$lt_unset CDPATH
++
++
++
++
++
++: ${CP="cp -f"}
++: ${ECHO="echo"}
++: ${EGREP="/bin/grep -E"}
++: ${FGREP="/bin/grep -F"}
++: ${GREP="/bin/grep"}
++: ${LN_S="ln -s"}
++: ${MAKE="make"}
++: ${MKDIR="mkdir"}
++: ${MV="mv -f"}
++: ${RM="rm -f"}
++: ${SED="/bin/sed"}
++: ${SHELL="${CONFIG_SHELL-/bin/sh}"}
++: ${Xsed="$SED -e 1s/^X//"}
++
++# Global variables:
++EXIT_SUCCESS=0
++EXIT_FAILURE=1
++EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing.
++EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake.
++
++exit_status=$EXIT_SUCCESS
++
++# Make sure IFS has a sensible default
++lt_nl='
++'
++IFS=" $lt_nl"
++
++dirname="s,/[^/]*$,,"
++basename="s,^.*/,,"
++
++# func_dirname_and_basename file append nondir_replacement
++# perform func_basename and func_dirname in a single function
++# call:
++# dirname: Compute the dirname of FILE. If nonempty,
++# add APPEND to the result, otherwise set result
++# to NONDIR_REPLACEMENT.
++# value returned in "$func_dirname_result"
++# basename: Compute filename of FILE.
++# value retuned in "$func_basename_result"
++# Implementation must be kept synchronized with func_dirname
++# and func_basename. For efficiency, we do not delegate to
++# those functions but instead duplicate the functionality here.
++func_dirname_and_basename ()
++{
++ # Extract subdirectory from the argument.
++ func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
++ if test "X$func_dirname_result" = "X${1}"; then
++ func_dirname_result="${3}"
++ else
++ func_dirname_result="$func_dirname_result${2}"
++ fi
++ func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
++}
++
++# Generated shell functions inserted here.
++
++# Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh
++# is ksh but when the shell is invoked as "sh" and the current value of
++# the _XPG environment variable is not equal to 1 (one), the special
++# positional parameter $0, within a function call, is the name of the
++# function.
++progpath="$0"
++
++# The name of this program:
++# In the unlikely event $progname began with a '-', it would play havoc with
++# func_echo (imagine progname=-n), so we prepend ./ in that case:
++func_dirname_and_basename "$progpath"
++progname=$func_basename_result
++case $progname in
++ -*) progname=./$progname ;;
++esac
++
++# Make sure we have an absolute path for reexecution:
++case $progpath in
++ [\\/]*|[A-Za-z]:\\*) ;;
++ *[\\/]*)
++ progdir=$func_dirname_result
++ progdir=`cd "$progdir" && pwd`
++ progpath="$progdir/$progname"
++ ;;
++ *)
++ save_IFS="$IFS"
++ IFS=:
++ for progdir in $PATH; do
++ IFS="$save_IFS"
++ test -x "$progdir/$progname" && break
++ done
++ IFS="$save_IFS"
++ test -n "$progdir" || progdir=`pwd`
++ progpath="$progdir/$progname"
++ ;;
++esac
++
++# Sed substitution that helps us do robust quoting. It backslashifies
++# metacharacters that are still active within double-quoted strings.
++Xsed="${SED}"' -e 1s/^X//'
++sed_quote_subst='s/\([`"$\\]\)/\\\1/g'
++
++# Same as above, but do not quote variable references.
++double_quote_subst='s/\(["`\\]\)/\\\1/g'
++
++# Re-`\' parameter expansions in output of double_quote_subst that were
++# `\'-ed in input to the same. If an odd number of `\' preceded a '$'
++# in input to double_quote_subst, that '$' was protected from expansion.
++# Since each input `\' is now two `\'s, look for any number of runs of
++# four `\'s followed by two `\'s and then a '$'. `\' that '$'.
++bs='\\'
++bs2='\\\\'
++bs4='\\\\\\\\'
++dollar='\$'
++sed_double_backslash="\
++ s/$bs4/&\\
++/g
++ s/^$bs2$dollar/$bs&/
++ s/\\([^$bs]\\)$bs2$dollar/\\1$bs2$bs$dollar/g
++ s/\n//g"
++
++# Standard options:
++opt_dry_run=false
++opt_help=false
++opt_quiet=false
++opt_verbose=false
++opt_warning=:
++
++# func_echo arg...
++# Echo program name prefixed message, along with the current mode
++# name if it has been set yet.
++func_echo ()
++{
++ $ECHO "$progname${mode+: }$mode: $*"
++}
++
++# func_verbose arg...
++# Echo program name prefixed message in verbose mode only.
++func_verbose ()
++{
++ $opt_verbose && func_echo ${1+"$@"}
++
++ # A bug in bash halts the script if the last line of a function
++ # fails when set -e is in force, so we need another command to
++ # work around that:
++ :
++}
++
++# func_error arg...
++# Echo program name prefixed message to standard error.
++func_error ()
++{
++ $ECHO "$progname${mode+: }$mode: "${1+"$@"} 1>&2
++}
++
++# func_warning arg...
++# Echo program name prefixed warning message to standard error.
++func_warning ()
++{
++ $opt_warning && $ECHO "$progname${mode+: }$mode: warning: "${1+"$@"} 1>&2
++
++ # bash bug again:
++ :
++}
++
++# func_fatal_error arg...
++# Echo program name prefixed message to standard error, and exit.
++func_fatal_error ()
++{
++ func_error ${1+"$@"}
++ exit $EXIT_FAILURE
++}
++
++# func_fatal_help arg...
++# Echo program name prefixed message to standard error, followed by
++# a help hint, and exit.
++func_fatal_help ()
++{
++ func_error ${1+"$@"}
++ func_fatal_error "$help"
++}
++help="Try \`$progname --help' for more information." ## default
++
++
++# func_grep expression filename
++# Check whether EXPRESSION matches any line of FILENAME, without output.
++func_grep ()
++{
++ $GREP "$1" "$2" >/dev/null 2>&1
++}
++
++
++# func_mkdir_p directory-path
++# Make sure the entire path to DIRECTORY-PATH is available.
++func_mkdir_p ()
++{
++ my_directory_path="$1"
++ my_dir_list=
++
++ if test -n "$my_directory_path" && test "$opt_dry_run" != ":"; then
++
++ # Protect directory names starting with `-'
++ case $my_directory_path in
++ -*) my_directory_path="./$my_directory_path" ;;
++ esac
++
++ # While some portion of DIR does not yet exist...
++ while test ! -d "$my_directory_path"; do
++ # ...make a list in topmost first order. Use a colon delimited
++ # list incase some portion of path contains whitespace.
++ my_dir_list="$my_directory_path:$my_dir_list"
++
++ # If the last portion added has no slash in it, the list is done
++ case $my_directory_path in */*) ;; *) break ;; esac
++
++ # ...otherwise throw away the child directory and loop
++ my_directory_path=`$ECHO "X$my_directory_path" | $Xsed -e "$dirname"`
++ done
++ my_dir_list=`$ECHO "X$my_dir_list" | $Xsed -e 's,:*$,,'`
++
++ save_mkdir_p_IFS="$IFS"; IFS=':'
++ for my_dir in $my_dir_list; do
++ IFS="$save_mkdir_p_IFS"
++ # mkdir can fail with a `File exist' error if two processes
++ # try to create one of the directories concurrently. Don't
++ # stop in that case!
++ $MKDIR "$my_dir" 2>/dev/null || :
++ done
++ IFS="$save_mkdir_p_IFS"
++
++ # Bail out if we (or some other process) failed to create a directory.
++ test -d "$my_directory_path" || \
++ func_fatal_error "Failed to create \`$1'"
++ fi
++}
++
++
++# func_mktempdir [string]
++# Make a temporary directory that won't clash with other running
++# libtool processes, and avoids race conditions if possible. If
++# given, STRING is the basename for that directory.
++func_mktempdir ()
++{
++ my_template="${TMPDIR-/tmp}/${1-$progname}"
++
++ if test "$opt_dry_run" = ":"; then
++ # Return a directory name, but don't create it in dry-run mode
++ my_tmpdir="${my_template}-$$"
++ else
++
++ # If mktemp works, use that first and foremost
++ my_tmpdir=`mktemp -d "${my_template}-XXXXXXXX" 2>/dev/null`
++
++ if test ! -d "$my_tmpdir"; then
++ # Failing that, at least try and use $RANDOM to avoid a race
++ my_tmpdir="${my_template}-${RANDOM-0}$$"
++
++ save_mktempdir_umask=`umask`
++ umask 0077
++ $MKDIR "$my_tmpdir"
++ umask $save_mktempdir_umask
++ fi
++
++ # If we're not in dry-run mode, bomb out on failure
++ test -d "$my_tmpdir" || \
++ func_fatal_error "cannot create temporary directory \`$my_tmpdir'"
++ fi
++
++ $ECHO "X$my_tmpdir" | $Xsed
++}
++
++
++# func_quote_for_eval arg
++# Aesthetically quote ARG to be evaled later.
++# This function returns two values: FUNC_QUOTE_FOR_EVAL_RESULT
++# is double-quoted, suitable for a subsequent eval, whereas
++# FUNC_QUOTE_FOR_EVAL_UNQUOTED_RESULT has merely all characters
++# which are still active within double quotes backslashified.
++func_quote_for_eval ()
++{
++ case $1 in
++ *[\\\`\"\$]*)
++ func_quote_for_eval_unquoted_result=`$ECHO "X$1" | $Xsed -e "$sed_quote_subst"` ;;
++ *)
++ func_quote_for_eval_unquoted_result="$1" ;;
++ esac
++
++ case $func_quote_for_eval_unquoted_result in
++ # Double-quote args containing shell metacharacters to delay
++ # word splitting, command substitution and and variable
++ # expansion for a subsequent eval.
++ # Many Bourne shells cannot handle close brackets correctly
++ # in scan sets, so we specify it separately.
++ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
++ func_quote_for_eval_result="\"$func_quote_for_eval_unquoted_result\""
++ ;;
++ *)
++ func_quote_for_eval_result="$func_quote_for_eval_unquoted_result"
++ esac
++}
++
++
++# func_quote_for_expand arg
++# Aesthetically quote ARG to be evaled later; same as above,
++# but do not quote variable references.
++func_quote_for_expand ()
++{
++ case $1 in
++ *[\\\`\"]*)
++ my_arg=`$ECHO "X$1" | $Xsed \
++ -e "$double_quote_subst" -e "$sed_double_backslash"` ;;
++ *)
++ my_arg="$1" ;;
++ esac
++
++ case $my_arg in
++ # Double-quote args containing shell metacharacters to delay
++ # word splitting and command substitution for a subsequent eval.
++ # Many Bourne shells cannot handle close brackets correctly
++ # in scan sets, so we specify it separately.
++ *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"")
++ my_arg="\"$my_arg\""
++ ;;
++ esac
++
++ func_quote_for_expand_result="$my_arg"
++}
++
++
++# func_show_eval cmd [fail_exp]
++# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is
++# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP
++# is given, then evaluate it.
++func_show_eval ()
++{
++ my_cmd="$1"
++ my_fail_exp="${2-:}"
++
++ ${opt_silent-false} || {
++ func_quote_for_expand "$my_cmd"
++ eval "func_echo $func_quote_for_expand_result"
++ }
++
++ if ${opt_dry_run-false}; then :; else
++ eval "$my_cmd"
++ my_status=$?
++ if test "$my_status" -eq 0; then :; else
++ eval "(exit $my_status); $my_fail_exp"
++ fi
++ fi
++}
++
++
++# func_show_eval_locale cmd [fail_exp]
++# Unless opt_silent is true, then output CMD. Then, if opt_dryrun is
++# not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP
++# is given, then evaluate it. Use the saved locale for evaluation.
++func_show_eval_locale ()
++{
++ my_cmd="$1"
++ my_fail_exp="${2-:}"
++
++ ${opt_silent-false} || {
++ func_quote_for_expand "$my_cmd"
++ eval "func_echo $func_quote_for_expand_result"
++ }
++
++ if ${opt_dry_run-false}; then :; else
++ eval "$lt_user_locale
++ $my_cmd"
++ my_status=$?
++ eval "$lt_safe_locale"
++ if test "$my_status" -eq 0; then :; else
++ eval "(exit $my_status); $my_fail_exp"
++ fi
++ fi
++}
++
++
++
++
++
++# func_version
++# Echo version message to standard output and exit.
++func_version ()
++{
++ $SED -n '/^# '$PROGRAM' (GNU /,/# warranty; / {
++ s/^# //
++ s/^# *$//
++ s/\((C)\)[ 0-9,-]*\( [1-9][0-9]*\)/\1\2/
++ p
++ }' < "$progpath"
++ exit $?
++}
++
++# func_usage
++# Echo short help message to standard output and exit.
++func_usage ()
++{
++ $SED -n '/^# Usage:/,/# -h/ {
++ s/^# //
++ s/^# *$//
++ s/\$progname/'$progname'/
++ p
++ }' < "$progpath"
++ $ECHO
++ $ECHO "run \`$progname --help | more' for full usage"
++ exit $?
++}
++
++# func_help
++# Echo long help message to standard output and exit.
++func_help ()
++{
++ $SED -n '/^# Usage:/,/# Report bugs to/ {
++ s/^# //
++ s/^# *$//
++ s*\$progname*'$progname'*
++ s*\$host*'"$host"'*
++ s*\$SHELL*'"$SHELL"'*
++ s*\$LTCC*'"$LTCC"'*
++ s*\$LTCFLAGS*'"$LTCFLAGS"'*
++ s*\$LD*'"$LD"'*
++ s/\$with_gnu_ld/'"$with_gnu_ld"'/
++ s/\$automake_version/'"`(automake --version) 2>/dev/null |$SED 1q`"'/
++ s/\$autoconf_version/'"`(autoconf --version) 2>/dev/null |$SED 1q`"'/
++ p
++ }' < "$progpath"
++ exit $?
++}
++
++# func_missing_arg argname
++# Echo program name prefixed message to standard error and set global
++# exit_cmd.
++func_missing_arg ()
++{
++ func_error "missing argument for $1"
++ exit_cmd=exit
++}
++
++exit_cmd=:
++
++
++
++
++
++# Check that we have a working $ECHO.
++if test "X$1" = X--no-reexec; then
++ # Discard the --no-reexec flag, and continue.
++ shift
++elif test "X$1" = X--fallback-echo; then
++ # Avoid inline document here, it may be left over
++ :
++elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t'; then
++ # Yippee, $ECHO works!
++ :
++else
++ # Restart under the correct shell, and then maybe $ECHO will work.
++ exec $SHELL "$progpath" --no-reexec ${1+"$@"}
++fi
++
++if test "X$1" = X--fallback-echo; then
++ # used as fallback echo
++ shift
++ cat <<EOF
++$*
++EOF
++ exit $EXIT_SUCCESS
++fi
++
++magic="%%%MAGIC variable%%%"
++magic_exe="%%%MAGIC EXE variable%%%"
++
++# Global variables.
++# $mode is unset
++nonopt=
++execute_dlfiles=
++preserve_args=
++lo2o="s/\\.lo\$/.${objext}/"
++o2lo="s/\\.${objext}\$/.lo/"
++extracted_archives=
++extracted_serial=0
++
++opt_dry_run=false
++opt_duplicate_deps=false
++opt_silent=false
++opt_debug=:
++
++# If this variable is set in any of the actions, the command in it
++# will be execed at the end. This prevents here-documents from being
++# left over by shells.
++exec_cmd=
++
++# func_fatal_configuration arg...
++# Echo program name prefixed message to standard error, followed by
++# a configuration failure hint, and exit.
++func_fatal_configuration ()
++{
++ func_error ${1+"$@"}
++ func_error "See the $PACKAGE documentation for more information."
++ func_fatal_error "Fatal configuration error."
++}
++
++
++# func_config
++# Display the configuration for all the tags in this script.
++func_config ()
++{
++ re_begincf='^# ### BEGIN LIBTOOL'
++ re_endcf='^# ### END LIBTOOL'
++
++ # Default configuration.
++ $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath"
++
++ # Now print the configurations for the tags.
++ for tagname in $taglist; do
++ $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath"
++ done
++
++ exit $?
++}
++
++# func_features
++# Display the features supported by this script.
++func_features ()
++{
++ $ECHO "host: $host"
++ if test "$build_libtool_libs" = yes; then
++ $ECHO "enable shared libraries"
++ else
++ $ECHO "disable shared libraries"
++ fi
++ if test "$build_old_libs" = yes; then
++ $ECHO "enable static libraries"
++ else
++ $ECHO "disable static libraries"
++ fi
++
++ exit $?
++}
++
++# func_enable_tag tagname
++# Verify that TAGNAME is valid, and either flag an error and exit, or
++# enable the TAGNAME tag. We also add TAGNAME to the global $taglist
++# variable here.
++func_enable_tag ()
++{
++ # Global variable:
++ tagname="$1"
++
++ re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$"
++ re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$"
++ sed_extractcf="/$re_begincf/,/$re_endcf/p"
++
++ # Validate tagname.
++ case $tagname in
++ *[!-_A-Za-z0-9,/]*)
++ func_fatal_error "invalid tag name: $tagname"
++ ;;
++ esac
++
++ # Don't test for the "default" C tag, as we know it's
++ # there but not specially marked.
++ case $tagname in
++ CC) ;;
++ *)
++ if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then
++ taglist="$taglist $tagname"
++
++ # Evaluate the configuration. Be careful to quote the path
++ # and the sed script, to avoid splitting on whitespace, but
++ # also don't use non-portable quotes within backquotes within
++ # quotes we have to do it in 2 steps:
++ extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"`
++ eval "$extractedcf"
++ else
++ func_error "ignoring unknown tag $tagname"
++ fi
++ ;;
++ esac
++}
++
++# Parse options once, thoroughly. This comes as soon as possible in
++# the script to make things like `libtool --version' happen quickly.
++{
++
++ # Shorthand for --mode=foo, only valid as the first argument
++ case $1 in
++ clean|clea|cle|cl)
++ shift; set dummy --mode clean ${1+"$@"}; shift
++ ;;
++ compile|compil|compi|comp|com|co|c)
++ shift; set dummy --mode compile ${1+"$@"}; shift
++ ;;
++ execute|execut|execu|exec|exe|ex|e)
++ shift; set dummy --mode execute ${1+"$@"}; shift
++ ;;
++ finish|finis|fini|fin|fi|f)
++ shift; set dummy --mode finish ${1+"$@"}; shift
++ ;;
++ install|instal|insta|inst|ins|in|i)
++ shift; set dummy --mode install ${1+"$@"}; shift
++ ;;
++ link|lin|li|l)
++ shift; set dummy --mode link ${1+"$@"}; shift
++ ;;
++ uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u)
++ shift; set dummy --mode uninstall ${1+"$@"}; shift
++ ;;
++ esac
++
++ # Parse non-mode specific arguments:
++ while test "$#" -gt 0; do
++ opt="$1"
++ shift
++
++ case $opt in
++ --config) func_config ;;
++
++ --debug) preserve_args="$preserve_args $opt"
++ func_echo "enabling shell trace mode"
++ opt_debug='set -x'
++ $opt_debug
++ ;;
++
++ -dlopen) test "$#" -eq 0 && func_missing_arg "$opt" && break
++ execute_dlfiles="$execute_dlfiles $1"
++ shift
++ ;;
++
++ --dry-run | -n) opt_dry_run=: ;;
++ --features) func_features ;;
++ --finish) mode="finish" ;;
++
++ --mode) test "$#" -eq 0 && func_missing_arg "$opt" && break
++ case $1 in
++ # Valid mode arguments:
++ clean) ;;
++ compile) ;;
++ execute) ;;
++ finish) ;;
++ install) ;;
++ link) ;;
++ relink) ;;
++ uninstall) ;;
++
++ # Catch anything else as an error
++ *) func_error "invalid argument for $opt"
++ exit_cmd=exit
++ break
++ ;;
++ esac
++
++ mode="$1"
++ shift
++ ;;
++
++ --preserve-dup-deps)
++ opt_duplicate_deps=: ;;
++
++ --quiet|--silent) preserve_args="$preserve_args $opt"
++ opt_silent=:
++ ;;
++
++ --verbose| -v) preserve_args="$preserve_args $opt"
++ opt_silent=false
++ ;;
++
++ --tag) test "$#" -eq 0 && func_missing_arg "$opt" && break
++ preserve_args="$preserve_args $opt $1"
++ func_enable_tag "$1" # tagname is set here
++ shift
++ ;;
++
++ # Separate optargs to long options:
++ -dlopen=*|--mode=*|--tag=*)
++ func_opt_split "$opt"
++ set dummy "$func_opt_split_opt" "$func_opt_split_arg" ${1+"$@"}
++ shift
++ ;;
++
++ -\?|-h) func_usage ;;
++ --help) opt_help=: ;;
++ --version) func_version ;;
++
++ -*) func_fatal_help "unrecognized option \`$opt'" ;;
++
++ *) nonopt="$opt"
++ break
++ ;;
++ esac
++ done
++
++
++ case $host in
++ *cygwin* | *mingw* | *pw32* | *cegcc*)
++ # don't eliminate duplications in $postdeps and $predeps
++ opt_duplicate_compiler_generated_deps=:
++ ;;
++ *)
++ opt_duplicate_compiler_generated_deps=$opt_duplicate_deps
++ ;;
++ esac
++
++ # Having warned about all mis-specified options, bail out if
++ # anything was wrong.
++ $exit_cmd $EXIT_FAILURE
++}
++
++# func_check_version_match
++# Ensure that we are using m4 macros, and libtool script from the same
++# release of libtool.
++func_check_version_match ()
++{
++ if test "$package_revision" != "$macro_revision"; then
++ if test "$VERSION" != "$macro_version"; then
++ if test -z "$macro_version"; then
++ cat >&2 <<_LT_EOF
++$progname: Version mismatch error. This is $PACKAGE $VERSION, but the
++$progname: definition of this LT_INIT comes from an older release.
++$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
++$progname: and run autoconf again.
++_LT_EOF
++ else
++ cat >&2 <<_LT_EOF
++$progname: Version mismatch error. This is $PACKAGE $VERSION, but the
++$progname: definition of this LT_INIT comes from $PACKAGE $macro_version.
++$progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION
++$progname: and run autoconf again.
++_LT_EOF
++ fi
++ else
++ cat >&2 <<_LT_EOF
++$progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision,
++$progname: but the definition of this LT_INIT comes from revision $macro_revision.
++$progname: You should recreate aclocal.m4 with macros from revision $package_revision
++$progname: of $PACKAGE $VERSION and run autoconf again.
++_LT_EOF
++ fi
++
++ exit $EXIT_MISMATCH
++ fi
++}
++
++
++## ----------- ##
++## Main. ##
++## ----------- ##
++
++$opt_help || {
++ # Sanity checks first:
++ func_check_version_match
++
++ if test "$build_libtool_libs" != yes && test "$build_old_libs" != yes; then
++ func_fatal_configuration "not configured to build any kind of library"
++ fi
++
++ test -z "$mode" && func_fatal_error "error: you must specify a MODE."
++
++
++ # Darwin sucks
++ eval std_shrext=\"$shrext_cmds\"
++
++
++ # Only execute mode is allowed to have -dlopen flags.
++ if test -n "$execute_dlfiles" && test "$mode" != execute; then
++ func_error "unrecognized option \`-dlopen'"
++ $ECHO "$help" 1>&2
++ exit $EXIT_FAILURE
++ fi
++
++ # Change the help message to a mode-specific one.
++ generic_help="$help"
++ help="Try \`$progname --help --mode=$mode' for more information."
++}
++
++
++# func_lalib_p file
++# True iff FILE is a libtool `.la' library or `.lo' object file.
++# This function is only a basic sanity check; it will hardly flush out
++# determined imposters.
++func_lalib_p ()
++{
++ test -f "$1" &&
++ $SED -e 4q "$1" 2>/dev/null \
++ | $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1
++}
++
++# func_lalib_unsafe_p file
++# True iff FILE is a libtool `.la' library or `.lo' object file.
++# This function implements the same check as func_lalib_p without
++# resorting to external programs. To this end, it redirects stdin and
++# closes it afterwards, without saving the original file descriptor.
++# As a safety measure, use it only where a negative result would be
++# fatal anyway. Works if `file' does not exist.
++func_lalib_unsafe_p ()
++{
++ lalib_p=no
++ if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then
++ for lalib_p_l in 1 2 3 4
++ do
++ read lalib_p_line
++ case "$lalib_p_line" in
++ \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;;
++ esac
++ done
++ exec 0<&5 5<&-
++ fi
++ test "$lalib_p" = yes
++}
++
++# func_ltwrapper_script_p file
++# True iff FILE is a libtool wrapper script
++# This function is only a basic sanity check; it will hardly flush out
++# determined imposters.
++func_ltwrapper_script_p ()
++{
++ func_lalib_p "$1"
++}
++
++# func_ltwrapper_executable_p file
++# True iff FILE is a libtool wrapper executable
++# This function is only a basic sanity check; it will hardly flush out
++# determined imposters.
++func_ltwrapper_executable_p ()
++{
++ func_ltwrapper_exec_suffix=
++ case $1 in
++ *.exe) ;;
++ *) func_ltwrapper_exec_suffix=.exe ;;
++ esac
++ $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1
++}
++
++# func_ltwrapper_scriptname file
++# Assumes file is an ltwrapper_executable
++# uses $file to determine the appropriate filename for a
++# temporary ltwrapper_script.
++func_ltwrapper_scriptname ()
++{
++ func_ltwrapper_scriptname_result=""
++ if func_ltwrapper_executable_p "$1"; then
++ func_dirname_and_basename "$1" "" "."
++ func_stripname '' '.exe' "$func_basename_result"
++ func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper"
++ fi
++}
++
++# func_ltwrapper_p file
++# True iff FILE is a libtool wrapper script or wrapper executable
++# This function is only a basic sanity check; it will hardly flush out
++# determined imposters.
++func_ltwrapper_p ()
++{
++ func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1"
++}
++
++
++# func_execute_cmds commands fail_cmd
++# Execute tilde-delimited COMMANDS.
++# If FAIL_CMD is given, eval that upon failure.
++# FAIL_CMD may read-access the current command in variable CMD!
++func_execute_cmds ()
++{
++ $opt_debug
++ save_ifs=$IFS; IFS='~'
++ for cmd in $1; do
++ IFS=$save_ifs
++ eval cmd=\"$cmd\"
++ func_show_eval "$cmd" "${2-:}"
++ done
++ IFS=$save_ifs
++}
++
++
++# func_source file
++# Source FILE, adding directory component if necessary.
++# Note that it is not necessary on cygwin/mingw to append a dot to
++# FILE even if both FILE and FILE.exe exist: automatic-append-.exe
++# behavior happens only for exec(3), not for open(2)! Also, sourcing
++# `FILE.' does not work on cygwin managed mounts.
++func_source ()
++{
++ $opt_debug
++ case $1 in
++ */* | *\\*) . "$1" ;;
++ *) . "./$1" ;;
++ esac
++}
++
++
++# func_infer_tag arg
++# Infer tagged configuration to use if any are available and
++# if one wasn't chosen via the "--tag" command line option.
++# Only attempt this if the compiler in the base compile
++# command doesn't match the default compiler.
++# arg is usually of the form 'gcc ...'
++func_infer_tag ()
++{
++ $opt_debug
++ if test -n "$available_tags" && test -z "$tagname"; then
++ CC_quoted=
++ for arg in $CC; do
++ func_quote_for_eval "$arg"
++ CC_quoted="$CC_quoted $func_quote_for_eval_result"
++ done
++ case $@ in
++ # Blanks in the command may have been stripped by the calling shell,
++ # but not from the CC environment variable when configure was run.
++ " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*) ;;
++ # Blanks at the start of $base_compile will cause this to fail
++ # if we don't check for them as well.
++ *)
++ for z in $available_tags; do
++ if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then
++ # Evaluate the configuration.
++ eval "`${SED} -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`"
++ CC_quoted=
++ for arg in $CC; do
++ # Double-quote args containing other shell metacharacters.
++ func_quote_for_eval "$arg"
++ CC_quoted="$CC_quoted $func_quote_for_eval_result"
++ done
++ case "$@ " in
++ " $CC "* | "$CC "* | " `$ECHO $CC` "* | "`$ECHO $CC` "* | " $CC_quoted"* | "$CC_quoted "* | " `$ECHO $CC_quoted` "* | "`$ECHO $CC_quoted` "*)
++ # The compiler in the base compile command matches
++ # the one in the tagged configuration.
++ # Assume this is the tagged configuration we want.
++ tagname=$z
++ break
++ ;;
++ esac
++ fi
++ done
++ # If $tagname still isn't set, then no tagged configuration
++ # was found and let the user know that the "--tag" command
++ # line option must be used.
++ if test -z "$tagname"; then
++ func_echo "unable to infer tagged configuration"
++ func_fatal_error "specify a tag with \`--tag'"
++# else
++# func_verbose "using $tagname tagged configuration"
++ fi
++ ;;
++ esac
++ fi
++}
++
++
++
++# func_write_libtool_object output_name pic_name nonpic_name
++# Create a libtool object file (analogous to a ".la" file),
++# but don't create it if we're doing a dry run.
++func_write_libtool_object ()
++{
++ write_libobj=${1}
++ if test "$build_libtool_libs" = yes; then
++ write_lobj=\'${2}\'
++ else
++ write_lobj=none
++ fi
++
++ if test "$build_old_libs" = yes; then
++ write_oldobj=\'${3}\'
++ else
++ write_oldobj=none
++ fi
++
++ $opt_dry_run || {
++ cat >${write_libobj}T <<EOF
++# $write_libobj - a libtool object file
++# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
++#
++# Please DO NOT delete this file!
++# It is necessary for linking the library.
++
++# Name of the PIC object.
++pic_object=$write_lobj
++
++# Name of the non-PIC object
++non_pic_object=$write_oldobj
++
++EOF
++ $MV "${write_libobj}T" "${write_libobj}"
++ }
++}
++
++# func_mode_compile arg...
++func_mode_compile ()
++{
++ $opt_debug
++ # Get the compilation command and the source file.
++ base_compile=
++ srcfile="$nonopt" # always keep a non-empty value in "srcfile"
++ suppress_opt=yes
++ suppress_output=
++ arg_mode=normal
++ libobj=
++ later=
++ pie_flag=
++
++ for arg
++ do
++ case $arg_mode in
++ arg )
++ # do not "continue". Instead, add this to base_compile
++ lastarg="$arg"
++ arg_mode=normal
++ ;;
++
++ target )
++ libobj="$arg"
++ arg_mode=normal
++ continue
++ ;;
++
++ normal )
++ # Accept any command-line options.
++ case $arg in
++ -o)
++ test -n "$libobj" && \
++ func_fatal_error "you cannot specify \`-o' more than once"
++ arg_mode=target
++ continue
++ ;;
++
++ -pie | -fpie | -fPIE)
++ pie_flag="$pie_flag $arg"
++ continue
++ ;;
++
++ -shared | -static | -prefer-pic | -prefer-non-pic)
++ later="$later $arg"
++ continue
++ ;;
++
++ -no-suppress)
++ suppress_opt=no
++ continue
++ ;;
++
++ -Xcompiler)
++ arg_mode=arg # the next one goes into the "base_compile" arg list
++ continue # The current "srcfile" will either be retained or
++ ;; # replaced later. I would guess that would be a bug.
++
++ -Wc,*)
++ func_stripname '-Wc,' '' "$arg"
++ args=$func_stripname_result
++ lastarg=
++ save_ifs="$IFS"; IFS=','
++ for arg in $args; do
++ IFS="$save_ifs"
++ func_quote_for_eval "$arg"
++ lastarg="$lastarg $func_quote_for_eval_result"
++ done
++ IFS="$save_ifs"
++ func_stripname ' ' '' "$lastarg"
++ lastarg=$func_stripname_result
++
++ # Add the arguments to base_compile.
++ base_compile="$base_compile $lastarg"
++ continue
++ ;;
++
++ *)
++ # Accept the current argument as the source file.
++ # The previous "srcfile" becomes the current argument.
++ #
++ lastarg="$srcfile"
++ srcfile="$arg"
++ ;;
++ esac # case $arg
++ ;;
++ esac # case $arg_mode
++
++ # Aesthetically quote the previous argument.
++ func_quote_for_eval "$lastarg"
++ base_compile="$base_compile $func_quote_for_eval_result"
++ done # for arg
++
++ case $arg_mode in
++ arg)
++ func_fatal_error "you must specify an argument for -Xcompile"
++ ;;
++ target)
++ func_fatal_error "you must specify a target with \`-o'"
++ ;;
++ *)
++ # Get the name of the library object.
++ test -z "$libobj" && {
++ func_basename "$srcfile"
++ libobj="$func_basename_result"
++ }
++ ;;
++ esac
++
++ # Recognize several different file suffixes.
++ # If the user specifies -o file.o, it is replaced with file.lo
++ case $libobj in
++ *.[cCFSifmso] | \
++ *.ada | *.adb | *.ads | *.asm | \
++ *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \
++ *.[fF][09]? | *.for | *.java | *.obj | *.sx)
++ func_xform "$libobj"
++ libobj=$func_xform_result
++ ;;
++ esac
++
++ case $libobj in
++ *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;;
++ *)
++ func_fatal_error "cannot determine name of library object from \`$libobj'"
++ ;;
++ esac
++
++ func_infer_tag $base_compile
++
++ for arg in $later; do
++ case $arg in
++ -shared)
++ test "$build_libtool_libs" != yes && \
++ func_fatal_configuration "can not build a shared library"
++ build_old_libs=no
++ continue
++ ;;
++
++ -static)
++ build_libtool_libs=no
++ build_old_libs=yes
++ continue
++ ;;
++
++ -prefer-pic)
++ pic_mode=yes
++ continue
++ ;;
++
++ -prefer-non-pic)
++ pic_mode=no
++ continue
++ ;;
++ esac
++ done
++
++ func_quote_for_eval "$libobj"
++ test "X$libobj" != "X$func_quote_for_eval_result" \
++ && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \
++ && func_warning "libobj name \`$libobj' may not contain shell special characters."
++ func_dirname_and_basename "$obj" "/" ""
++ objname="$func_basename_result"
++ xdir="$func_dirname_result"
++ lobj=${xdir}$objdir/$objname
++
++ test -z "$base_compile" && \
++ func_fatal_help "you must specify a compilation command"
++
++ # Delete any leftover library objects.
++ if test "$build_old_libs" = yes; then
++ removelist="$obj $lobj $libobj ${libobj}T"
++ else
++ removelist="$lobj $libobj ${libobj}T"
++ fi
++
++ # On Cygwin there's no "real" PIC flag so we must build both object types
++ case $host_os in
++ cygwin* | mingw* | pw32* | os2* | cegcc*)
++ pic_mode=default
++ ;;
++ esac
++ if test "$pic_mode" = no && test "$deplibs_check_method" != pass_all; then
++ # non-PIC code in shared libraries is not supported
++ pic_mode=default
++ fi
++
++ # Calculate the filename of the output object if compiler does
++ # not support -o with -c
++ if test "$compiler_c_o" = no; then
++ output_obj=`$ECHO "X$srcfile" | $Xsed -e 's%^.*/%%' -e 's%\.[^.]*$%%'`.${objext}
++ lockfile="$output_obj.lock"
++ else
++ output_obj=
++ need_locks=no
++ lockfile=
++ fi
++
++ # Lock this critical section if it is needed
++ # We use this script file to make the link, it avoids creating a new file
++ if test "$need_locks" = yes; then
++ until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do
++ func_echo "Waiting for $lockfile to be removed"
++ sleep 2
++ done
++ elif test "$need_locks" = warn; then
++ if test -f "$lockfile"; then
++ $ECHO "\
++*** ERROR, $lockfile exists and contains:
++`cat $lockfile 2>/dev/null`
++
++This indicates that another process is trying to use the same
++temporary object file, and libtool could not work around it because
++your compiler does not support \`-c' and \`-o' together. If you
++repeat this compilation, it may succeed, by chance, but you had better
++avoid parallel builds (make -j) in this platform, or get a better
++compiler."
++
++ $opt_dry_run || $RM $removelist
++ exit $EXIT_FAILURE
++ fi
++ removelist="$removelist $output_obj"
++ $ECHO "$srcfile" > "$lockfile"
++ fi
++
++ $opt_dry_run || $RM $removelist
++ removelist="$removelist $lockfile"
++ trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15
++
++ if test -n "$fix_srcfile_path"; then
++ eval srcfile=\"$fix_srcfile_path\"
++ fi
++ func_quote_for_eval "$srcfile"
++ qsrcfile=$func_quote_for_eval_result
++
++ # Only build a PIC object if we are building libtool libraries.
++ if test "$build_libtool_libs" = yes; then
++ # Without this assignment, base_compile gets emptied.
++ fbsd_hideous_sh_bug=$base_compile
++
++ if test "$pic_mode" != no; then
++ command="$base_compile $qsrcfile $pic_flag"
++ else
++ # Don't build PIC code
++ command="$base_compile $qsrcfile"
++ fi
++
++ func_mkdir_p "$xdir$objdir"
++
++ if test -z "$output_obj"; then
++ # Place PIC objects in $objdir
++ command="$command -o $lobj"
++ fi
++
++ func_show_eval_locale "$command" \
++ 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE'
++
++ if test "$need_locks" = warn &&
++ test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
++ $ECHO "\
++*** ERROR, $lockfile contains:
++`cat $lockfile 2>/dev/null`
++
++but it should contain:
++$srcfile
++
++This indicates that another process is trying to use the same
++temporary object file, and libtool could not work around it because
++your compiler does not support \`-c' and \`-o' together. If you
++repeat this compilation, it may succeed, by chance, but you had better
++avoid parallel builds (make -j) in this platform, or get a better
++compiler."
++
++ $opt_dry_run || $RM $removelist
++ exit $EXIT_FAILURE
++ fi
++
++ # Just move the object if needed, then go on to compile the next one
++ if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then
++ func_show_eval '$MV "$output_obj" "$lobj"' \
++ 'error=$?; $opt_dry_run || $RM $removelist; exit $error'
++ fi
++
++ # Allow error messages only from the first compilation.
++ if test "$suppress_opt" = yes; then
++ suppress_output=' >/dev/null 2>&1'
++ fi
++ fi
++
++ # Only build a position-dependent object if we build old libraries.
++ if test "$build_old_libs" = yes; then
++ if test "$pic_mode" != yes; then
++ # Don't build PIC code
++ command="$base_compile $qsrcfile$pie_flag"
++ else
++ command="$base_compile $qsrcfile $pic_flag"
++ fi
++ if test "$compiler_c_o" = yes; then
++ command="$command -o $obj"
++ fi
++
++ # Suppress compiler output if we already did a PIC compilation.
++ command="$command$suppress_output"
++ func_show_eval_locale "$command" \
++ '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE'
++
++ if test "$need_locks" = warn &&
++ test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then
++ $ECHO "\
++*** ERROR, $lockfile contains:
++`cat $lockfile 2>/dev/null`
++
++but it should contain:
++$srcfile
++
++This indicates that another process is trying to use the same
++temporary object file, and libtool could not work around it because
++your compiler does not support \`-c' and \`-o' together. If you
++repeat this compilation, it may succeed, by chance, but you had better
++avoid parallel builds (make -j) in this platform, or get a better
++compiler."
++
++ $opt_dry_run || $RM $removelist
++ exit $EXIT_FAILURE
++ fi
++
++ # Just move the object if needed
++ if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then
++ func_show_eval '$MV "$output_obj" "$obj"' \
++ 'error=$?; $opt_dry_run || $RM $removelist; exit $error'
++ fi
++ fi
++
++ $opt_dry_run || {
++ func_write_libtool_object "$libobj" "$objdir/$objname" "$objname"
++
++ # Unlock the critical section if it was locked
++ if test "$need_locks" != no; then
++ removelist=$lockfile
++ $RM "$lockfile"
++ fi
++ }
++
++ exit $EXIT_SUCCESS
++}
++
++$opt_help || {
++test "$mode" = compile && func_mode_compile ${1+"$@"}
++}
++
++func_mode_help ()
++{
++ # We need to display help for each of the modes.
++ case $mode in
++ "")
++ # Generic help is extracted from the usage comments
++ # at the start of this file.
++ func_help
++ ;;
++
++ clean)
++ $ECHO \
++"Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE...
++
++Remove files from the build directory.
++
++RM is the name of the program to use to delete files associated with each FILE
++(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed
++to RM.
++
++If FILE is a libtool library, object or program, all the files associated
++with it are deleted. Otherwise, only FILE itself is deleted using RM."
++ ;;
++
++ compile)
++ $ECHO \
++"Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE
++
++Compile a source file into a libtool library object.
++
++This mode accepts the following additional options:
++
++ -o OUTPUT-FILE set the output file name to OUTPUT-FILE
++ -no-suppress do not suppress compiler output for multiple passes
++ -prefer-pic try to building PIC objects only
++ -prefer-non-pic try to building non-PIC objects only
++ -shared do not build a \`.o' file suitable for static linking
++ -static only build a \`.o' file suitable for static linking
++
++COMPILE-COMMAND is a command to be used in creating a \`standard' object file
++from the given SOURCEFILE.
++
++The output file name is determined by removing the directory component from
++SOURCEFILE, then substituting the C source code suffix \`.c' with the
++library object suffix, \`.lo'."
++ ;;
++
++ execute)
++ $ECHO \
++"Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]...
++
++Automatically set library path, then run a program.
++
++This mode accepts the following additional options:
++
++ -dlopen FILE add the directory containing FILE to the library path
++
++This mode sets the library path environment variable according to \`-dlopen'
++flags.
++
++If any of the ARGS are libtool executable wrappers, then they are translated
++into their corresponding uninstalled binary, and any of their required library
++directories are added to the library path.
++
++Then, COMMAND is executed, with ARGS as arguments."
++ ;;
++
++ finish)
++ $ECHO \
++"Usage: $progname [OPTION]... --mode=finish [LIBDIR]...
++
++Complete the installation of libtool libraries.
++
++Each LIBDIR is a directory that contains libtool libraries.
++
++The commands that this mode executes may require superuser privileges. Use
++the \`--dry-run' option if you just want to see what would be executed."
++ ;;
++
++ install)
++ $ECHO \
++"Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND...
++
++Install executables or libraries.
++
++INSTALL-COMMAND is the installation command. The first component should be
++either the \`install' or \`cp' program.
++
++The following components of INSTALL-COMMAND are treated specially:
++
++ -inst-prefix PREFIX-DIR Use PREFIX-DIR as a staging area for installation
++
++The rest of the components are interpreted as arguments to that command (only
++BSD-compatible install options are recognized)."
++ ;;
++
++ link)
++ $ECHO \
++"Usage: $progname [OPTION]... --mode=link LINK-COMMAND...
++
++Link object files or libraries together to form another library, or to
++create an executable program.
++
++LINK-COMMAND is a command using the C compiler that you would use to create
++a program from several object files.
++
++The following components of LINK-COMMAND are treated specially:
++
++ -all-static do not do any dynamic linking at all
++ -avoid-version do not add a version suffix if possible
++ -dlopen FILE \`-dlpreopen' FILE if it cannot be dlopened at runtime
++ -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols
++ -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3)
++ -export-symbols SYMFILE
++ try to export only the symbols listed in SYMFILE
++ -export-symbols-regex REGEX
++ try to export only the symbols matching REGEX
++ -LLIBDIR search LIBDIR for required installed libraries
++ -lNAME OUTPUT-FILE requires the installed library libNAME
++ -module build a library that can dlopened
++ -no-fast-install disable the fast-install mode
++ -no-install link a not-installable executable
++ -no-undefined declare that a library does not refer to external symbols
++ -o OUTPUT-FILE create OUTPUT-FILE from the specified objects
++ -objectlist FILE Use a list of object files found in FILE to specify objects
++ -precious-files-regex REGEX
++ don't remove output files matching REGEX
++ -release RELEASE specify package release information
++ -rpath LIBDIR the created library will eventually be installed in LIBDIR
++ -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries
++ -shared only do dynamic linking of libtool libraries
++ -shrext SUFFIX override the standard shared library file extension
++ -static do not do any dynamic linking of uninstalled libtool libraries
++ -static-libtool-libs
++ do not do any dynamic linking of libtool libraries
++ -version-info CURRENT[:REVISION[:AGE]]
++ specify library version info [each variable defaults to 0]
++ -weak LIBNAME declare that the target provides the LIBNAME interface
++
++All other options (arguments beginning with \`-') are ignored.
++
++Every other argument is treated as a filename. Files ending in \`.la' are
++treated as uninstalled libtool libraries, other files are standard or library
++object files.
++
++If the OUTPUT-FILE ends in \`.la', then a libtool library is created,
++only library objects (\`.lo' files) may be specified, and \`-rpath' is
++required, except when creating a convenience library.
++
++If OUTPUT-FILE ends in \`.a' or \`.lib', then a standard library is created
++using \`ar' and \`ranlib', or on Windows using \`lib'.
++
++If OUTPUT-FILE ends in \`.lo' or \`.${objext}', then a reloadable object file
++is created, otherwise an executable program is created."
++ ;;
++
++ uninstall)
++ $ECHO \
++"Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE...
++
++Remove libraries from an installation directory.
++
++RM is the name of the program to use to delete files associated with each FILE
++(typically \`/bin/rm'). RM-OPTIONS are options (such as \`-f') to be passed
++to RM.
++
++If FILE is a libtool library, all the files associated with it are deleted.
++Otherwise, only FILE itself is deleted using RM."
++ ;;
++
++ *)
++ func_fatal_help "invalid operation mode \`$mode'"
++ ;;
++ esac
++
++ $ECHO
++ $ECHO "Try \`$progname --help' for more information about other modes."
++
++ exit $?
++}
++
++ # Now that we've collected a possible --mode arg, show help if necessary
++ $opt_help && func_mode_help
++
++
++# func_mode_execute arg...
++func_mode_execute ()
++{
++ $opt_debug
++ # The first argument is the command name.
++ cmd="$nonopt"
++ test -z "$cmd" && \
++ func_fatal_help "you must specify a COMMAND"
++
++ # Handle -dlopen flags immediately.
++ for file in $execute_dlfiles; do
++ test -f "$file" \
++ || func_fatal_help "\`$file' is not a file"
++
++ dir=
++ case $file in
++ *.la)
++ # Check to see that this really is a libtool archive.
++ func_lalib_unsafe_p "$file" \
++ || func_fatal_help "\`$lib' is not a valid libtool archive"
++
++ # Read the libtool library.
++ dlname=
++ library_names=
++ func_source "$file"
++
++ # Skip this library if it cannot be dlopened.
++ if test -z "$dlname"; then
++ # Warn if it was a shared library.
++ test -n "$library_names" && \
++ func_warning "\`$file' was not linked with \`-export-dynamic'"
++ continue
++ fi
++
++ func_dirname "$file" "" "."
++ dir="$func_dirname_result"
++
++ if test -f "$dir/$objdir/$dlname"; then
++ dir="$dir/$objdir"
++ else
++ if test ! -f "$dir/$dlname"; then
++ func_fatal_error "cannot find \`$dlname' in \`$dir' or \`$dir/$objdir'"
++ fi
++ fi
++ ;;
++
++ *.lo)
++ # Just add the directory containing the .lo file.
++ func_dirname "$file" "" "."
++ dir="$func_dirname_result"
++ ;;
++
++ *)
++ func_warning "\`-dlopen' is ignored for non-libtool libraries and objects"
++ continue
++ ;;
++ esac
++
++ # Get the absolute pathname.
++ absdir=`cd "$dir" && pwd`
++ test -n "$absdir" && dir="$absdir"
++
++ # Now add the directory to shlibpath_var.
++ if eval "test -z \"\$$shlibpath_var\""; then
++ eval "$shlibpath_var=\"\$dir\""
++ else
++ eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\""
++ fi
++ done
++
++ # This variable tells wrapper scripts just to set shlibpath_var
++ # rather than running their programs.
++ libtool_execute_magic="$magic"
++
++ # Check if any of the arguments is a wrapper script.
++ args=
++ for file
++ do
++ case $file in
++ -*) ;;
++ *)
++ # Do a test to see if this is really a libtool program.
++ if func_ltwrapper_script_p "$file"; then
++ func_source "$file"
++ # Transform arg to wrapped name.
++ file="$progdir/$program"
++ elif func_ltwrapper_executable_p "$file"; then
++ func_ltwrapper_scriptname "$file"
++ func_source "$func_ltwrapper_scriptname_result"
++ # Transform arg to wrapped name.
++ file="$progdir/$program"
++ fi
++ ;;
++ esac
++ # Quote arguments (to preserve shell metacharacters).
++ func_quote_for_eval "$file"
++ args="$args $func_quote_for_eval_result"
++ done
++
++ if test "X$opt_dry_run" = Xfalse; then
++ if test -n "$shlibpath_var"; then
++ # Export the shlibpath_var.
++ eval "export $shlibpath_var"
++ fi
++
++ # Restore saved environment variables
++ for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES
++ do
++ eval "if test \"\${save_$lt_var+set}\" = set; then
++ $lt_var=\$save_$lt_var; export $lt_var
++ else
++ $lt_unset $lt_var
++ fi"
++ done
++
++ # Now prepare to actually exec the command.
++ exec_cmd="\$cmd$args"
++ else
++ # Display what would be done.
++ if test -n "$shlibpath_var"; then
++ eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\""
++ $ECHO "export $shlibpath_var"
++ fi
++ $ECHO "$cmd$args"
++ exit $EXIT_SUCCESS
++ fi
++}
++
++test "$mode" = execute && func_mode_execute ${1+"$@"}
++
++
++# func_mode_finish arg...
++func_mode_finish ()
++{
++ $opt_debug
++ libdirs="$nonopt"
++ admincmds=
++
++ if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then
++ for dir
++ do
++ libdirs="$libdirs $dir"
++ done
++
++ for libdir in $libdirs; do
++ if test -n "$finish_cmds"; then
++ # Do each command in the finish commands.
++ func_execute_cmds "$finish_cmds" 'admincmds="$admincmds
++'"$cmd"'"'
++ fi
++ if test -n "$finish_eval"; then
++ # Do the single finish_eval.
++ eval cmds=\"$finish_eval\"
++ $opt_dry_run || eval "$cmds" || admincmds="$admincmds
++ $cmds"
++ fi
++ done
++ fi
++
++ # Exit here if they wanted silent mode.
++ $opt_silent && exit $EXIT_SUCCESS
++
++ $ECHO "X----------------------------------------------------------------------" | $Xsed
++ $ECHO "Libraries have been installed in:"
++ for libdir in $libdirs; do
++ $ECHO " $libdir"
++ done
++ $ECHO
++ $ECHO "If you ever happen to want to link against installed libraries"
++ $ECHO "in a given directory, LIBDIR, you must either use libtool, and"
++ $ECHO "specify the full pathname of the library, or use the \`-LLIBDIR'"
++ $ECHO "flag during linking and do at least one of the following:"
++ if test -n "$shlibpath_var"; then
++ $ECHO " - add LIBDIR to the \`$shlibpath_var' environment variable"
++ $ECHO " during execution"
++ fi
++ if test -n "$runpath_var"; then
++ $ECHO " - add LIBDIR to the \`$runpath_var' environment variable"
++ $ECHO " during linking"
++ fi
++ if test -n "$hardcode_libdir_flag_spec"; then
++ libdir=LIBDIR
++ eval flag=\"$hardcode_libdir_flag_spec\"
++
++ $ECHO " - use the \`$flag' linker flag"
++ fi
++ if test -n "$admincmds"; then
++ $ECHO " - have your system administrator run these commands:$admincmds"
++ fi
++ if test -f /etc/ld.so.conf; then
++ $ECHO " - have your system administrator add LIBDIR to \`/etc/ld.so.conf'"
++ fi
++ $ECHO
++
++ $ECHO "See any operating system documentation about shared libraries for"
++ case $host in
++ solaris2.[6789]|solaris2.1[0-9])
++ $ECHO "more information, such as the ld(1), crle(1) and ld.so(8) manual"
++ $ECHO "pages."
++ ;;
++ *)
++ $ECHO "more information, such as the ld(1) and ld.so(8) manual pages."
++ ;;
++ esac
++ $ECHO "X----------------------------------------------------------------------" | $Xsed
++ exit $EXIT_SUCCESS
++}
++
++test "$mode" = finish && func_mode_finish ${1+"$@"}
++
++
++# func_mode_install arg...
++func_mode_install ()
++{
++ $opt_debug
++ # There may be an optional sh(1) argument at the beginning of
++ # install_prog (especially on Windows NT).
++ if test "$nonopt" = "$SHELL" || test "$nonopt" = /bin/sh ||
++ # Allow the use of GNU shtool's install command.
++ $ECHO "X$nonopt" | $GREP shtool >/dev/null; then
++ # Aesthetically quote it.
++ func_quote_for_eval "$nonopt"
++ install_prog="$func_quote_for_eval_result "
++ arg=$1
++ shift
++ else
++ install_prog=
++ arg=$nonopt
++ fi
++
++ # The real first argument should be the name of the installation program.
++ # Aesthetically quote it.
++ func_quote_for_eval "$arg"
++ install_prog="$install_prog$func_quote_for_eval_result"
++
++ # We need to accept at least all the BSD install flags.
++ dest=
++ files=
++ opts=
++ prev=
++ install_type=
++ isdir=no
++ stripme=
++ for arg
++ do
++ if test -n "$dest"; then
++ files="$files $dest"
++ dest=$arg
++ continue
++ fi
++
++ case $arg in
++ -d) isdir=yes ;;
++ -f)
++ case " $install_prog " in
++ *[\\\ /]cp\ *) ;;
++ *) prev=$arg ;;
++ esac
++ ;;
++ -g | -m | -o)
++ prev=$arg
++ ;;
++ -s)
++ stripme=" -s"
++ continue
++ ;;
++ -*)
++ ;;
++ *)
++ # If the previous option needed an argument, then skip it.
++ if test -n "$prev"; then
++ prev=
++ else
++ dest=$arg
++ continue
++ fi
++ ;;
++ esac
++
++ # Aesthetically quote the argument.
++ func_quote_for_eval "$arg"
++ install_prog="$install_prog $func_quote_for_eval_result"
++ done
++
++ test -z "$install_prog" && \
++ func_fatal_help "you must specify an install program"
++
++ test -n "$prev" && \
++ func_fatal_help "the \`$prev' option requires an argument"
++
++ if test -z "$files"; then
++ if test -z "$dest"; then
++ func_fatal_help "no file or destination specified"
++ else
++ func_fatal_help "you must specify a destination"
++ fi
++ fi
++
++ # Strip any trailing slash from the destination.
++ func_stripname '' '/' "$dest"
++ dest=$func_stripname_result
++
++ # Check to see that the destination is a directory.
++ test -d "$dest" && isdir=yes
++ if test "$isdir" = yes; then
++ destdir="$dest"
++ destname=
++ else
++ func_dirname_and_basename "$dest" "" "."
++ destdir="$func_dirname_result"
++ destname="$func_basename_result"
++
++ # Not a directory, so check to see that there is only one file specified.
++ set dummy $files; shift
++ test "$#" -gt 1 && \
++ func_fatal_help "\`$dest' is not a directory"
++ fi
++ case $destdir in
++ [\\/]* | [A-Za-z]:[\\/]*) ;;
++ *)
++ for file in $files; do
++ case $file in
++ *.lo) ;;
++ *)
++ func_fatal_help "\`$destdir' must be an absolute directory name"
++ ;;
++ esac
++ done
++ ;;
++ esac
++
++ # This variable tells wrapper scripts just to set variables rather
++ # than running their programs.
++ libtool_install_magic="$magic"
++
++ staticlibs=
++ future_libdirs=
++ current_libdirs=
++ for file in $files; do
++
++ # Do each installation.
++ case $file in
++ *.$libext)
++ # Do the static libraries later.
++ staticlibs="$staticlibs $file"
++ ;;
++
++ *.la)
++ # Check to see that this really is a libtool archive.
++ func_lalib_unsafe_p "$file" \
++ || func_fatal_help "\`$file' is not a valid libtool archive"
++
++ library_names=
++ old_library=
++ relink_command=
++ func_source "$file"
++
++ # Add the libdir to current_libdirs if it is the destination.
++ if test "X$destdir" = "X$libdir"; then
++ case "$current_libdirs " in
++ *" $libdir "*) ;;
++ *) current_libdirs="$current_libdirs $libdir" ;;
++ esac
++ else
++ # Note the libdir as a future libdir.
++ case "$future_libdirs " in
++ *" $libdir "*) ;;
++ *) future_libdirs="$future_libdirs $libdir" ;;
++ esac
++ fi
++
++ func_dirname "$file" "/" ""
++ dir="$func_dirname_result"
++ dir="$dir$objdir"
++
++ if test -n "$relink_command"; then
++ # Determine the prefix the user has applied to our future dir.
++ inst_prefix_dir=`$ECHO "X$destdir" | $Xsed -e "s%$libdir\$%%"`
++
++ # Don't allow the user to place us outside of our expected
++ # location b/c this prevents finding dependent libraries that
++ # are installed to the same prefix.
++ # At present, this check doesn't affect windows .dll's that
++ # are installed into $libdir/../bin (currently, that works fine)
++ # but it's something to keep an eye on.
++ test "$inst_prefix_dir" = "$destdir" && \
++ func_fatal_error "error: cannot install \`$file' to a directory not ending in $libdir"
++
++ if test -n "$inst_prefix_dir"; then
++ # Stick the inst_prefix_dir data into the link command.
++ relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"`
++ else
++ relink_command=`$ECHO "X$relink_command" | $Xsed -e "s%@inst_prefix_dir@%%"`
++ fi
++
++ func_warning "relinking \`$file'"
++ func_show_eval "$relink_command" \
++ 'func_fatal_error "error: relink \`$file'\'' with the above command before installing it"'
++ fi
++
++ # See the names of the shared library.
++ set dummy $library_names; shift
++ if test -n "$1"; then
++ realname="$1"
++ shift
++
++ srcname="$realname"
++ test -n "$relink_command" && srcname="$realname"T
++
++ # Install the shared library and build the symlinks.
++ func_show_eval "$install_prog $dir/$srcname $destdir/$realname" \
++ 'exit $?'
++ tstripme="$stripme"
++ case $host_os in
++ cygwin* | mingw* | pw32* | cegcc*)
++ case $realname in
++ *.dll.a)
++ tstripme=""
++ ;;
++ esac
++ ;;
++ esac
++ if test -n "$tstripme" && test -n "$striplib"; then
++ func_show_eval "$striplib $destdir/$realname" 'exit $?'
++ fi
++
++ if test "$#" -gt 0; then
++ # Delete the old symlinks, and create new ones.
++ # Try `ln -sf' first, because the `ln' binary might depend on
++ # the symlink we replace! Solaris /bin/ln does not understand -f,
++ # so we also need to try rm && ln -s.
++ for linkname
++ do
++ test "$linkname" != "$realname" \
++ && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })"
++ done
++ fi
++
++ # Do each command in the postinstall commands.
++ lib="$destdir/$realname"
++ func_execute_cmds "$postinstall_cmds" 'exit $?'
++ fi
++
++ # Install the pseudo-library for information purposes.
++ func_basename "$file"
++ name="$func_basename_result"
++ instname="$dir/$name"i
++ func_show_eval "$install_prog $instname $destdir/$name" 'exit $?'
++
++ # Maybe install the static library, too.
++ test -n "$old_library" && staticlibs="$staticlibs $dir/$old_library"
++ ;;
++
++ *.lo)
++ # Install (i.e. copy) a libtool object.
++
++ # Figure out destination file name, if it wasn't already specified.
++ if test -n "$destname"; then
++ destfile="$destdir/$destname"
++ else
++ func_basename "$file"
++ destfile="$func_basename_result"
++ destfile="$destdir/$destfile"
++ fi
++
++ # Deduce the name of the destination old-style object file.
++ case $destfile in
++ *.lo)
++ func_lo2o "$destfile"
++ staticdest=$func_lo2o_result
++ ;;
++ *.$objext)
++ staticdest="$destfile"
++ destfile=
++ ;;
++ *)
++ func_fatal_help "cannot copy a libtool object to \`$destfile'"
++ ;;
++ esac
++
++ # Install the libtool object if requested.
++ test -n "$destfile" && \
++ func_show_eval "$install_prog $file $destfile" 'exit $?'
++
++ # Install the old object if enabled.
++ if test "$build_old_libs" = yes; then
++ # Deduce the name of the old-style object file.
++ func_lo2o "$file"
++ staticobj=$func_lo2o_result
++ func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?'
++ fi
++ exit $EXIT_SUCCESS
++ ;;
++
++ *)
++ # Figure out destination file name, if it wasn't already specified.
++ if test -n "$destname"; then
++ destfile="$destdir/$destname"
++ else
++ func_basename "$file"
++ destfile="$func_basename_result"
++ destfile="$destdir/$destfile"
++ fi
++
++ # If the file is missing, and there is a .exe on the end, strip it
++ # because it is most likely a libtool script we actually want to
++ # install
++ stripped_ext=""
++ case $file in
++ *.exe)
++ if test ! -f "$file"; then
++ func_stripname '' '.exe' "$file"
++ file=$func_stripname_result
++ stripped_ext=".exe"
++ fi
++ ;;
++ esac
++
++ # Do a test to see if this is really a libtool program.
++ case $host in
++ *cygwin* | *mingw*)
++ if func_ltwrapper_executable_p "$file"; then
++ func_ltwrapper_scriptname "$file"
++ wrapper=$func_ltwrapper_scriptname_result
++ else
++ func_stripname '' '.exe' "$file"
++ wrapper=$func_stripname_result
++ fi
++ ;;
++ *)
++ wrapper=$file
++ ;;
++ esac
++ if func_ltwrapper_script_p "$wrapper"; then
++ notinst_deplibs=
++ relink_command=
++
++ func_source "$wrapper"
++
++ # Check the variables that should have been set.
++ test -z "$generated_by_libtool_version" && \
++ func_fatal_error "invalid libtool wrapper script \`$wrapper'"
++
++ finalize=yes
++ for lib in $notinst_deplibs; do
++ # Check to see that each library is installed.
++ libdir=
++ if test -f "$lib"; then
++ func_source "$lib"
++ fi
++ libfile="$libdir/"`$ECHO "X$lib" | $Xsed -e 's%^.*/%%g'` ### testsuite: skip nested quoting test
++ if test -n "$libdir" && test ! -f "$libfile"; then
++ func_warning "\`$lib' has not been installed in \`$libdir'"
++ finalize=no
++ fi
++ done
++
++ relink_command=
++ func_source "$wrapper"
++
++ outputname=
++ if test "$fast_install" = no && test -n "$relink_command"; then
++ $opt_dry_run || {
++ if test "$finalize" = yes; then
++ tmpdir=`func_mktempdir`
++ func_basename "$file$stripped_ext"
++ file="$func_basename_result"
++ outputname="$tmpdir/$file"
++ # Replace the output file specification.
++ relink_command=`$ECHO "X$relink_command" | $Xsed -e 's%@OUTPUT@%'"$outputname"'%g'`
++
++ $opt_silent || {
++ func_quote_for_expand "$relink_command"
++ eval "func_echo $func_quote_for_expand_result"
++ }
++ if eval "$relink_command"; then :
++ else
++ func_error "error: relink \`$file' with the above command before installing it"
++ $opt_dry_run || ${RM}r "$tmpdir"
++ continue
++ fi
++ file="$outputname"
++ else
++ func_warning "cannot relink \`$file'"
++ fi
++ }
++ else
++ # Install the binary that we compiled earlier.
++ file=`$ECHO "X$file$stripped_ext" | $Xsed -e "s%\([^/]*\)$%$objdir/\1%"`
++ fi
++ fi
++
++ # remove .exe since cygwin /usr/bin/install will append another
++ # one anyway
++ case $install_prog,$host in
++ */usr/bin/install*,*cygwin*)
++ case $file:$destfile in
++ *.exe:*.exe)
++ # this is ok
++ ;;
++ *.exe:*)
++ destfile=$destfile.exe
++ ;;
++ *:*.exe)
++ func_stripname '' '.exe' "$destfile"
++ destfile=$func_stripname_result
++ ;;
++ esac
++ ;;
++ esac
++ func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?'
++ $opt_dry_run || if test -n "$outputname"; then
++ ${RM}r "$tmpdir"
++ fi
++ ;;
++ esac
++ done
++
++ for file in $staticlibs; do
++ func_basename "$file"
++ name="$func_basename_result"
++
++ # Set up the ranlib parameters.
++ oldlib="$destdir/$name"
++
++ func_show_eval "$install_prog \$file \$oldlib" 'exit $?'
++
++ if test -n "$stripme" && test -n "$old_striplib"; then
++ func_show_eval "$old_striplib $oldlib" 'exit $?'
++ fi
++
++ # Do each command in the postinstall commands.
++ func_execute_cmds "$old_postinstall_cmds" 'exit $?'
++ done
++
++ test -n "$future_libdirs" && \
++ func_warning "remember to run \`$progname --finish$future_libdirs'"
++
++ if test -n "$current_libdirs"; then
++ # Maybe just do a dry run.
++ $opt_dry_run && current_libdirs=" -n$current_libdirs"
++ exec_cmd='$SHELL $progpath $preserve_args --finish$current_libdirs'
++ else
++ exit $EXIT_SUCCESS
++ fi
++}
++
++test "$mode" = install && func_mode_install ${1+"$@"}
++
++
++# func_generate_dlsyms outputname originator pic_p
++# Extract symbols from dlprefiles and create ${outputname}S.o with
++# a dlpreopen symbol table.
++func_generate_dlsyms ()
++{
++ $opt_debug
++ my_outputname="$1"
++ my_originator="$2"
++ my_pic_p="${3-no}"
++ my_prefix=`$ECHO "$my_originator" | sed 's%[^a-zA-Z0-9]%_%g'`
++ my_dlsyms=
++
++ if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
++ if test -n "$NM" && test -n "$global_symbol_pipe"; then
++ my_dlsyms="${my_outputname}S.c"
++ else
++ func_error "not configured to extract global symbols from dlpreopened files"
++ fi
++ fi
++
++ if test -n "$my_dlsyms"; then
++ case $my_dlsyms in
++ "") ;;
++ *.c)
++ # Discover the nlist of each of the dlfiles.
++ nlist="$output_objdir/${my_outputname}.nm"
++
++ func_show_eval "$RM $nlist ${nlist}S ${nlist}T"
++
++ # Parse the name list into a source file.
++ func_verbose "creating $output_objdir/$my_dlsyms"
++
++ $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\
++/* $my_dlsyms - symbol resolution table for \`$my_outputname' dlsym emulation. */
++/* Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION */
++
++#ifdef __cplusplus
++extern \"C\" {
++#endif
++
++/* External symbol declarations for the compiler. */\
++"
++
++ if test "$dlself" = yes; then
++ func_verbose "generating symbol list for \`$output'"
++
++ $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist"
++
++ # Add our own program objects to the symbol list.
++ progfiles=`$ECHO "X$objs$old_deplibs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
++ for progfile in $progfiles; do
++ func_verbose "extracting global C symbols from \`$progfile'"
++ $opt_dry_run || eval "$NM $progfile | $global_symbol_pipe >> '$nlist'"
++ done
++
++ if test -n "$exclude_expsyms"; then
++ $opt_dry_run || {
++ eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T'
++ eval '$MV "$nlist"T "$nlist"'
++ }
++ fi
++
++ if test -n "$export_symbols_regex"; then
++ $opt_dry_run || {
++ eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T'
++ eval '$MV "$nlist"T "$nlist"'
++ }
++ fi
++
++ # Prepare the list of exported symbols
++ if test -z "$export_symbols"; then
++ export_symbols="$output_objdir/$outputname.exp"
++ $opt_dry_run || {
++ $RM $export_symbols
++ eval "${SED} -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"'
++ case $host in
++ *cygwin* | *mingw* | *cegcc* )
++ eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
++ eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"'
++ ;;
++ esac
++ }
++ else
++ $opt_dry_run || {
++ eval "${SED} -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"'
++ eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T'
++ eval '$MV "$nlist"T "$nlist"'
++ case $host in
++ *cygwin | *mingw* | *cegcc* )
++ eval "echo EXPORTS "'> "$output_objdir/$outputname.def"'
++ eval 'cat "$nlist" >> "$output_objdir/$outputname.def"'
++ ;;
++ esac
++ }
++ fi
++ fi
++
++ for dlprefile in $dlprefiles; do
++ func_verbose "extracting global C symbols from \`$dlprefile'"
++ func_basename "$dlprefile"
++ name="$func_basename_result"
++ $opt_dry_run || {
++ eval '$ECHO ": $name " >> "$nlist"'
++ eval "$NM $dlprefile 2>/dev/null | $global_symbol_pipe >> '$nlist'"
++ }
++ done
++
++ $opt_dry_run || {
++ # Make sure we have at least an empty file.
++ test -f "$nlist" || : > "$nlist"
++
++ if test -n "$exclude_expsyms"; then
++ $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T
++ $MV "$nlist"T "$nlist"
++ fi
++
++ # Try sorting and uniquifying the output.
++ if $GREP -v "^: " < "$nlist" |
++ if sort -k 3 </dev/null >/dev/null 2>&1; then
++ sort -k 3
++ else
++ sort +2
++ fi |
++ uniq > "$nlist"S; then
++ :
++ else
++ $GREP -v "^: " < "$nlist" > "$nlist"S
++ fi
++
++ if test -f "$nlist"S; then
++ eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"'
++ else
++ $ECHO '/* NONE */' >> "$output_objdir/$my_dlsyms"
++ fi
++
++ $ECHO >> "$output_objdir/$my_dlsyms" "\
++
++/* The mapping between symbol names and symbols. */
++typedef struct {
++ const char *name;
++ void *address;
++} lt_dlsymlist;
++"
++ case $host in
++ *cygwin* | *mingw* | *cegcc* )
++ $ECHO >> "$output_objdir/$my_dlsyms" "\
++/* DATA imports from DLLs on WIN32 con't be const, because
++ runtime relocations are performed -- see ld's documentation
++ on pseudo-relocs. */"
++ lt_dlsym_const= ;;
++ *osf5*)
++ echo >> "$output_objdir/$my_dlsyms" "\
++/* This system does not cope well with relocations in const data */"
++ lt_dlsym_const= ;;
++ *)
++ lt_dlsym_const=const ;;
++ esac
++
++ $ECHO >> "$output_objdir/$my_dlsyms" "\
++extern $lt_dlsym_const lt_dlsymlist
++lt_${my_prefix}_LTX_preloaded_symbols[];
++$lt_dlsym_const lt_dlsymlist
++lt_${my_prefix}_LTX_preloaded_symbols[] =
++{\
++ { \"$my_originator\", (void *) 0 },"
++
++ case $need_lib_prefix in
++ no)
++ eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms"
++ ;;
++ *)
++ eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms"
++ ;;
++ esac
++ $ECHO >> "$output_objdir/$my_dlsyms" "\
++ {0, (void *) 0}
++};
++
++/* This works around a problem in FreeBSD linker */
++#ifdef FREEBSD_WORKAROUND
++static const void *lt_preloaded_setup() {
++ return lt_${my_prefix}_LTX_preloaded_symbols;
++}
++#endif
++
++#ifdef __cplusplus
++}
++#endif\
++"
++ } # !$opt_dry_run
++
++ pic_flag_for_symtable=
++ case "$compile_command " in
++ *" -static "*) ;;
++ *)
++ case $host in
++ # compiling the symbol table file with pic_flag works around
++ # a FreeBSD bug that causes programs to crash when -lm is
++ # linked before any other PIC object. But we must not use
++ # pic_flag when linking with -static. The problem exists in
++ # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1.
++ *-*-freebsd2*|*-*-freebsd3.0*|*-*-freebsdelf3.0*)
++ pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;;
++ *-*-hpux*)
++ pic_flag_for_symtable=" $pic_flag" ;;
++ *)
++ if test "X$my_pic_p" != Xno; then
++ pic_flag_for_symtable=" $pic_flag"
++ fi
++ ;;
++ esac
++ ;;
++ esac
++ symtab_cflags=
++ for arg in $LTCFLAGS; do
++ case $arg in
++ -pie | -fpie | -fPIE) ;;
++ *) symtab_cflags="$symtab_cflags $arg" ;;
++ esac
++ done
++
++ # Now compile the dynamic symbol file.
++ func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?'
++
++ # Clean up the generated files.
++ func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T"'
++
++ # Transform the symbol file into the correct name.
++ symfileobj="$output_objdir/${my_outputname}S.$objext"
++ case $host in
++ *cygwin* | *mingw* | *cegcc* )
++ if test -f "$output_objdir/$my_outputname.def"; then
++ compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
++ finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"`
++ else
++ compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
++ finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
++ fi
++ ;;
++ *)
++ compile_command=`$ECHO "X$compile_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
++ finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s%@SYMFILE@%$symfileobj%"`
++ ;;
++ esac
++ ;;
++ *)
++ func_fatal_error "unknown suffix for \`$my_dlsyms'"
++ ;;
++ esac
++ else
++ # We keep going just in case the user didn't refer to
++ # lt_preloaded_symbols. The linker will fail if global_symbol_pipe
++ # really was required.
++
++ # Nullify the symbol file.
++ compile_command=`$ECHO "X$compile_command" | $Xsed -e "s% @SYMFILE@%%"`
++ finalize_command=`$ECHO "X$finalize_command" | $Xsed -e "s% @SYMFILE@%%"`
++ fi
++}
++
++# func_win32_libid arg
++# return the library type of file 'arg'
++#
++# Need a lot of goo to handle *both* DLLs and import libs
++# Has to be a shell function in order to 'eat' the argument
++# that is supplied when $file_magic_command is called.
++func_win32_libid ()
++{
++ $opt_debug
++ win32_libid_type="unknown"
++ win32_fileres=`file -L $1 2>/dev/null`
++ case $win32_fileres in
++ *ar\ archive\ import\ library*) # definitely import
++ win32_libid_type="x86 archive import"
++ ;;
++ *ar\ archive*) # could be an import, or static
++ if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null |
++ $EGREP 'file format pe-i386(.*architecture: i386)?' >/dev/null ; then
++ win32_nmres=`eval $NM -f posix -A $1 |
++ $SED -n -e '
++ 1,100{
++ / I /{
++ s,.*,import,
++ p
++ q
++ }
++ }'`
++ case $win32_nmres in
++ import*) win32_libid_type="x86 archive import";;
++ *) win32_libid_type="x86 archive static";;
++ esac
++ fi
++ ;;
++ *DLL*)
++ win32_libid_type="x86 DLL"
++ ;;
++ *executable*) # but shell scripts are "executable" too...
++ case $win32_fileres in
++ *MS\ Windows\ PE\ Intel*)
++ win32_libid_type="x86 DLL"
++ ;;
++ esac
++ ;;
++ esac
++ $ECHO "$win32_libid_type"
++}
++
++
++
++# func_extract_an_archive dir oldlib
++func_extract_an_archive ()
++{
++ $opt_debug
++ f_ex_an_ar_dir="$1"; shift
++ f_ex_an_ar_oldlib="$1"
++ func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" 'exit $?'
++ if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then
++ :
++ else
++ func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib"
++ fi
++}
++
++
++# func_extract_archives gentop oldlib ...
++func_extract_archives ()
++{
++ $opt_debug
++ my_gentop="$1"; shift
++ my_oldlibs=${1+"$@"}
++ my_oldobjs=""
++ my_xlib=""
++ my_xabs=""
++ my_xdir=""
++
++ for my_xlib in $my_oldlibs; do
++ # Extract the objects.
++ case $my_xlib in
++ [\\/]* | [A-Za-z]:[\\/]*) my_xabs="$my_xlib" ;;
++ *) my_xabs=`pwd`"/$my_xlib" ;;
++ esac
++ func_basename "$my_xlib"
++ my_xlib="$func_basename_result"
++ my_xlib_u=$my_xlib
++ while :; do
++ case " $extracted_archives " in
++ *" $my_xlib_u "*)
++ func_arith $extracted_serial + 1
++ extracted_serial=$func_arith_result
++ my_xlib_u=lt$extracted_serial-$my_xlib ;;
++ *) break ;;
++ esac
++ done
++ extracted_archives="$extracted_archives $my_xlib_u"
++ my_xdir="$my_gentop/$my_xlib_u"
++
++ func_mkdir_p "$my_xdir"
++
++ case $host in
++ *-darwin*)
++ func_verbose "Extracting $my_xabs"
++ # Do not bother doing anything if just a dry run
++ $opt_dry_run || {
++ darwin_orig_dir=`pwd`
++ cd $my_xdir || exit $?
++ darwin_archive=$my_xabs
++ darwin_curdir=`pwd`
++ darwin_base_archive=`basename "$darwin_archive"`
++ darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true`
++ if test -n "$darwin_arches"; then
++ darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'`
++ darwin_arch=
++ func_verbose "$darwin_base_archive has multiple architectures $darwin_arches"
++ for darwin_arch in $darwin_arches ; do
++ func_mkdir_p "unfat-$$/${darwin_base_archive}-${darwin_arch}"
++ $LIPO -thin $darwin_arch -output "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}" "${darwin_archive}"
++ cd "unfat-$$/${darwin_base_archive}-${darwin_arch}"
++ func_extract_an_archive "`pwd`" "${darwin_base_archive}"
++ cd "$darwin_curdir"
++ $RM "unfat-$$/${darwin_base_archive}-${darwin_arch}/${darwin_base_archive}"
++ done # $darwin_arches
++ ## Okay now we've a bunch of thin objects, gotta fatten them up :)
++ darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$basename" | sort -u`
++ darwin_file=
++ darwin_files=
++ for darwin_file in $darwin_filelist; do
++ darwin_files=`find unfat-$$ -name $darwin_file -print | $NL2SP`
++ $LIPO -create -output "$darwin_file" $darwin_files
++ done # $darwin_filelist
++ $RM -rf unfat-$$
++ cd "$darwin_orig_dir"
++ else
++ cd $darwin_orig_dir
++ func_extract_an_archive "$my_xdir" "$my_xabs"
++ fi # $darwin_arches
++ } # !$opt_dry_run
++ ;;
++ *)
++ func_extract_an_archive "$my_xdir" "$my_xabs"
++ ;;
++ esac
++ my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | $NL2SP`
++ done
++
++ func_extract_archives_result="$my_oldobjs"
++}
++
++
++
++# func_emit_wrapper_part1 [arg=no]
++#
++# Emit the first part of a libtool wrapper script on stdout.
++# For more information, see the description associated with
++# func_emit_wrapper(), below.
++func_emit_wrapper_part1 ()
++{
++ func_emit_wrapper_part1_arg1=no
++ if test -n "$1" ; then
++ func_emit_wrapper_part1_arg1=$1
++ fi
++
++ $ECHO "\
++#! $SHELL
++
++# $output - temporary wrapper script for $objdir/$outputname
++# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
++#
++# The $output program cannot be directly executed until all the libtool
++# libraries that it depends on are installed.
++#
++# This wrapper script should never be moved out of the build directory.
++# If it is, it will not operate correctly.
++
++# Sed substitution that helps us do robust quoting. It backslashifies
++# metacharacters that are still active within double-quoted strings.
++Xsed='${SED} -e 1s/^X//'
++sed_quote_subst='$sed_quote_subst'
++
++# Be Bourne compatible
++if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then
++ emulate sh
++ NULLCMD=:
++ # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which
++ # is contrary to our usage. Disable this feature.
++ alias -g '\${1+\"\$@\"}'='\"\$@\"'
++ setopt NO_GLOB_SUBST
++else
++ case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac
++fi
++BIN_SH=xpg4; export BIN_SH # for Tru64
++DUALCASE=1; export DUALCASE # for MKS sh
++
++# The HP-UX ksh and POSIX shell print the target directory to stdout
++# if CDPATH is set.
++(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
++
++relink_command=\"$relink_command\"
++
++# This environment variable determines our operation mode.
++if test \"\$libtool_install_magic\" = \"$magic\"; then
++ # install mode needs the following variables:
++ generated_by_libtool_version='$macro_version'
++ notinst_deplibs='$notinst_deplibs'
++else
++ # When we are sourced in execute mode, \$file and \$ECHO are already set.
++ if test \"\$libtool_execute_magic\" != \"$magic\"; then
++ ECHO=\"$qecho\"
++ file=\"\$0\"
++ # Make sure echo works.
++ if test \"X\$1\" = X--no-reexec; then
++ # Discard the --no-reexec flag, and continue.
++ shift
++ elif test \"X\`{ \$ECHO '\t'; } 2>/dev/null\`\" = 'X\t'; then
++ # Yippee, \$ECHO works!
++ :
++ else
++ # Restart under the correct shell, and then maybe \$ECHO will work.
++ exec $SHELL \"\$0\" --no-reexec \${1+\"\$@\"}
++ fi
++ fi\
++"
++ $ECHO "\
++
++ # Find the directory that this script lives in.
++ thisdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*$%%'\`
++ test \"x\$thisdir\" = \"x\$file\" && thisdir=.
++
++ # Follow symbolic links until we get to the real thisdir.
++ file=\`ls -ld \"\$file\" | ${SED} -n 's/.*-> //p'\`
++ while test -n \"\$file\"; do
++ destdir=\`\$ECHO \"X\$file\" | \$Xsed -e 's%/[^/]*\$%%'\`
++
++ # If there was a directory component, then change thisdir.
++ if test \"x\$destdir\" != \"x\$file\"; then
++ case \"\$destdir\" in
++ [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;;
++ *) thisdir=\"\$thisdir/\$destdir\" ;;
++ esac
++ fi
++
++ file=\`\$ECHO \"X\$file\" | \$Xsed -e 's%^.*/%%'\`
++ file=\`ls -ld \"\$thisdir/\$file\" | ${SED} -n 's/.*-> //p'\`
++ done
++"
++}
++# end: func_emit_wrapper_part1
++
++# func_emit_wrapper_part2 [arg=no]
++#
++# Emit the second part of a libtool wrapper script on stdout.
++# For more information, see the description associated with
++# func_emit_wrapper(), below.
++func_emit_wrapper_part2 ()
++{
++ func_emit_wrapper_part2_arg1=no
++ if test -n "$1" ; then
++ func_emit_wrapper_part2_arg1=$1
++ fi
++
++ $ECHO "\
++
++ # Usually 'no', except on cygwin/mingw when embedded into
++ # the cwrapper.
++ WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_part2_arg1
++ if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then
++ # special case for '.'
++ if test \"\$thisdir\" = \".\"; then
++ thisdir=\`pwd\`
++ fi
++ # remove .libs from thisdir
++ case \"\$thisdir\" in
++ *[\\\\/]$objdir ) thisdir=\`\$ECHO \"X\$thisdir\" | \$Xsed -e 's%[\\\\/][^\\\\/]*$%%'\` ;;
++ $objdir ) thisdir=. ;;
++ esac
++ fi
++
++ # Try to get the absolute directory name.
++ absdir=\`cd \"\$thisdir\" && pwd\`
++ test -n \"\$absdir\" && thisdir=\"\$absdir\"
++"
++
++ if test "$fast_install" = yes; then
++ $ECHO "\
++ program=lt-'$outputname'$exeext
++ progdir=\"\$thisdir/$objdir\"
++
++ if test ! -f \"\$progdir/\$program\" ||
++ { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | ${SED} 1q\`; \\
++ test \"X\$file\" != \"X\$progdir/\$program\"; }; then
++
++ file=\"\$\$-\$program\"
++
++ if test ! -d \"\$progdir\"; then
++ $MKDIR \"\$progdir\"
++ else
++ $RM \"\$progdir/\$file\"
++ fi"
++
++ $ECHO "\
++
++ # relink executable if necessary
++ if test -n \"\$relink_command\"; then
++ if relink_command_output=\`eval \$relink_command 2>&1\`; then :
++ else
++ $ECHO \"\$relink_command_output\" >&2
++ $RM \"\$progdir/\$file\"
++ exit 1
++ fi
++ fi
++
++ $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null ||
++ { $RM \"\$progdir/\$program\";
++ $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; }
++ $RM \"\$progdir/\$file\"
++ fi"
++ else
++ $ECHO "\
++ program='$outputname'
++ progdir=\"\$thisdir/$objdir\"
++"
++ fi
++
++ $ECHO "\
++
++ if test -f \"\$progdir/\$program\"; then"
++
++ # Export our shlibpath_var if we have one.
++ if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
++ $ECHO "\
++ # Add our own library path to $shlibpath_var
++ $shlibpath_var=\"$temp_rpath\$$shlibpath_var\"
++
++ # Some systems cannot cope with colon-terminated $shlibpath_var
++ # The second colon is a workaround for a bug in BeOS R4 sed
++ $shlibpath_var=\`\$ECHO \"X\$$shlibpath_var\" | \$Xsed -e 's/::*\$//'\`
++
++ export $shlibpath_var
++"
++ fi
++
++ # fixup the dll searchpath if we need to.
++ if test -n "$dllsearchpath"; then
++ $ECHO "\
++ # Add the dll search path components to the executable PATH
++ PATH=$dllsearchpath:\$PATH
++"
++ fi
++
++ $ECHO "\
++ if test \"\$libtool_execute_magic\" != \"$magic\"; then
++ # Run the actual program with our arguments.
++"
++ case $host in
++ # Backslashes separate directories on plain windows
++ *-*-mingw | *-*-os2* | *-cegcc*)
++ $ECHO "\
++ exec \"\$progdir\\\\\$program\" \${1+\"\$@\"}
++"
++ ;;
++
++ *)
++ $ECHO "\
++ exec \"\$progdir/\$program\" \${1+\"\$@\"}
++"
++ ;;
++ esac
++ $ECHO "\
++ \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2
++ exit 1
++ fi
++ else
++ # The program doesn't exist.
++ \$ECHO \"\$0: error: \\\`\$progdir/\$program' does not exist\" 1>&2
++ \$ECHO \"This script is just a wrapper for \$program.\" 1>&2
++ $ECHO \"See the $PACKAGE documentation for more information.\" 1>&2
++ exit 1
++ fi
++fi\
++"
++}
++# end: func_emit_wrapper_part2
++
++
++# func_emit_wrapper [arg=no]
++#
++# Emit a libtool wrapper script on stdout.
++# Don't directly open a file because we may want to
++# incorporate the script contents within a cygwin/mingw
++# wrapper executable. Must ONLY be called from within
++# func_mode_link because it depends on a number of variables
++# set therein.
++#
++# ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR
++# variable will take. If 'yes', then the emitted script
++# will assume that the directory in which it is stored is
++# the $objdir directory. This is a cygwin/mingw-specific
++# behavior.
++func_emit_wrapper ()
++{
++ func_emit_wrapper_arg1=no
++ if test -n "$1" ; then
++ func_emit_wrapper_arg1=$1
++ fi
++
++ # split this up so that func_emit_cwrapperexe_src
++ # can call each part independently.
++ func_emit_wrapper_part1 "${func_emit_wrapper_arg1}"
++ func_emit_wrapper_part2 "${func_emit_wrapper_arg1}"
++}
++
++
++# func_to_host_path arg
++#
++# Convert paths to host format when used with build tools.
++# Intended for use with "native" mingw (where libtool itself
++# is running under the msys shell), or in the following cross-
++# build environments:
++# $build $host
++# mingw (msys) mingw [e.g. native]
++# cygwin mingw
++# *nix + wine mingw
++# where wine is equipped with the `winepath' executable.
++# In the native mingw case, the (msys) shell automatically
++# converts paths for any non-msys applications it launches,
++# but that facility isn't available from inside the cwrapper.
++# Similar accommodations are necessary for $host mingw and
++# $build cygwin. Calling this function does no harm for other
++# $host/$build combinations not listed above.
++#
++# ARG is the path (on $build) that should be converted to
++# the proper representation for $host. The result is stored
++# in $func_to_host_path_result.
++func_to_host_path ()
++{
++ func_to_host_path_result="$1"
++ if test -n "$1" ; then
++ case $host in
++ *mingw* )
++ lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
++ case $build in
++ *mingw* ) # actually, msys
++ # awkward: cmd appends spaces to result
++ lt_sed_strip_trailing_spaces="s/[ ]*\$//"
++ func_to_host_path_tmp1=`( cmd //c echo "$1" |\
++ $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""`
++ func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\
++ $SED -e "$lt_sed_naive_backslashify"`
++ ;;
++ *cygwin* )
++ func_to_host_path_tmp1=`cygpath -w "$1"`
++ func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\
++ $SED -e "$lt_sed_naive_backslashify"`
++ ;;
++ * )
++ # Unfortunately, winepath does not exit with a non-zero
++ # error code, so we are forced to check the contents of
++ # stdout. On the other hand, if the command is not
++ # found, the shell will set an exit code of 127 and print
++ # *an error message* to stdout. So we must check for both
++ # error code of zero AND non-empty stdout, which explains
++ # the odd construction:
++ func_to_host_path_tmp1=`winepath -w "$1" 2>/dev/null`
++ if test "$?" -eq 0 && test -n "${func_to_host_path_tmp1}"; then
++ func_to_host_path_result=`echo "$func_to_host_path_tmp1" |\
++ $SED -e "$lt_sed_naive_backslashify"`
++ else
++ # Allow warning below.
++ func_to_host_path_result=""
++ fi
++ ;;
++ esac
++ if test -z "$func_to_host_path_result" ; then
++ func_error "Could not determine host path corresponding to"
++ func_error " '$1'"
++ func_error "Continuing, but uninstalled executables may not work."
++ # Fallback:
++ func_to_host_path_result="$1"
++ fi
++ ;;
++ esac
++ fi
++}
++# end: func_to_host_path
++
++# func_to_host_pathlist arg
++#
++# Convert pathlists to host format when used with build tools.
++# See func_to_host_path(), above. This function supports the
++# following $build/$host combinations (but does no harm for
++# combinations not listed here):
++# $build $host
++# mingw (msys) mingw [e.g. native]
++# cygwin mingw
++# *nix + wine mingw
++#
++# Path separators are also converted from $build format to
++# $host format. If ARG begins or ends with a path separator
++# character, it is preserved (but converted to $host format)
++# on output.
++#
++# ARG is a pathlist (on $build) that should be converted to
++# the proper representation on $host. The result is stored
++# in $func_to_host_pathlist_result.
++func_to_host_pathlist ()
++{
++ func_to_host_pathlist_result="$1"
++ if test -n "$1" ; then
++ case $host in
++ *mingw* )
++ lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g'
++ # Remove leading and trailing path separator characters from
++ # ARG. msys behavior is inconsistent here, cygpath turns them
++ # into '.;' and ';.', and winepath ignores them completely.
++ func_to_host_pathlist_tmp2="$1"
++ # Once set for this call, this variable should not be
++ # reassigned. It is used in tha fallback case.
++ func_to_host_pathlist_tmp1=`echo "$func_to_host_pathlist_tmp2" |\
++ $SED -e 's|^:*||' -e 's|:*$||'`
++ case $build in
++ *mingw* ) # Actually, msys.
++ # Awkward: cmd appends spaces to result.
++ lt_sed_strip_trailing_spaces="s/[ ]*\$//"
++ func_to_host_pathlist_tmp2=`( cmd //c echo "$func_to_host_pathlist_tmp1" |\
++ $SED -e "$lt_sed_strip_trailing_spaces" ) 2>/dev/null || echo ""`
++ func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\
++ $SED -e "$lt_sed_naive_backslashify"`
++ ;;
++ *cygwin* )
++ func_to_host_pathlist_tmp2=`cygpath -w -p "$func_to_host_pathlist_tmp1"`
++ func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp2" |\
++ $SED -e "$lt_sed_naive_backslashify"`
++ ;;
++ * )
++ # unfortunately, winepath doesn't convert pathlists
++ func_to_host_pathlist_result=""
++ func_to_host_pathlist_oldIFS=$IFS
++ IFS=:
++ for func_to_host_pathlist_f in $func_to_host_pathlist_tmp1 ; do
++ IFS=$func_to_host_pathlist_oldIFS
++ if test -n "$func_to_host_pathlist_f" ; then
++ func_to_host_path "$func_to_host_pathlist_f"
++ if test -n "$func_to_host_path_result" ; then
++ if test -z "$func_to_host_pathlist_result" ; then
++ func_to_host_pathlist_result="$func_to_host_path_result"
++ else
++ func_to_host_pathlist_result="$func_to_host_pathlist_result;$func_to_host_path_result"
++ fi
++ fi
++ fi
++ IFS=:
++ done
++ IFS=$func_to_host_pathlist_oldIFS
++ ;;
++ esac
++ if test -z "$func_to_host_pathlist_result" ; then
++ func_error "Could not determine the host path(s) corresponding to"
++ func_error " '$1'"
++ func_error "Continuing, but uninstalled executables may not work."
++ # Fallback. This may break if $1 contains DOS-style drive
++ # specifications. The fix is not to complicate the expression
++ # below, but for the user to provide a working wine installation
++ # with winepath so that path translation in the cross-to-mingw
++ # case works properly.
++ lt_replace_pathsep_nix_to_dos="s|:|;|g"
++ func_to_host_pathlist_result=`echo "$func_to_host_pathlist_tmp1" |\
++ $SED -e "$lt_replace_pathsep_nix_to_dos"`
++ fi
++ # Now, add the leading and trailing path separators back
++ case "$1" in
++ :* ) func_to_host_pathlist_result=";$func_to_host_pathlist_result"
++ ;;
++ esac
++ case "$1" in
++ *: ) func_to_host_pathlist_result="$func_to_host_pathlist_result;"
++ ;;
++ esac
++ ;;
++ esac
++ fi
++}
++# end: func_to_host_pathlist
++
++# func_emit_cwrapperexe_src
++# emit the source code for a wrapper executable on stdout
++# Must ONLY be called from within func_mode_link because
++# it depends on a number of variable set therein.
++func_emit_cwrapperexe_src ()
++{
++ cat <<EOF
++
++/* $cwrappersource - temporary wrapper executable for $objdir/$outputname
++ Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
++
++ The $output program cannot be directly executed until all the libtool
++ libraries that it depends on are installed.
++
++ This wrapper executable should never be moved out of the build directory.
++ If it is, it will not operate correctly.
++
++ Currently, it simply execs the wrapper *script* "$SHELL $output",
++ but could eventually absorb all of the scripts functionality and
++ exec $objdir/$outputname directly.
++*/
++EOF
++ cat <<"EOF"
++#include <stdio.h>
++#include <stdlib.h>
++#ifdef _MSC_VER
++# include <direct.h>
++# include <process.h>
++# include <io.h>
++# define setmode _setmode
++#else
++# include <unistd.h>
++# include <stdint.h>
++# ifdef __CYGWIN__
++# include <io.h>
++# define HAVE_SETENV
++# ifdef __STRICT_ANSI__
++char *realpath (const char *, char *);
++int putenv (char *);
++int setenv (const char *, const char *, int);
++# endif
++# endif
++#endif
++#include <malloc.h>
++#include <stdarg.h>
++#include <assert.h>
++#include <string.h>
++#include <ctype.h>
++#include <errno.h>
++#include <fcntl.h>
++#include <sys/stat.h>
++
++#if defined(PATH_MAX)
++# define LT_PATHMAX PATH_MAX
++#elif defined(MAXPATHLEN)
++# define LT_PATHMAX MAXPATHLEN
++#else
++# define LT_PATHMAX 1024
++#endif
++
++#ifndef S_IXOTH
++# define S_IXOTH 0
++#endif
++#ifndef S_IXGRP
++# define S_IXGRP 0
++#endif
++
++#ifdef _MSC_VER
++# define S_IXUSR _S_IEXEC
++# define stat _stat
++# ifndef _INTPTR_T_DEFINED
++# define intptr_t int
++# endif
++#endif
++
++#ifndef DIR_SEPARATOR
++# define DIR_SEPARATOR '/'
++# define PATH_SEPARATOR ':'
++#endif
++
++#if defined (_WIN32) || defined (__MSDOS__) || defined (__DJGPP__) || \
++ defined (__OS2__)
++# define HAVE_DOS_BASED_FILE_SYSTEM
++# define FOPEN_WB "wb"
++# ifndef DIR_SEPARATOR_2
++# define DIR_SEPARATOR_2 '\\'
++# endif
++# ifndef PATH_SEPARATOR_2
++# define PATH_SEPARATOR_2 ';'
++# endif
++#endif
++
++#ifndef DIR_SEPARATOR_2
++# define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR)
++#else /* DIR_SEPARATOR_2 */
++# define IS_DIR_SEPARATOR(ch) \
++ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2))
++#endif /* DIR_SEPARATOR_2 */
++
++#ifndef PATH_SEPARATOR_2
++# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR)
++#else /* PATH_SEPARATOR_2 */
++# define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2)
++#endif /* PATH_SEPARATOR_2 */
++
++#ifdef __CYGWIN__
++# define FOPEN_WB "wb"
++#endif
++
++#ifndef FOPEN_WB
++# define FOPEN_WB "w"
++#endif
++#ifndef _O_BINARY
++# define _O_BINARY 0
++#endif
++
++#define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type)))
++#define XFREE(stale) do { \
++ if (stale) { free ((void *) stale); stale = 0; } \
++} while (0)
++
++#undef LTWRAPPER_DEBUGPRINTF
++#if defined DEBUGWRAPPER
++# define LTWRAPPER_DEBUGPRINTF(args) ltwrapper_debugprintf args
++static void
++ltwrapper_debugprintf (const char *fmt, ...)
++{
++ va_list args;
++ va_start (args, fmt);
++ (void) vfprintf (stderr, fmt, args);
++ va_end (args);
++}
++#else
++# define LTWRAPPER_DEBUGPRINTF(args)
++#endif
++
++const char *program_name = NULL;
++
++void *xmalloc (size_t num);
++char *xstrdup (const char *string);
++const char *base_name (const char *name);
++char *find_executable (const char *wrapper);
++char *chase_symlinks (const char *pathspec);
++int make_executable (const char *path);
++int check_executable (const char *path);
++char *strendzap (char *str, const char *pat);
++void lt_fatal (const char *message, ...);
++void lt_setenv (const char *name, const char *value);
++char *lt_extend_str (const char *orig_value, const char *add, int to_end);
++void lt_opt_process_env_set (const char *arg);
++void lt_opt_process_env_prepend (const char *arg);
++void lt_opt_process_env_append (const char *arg);
++int lt_split_name_value (const char *arg, char** name, char** value);
++void lt_update_exe_path (const char *name, const char *value);
++void lt_update_lib_path (const char *name, const char *value);
++
++static const char *script_text_part1 =
++EOF
++
++ func_emit_wrapper_part1 yes |
++ $SED -e 's/\([\\"]\)/\\\1/g' \
++ -e 's/^/ "/' -e 's/$/\\n"/'
++ echo ";"
++ cat <<EOF
++
++static const char *script_text_part2 =
++EOF
++ func_emit_wrapper_part2 yes |
++ $SED -e 's/\([\\"]\)/\\\1/g' \
++ -e 's/^/ "/' -e 's/$/\\n"/'
++ echo ";"
++
++ cat <<EOF
++const char * MAGIC_EXE = "$magic_exe";
++const char * LIB_PATH_VARNAME = "$shlibpath_var";
++EOF
++
++ if test "$shlibpath_overrides_runpath" = yes && test -n "$shlibpath_var" && test -n "$temp_rpath"; then
++ func_to_host_pathlist "$temp_rpath"
++ cat <<EOF
++const char * LIB_PATH_VALUE = "$func_to_host_pathlist_result";
++EOF
++ else
++ cat <<"EOF"
++const char * LIB_PATH_VALUE = "";
++EOF
++ fi
++
++ if test -n "$dllsearchpath"; then
++ func_to_host_pathlist "$dllsearchpath:"
++ cat <<EOF
++const char * EXE_PATH_VARNAME = "PATH";
++const char * EXE_PATH_VALUE = "$func_to_host_pathlist_result";
++EOF
++ else
++ cat <<"EOF"
++const char * EXE_PATH_VARNAME = "";
++const char * EXE_PATH_VALUE = "";
++EOF
++ fi
++
++ if test "$fast_install" = yes; then
++ cat <<EOF
++const char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */
++EOF
++ else
++ cat <<EOF
++const char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */
++EOF
++ fi
++
++
++ cat <<"EOF"
++
++#define LTWRAPPER_OPTION_PREFIX "--lt-"
++#define LTWRAPPER_OPTION_PREFIX_LENGTH 5
++
++static const size_t opt_prefix_len = LTWRAPPER_OPTION_PREFIX_LENGTH;
++static const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX;
++
++static const char *dumpscript_opt = LTWRAPPER_OPTION_PREFIX "dump-script";
++
++static const size_t env_set_opt_len = LTWRAPPER_OPTION_PREFIX_LENGTH + 7;
++static const char *env_set_opt = LTWRAPPER_OPTION_PREFIX "env-set";
++ /* argument is putenv-style "foo=bar", value of foo is set to bar */
++
++static const size_t env_prepend_opt_len = LTWRAPPER_OPTION_PREFIX_LENGTH + 11;
++static const char *env_prepend_opt = LTWRAPPER_OPTION_PREFIX "env-prepend";
++ /* argument is putenv-style "foo=bar", new value of foo is bar${foo} */
++
++static const size_t env_append_opt_len = LTWRAPPER_OPTION_PREFIX_LENGTH + 10;
++static const char *env_append_opt = LTWRAPPER_OPTION_PREFIX "env-append";
++ /* argument is putenv-style "foo=bar", new value of foo is ${foo}bar */
++
++int
++main (int argc, char *argv[])
++{
++ char **newargz;
++ int newargc;
++ char *tmp_pathspec;
++ char *actual_cwrapper_path;
++ char *actual_cwrapper_name;
++ char *target_name;
++ char *lt_argv_zero;
++ intptr_t rval = 127;
++
++ int i;
++
++ program_name = (char *) xstrdup (base_name (argv[0]));
++ LTWRAPPER_DEBUGPRINTF (("(main) argv[0] : %s\n", argv[0]));
++ LTWRAPPER_DEBUGPRINTF (("(main) program_name : %s\n", program_name));
++
++ /* very simple arg parsing; don't want to rely on getopt */
++ for (i = 1; i < argc; i++)
++ {
++ if (strcmp (argv[i], dumpscript_opt) == 0)
++ {
++EOF
++ case "$host" in
++ *mingw* | *cygwin* )
++ # make stdout use "unix" line endings
++ echo " setmode(1,_O_BINARY);"
++ ;;
++ esac
++
++ cat <<"EOF"
++ printf ("%s", script_text_part1);
++ printf ("%s", script_text_part2);
++ return 0;
++ }
++ }
++
++ newargz = XMALLOC (char *, argc + 1);
++ tmp_pathspec = find_executable (argv[0]);
++ if (tmp_pathspec == NULL)
++ lt_fatal ("Couldn't find %s", argv[0]);
++ LTWRAPPER_DEBUGPRINTF (("(main) found exe (before symlink chase) at : %s\n",
++ tmp_pathspec));
++
++ actual_cwrapper_path = chase_symlinks (tmp_pathspec);
++ LTWRAPPER_DEBUGPRINTF (("(main) found exe (after symlink chase) at : %s\n",
++ actual_cwrapper_path));
++ XFREE (tmp_pathspec);
++
++ actual_cwrapper_name = xstrdup( base_name (actual_cwrapper_path));
++ strendzap (actual_cwrapper_path, actual_cwrapper_name);
++
++ /* wrapper name transforms */
++ strendzap (actual_cwrapper_name, ".exe");
++ tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1);
++ XFREE (actual_cwrapper_name);
++ actual_cwrapper_name = tmp_pathspec;
++ tmp_pathspec = 0;
++
++ /* target_name transforms -- use actual target program name; might have lt- prefix */
++ target_name = xstrdup (base_name (TARGET_PROGRAM_NAME));
++ strendzap (target_name, ".exe");
++ tmp_pathspec = lt_extend_str (target_name, ".exe", 1);
++ XFREE (target_name);
++ target_name = tmp_pathspec;
++ tmp_pathspec = 0;
++
++ LTWRAPPER_DEBUGPRINTF (("(main) libtool target name: %s\n",
++ target_name));
++EOF
++
++ cat <<EOF
++ newargz[0] =
++ XMALLOC (char, (strlen (actual_cwrapper_path) +
++ strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1));
++ strcpy (newargz[0], actual_cwrapper_path);
++ strcat (newargz[0], "$objdir");
++ strcat (newargz[0], "/");
++EOF
++
++ cat <<"EOF"
++ /* stop here, and copy so we don't have to do this twice */
++ tmp_pathspec = xstrdup (newargz[0]);
++
++ /* do NOT want the lt- prefix here, so use actual_cwrapper_name */
++ strcat (newargz[0], actual_cwrapper_name);
++
++ /* DO want the lt- prefix here if it exists, so use target_name */
++ lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1);
++ XFREE (tmp_pathspec);
++ tmp_pathspec = NULL;
++EOF
++
++ case $host_os in
++ mingw*)
++ cat <<"EOF"
++ {
++ char* p;
++ while ((p = strchr (newargz[0], '\\')) != NULL)
++ {
++ *p = '/';
++ }
++ while ((p = strchr (lt_argv_zero, '\\')) != NULL)
++ {
++ *p = '/';
++ }
++ }
++EOF
++ ;;
++ esac
++
++ cat <<"EOF"
++ XFREE (target_name);
++ XFREE (actual_cwrapper_path);
++ XFREE (actual_cwrapper_name);
++
++ lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */
++ lt_setenv ("DUALCASE", "1"); /* for MSK sh */
++ lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE);
++ lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE);
++
++ newargc=0;
++ for (i = 1; i < argc; i++)
++ {
++ if (strncmp (argv[i], env_set_opt, env_set_opt_len) == 0)
++ {
++ if (argv[i][env_set_opt_len] == '=')
++ {
++ const char *p = argv[i] + env_set_opt_len + 1;
++ lt_opt_process_env_set (p);
++ }
++ else if (argv[i][env_set_opt_len] == '\0' && i + 1 < argc)
++ {
++ lt_opt_process_env_set (argv[++i]); /* don't copy */
++ }
++ else
++ lt_fatal ("%s missing required argument", env_set_opt);
++ continue;
++ }
++ if (strncmp (argv[i], env_prepend_opt, env_prepend_opt_len) == 0)
++ {
++ if (argv[i][env_prepend_opt_len] == '=')
++ {
++ const char *p = argv[i] + env_prepend_opt_len + 1;
++ lt_opt_process_env_prepend (p);
++ }
++ else if (argv[i][env_prepend_opt_len] == '\0' && i + 1 < argc)
++ {
++ lt_opt_process_env_prepend (argv[++i]); /* don't copy */
++ }
++ else
++ lt_fatal ("%s missing required argument", env_prepend_opt);
++ continue;
++ }
++ if (strncmp (argv[i], env_append_opt, env_append_opt_len) == 0)
++ {
++ if (argv[i][env_append_opt_len] == '=')
++ {
++ const char *p = argv[i] + env_append_opt_len + 1;
++ lt_opt_process_env_append (p);
++ }
++ else if (argv[i][env_append_opt_len] == '\0' && i + 1 < argc)
++ {
++ lt_opt_process_env_append (argv[++i]); /* don't copy */
++ }
++ else
++ lt_fatal ("%s missing required argument", env_append_opt);
++ continue;
++ }
++ if (strncmp (argv[i], ltwrapper_option_prefix, opt_prefix_len) == 0)
++ {
++ /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX
++ namespace, but it is not one of the ones we know about and
++ have already dealt with, above (inluding dump-script), then
++ report an error. Otherwise, targets might begin to believe
++ they are allowed to use options in the LTWRAPPER_OPTION_PREFIX
++ namespace. The first time any user complains about this, we'll
++ need to make LTWRAPPER_OPTION_PREFIX a configure-time option
++ or a configure.ac-settable value.
++ */
++ lt_fatal ("Unrecognized option in %s namespace: '%s'",
++ ltwrapper_option_prefix, argv[i]);
++ }
++ /* otherwise ... */
++ newargz[++newargc] = xstrdup (argv[i]);
++ }
++ newargz[++newargc] = NULL;
++
++ LTWRAPPER_DEBUGPRINTF (("(main) lt_argv_zero : %s\n", (lt_argv_zero ? lt_argv_zero : "<NULL>")));
++ for (i = 0; i < newargc; i++)
++ {
++ LTWRAPPER_DEBUGPRINTF (("(main) newargz[%d] : %s\n", i, (newargz[i] ? newargz[i] : "<NULL>")));
++ }
++
++EOF
++
++ case $host_os in
++ mingw*)
++ cat <<"EOF"
++ /* execv doesn't actually work on mingw as expected on unix */
++ rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz);
++ if (rval == -1)
++ {
++ /* failed to start process */
++ LTWRAPPER_DEBUGPRINTF (("(main) failed to launch target \"%s\": errno = %d\n", lt_argv_zero, errno));
++ return 127;
++ }
++ return rval;
++EOF
++ ;;
++ *)
++ cat <<"EOF"
++ execv (lt_argv_zero, newargz);
++ return rval; /* =127, but avoids unused variable warning */
++EOF
++ ;;
++ esac
++
++ cat <<"EOF"
++}
++
++void *
++xmalloc (size_t num)
++{
++ void *p = (void *) malloc (num);
++ if (!p)
++ lt_fatal ("Memory exhausted");
++
++ return p;
++}
++
++char *
++xstrdup (const char *string)
++{
++ return string ? strcpy ((char *) xmalloc (strlen (string) + 1),
++ string) : NULL;
++}
++
++const char *
++base_name (const char *name)
++{
++ const char *base;
++
++#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
++ /* Skip over the disk name in MSDOS pathnames. */
++ if (isalpha ((unsigned char) name[0]) && name[1] == ':')
++ name += 2;
++#endif
++
++ for (base = name; *name; name++)
++ if (IS_DIR_SEPARATOR (*name))
++ base = name + 1;
++ return base;
++}
++
++int
++check_executable (const char *path)
++{
++ struct stat st;
++
++ LTWRAPPER_DEBUGPRINTF (("(check_executable) : %s\n",
++ path ? (*path ? path : "EMPTY!") : "NULL!"));
++ if ((!path) || (!*path))
++ return 0;
++
++ if ((stat (path, &st) >= 0)
++ && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)))
++ return 1;
++ else
++ return 0;
++}
++
++int
++make_executable (const char *path)
++{
++ int rval = 0;
++ struct stat st;
++
++ LTWRAPPER_DEBUGPRINTF (("(make_executable) : %s\n",
++ path ? (*path ? path : "EMPTY!") : "NULL!"));
++ if ((!path) || (!*path))
++ return 0;
++
++ if (stat (path, &st) >= 0)
++ {
++ rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR);
++ }
++ return rval;
++}
++
++/* Searches for the full path of the wrapper. Returns
++ newly allocated full path name if found, NULL otherwise
++ Does not chase symlinks, even on platforms that support them.
++*/
++char *
++find_executable (const char *wrapper)
++{
++ int has_slash = 0;
++ const char *p;
++ const char *p_next;
++ /* static buffer for getcwd */
++ char tmp[LT_PATHMAX + 1];
++ int tmp_len;
++ char *concat_name;
++
++ LTWRAPPER_DEBUGPRINTF (("(find_executable) : %s\n",
++ wrapper ? (*wrapper ? wrapper : "EMPTY!") : "NULL!"));
++
++ if ((wrapper == NULL) || (*wrapper == '\0'))
++ return NULL;
++
++ /* Absolute path? */
++#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
++ if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':')
++ {
++ concat_name = xstrdup (wrapper);
++ if (check_executable (concat_name))
++ return concat_name;
++ XFREE (concat_name);
++ }
++ else
++ {
++#endif
++ if (IS_DIR_SEPARATOR (wrapper[0]))
++ {
++ concat_name = xstrdup (wrapper);
++ if (check_executable (concat_name))
++ return concat_name;
++ XFREE (concat_name);
++ }
++#if defined (HAVE_DOS_BASED_FILE_SYSTEM)
++ }
++#endif
++
++ for (p = wrapper; *p; p++)
++ if (*p == '/')
++ {
++ has_slash = 1;
++ break;
++ }
++ if (!has_slash)
++ {
++ /* no slashes; search PATH */
++ const char *path = getenv ("PATH");
++ if (path != NULL)
++ {
++ for (p = path; *p; p = p_next)
++ {
++ const char *q;
++ size_t p_len;
++ for (q = p; *q; q++)
++ if (IS_PATH_SEPARATOR (*q))
++ break;
++ p_len = q - p;
++ p_next = (*q == '\0' ? q : q + 1);
++ if (p_len == 0)
++ {
++ /* empty path: current directory */
++ if (getcwd (tmp, LT_PATHMAX) == NULL)
++ lt_fatal ("getcwd failed");
++ tmp_len = strlen (tmp);
++ concat_name =
++ XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
++ memcpy (concat_name, tmp, tmp_len);
++ concat_name[tmp_len] = '/';
++ strcpy (concat_name + tmp_len + 1, wrapper);
++ }
++ else
++ {
++ concat_name =
++ XMALLOC (char, p_len + 1 + strlen (wrapper) + 1);
++ memcpy (concat_name, p, p_len);
++ concat_name[p_len] = '/';
++ strcpy (concat_name + p_len + 1, wrapper);
++ }
++ if (check_executable (concat_name))
++ return concat_name;
++ XFREE (concat_name);
++ }
++ }
++ /* not found in PATH; assume curdir */
++ }
++ /* Relative path | not found in path: prepend cwd */
++ if (getcwd (tmp, LT_PATHMAX) == NULL)
++ lt_fatal ("getcwd failed");
++ tmp_len = strlen (tmp);
++ concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1);
++ memcpy (concat_name, tmp, tmp_len);
++ concat_name[tmp_len] = '/';
++ strcpy (concat_name + tmp_len + 1, wrapper);
++
++ if (check_executable (concat_name))
++ return concat_name;
++ XFREE (concat_name);
++ return NULL;
++}
++
++char *
++chase_symlinks (const char *pathspec)
++{
++#ifndef S_ISLNK
++ return xstrdup (pathspec);
++#else
++ char buf[LT_PATHMAX];
++ struct stat s;
++ char *tmp_pathspec = xstrdup (pathspec);
++ char *p;
++ int has_symlinks = 0;
++ while (strlen (tmp_pathspec) && !has_symlinks)
++ {
++ LTWRAPPER_DEBUGPRINTF (("checking path component for symlinks: %s\n",
++ tmp_pathspec));
++ if (lstat (tmp_pathspec, &s) == 0)
++ {
++ if (S_ISLNK (s.st_mode) != 0)
++ {
++ has_symlinks = 1;
++ break;
++ }
++
++ /* search backwards for last DIR_SEPARATOR */
++ p = tmp_pathspec + strlen (tmp_pathspec) - 1;
++ while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
++ p--;
++ if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p)))
++ {
++ /* no more DIR_SEPARATORS left */
++ break;
++ }
++ *p = '\0';
++ }
++ else
++ {
++ char *errstr = strerror (errno);
++ lt_fatal ("Error accessing file %s (%s)", tmp_pathspec, errstr);
++ }
++ }
++ XFREE (tmp_pathspec);
++
++ if (!has_symlinks)
++ {
++ return xstrdup (pathspec);
++ }
++
++ tmp_pathspec = realpath (pathspec, buf);
++ if (tmp_pathspec == 0)
++ {
++ lt_fatal ("Could not follow symlinks for %s", pathspec);
++ }
++ return xstrdup (tmp_pathspec);
++#endif
++}
++
++char *
++strendzap (char *str, const char *pat)
++{
++ size_t len, patlen;
++
++ assert (str != NULL);
++ assert (pat != NULL);
++
++ len = strlen (str);
++ patlen = strlen (pat);
++
++ if (patlen <= len)
++ {
++ str += len - patlen;
++ if (strcmp (str, pat) == 0)
++ *str = '\0';
++ }
++ return str;
++}
++
++static void
++lt_error_core (int exit_status, const char *mode,
++ const char *message, va_list ap)
++{
++ fprintf (stderr, "%s: %s: ", program_name, mode);
++ vfprintf (stderr, message, ap);
++ fprintf (stderr, ".\n");
++
++ if (exit_status >= 0)
++ exit (exit_status);
++}
++
++void
++lt_fatal (const char *message, ...)
++{
++ va_list ap;
++ va_start (ap, message);
++ lt_error_core (EXIT_FAILURE, "FATAL", message, ap);
++ va_end (ap);
++}
++
++void
++lt_setenv (const char *name, const char *value)
++{
++ LTWRAPPER_DEBUGPRINTF (("(lt_setenv) setting '%s' to '%s'\n",
++ (name ? name : "<NULL>"),
++ (value ? value : "<NULL>")));
++ {
++#ifdef HAVE_SETENV
++ /* always make a copy, for consistency with !HAVE_SETENV */
++ char *str = xstrdup (value);
++ setenv (name, str, 1);
++#else
++ int len = strlen (name) + 1 + strlen (value) + 1;
++ char *str = XMALLOC (char, len);
++ sprintf (str, "%s=%s", name, value);
++ if (putenv (str) != EXIT_SUCCESS)
++ {
++ XFREE (str);
++ }
++#endif
++ }
++}
++
++char *
++lt_extend_str (const char *orig_value, const char *add, int to_end)
++{
++ char *new_value;
++ if (orig_value && *orig_value)
++ {
++ int orig_value_len = strlen (orig_value);
++ int add_len = strlen (add);
++ new_value = XMALLOC (char, add_len + orig_value_len + 1);
++ if (to_end)
++ {
++ strcpy (new_value, orig_value);
++ strcpy (new_value + orig_value_len, add);
++ }
++ else
++ {
++ strcpy (new_value, add);
++ strcpy (new_value + add_len, orig_value);
++ }
++ }
++ else
++ {
++ new_value = xstrdup (add);
++ }
++ return new_value;
++}
++
++int
++lt_split_name_value (const char *arg, char** name, char** value)
++{
++ const char *p;
++ int len;
++ if (!arg || !*arg)
++ return 1;
++
++ p = strchr (arg, (int)'=');
++
++ if (!p)
++ return 1;
++
++ *value = xstrdup (++p);
++
++ len = strlen (arg) - strlen (*value);
++ *name = XMALLOC (char, len);
++ strncpy (*name, arg, len-1);
++ (*name)[len - 1] = '\0';
++
++ return 0;
++}
++
++void
++lt_opt_process_env_set (const char *arg)
++{
++ char *name = NULL;
++ char *value = NULL;
++
++ if (lt_split_name_value (arg, &name, &value) != 0)
++ {
++ XFREE (name);
++ XFREE (value);
++ lt_fatal ("bad argument for %s: '%s'", env_set_opt, arg);
++ }
++
++ lt_setenv (name, value);
++ XFREE (name);
++ XFREE (value);
++}
++
++void
++lt_opt_process_env_prepend (const char *arg)
++{
++ char *name = NULL;
++ char *value = NULL;
++ char *new_value = NULL;
++
++ if (lt_split_name_value (arg, &name, &value) != 0)
++ {
++ XFREE (name);
++ XFREE (value);
++ lt_fatal ("bad argument for %s: '%s'", env_prepend_opt, arg);
++ }
++
++ new_value = lt_extend_str (getenv (name), value, 0);
++ lt_setenv (name, new_value);
++ XFREE (new_value);
++ XFREE (name);
++ XFREE (value);
++}
++
++void
++lt_opt_process_env_append (const char *arg)
++{
++ char *name = NULL;
++ char *value = NULL;
++ char *new_value = NULL;
++
++ if (lt_split_name_value (arg, &name, &value) != 0)
++ {
++ XFREE (name);
++ XFREE (value);
++ lt_fatal ("bad argument for %s: '%s'", env_append_opt, arg);
++ }
++
++ new_value = lt_extend_str (getenv (name), value, 1);
++ lt_setenv (name, new_value);
++ XFREE (new_value);
++ XFREE (name);
++ XFREE (value);
++}
++
++void
++lt_update_exe_path (const char *name, const char *value)
++{
++ LTWRAPPER_DEBUGPRINTF (("(lt_update_exe_path) modifying '%s' by prepending '%s'\n",
++ (name ? name : "<NULL>"),
++ (value ? value : "<NULL>")));
++
++ if (name && *name && value && *value)
++ {
++ char *new_value = lt_extend_str (getenv (name), value, 0);
++ /* some systems can't cope with a ':'-terminated path #' */
++ int len = strlen (new_value);
++ while (((len = strlen (new_value)) > 0) && IS_PATH_SEPARATOR (new_value[len-1]))
++ {
++ new_value[len-1] = '\0';
++ }
++ lt_setenv (name, new_value);
++ XFREE (new_value);
++ }
++}
++
++void
++lt_update_lib_path (const char *name, const char *value)
++{
++ LTWRAPPER_DEBUGPRINTF (("(lt_update_lib_path) modifying '%s' by prepending '%s'\n",
++ (name ? name : "<NULL>"),
++ (value ? value : "<NULL>")));
++
++ if (name && *name && value && *value)
++ {
++ char *new_value = lt_extend_str (getenv (name), value, 0);
++ lt_setenv (name, new_value);
++ XFREE (new_value);
++ }
++}
++
++
++EOF
++}
++# end: func_emit_cwrapperexe_src
++
++# func_mode_link arg...
++func_mode_link ()
++{
++ $opt_debug
++ case $host in
++ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
++ # It is impossible to link a dll without this setting, and
++ # we shouldn't force the makefile maintainer to figure out
++ # which system we are compiling for in order to pass an extra
++ # flag for every libtool invocation.
++ # allow_undefined=no
++
++ # FIXME: Unfortunately, there are problems with the above when trying
++ # to make a dll which has undefined symbols, in which case not
++ # even a static library is built. For now, we need to specify
++ # -no-undefined on the libtool link line when we can be certain
++ # that all symbols are satisfied, otherwise we get a static library.
++ allow_undefined=yes
++ ;;
++ *)
++ allow_undefined=yes
++ ;;
++ esac
++ libtool_args=$nonopt
++ base_compile="$nonopt $@"
++ compile_command=$nonopt
++ finalize_command=$nonopt
++
++ compile_rpath=
++ finalize_rpath=
++ compile_shlibpath=
++ finalize_shlibpath=
++ convenience=
++ old_convenience=
++ deplibs=
++ old_deplibs=
++ compiler_flags=
++ linker_flags=
++ dllsearchpath=
++ lib_search_path=`pwd`
++ inst_prefix_dir=
++ new_inherited_linker_flags=
++
++ avoid_version=no
++ dlfiles=
++ dlprefiles=
++ dlself=no
++ export_dynamic=no
++ export_symbols=
++ export_symbols_regex=
++ generated=
++ libobjs=
++ ltlibs=
++ module=no
++ no_install=no
++ objs=
++ non_pic_objects=
++ precious_files_regex=
++ prefer_static_libs=no
++ preload=no
++ prev=
++ prevarg=
++ release=
++ rpath=
++ xrpath=
++ perm_rpath=
++ temp_rpath=
++ thread_safe=no
++ vinfo=
++ vinfo_number=no
++ weak_libs=
++ single_module="${wl}-single_module"
++ func_infer_tag $base_compile
++
++ # We need to know -static, to get the right output filenames.
++ for arg
++ do
++ case $arg in
++ -shared)
++ test "$build_libtool_libs" != yes && \
++ func_fatal_configuration "can not build a shared library"
++ build_old_libs=no
++ break
++ ;;
++ -all-static | -static | -static-libtool-libs)
++ case $arg in
++ -all-static)
++ if test "$build_libtool_libs" = yes && test -z "$link_static_flag"; then
++ func_warning "complete static linking is impossible in this configuration"
++ fi
++ if test -n "$link_static_flag"; then
++ dlopen_self=$dlopen_self_static
++ fi
++ prefer_static_libs=yes
++ ;;
++ -static)
++ if test -z "$pic_flag" && test -n "$link_static_flag"; then
++ dlopen_self=$dlopen_self_static
++ fi
++ prefer_static_libs=built
++ ;;
++ -static-libtool-libs)
++ if test -z "$pic_flag" && test -n "$link_static_flag"; then
++ dlopen_self=$dlopen_self_static
++ fi
++ prefer_static_libs=yes
++ ;;
++ esac
++ build_libtool_libs=no
++ build_old_libs=yes
++ break
++ ;;
++ esac
++ done
++
++ # See if our shared archives depend on static archives.
++ test -n "$old_archive_from_new_cmds" && build_old_libs=yes
++
++ # Go through the arguments, transforming them on the way.
++ while test "$#" -gt 0; do
++ arg="$1"
++ shift
++ func_quote_for_eval "$arg"
++ qarg=$func_quote_for_eval_unquoted_result
++ func_append libtool_args " $func_quote_for_eval_result"
++
++ # If the previous option needs an argument, assign it.
++ if test -n "$prev"; then
++ case $prev in
++ output)
++ func_append compile_command " @OUTPUT@"
++ func_append finalize_command " @OUTPUT@"
++ ;;
++ esac
++
++ case $prev in
++ dlfiles|dlprefiles)
++ if test "$preload" = no; then
++ # Add the symbol object into the linking commands.
++ func_append compile_command " @SYMFILE@"
++ func_append finalize_command " @SYMFILE@"
++ preload=yes
++ fi
++ case $arg in
++ *.la | *.lo) ;; # We handle these cases below.
++ force)
++ if test "$dlself" = no; then
++ dlself=needless
++ export_dynamic=yes
++ fi
++ prev=
++ continue
++ ;;
++ self)
++ if test "$prev" = dlprefiles; then
++ dlself=yes
++ elif test "$prev" = dlfiles && test "$dlopen_self" != yes; then
++ dlself=yes
++ else
++ dlself=needless
++ export_dynamic=yes
++ fi
++ prev=
++ continue
++ ;;
++ *)
++ if test "$prev" = dlfiles; then
++ dlfiles="$dlfiles $arg"
++ else
++ dlprefiles="$dlprefiles $arg"
++ fi
++ prev=
++ continue
++ ;;
++ esac
++ ;;
++ expsyms)
++ export_symbols="$arg"
++ test -f "$arg" \
++ || func_fatal_error "symbol file \`$arg' does not exist"
++ prev=
++ continue
++ ;;
++ expsyms_regex)
++ export_symbols_regex="$arg"
++ prev=
++ continue
++ ;;
++ framework)
++ case $host in
++ *-*-darwin*)
++ case "$deplibs " in
++ *" $qarg.ltframework "*) ;;
++ *) deplibs="$deplibs $qarg.ltframework" # this is fixed later
++ ;;
++ esac
++ ;;
++ esac
++ prev=
++ continue
++ ;;
++ inst_prefix)
++ inst_prefix_dir="$arg"
++ prev=
++ continue
++ ;;
++ objectlist)
++ if test -f "$arg"; then
++ save_arg=$arg
++ moreargs=
++ for fil in `cat "$save_arg"`
++ do
++# moreargs="$moreargs $fil"
++ arg=$fil
++ # A libtool-controlled object.
++
++ # Check to see that this really is a libtool object.
++ if func_lalib_unsafe_p "$arg"; then
++ pic_object=
++ non_pic_object=
++
++ # Read the .lo file
++ func_source "$arg"
++
++ if test -z "$pic_object" ||
++ test -z "$non_pic_object" ||
++ test "$pic_object" = none &&
++ test "$non_pic_object" = none; then
++ func_fatal_error "cannot find name of object for \`$arg'"
++ fi
++
++ # Extract subdirectory from the argument.
++ func_dirname "$arg" "/" ""
++ xdir="$func_dirname_result"
++
++ if test "$pic_object" != none; then
++ # Prepend the subdirectory the object is found in.
++ pic_object="$xdir$pic_object"
++
++ if test "$prev" = dlfiles; then
++ if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
++ dlfiles="$dlfiles $pic_object"
++ prev=
++ continue
++ else
++ # If libtool objects are unsupported, then we need to preload.
++ prev=dlprefiles
++ fi
++ fi
++
++ # CHECK ME: I think I busted this. -Ossama
++ if test "$prev" = dlprefiles; then
++ # Preload the old-style object.
++ dlprefiles="$dlprefiles $pic_object"
++ prev=
++ fi
++
++ # A PIC object.
++ func_append libobjs " $pic_object"
++ arg="$pic_object"
++ fi
++
++ # Non-PIC object.
++ if test "$non_pic_object" != none; then
++ # Prepend the subdirectory the object is found in.
++ non_pic_object="$xdir$non_pic_object"
++
++ # A standard non-PIC object
++ func_append non_pic_objects " $non_pic_object"
++ if test -z "$pic_object" || test "$pic_object" = none ; then
++ arg="$non_pic_object"
++ fi
++ else
++ # If the PIC object exists, use it instead.
++ # $xdir was prepended to $pic_object above.
++ non_pic_object="$pic_object"
++ func_append non_pic_objects " $non_pic_object"
++ fi
++ else
++ # Only an error if not doing a dry-run.
++ if $opt_dry_run; then
++ # Extract subdirectory from the argument.
++ func_dirname "$arg" "/" ""
++ xdir="$func_dirname_result"
++
++ func_lo2o "$arg"
++ pic_object=$xdir$objdir/$func_lo2o_result
++ non_pic_object=$xdir$func_lo2o_result
++ func_append libobjs " $pic_object"
++ func_append non_pic_objects " $non_pic_object"
++ else
++ func_fatal_error "\`$arg' is not a valid libtool object"
++ fi
++ fi
++ done
++ else
++ func_fatal_error "link input file \`$arg' does not exist"
++ fi
++ arg=$save_arg
++ prev=
++ continue
++ ;;
++ precious_regex)
++ precious_files_regex="$arg"
++ prev=
++ continue
++ ;;
++ release)
++ release="-$arg"
++ prev=
++ continue
++ ;;
++ rpath | xrpath)
++ # We need an absolute path.
++ case $arg in
++ [\\/]* | [A-Za-z]:[\\/]*) ;;
++ *)
++ func_fatal_error "only absolute run-paths are allowed"
++ ;;
++ esac
++ if test "$prev" = rpath; then
++ case "$rpath " in
++ *" $arg "*) ;;
++ *) rpath="$rpath $arg" ;;
++ esac
++ else
++ case "$xrpath " in
++ *" $arg "*) ;;
++ *) xrpath="$xrpath $arg" ;;
++ esac
++ fi
++ prev=
++ continue
++ ;;
++ shrext)
++ shrext_cmds="$arg"
++ prev=
++ continue
++ ;;
++ weak)
++ weak_libs="$weak_libs $arg"
++ prev=
++ continue
++ ;;
++ xcclinker)
++ linker_flags="$linker_flags $qarg"
++ compiler_flags="$compiler_flags $qarg"
++ prev=
++ func_append compile_command " $qarg"
++ func_append finalize_command " $qarg"
++ continue
++ ;;
++ xcompiler)
++ compiler_flags="$compiler_flags $qarg"
++ prev=
++ func_append compile_command " $qarg"
++ func_append finalize_command " $qarg"
++ continue
++ ;;
++ xlinker)
++ linker_flags="$linker_flags $qarg"
++ compiler_flags="$compiler_flags $wl$qarg"
++ prev=
++ func_append compile_command " $wl$qarg"
++ func_append finalize_command " $wl$qarg"
++ continue
++ ;;
++ *)
++ eval "$prev=\"\$arg\""
++ prev=
++ continue
++ ;;
++ esac
++ fi # test -n "$prev"
++
++ prevarg="$arg"
++
++ case $arg in
++ -all-static)
++ if test -n "$link_static_flag"; then
++ # See comment for -static flag below, for more details.
++ func_append compile_command " $link_static_flag"
++ func_append finalize_command " $link_static_flag"
++ fi
++ continue
++ ;;
++
++ -allow-undefined)
++ # FIXME: remove this flag sometime in the future.
++ func_fatal_error "\`-allow-undefined' must not be used because it is the default"
++ ;;
++
++ -avoid-version)
++ avoid_version=yes
++ continue
++ ;;
++
++ -dlopen)
++ prev=dlfiles
++ continue
++ ;;
++
++ -dlpreopen)
++ prev=dlprefiles
++ continue
++ ;;
++
++ -export-dynamic)
++ export_dynamic=yes
++ continue
++ ;;
++
++ -export-symbols | -export-symbols-regex)
++ if test -n "$export_symbols" || test -n "$export_symbols_regex"; then
++ func_fatal_error "more than one -exported-symbols argument is not allowed"
++ fi
++ if test "X$arg" = "X-export-symbols"; then
++ prev=expsyms
++ else
++ prev=expsyms_regex
++ fi
++ continue
++ ;;
++
++ -framework)
++ prev=framework
++ continue
++ ;;
++
++ -inst-prefix-dir)
++ prev=inst_prefix
++ continue
++ ;;
++
++ # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:*
++ # so, if we see these flags be careful not to treat them like -L
++ -L[A-Z][A-Z]*:*)
++ case $with_gcc/$host in
++ no/*-*-irix* | /*-*-irix*)
++ func_append compile_command " $arg"
++ func_append finalize_command " $arg"
++ ;;
++ esac
++ continue
++ ;;
++
++ -L*)
++ func_stripname '-L' '' "$arg"
++ dir=$func_stripname_result
++ if test -z "$dir"; then
++ if test "$#" -gt 0; then
++ func_fatal_error "require no space between \`-L' and \`$1'"
++ else
++ func_fatal_error "need path for \`-L' option"
++ fi
++ fi
++ # We need an absolute path.
++ case $dir in
++ [\\/]* | [A-Za-z]:[\\/]*) ;;
++ *)
++ absdir=`cd "$dir" && pwd`
++ test -z "$absdir" && \
++ func_fatal_error "cannot determine absolute directory name of \`$dir'"
++ dir="$absdir"
++ ;;
++ esac
++ case "$deplibs " in
++ *" -L$dir "*) ;;
++ *)
++ deplibs="$deplibs -L$dir"
++ lib_search_path="$lib_search_path $dir"
++ ;;
++ esac
++ case $host in
++ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
++ testbindir=`$ECHO "X$dir" | $Xsed -e 's*/lib$*/bin*'`
++ case :$dllsearchpath: in
++ *":$dir:"*) ;;
++ ::) dllsearchpath=$dir;;
++ *) dllsearchpath="$dllsearchpath:$dir";;
++ esac
++ case :$dllsearchpath: in
++ *":$testbindir:"*) ;;
++ ::) dllsearchpath=$testbindir;;
++ *) dllsearchpath="$dllsearchpath:$testbindir";;
++ esac
++ ;;
++ esac
++ continue
++ ;;
++
++ -l*)
++ if test "X$arg" = "X-lc" || test "X$arg" = "X-lm"; then
++ case $host in
++ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc*)
++ # These systems don't actually have a C or math library (as such)
++ continue
++ ;;
++ *-*-os2*)
++ # These systems don't actually have a C library (as such)
++ test "X$arg" = "X-lc" && continue
++ ;;
++ *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
++ # Do not include libc due to us having libc/libc_r.
++ test "X$arg" = "X-lc" && continue
++ ;;
++ *-*-rhapsody* | *-*-darwin1.[012])
++ # Rhapsody C and math libraries are in the System framework
++ deplibs="$deplibs System.ltframework"
++ continue
++ ;;
++ *-*-sco3.2v5* | *-*-sco5v6*)
++ # Causes problems with __ctype
++ test "X$arg" = "X-lc" && continue
++ ;;
++ *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
++ # Compiler inserts libc in the correct place for threads to work
++ test "X$arg" = "X-lc" && continue
++ ;;
++ esac
++ elif test "X$arg" = "X-lc_r"; then
++ case $host in
++ *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
++ # Do not include libc_r directly, use -pthread flag.
++ continue
++ ;;
++ esac
++ fi
++ deplibs="$deplibs $arg"
++ continue
++ ;;
++
++ -module)
++ module=yes
++ continue
++ ;;
++
++ # Tru64 UNIX uses -model [arg] to determine the layout of C++
++ # classes, name mangling, and exception handling.
++ # Darwin uses the -arch flag to determine output architecture.
++ -model|-arch|-isysroot)
++ compiler_flags="$compiler_flags $arg"
++ func_append compile_command " $arg"
++ func_append finalize_command " $arg"
++ prev=xcompiler
++ continue
++ ;;
++
++ -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
++ compiler_flags="$compiler_flags $arg"
++ func_append compile_command " $arg"
++ func_append finalize_command " $arg"
++ case "$new_inherited_linker_flags " in
++ *" $arg "*) ;;
++ * ) new_inherited_linker_flags="$new_inherited_linker_flags $arg" ;;
++ esac
++ continue
++ ;;
++
++ -multi_module)
++ single_module="${wl}-multi_module"
++ continue
++ ;;
++
++ -no-fast-install)
++ fast_install=no
++ continue
++ ;;
++
++ -no-install)
++ case $host in
++ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*)
++ # The PATH hackery in wrapper scripts is required on Windows
++ # and Darwin in order for the loader to find any dlls it needs.
++ func_warning "\`-no-install' is ignored for $host"
++ func_warning "assuming \`-no-fast-install' instead"
++ fast_install=no
++ ;;
++ *) no_install=yes ;;
++ esac
++ continue
++ ;;
++
++ -no-undefined)
++ allow_undefined=no
++ continue
++ ;;
++
++ -objectlist)
++ prev=objectlist
++ continue
++ ;;
++
++ -o) prev=output ;;
++
++ -precious-files-regex)
++ prev=precious_regex
++ continue
++ ;;
++
++ -release)
++ prev=release
++ continue
++ ;;
++
++ -rpath)
++ prev=rpath
++ continue
++ ;;
++
++ -R)
++ prev=xrpath
++ continue
++ ;;
++
++ -R*)
++ func_stripname '-R' '' "$arg"
++ dir=$func_stripname_result
++ # We need an absolute path.
++ case $dir in
++ [\\/]* | [A-Za-z]:[\\/]*) ;;
++ *)
++ func_fatal_error "only absolute run-paths are allowed"
++ ;;
++ esac
++ case "$xrpath " in
++ *" $dir "*) ;;
++ *) xrpath="$xrpath $dir" ;;
++ esac
++ continue
++ ;;
++
++ -shared)
++ # The effects of -shared are defined in a previous loop.
++ continue
++ ;;
++
++ -shrext)
++ prev=shrext
++ continue
++ ;;
++
++ -static | -static-libtool-libs)
++ # The effects of -static are defined in a previous loop.
++ # We used to do the same as -all-static on platforms that
++ # didn't have a PIC flag, but the assumption that the effects
++ # would be equivalent was wrong. It would break on at least
++ # Digital Unix and AIX.
++ continue
++ ;;
++
++ -thread-safe)
++ thread_safe=yes
++ continue
++ ;;
++
++ -version-info)
++ prev=vinfo
++ continue
++ ;;
++
++ -version-number)
++ prev=vinfo
++ vinfo_number=yes
++ continue
++ ;;
++
++ -weak)
++ prev=weak
++ continue
++ ;;
++
++ -Wc,*)
++ func_stripname '-Wc,' '' "$arg"
++ args=$func_stripname_result
++ arg=
++ save_ifs="$IFS"; IFS=','
++ for flag in $args; do
++ IFS="$save_ifs"
++ func_quote_for_eval "$flag"
++ arg="$arg $wl$func_quote_for_eval_result"
++ compiler_flags="$compiler_flags $func_quote_for_eval_result"
++ done
++ IFS="$save_ifs"
++ func_stripname ' ' '' "$arg"
++ arg=$func_stripname_result
++ ;;
++
++ -Wl,*)
++ func_stripname '-Wl,' '' "$arg"
++ args=$func_stripname_result
++ arg=
++ save_ifs="$IFS"; IFS=','
++ for flag in $args; do
++ IFS="$save_ifs"
++ func_quote_for_eval "$flag"
++ arg="$arg $wl$func_quote_for_eval_result"
++ compiler_flags="$compiler_flags $wl$func_quote_for_eval_result"
++ linker_flags="$linker_flags $func_quote_for_eval_result"
++ done
++ IFS="$save_ifs"
++ func_stripname ' ' '' "$arg"
++ arg=$func_stripname_result
++ ;;
++
++ -Xcompiler)
++ prev=xcompiler
++ continue
++ ;;
++
++ -Xlinker)
++ prev=xlinker
++ continue
++ ;;
++
++ -XCClinker)
++ prev=xcclinker
++ continue
++ ;;
++
++ # -msg_* for osf cc
++ -msg_*)
++ func_quote_for_eval "$arg"
++ arg="$func_quote_for_eval_result"
++ ;;
++
++ # -64, -mips[0-9] enable 64-bit mode on the SGI compiler
++ # -r[0-9][0-9]* specifies the processor on the SGI compiler
++ # -xarch=*, -xtarget=* enable 64-bit mode on the Sun compiler
++ # +DA*, +DD* enable 64-bit mode on the HP compiler
++ # -q* pass through compiler args for the IBM compiler
++ # -m*, -t[45]*, -txscale* pass through architecture-specific
++ # compiler args for GCC
++ # -F/path gives path to uninstalled frameworks, gcc on darwin
++ # -p, -pg, --coverage, -fprofile-* pass through profiling flag for GCC
++ # @file GCC response files
++ -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \
++ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*)
++ func_quote_for_eval "$arg"
++ arg="$func_quote_for_eval_result"
++ func_append compile_command " $arg"
++ func_append finalize_command " $arg"
++ compiler_flags="$compiler_flags $arg"
++ continue
++ ;;
++
++ # Some other compiler flag.
++ -* | +*)
++ func_quote_for_eval "$arg"
++ arg="$func_quote_for_eval_result"
++ ;;
++
++ *.$objext)
++ # A standard object.
++ objs="$objs $arg"
++ ;;
++
++ *.lo)
++ # A libtool-controlled object.
++
++ # Check to see that this really is a libtool object.
++ if func_lalib_unsafe_p "$arg"; then
++ pic_object=
++ non_pic_object=
++
++ # Read the .lo file
++ func_source "$arg"
++
++ if test -z "$pic_object" ||
++ test -z "$non_pic_object" ||
++ test "$pic_object" = none &&
++ test "$non_pic_object" = none; then
++ func_fatal_error "cannot find name of object for \`$arg'"
++ fi
++
++ # Extract subdirectory from the argument.
++ func_dirname "$arg" "/" ""
++ xdir="$func_dirname_result"
++
++ if test "$pic_object" != none; then
++ # Prepend the subdirectory the object is found in.
++ pic_object="$xdir$pic_object"
++
++ if test "$prev" = dlfiles; then
++ if test "$build_libtool_libs" = yes && test "$dlopen_support" = yes; then
++ dlfiles="$dlfiles $pic_object"
++ prev=
++ continue
++ else
++ # If libtool objects are unsupported, then we need to preload.
++ prev=dlprefiles
++ fi
++ fi
++
++ # CHECK ME: I think I busted this. -Ossama
++ if test "$prev" = dlprefiles; then
++ # Preload the old-style object.
++ dlprefiles="$dlprefiles $pic_object"
++ prev=
++ fi
++
++ # A PIC object.
++ func_append libobjs " $pic_object"
++ arg="$pic_object"
++ fi
++
++ # Non-PIC object.
++ if test "$non_pic_object" != none; then
++ # Prepend the subdirectory the object is found in.
++ non_pic_object="$xdir$non_pic_object"
++
++ # A standard non-PIC object
++ func_append non_pic_objects " $non_pic_object"
++ if test -z "$pic_object" || test "$pic_object" = none ; then
++ arg="$non_pic_object"
++ fi
++ else
++ # If the PIC object exists, use it instead.
++ # $xdir was prepended to $pic_object above.
++ non_pic_object="$pic_object"
++ func_append non_pic_objects " $non_pic_object"
++ fi
++ else
++ # Only an error if not doing a dry-run.
++ if $opt_dry_run; then
++ # Extract subdirectory from the argument.
++ func_dirname "$arg" "/" ""
++ xdir="$func_dirname_result"
++
++ func_lo2o "$arg"
++ pic_object=$xdir$objdir/$func_lo2o_result
++ non_pic_object=$xdir$func_lo2o_result
++ func_append libobjs " $pic_object"
++ func_append non_pic_objects " $non_pic_object"
++ else
++ func_fatal_error "\`$arg' is not a valid libtool object"
++ fi
++ fi
++ ;;
++
++ *.$libext)
++ # An archive.
++ deplibs="$deplibs $arg"
++ old_deplibs="$old_deplibs $arg"
++ continue
++ ;;
++
++ *.la)
++ # A libtool-controlled library.
++
++ if test "$prev" = dlfiles; then
++ # This library was specified with -dlopen.
++ dlfiles="$dlfiles $arg"
++ prev=
++ elif test "$prev" = dlprefiles; then
++ # The library was specified with -dlpreopen.
++ dlprefiles="$dlprefiles $arg"
++ prev=
++ else
++ deplibs="$deplibs $arg"
++ fi
++ continue
++ ;;
++
++ # Some other compiler argument.
++ *)
++ # Unknown arguments in both finalize_command and compile_command need
++ # to be aesthetically quoted because they are evaled later.
++ func_quote_for_eval "$arg"
++ arg="$func_quote_for_eval_result"
++ ;;
++ esac # arg
++
++ # Now actually substitute the argument into the commands.
++ if test -n "$arg"; then
++ func_append compile_command " $arg"
++ func_append finalize_command " $arg"
++ fi
++ done # argument parsing loop
++
++ test -n "$prev" && \
++ func_fatal_help "the \`$prevarg' option requires an argument"
++
++ if test "$export_dynamic" = yes && test -n "$export_dynamic_flag_spec"; then
++ eval arg=\"$export_dynamic_flag_spec\"
++ func_append compile_command " $arg"
++ func_append finalize_command " $arg"
++ fi
++
++ oldlibs=
++ # calculate the name of the file, without its directory
++ func_basename "$output"
++ outputname="$func_basename_result"
++ libobjs_save="$libobjs"
++
++ if test -n "$shlibpath_var"; then
++ # get the directories listed in $shlibpath_var
++ eval shlib_search_path=\`\$ECHO \"X\${$shlibpath_var}\" \| \$Xsed -e \'s/:/ /g\'\`
++ else
++ shlib_search_path=
++ fi
++ eval sys_lib_search_path=\"$sys_lib_search_path_spec\"
++ eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\"
++
++ func_dirname "$output" "/" ""
++ output_objdir="$func_dirname_result$objdir"
++ # Create the object directory.
++ func_mkdir_p "$output_objdir"
++
++ # Determine the type of output
++ case $output in
++ "")
++ func_fatal_help "you must specify an output file"
++ ;;
++ *.$libext) linkmode=oldlib ;;
++ *.lo | *.$objext) linkmode=obj ;;
++ *.la) linkmode=lib ;;
++ *) linkmode=prog ;; # Anything else should be a program.
++ esac
++
++ specialdeplibs=
++
++ libs=
++ # Find all interdependent deplibs by searching for libraries
++ # that are linked more than once (e.g. -la -lb -la)
++ for deplib in $deplibs; do
++ if $opt_duplicate_deps ; then
++ case "$libs " in
++ *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
++ esac
++ fi
++ libs="$libs $deplib"
++ done
++
++ if test "$linkmode" = lib; then
++ libs="$predeps $libs $compiler_lib_search_path $postdeps"
++
++ # Compute libraries that are listed more than once in $predeps
++ # $postdeps and mark them as special (i.e., whose duplicates are
++ # not to be eliminated).
++ pre_post_deps=
++ if $opt_duplicate_compiler_generated_deps; then
++ for pre_post_dep in $predeps $postdeps; do
++ case "$pre_post_deps " in
++ *" $pre_post_dep "*) specialdeplibs="$specialdeplibs $pre_post_deps" ;;
++ esac
++ pre_post_deps="$pre_post_deps $pre_post_dep"
++ done
++ fi
++ pre_post_deps=
++ fi
++
++ deplibs=
++ newdependency_libs=
++ newlib_search_path=
++ need_relink=no # whether we're linking any uninstalled libtool libraries
++ notinst_deplibs= # not-installed libtool libraries
++ notinst_path= # paths that contain not-installed libtool libraries
++
++ case $linkmode in
++ lib)
++ passes="conv dlpreopen link"
++ for file in $dlfiles $dlprefiles; do
++ case $file in
++ *.la) ;;
++ *)
++ func_fatal_help "libraries can \`-dlopen' only libtool libraries: $file"
++ ;;
++ esac
++ done
++ ;;
++ prog)
++ compile_deplibs=
++ finalize_deplibs=
++ alldeplibs=no
++ newdlfiles=
++ newdlprefiles=
++ passes="conv scan dlopen dlpreopen link"
++ ;;
++ *) passes="conv"
++ ;;
++ esac
++
++ for pass in $passes; do
++ # The preopen pass in lib mode reverses $deplibs; put it back here
++ # so that -L comes before libs that need it for instance...
++ if test "$linkmode,$pass" = "lib,link"; then
++ ## FIXME: Find the place where the list is rebuilt in the wrong
++ ## order, and fix it there properly
++ tmp_deplibs=
++ for deplib in $deplibs; do
++ tmp_deplibs="$deplib $tmp_deplibs"
++ done
++ deplibs="$tmp_deplibs"
++ fi
++
++ if test "$linkmode,$pass" = "lib,link" ||
++ test "$linkmode,$pass" = "prog,scan"; then
++ libs="$deplibs"
++ deplibs=
++ fi
++ if test "$linkmode" = prog; then
++ case $pass in
++ dlopen) libs="$dlfiles" ;;
++ dlpreopen) libs="$dlprefiles" ;;
++ link)
++ libs="$deplibs %DEPLIBS%"
++ test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs"
++ ;;
++ esac
++ fi
++ if test "$linkmode,$pass" = "lib,dlpreopen"; then
++ # Collect and forward deplibs of preopened libtool libs
++ for lib in $dlprefiles; do
++ # Ignore non-libtool-libs
++ dependency_libs=
++ case $lib in
++ *.la) func_source "$lib" ;;
++ esac
++
++ # Collect preopened libtool deplibs, except any this library
++ # has declared as weak libs
++ for deplib in $dependency_libs; do
++ deplib_base=`$ECHO "X$deplib" | $Xsed -e "$basename"`
++ case " $weak_libs " in
++ *" $deplib_base "*) ;;
++ *) deplibs="$deplibs $deplib" ;;
++ esac
++ done
++ done
++ libs="$dlprefiles"
++ fi
++ if test "$pass" = dlopen; then
++ # Collect dlpreopened libraries
++ save_deplibs="$deplibs"
++ deplibs=
++ fi
++
++ for deplib in $libs; do
++ lib=
++ found=no
++ case $deplib in
++ -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe|-threads)
++ if test "$linkmode,$pass" = "prog,link"; then
++ compile_deplibs="$deplib $compile_deplibs"
++ finalize_deplibs="$deplib $finalize_deplibs"
++ else
++ compiler_flags="$compiler_flags $deplib"
++ if test "$linkmode" = lib ; then
++ case "$new_inherited_linker_flags " in
++ *" $deplib "*) ;;
++ * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;;
++ esac
++ fi
++ fi
++ continue
++ ;;
++ -l*)
++ if test "$linkmode" != lib && test "$linkmode" != prog; then
++ func_warning "\`-l' is ignored for archives/objects"
++ continue
++ fi
++ func_stripname '-l' '' "$deplib"
++ name=$func_stripname_result
++ if test "$linkmode" = lib; then
++ searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path"
++ else
++ searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path"
++ fi
++ for searchdir in $searchdirs; do
++ for search_ext in .la $std_shrext .so .a; do
++ # Search the libtool library
++ lib="$searchdir/lib${name}${search_ext}"
++ if test -f "$lib"; then
++ if test "$search_ext" = ".la"; then
++ found=yes
++ else
++ found=no
++ fi
++ break 2
++ fi
++ done
++ done
++ if test "$found" != yes; then
++ # deplib doesn't seem to be a libtool library
++ if test "$linkmode,$pass" = "prog,link"; then
++ compile_deplibs="$deplib $compile_deplibs"
++ finalize_deplibs="$deplib $finalize_deplibs"
++ else
++ deplibs="$deplib $deplibs"
++ test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
++ fi
++ continue
++ else # deplib is a libtool library
++ # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib,
++ # We need to do some special things here, and not later.
++ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
++ case " $predeps $postdeps " in
++ *" $deplib "*)
++ if func_lalib_p "$lib"; then
++ library_names=
++ old_library=
++ func_source "$lib"
++ for l in $old_library $library_names; do
++ ll="$l"
++ done
++ if test "X$ll" = "X$old_library" ; then # only static version available
++ found=no
++ func_dirname "$lib" "" "."
++ ladir="$func_dirname_result"
++ lib=$ladir/$old_library
++ if test "$linkmode,$pass" = "prog,link"; then
++ compile_deplibs="$deplib $compile_deplibs"
++ finalize_deplibs="$deplib $finalize_deplibs"
++ else
++ deplibs="$deplib $deplibs"
++ test "$linkmode" = lib && newdependency_libs="$deplib $newdependency_libs"
++ fi
++ continue
++ fi
++ fi
++ ;;
++ *) ;;
++ esac
++ fi
++ fi
++ ;; # -l
++ *.ltframework)
++ if test "$linkmode,$pass" = "prog,link"; then
++ compile_deplibs="$deplib $compile_deplibs"
++ finalize_deplibs="$deplib $finalize_deplibs"
++ else
++ deplibs="$deplib $deplibs"
++ if test "$linkmode" = lib ; then
++ case "$new_inherited_linker_flags " in
++ *" $deplib "*) ;;
++ * ) new_inherited_linker_flags="$new_inherited_linker_flags $deplib" ;;
++ esac
++ fi
++ fi
++ continue
++ ;;
++ -L*)
++ case $linkmode in
++ lib)
++ deplibs="$deplib $deplibs"
++ test "$pass" = conv && continue
++ newdependency_libs="$deplib $newdependency_libs"
++ func_stripname '-L' '' "$deplib"
++ newlib_search_path="$newlib_search_path $func_stripname_result"
++ ;;
++ prog)
++ if test "$pass" = conv; then
++ deplibs="$deplib $deplibs"
++ continue
++ fi
++ if test "$pass" = scan; then
++ deplibs="$deplib $deplibs"
++ else
++ compile_deplibs="$deplib $compile_deplibs"
++ finalize_deplibs="$deplib $finalize_deplibs"
++ fi
++ func_stripname '-L' '' "$deplib"
++ newlib_search_path="$newlib_search_path $func_stripname_result"
++ ;;
++ *)
++ func_warning "\`-L' is ignored for archives/objects"
++ ;;
++ esac # linkmode
++ continue
++ ;; # -L
++ -R*)
++ if test "$pass" = link; then
++ func_stripname '-R' '' "$deplib"
++ dir=$func_stripname_result
++ # Make sure the xrpath contains only unique directories.
++ case "$xrpath " in
++ *" $dir "*) ;;
++ *) xrpath="$xrpath $dir" ;;
++ esac
++ fi
++ deplibs="$deplib $deplibs"
++ continue
++ ;;
++ *.la) lib="$deplib" ;;
++ *.$libext)
++ if test "$pass" = conv; then
++ deplibs="$deplib $deplibs"
++ continue
++ fi
++ case $linkmode in
++ lib)
++ # Linking convenience modules into shared libraries is allowed,
++ # but linking other static libraries is non-portable.
++ case " $dlpreconveniencelibs " in
++ *" $deplib "*) ;;
++ *)
++ valid_a_lib=no
++ case $deplibs_check_method in
++ match_pattern*)
++ set dummy $deplibs_check_method; shift
++ match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
++ if eval "\$ECHO \"X$deplib\"" 2>/dev/null | $Xsed -e 10q \
++ | $EGREP "$match_pattern_regex" > /dev/null; then
++ valid_a_lib=yes
++ fi
++ ;;
++ pass_all)
++ valid_a_lib=yes
++ ;;
++ esac
++ if test "$valid_a_lib" != yes; then
++ $ECHO
++ $ECHO "*** Warning: Trying to link with static lib archive $deplib."
++ $ECHO "*** I have the capability to make that library automatically link in when"
++ $ECHO "*** you link to this library. But I can only do this if you have a"
++ $ECHO "*** shared version of the library, which you do not appear to have"
++ $ECHO "*** because the file extensions .$libext of this argument makes me believe"
++ $ECHO "*** that it is just a static archive that I should not use here."
++ else
++ $ECHO
++ $ECHO "*** Warning: Linking the shared library $output against the"
++ $ECHO "*** static library $deplib is not portable!"
++ deplibs="$deplib $deplibs"
++ fi
++ ;;
++ esac
++ continue
++ ;;
++ prog)
++ if test "$pass" != link; then
++ deplibs="$deplib $deplibs"
++ else
++ compile_deplibs="$deplib $compile_deplibs"
++ finalize_deplibs="$deplib $finalize_deplibs"
++ fi
++ continue
++ ;;
++ esac # linkmode
++ ;; # *.$libext
++ *.lo | *.$objext)
++ if test "$pass" = conv; then
++ deplibs="$deplib $deplibs"
++ elif test "$linkmode" = prog; then
++ if test "$pass" = dlpreopen || test "$dlopen_support" != yes || test "$build_libtool_libs" = no; then
++ # If there is no dlopen support or we're linking statically,
++ # we need to preload.
++ newdlprefiles="$newdlprefiles $deplib"
++ compile_deplibs="$deplib $compile_deplibs"
++ finalize_deplibs="$deplib $finalize_deplibs"
++ else
++ newdlfiles="$newdlfiles $deplib"
++ fi
++ fi
++ continue
++ ;;
++ %DEPLIBS%)
++ alldeplibs=yes
++ continue
++ ;;
++ esac # case $deplib
++
++ if test "$found" = yes || test -f "$lib"; then :
++ else
++ func_fatal_error "cannot find the library \`$lib' or unhandled argument \`$deplib'"
++ fi
++
++ # Check to see that this really is a libtool archive.
++ func_lalib_unsafe_p "$lib" \
++ || func_fatal_error "\`$lib' is not a valid libtool archive"
++
++ func_dirname "$lib" "" "."
++ ladir="$func_dirname_result"
++
++ dlname=
++ dlopen=
++ dlpreopen=
++ libdir=
++ library_names=
++ old_library=
++ inherited_linker_flags=
++ # If the library was installed with an old release of libtool,
++ # it will not redefine variables installed, or shouldnotlink
++ installed=yes
++ shouldnotlink=no
++ avoidtemprpath=
++
++
++ # Read the .la file
++ func_source "$lib"
++
++ # Convert "-framework foo" to "foo.ltframework"
++ if test -n "$inherited_linker_flags"; then
++ tmp_inherited_linker_flags=`$ECHO "X$inherited_linker_flags" | $Xsed -e 's/-framework \([^ $]*\)/\1.ltframework/g'`
++ for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do
++ case " $new_inherited_linker_flags " in
++ *" $tmp_inherited_linker_flag "*) ;;
++ *) new_inherited_linker_flags="$new_inherited_linker_flags $tmp_inherited_linker_flag";;
++ esac
++ done
++ fi
++ dependency_libs=`$ECHO "X $dependency_libs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
++ if test "$linkmode,$pass" = "lib,link" ||
++ test "$linkmode,$pass" = "prog,scan" ||
++ { test "$linkmode" != prog && test "$linkmode" != lib; }; then
++ test -n "$dlopen" && dlfiles="$dlfiles $dlopen"
++ test -n "$dlpreopen" && dlprefiles="$dlprefiles $dlpreopen"
++ fi
++
++ if test "$pass" = conv; then
++ # Only check for convenience libraries
++ deplibs="$lib $deplibs"
++ if test -z "$libdir"; then
++ if test -z "$old_library"; then
++ func_fatal_error "cannot find name of link library for \`$lib'"
++ fi
++ # It is a libtool convenience library, so add in its objects.
++ convenience="$convenience $ladir/$objdir/$old_library"
++ old_convenience="$old_convenience $ladir/$objdir/$old_library"
++ tmp_libs=
++ for deplib in $dependency_libs; do
++ deplibs="$deplib $deplibs"
++ if $opt_duplicate_deps ; then
++ case "$tmp_libs " in
++ *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
++ esac
++ fi
++ tmp_libs="$tmp_libs $deplib"
++ done
++ elif test "$linkmode" != prog && test "$linkmode" != lib; then
++ func_fatal_error "\`$lib' is not a convenience library"
++ fi
++ continue
++ fi # $pass = conv
++
++
++ # Get the name of the library we link against.
++ linklib=
++ for l in $old_library $library_names; do
++ linklib="$l"
++ done
++ if test -z "$linklib"; then
++ func_fatal_error "cannot find name of link library for \`$lib'"
++ fi
++
++ # This library was specified with -dlopen.
++ if test "$pass" = dlopen; then
++ if test -z "$libdir"; then
++ func_fatal_error "cannot -dlopen a convenience library: \`$lib'"
++ fi
++ if test -z "$dlname" ||
++ test "$dlopen_support" != yes ||
++ test "$build_libtool_libs" = no; then
++ # If there is no dlname, no dlopen support or we're linking
++ # statically, we need to preload. We also need to preload any
++ # dependent libraries so libltdl's deplib preloader doesn't
++ # bomb out in the load deplibs phase.
++ dlprefiles="$dlprefiles $lib $dependency_libs"
++ else
++ newdlfiles="$newdlfiles $lib"
++ fi
++ continue
++ fi # $pass = dlopen
++
++ # We need an absolute path.
++ case $ladir in
++ [\\/]* | [A-Za-z]:[\\/]*) abs_ladir="$ladir" ;;
++ *)
++ abs_ladir=`cd "$ladir" && pwd`
++ if test -z "$abs_ladir"; then
++ func_warning "cannot determine absolute directory name of \`$ladir'"
++ func_warning "passing it literally to the linker, although it might fail"
++ abs_ladir="$ladir"
++ fi
++ ;;
++ esac
++ func_basename "$lib"
++ laname="$func_basename_result"
++
++ # Find the relevant object directory and library name.
++ if test "X$installed" = Xyes; then
++ if test ! -f "$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then
++ func_warning "library \`$lib' was moved."
++ dir="$ladir"
++ absdir="$abs_ladir"
++ libdir="$abs_ladir"
++ else
++ dir="$libdir"
++ absdir="$libdir"
++ fi
++ test "X$hardcode_automatic" = Xyes && avoidtemprpath=yes
++ else
++ if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then
++ dir="$ladir"
++ absdir="$abs_ladir"
++ # Remove this search path later
++ notinst_path="$notinst_path $abs_ladir"
++ else
++ dir="$ladir/$objdir"
++ absdir="$abs_ladir/$objdir"
++ # Remove this search path later
++ notinst_path="$notinst_path $abs_ladir"
++ fi
++ fi # $installed = yes
++ func_stripname 'lib' '.la' "$laname"
++ name=$func_stripname_result
++
++ # This library was specified with -dlpreopen.
++ if test "$pass" = dlpreopen; then
++ if test -z "$libdir" && test "$linkmode" = prog; then
++ func_fatal_error "only libraries may -dlpreopen a convenience library: \`$lib'"
++ fi
++ # Prefer using a static library (so that no silly _DYNAMIC symbols
++ # are required to link).
++ if test -n "$old_library"; then
++ newdlprefiles="$newdlprefiles $dir/$old_library"
++ # Keep a list of preopened convenience libraries to check
++ # that they are being used correctly in the link pass.
++ test -z "$libdir" && \
++ dlpreconveniencelibs="$dlpreconveniencelibs $dir/$old_library"
++ # Otherwise, use the dlname, so that lt_dlopen finds it.
++ elif test -n "$dlname"; then
++ newdlprefiles="$newdlprefiles $dir/$dlname"
++ else
++ newdlprefiles="$newdlprefiles $dir/$linklib"
++ fi
++ fi # $pass = dlpreopen
++
++ if test -z "$libdir"; then
++ # Link the convenience library
++ if test "$linkmode" = lib; then
++ deplibs="$dir/$old_library $deplibs"
++ elif test "$linkmode,$pass" = "prog,link"; then
++ compile_deplibs="$dir/$old_library $compile_deplibs"
++ finalize_deplibs="$dir/$old_library $finalize_deplibs"
++ else
++ deplibs="$lib $deplibs" # used for prog,scan pass
++ fi
++ continue
++ fi
++
++
++ if test "$linkmode" = prog && test "$pass" != link; then
++ newlib_search_path="$newlib_search_path $ladir"
++ deplibs="$lib $deplibs"
++
++ linkalldeplibs=no
++ if test "$link_all_deplibs" != no || test -z "$library_names" ||
++ test "$build_libtool_libs" = no; then
++ linkalldeplibs=yes
++ fi
++
++ tmp_libs=
++ for deplib in $dependency_libs; do
++ case $deplib in
++ -L*) func_stripname '-L' '' "$deplib"
++ newlib_search_path="$newlib_search_path $func_stripname_result"
++ ;;
++ esac
++ # Need to link against all dependency_libs?
++ if test "$linkalldeplibs" = yes; then
++ deplibs="$deplib $deplibs"
++ else
++ # Need to hardcode shared library paths
++ # or/and link against static libraries
++ newdependency_libs="$deplib $newdependency_libs"
++ fi
++ if $opt_duplicate_deps ; then
++ case "$tmp_libs " in
++ *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
++ esac
++ fi
++ tmp_libs="$tmp_libs $deplib"
++ done # for deplib
++ continue
++ fi # $linkmode = prog...
++
++ if test "$linkmode,$pass" = "prog,link"; then
++ if test -n "$library_names" &&
++ { { test "$prefer_static_libs" = no ||
++ test "$prefer_static_libs,$installed" = "built,yes"; } ||
++ test -z "$old_library"; }; then
++ # We need to hardcode the library path
++ if test -n "$shlibpath_var" && test -z "$avoidtemprpath" ; then
++ # Make sure the rpath contains only unique directories.
++ case "$temp_rpath:" in
++ *"$absdir:"*) ;;
++ *) temp_rpath="$temp_rpath$absdir:" ;;
++ esac
++ fi
++
++ # Hardcode the library path.
++ # Skip directories that are in the system default run-time
++ # search path.
++ case " $sys_lib_dlsearch_path " in
++ *" $absdir "*) ;;
++ *)
++ case "$compile_rpath " in
++ *" $absdir "*) ;;
++ *) compile_rpath="$compile_rpath $absdir"
++ esac
++ ;;
++ esac
++ case " $sys_lib_dlsearch_path " in
++ *" $libdir "*) ;;
++ *)
++ case "$finalize_rpath " in
++ *" $libdir "*) ;;
++ *) finalize_rpath="$finalize_rpath $libdir"
++ esac
++ ;;
++ esac
++ fi # $linkmode,$pass = prog,link...
++
++ if test "$alldeplibs" = yes &&
++ { test "$deplibs_check_method" = pass_all ||
++ { test "$build_libtool_libs" = yes &&
++ test -n "$library_names"; }; }; then
++ # We only need to search for static libraries
++ continue
++ fi
++ fi
++
++ link_static=no # Whether the deplib will be linked statically
++ use_static_libs=$prefer_static_libs
++ if test "$use_static_libs" = built && test "$installed" = yes; then
++ use_static_libs=no
++ fi
++ if test -n "$library_names" &&
++ { test "$use_static_libs" = no || test -z "$old_library"; }; then
++ case $host in
++ *cygwin* | *mingw* | *cegcc*)
++ # No point in relinking DLLs because paths are not encoded
++ notinst_deplibs="$notinst_deplibs $lib"
++ need_relink=no
++ ;;
++ *)
++ if test "$installed" = no; then
++ notinst_deplibs="$notinst_deplibs $lib"
++ need_relink=yes
++ fi
++ ;;
++ esac
++ # This is a shared library
++
++ # Warn about portability, can't link against -module's on some
++ # systems (darwin). Don't bleat about dlopened modules though!
++ dlopenmodule=""
++ for dlpremoduletest in $dlprefiles; do
++ if test "X$dlpremoduletest" = "X$lib"; then
++ dlopenmodule="$dlpremoduletest"
++ break
++ fi
++ done
++ if test -z "$dlopenmodule" && test "$shouldnotlink" = yes && test "$pass" = link; then
++ $ECHO
++ if test "$linkmode" = prog; then
++ $ECHO "*** Warning: Linking the executable $output against the loadable module"
++ else
++ $ECHO "*** Warning: Linking the shared library $output against the loadable module"
++ fi
++ $ECHO "*** $linklib is not portable!"
++ fi
++ if test "$linkmode" = lib &&
++ test "$hardcode_into_libs" = yes; then
++ # Hardcode the library path.
++ # Skip directories that are in the system default run-time
++ # search path.
++ case " $sys_lib_dlsearch_path " in
++ *" $absdir "*) ;;
++ *)
++ case "$compile_rpath " in
++ *" $absdir "*) ;;
++ *) compile_rpath="$compile_rpath $absdir"
++ esac
++ ;;
++ esac
++ case " $sys_lib_dlsearch_path " in
++ *" $libdir "*) ;;
++ *)
++ case "$finalize_rpath " in
++ *" $libdir "*) ;;
++ *) finalize_rpath="$finalize_rpath $libdir"
++ esac
++ ;;
++ esac
++ fi
++
++ if test -n "$old_archive_from_expsyms_cmds"; then
++ # figure out the soname
++ set dummy $library_names
++ shift
++ realname="$1"
++ shift
++ libname=`eval "\\$ECHO \"$libname_spec\""`
++ # use dlname if we got it. it's perfectly good, no?
++ if test -n "$dlname"; then
++ soname="$dlname"
++ elif test -n "$soname_spec"; then
++ # bleh windows
++ case $host in
++ *cygwin* | mingw* | *cegcc*)
++ func_arith $current - $age
++ major=$func_arith_result
++ versuffix="-$major"
++ ;;
++ esac
++ eval soname=\"$soname_spec\"
++ else
++ soname="$realname"
++ fi
++
++ # Make a new name for the extract_expsyms_cmds to use
++ soroot="$soname"
++ func_basename "$soroot"
++ soname="$func_basename_result"
++ func_stripname 'lib' '.dll' "$soname"
++ newlib=libimp-$func_stripname_result.a
++
++ # If the library has no export list, then create one now
++ if test -f "$output_objdir/$soname-def"; then :
++ else
++ func_verbose "extracting exported symbol list from \`$soname'"
++ func_execute_cmds "$extract_expsyms_cmds" 'exit $?'
++ fi
++
++ # Create $newlib
++ if test -f "$output_objdir/$newlib"; then :; else
++ func_verbose "generating import library for \`$soname'"
++ func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?'
++ fi
++ # make sure the library variables are pointing to the new library
++ dir=$output_objdir
++ linklib=$newlib
++ fi # test -n "$old_archive_from_expsyms_cmds"
++
++ if test "$linkmode" = prog || test "$mode" != relink; then
++ add_shlibpath=
++ add_dir=
++ add=
++ lib_linked=yes
++ case $hardcode_action in
++ immediate | unsupported)
++ if test "$hardcode_direct" = no; then
++ add="$dir/$linklib"
++ case $host in
++ *-*-sco3.2v5.0.[024]*) add_dir="-L$dir" ;;
++ *-*-sysv4*uw2*) add_dir="-L$dir" ;;
++ *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \
++ *-*-unixware7*) add_dir="-L$dir" ;;
++ *-*-darwin* )
++ # if the lib is a (non-dlopened) module then we can not
++ # link against it, someone is ignoring the earlier warnings
++ if /usr/bin/file -L $add 2> /dev/null |
++ $GREP ": [^:]* bundle" >/dev/null ; then
++ if test "X$dlopenmodule" != "X$lib"; then
++ $ECHO "*** Warning: lib $linklib is a module, not a shared library"
++ if test -z "$old_library" ; then
++ $ECHO
++ $ECHO "*** And there doesn't seem to be a static archive available"
++ $ECHO "*** The link will probably fail, sorry"
++ else
++ add="$dir/$old_library"
++ fi
++ elif test -n "$old_library"; then
++ add="$dir/$old_library"
++ fi
++ fi
++ esac
++ elif test "$hardcode_minus_L" = no; then
++ case $host in
++ *-*-sunos*) add_shlibpath="$dir" ;;
++ esac
++ add_dir="-L$dir"
++ add="-l$name"
++ elif test "$hardcode_shlibpath_var" = no; then
++ add_shlibpath="$dir"
++ add="-l$name"
++ else
++ lib_linked=no
++ fi
++ ;;
++ relink)
++ if test "$hardcode_direct" = yes &&
++ test "$hardcode_direct_absolute" = no; then
++ add="$dir/$linklib"
++ elif test "$hardcode_minus_L" = yes; then
++ add_dir="-L$dir"
++ # Try looking first in the location we're being installed to.
++ if test -n "$inst_prefix_dir"; then
++ case $libdir in
++ [\\/]*)
++ add_dir="$add_dir -L$inst_prefix_dir$libdir"
++ ;;
++ esac
++ fi
++ add="-l$name"
++ elif test "$hardcode_shlibpath_var" = yes; then
++ add_shlibpath="$dir"
++ add="-l$name"
++ else
++ lib_linked=no
++ fi
++ ;;
++ *) lib_linked=no ;;
++ esac
++
++ if test "$lib_linked" != yes; then
++ func_fatal_configuration "unsupported hardcode properties"
++ fi
++
++ if test -n "$add_shlibpath"; then
++ case :$compile_shlibpath: in
++ *":$add_shlibpath:"*) ;;
++ *) compile_shlibpath="$compile_shlibpath$add_shlibpath:" ;;
++ esac
++ fi
++ if test "$linkmode" = prog; then
++ test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs"
++ test -n "$add" && compile_deplibs="$add $compile_deplibs"
++ else
++ test -n "$add_dir" && deplibs="$add_dir $deplibs"
++ test -n "$add" && deplibs="$add $deplibs"
++ if test "$hardcode_direct" != yes &&
++ test "$hardcode_minus_L" != yes &&
++ test "$hardcode_shlibpath_var" = yes; then
++ case :$finalize_shlibpath: in
++ *":$libdir:"*) ;;
++ *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
++ esac
++ fi
++ fi
++ fi
++
++ if test "$linkmode" = prog || test "$mode" = relink; then
++ add_shlibpath=
++ add_dir=
++ add=
++ # Finalize command for both is simple: just hardcode it.
++ if test "$hardcode_direct" = yes &&
++ test "$hardcode_direct_absolute" = no; then
++ add="$libdir/$linklib"
++ elif test "$hardcode_minus_L" = yes; then
++ add_dir="-L$libdir"
++ add="-l$name"
++ elif test "$hardcode_shlibpath_var" = yes; then
++ case :$finalize_shlibpath: in
++ *":$libdir:"*) ;;
++ *) finalize_shlibpath="$finalize_shlibpath$libdir:" ;;
++ esac
++ add="-l$name"
++ elif test "$hardcode_automatic" = yes; then
++ if test -n "$inst_prefix_dir" &&
++ test -f "$inst_prefix_dir$libdir/$linklib" ; then
++ add="$inst_prefix_dir$libdir/$linklib"
++ else
++ add="$libdir/$linklib"
++ fi
++ else
++ # We cannot seem to hardcode it, guess we'll fake it.
++ add_dir="-L$libdir"
++ # Try looking first in the location we're being installed to.
++ if test -n "$inst_prefix_dir"; then
++ case $libdir in
++ [\\/]*)
++ add_dir="$add_dir -L$inst_prefix_dir$libdir"
++ ;;
++ esac
++ fi
++ add="-l$name"
++ fi
++
++ if test "$linkmode" = prog; then
++ test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs"
++ test -n "$add" && finalize_deplibs="$add $finalize_deplibs"
++ else
++ test -n "$add_dir" && deplibs="$add_dir $deplibs"
++ test -n "$add" && deplibs="$add $deplibs"
++ fi
++ fi
++ elif test "$linkmode" = prog; then
++ # Here we assume that one of hardcode_direct or hardcode_minus_L
++ # is not unsupported. This is valid on all known static and
++ # shared platforms.
++ if test "$hardcode_direct" != unsupported; then
++ test -n "$old_library" && linklib="$old_library"
++ compile_deplibs="$dir/$linklib $compile_deplibs"
++ finalize_deplibs="$dir/$linklib $finalize_deplibs"
++ else
++ compile_deplibs="-l$name -L$dir $compile_deplibs"
++ finalize_deplibs="-l$name -L$dir $finalize_deplibs"
++ fi
++ elif test "$build_libtool_libs" = yes; then
++ # Not a shared library
++ if test "$deplibs_check_method" != pass_all; then
++ # We're trying link a shared library against a static one
++ # but the system doesn't support it.
++
++ # Just print a warning and add the library to dependency_libs so
++ # that the program can be linked against the static library.
++ $ECHO
++ $ECHO "*** Warning: This system can not link to static lib archive $lib."
++ $ECHO "*** I have the capability to make that library automatically link in when"
++ $ECHO "*** you link to this library. But I can only do this if you have a"
++ $ECHO "*** shared version of the library, which you do not appear to have."
++ if test "$module" = yes; then
++ $ECHO "*** But as you try to build a module library, libtool will still create "
++ $ECHO "*** a static module, that should work as long as the dlopening application"
++ $ECHO "*** is linked with the -dlopen flag to resolve symbols at runtime."
++ if test -z "$global_symbol_pipe"; then
++ $ECHO
++ $ECHO "*** However, this would only work if libtool was able to extract symbol"
++ $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could"
++ $ECHO "*** not find such a program. So, this module is probably useless."
++ $ECHO "*** \`nm' from GNU binutils and a full rebuild may help."
++ fi
++ if test "$build_old_libs" = no; then
++ build_libtool_libs=module
++ build_old_libs=yes
++ else
++ build_libtool_libs=no
++ fi
++ fi
++ else
++ deplibs="$dir/$old_library $deplibs"
++ link_static=yes
++ fi
++ fi # link shared/static library?
++
++ if test "$linkmode" = lib; then
++ if test -n "$dependency_libs" &&
++ { test "$hardcode_into_libs" != yes ||
++ test "$build_old_libs" = yes ||
++ test "$link_static" = yes; }; then
++ # Extract -R from dependency_libs
++ temp_deplibs=
++ for libdir in $dependency_libs; do
++ case $libdir in
++ -R*) func_stripname '-R' '' "$libdir"
++ temp_xrpath=$func_stripname_result
++ case " $xrpath " in
++ *" $temp_xrpath "*) ;;
++ *) xrpath="$xrpath $temp_xrpath";;
++ esac;;
++ *) temp_deplibs="$temp_deplibs $libdir";;
++ esac
++ done
++ dependency_libs="$temp_deplibs"
++ fi
++
++ newlib_search_path="$newlib_search_path $absdir"
++ # Link against this library
++ test "$link_static" = no && newdependency_libs="$abs_ladir/$laname $newdependency_libs"
++ # ... and its dependency_libs
++ tmp_libs=
++ for deplib in $dependency_libs; do
++ newdependency_libs="$deplib $newdependency_libs"
++ if $opt_duplicate_deps ; then
++ case "$tmp_libs " in
++ *" $deplib "*) specialdeplibs="$specialdeplibs $deplib" ;;
++ esac
++ fi
++ tmp_libs="$tmp_libs $deplib"
++ done
++
++ if test "$link_all_deplibs" != no; then
++ # Add the search paths of all dependency libraries
++ for deplib in $dependency_libs; do
++ path=
++ case $deplib in
++ -L*) path="$deplib" ;;
++ *.la)
++ func_dirname "$deplib" "" "."
++ dir="$func_dirname_result"
++ # We need an absolute path.
++ case $dir in
++ [\\/]* | [A-Za-z]:[\\/]*) absdir="$dir" ;;
++ *)
++ absdir=`cd "$dir" && pwd`
++ if test -z "$absdir"; then
++ func_warning "cannot determine absolute directory name of \`$dir'"
++ absdir="$dir"
++ fi
++ ;;
++ esac
++ if $GREP "^installed=no" $deplib > /dev/null; then
++ case $host in
++ *-*-darwin*)
++ depdepl=
++ eval deplibrary_names=`${SED} -n -e 's/^library_names=\(.*\)$/\1/p' $deplib`
++ if test -n "$deplibrary_names" ; then
++ for tmp in $deplibrary_names ; do
++ depdepl=$tmp
++ done
++ if test -f "$absdir/$objdir/$depdepl" ; then
++ depdepl="$absdir/$objdir/$depdepl"
++ darwin_install_name=`${OTOOL} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
++ if test -z "$darwin_install_name"; then
++ darwin_install_name=`${OTOOL64} -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'`
++ fi
++ compiler_flags="$compiler_flags ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}"
++ linker_flags="$linker_flags -dylib_file ${darwin_install_name}:${depdepl}"
++ path=
++ fi
++ fi
++ ;;
++ *)
++ path="-L$absdir/$objdir"
++ ;;
++ esac
++ else
++ eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
++ test -z "$libdir" && \
++ func_fatal_error "\`$deplib' is not a valid libtool archive"
++ test "$absdir" != "$libdir" && \
++ func_warning "\`$deplib' seems to be moved"
++
++ path="-L$absdir"
++ fi
++ ;;
++ esac
++ case " $deplibs " in
++ *" $path "*) ;;
++ *) deplibs="$path $deplibs" ;;
++ esac
++ done
++ fi # link_all_deplibs != no
++ fi # linkmode = lib
++ done # for deplib in $libs
++ if test "$pass" = link; then
++ if test "$linkmode" = "prog"; then
++ compile_deplibs="$new_inherited_linker_flags $compile_deplibs"
++ finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs"
++ else
++ compiler_flags="$compiler_flags "`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
++ fi
++ fi
++ dependency_libs="$newdependency_libs"
++ if test "$pass" = dlpreopen; then
++ # Link the dlpreopened libraries before other libraries
++ for deplib in $save_deplibs; do
++ deplibs="$deplib $deplibs"
++ done
++ fi
++ if test "$pass" != dlopen; then
++ if test "$pass" != conv; then
++ # Make sure lib_search_path contains only unique directories.
++ lib_search_path=
++ for dir in $newlib_search_path; do
++ case "$lib_search_path " in
++ *" $dir "*) ;;
++ *) lib_search_path="$lib_search_path $dir" ;;
++ esac
++ done
++ newlib_search_path=
++ fi
++
++ if test "$linkmode,$pass" != "prog,link"; then
++ vars="deplibs"
++ else
++ vars="compile_deplibs finalize_deplibs"
++ fi
++ for var in $vars dependency_libs; do
++ # Add libraries to $var in reverse order
++ eval tmp_libs=\"\$$var\"
++ new_libs=
++ for deplib in $tmp_libs; do
++ # FIXME: Pedantically, this is the right thing to do, so
++ # that some nasty dependency loop isn't accidentally
++ # broken:
++ #new_libs="$deplib $new_libs"
++ # Pragmatically, this seems to cause very few problems in
++ # practice:
++ case $deplib in
++ -L*) new_libs="$deplib $new_libs" ;;
++ -R*) ;;
++ *)
++ # And here is the reason: when a library appears more
++ # than once as an explicit dependence of a library, or
++ # is implicitly linked in more than once by the
++ # compiler, it is considered special, and multiple
++ # occurrences thereof are not removed. Compare this
++ # with having the same library being listed as a
++ # dependency of multiple other libraries: in this case,
++ # we know (pedantically, we assume) the library does not
++ # need to be listed more than once, so we keep only the
++ # last copy. This is not always right, but it is rare
++ # enough that we require users that really mean to play
++ # such unportable linking tricks to link the library
++ # using -Wl,-lname, so that libtool does not consider it
++ # for duplicate removal.
++ case " $specialdeplibs " in
++ *" $deplib "*) new_libs="$deplib $new_libs" ;;
++ *)
++ case " $new_libs " in
++ *" $deplib "*) ;;
++ *) new_libs="$deplib $new_libs" ;;
++ esac
++ ;;
++ esac
++ ;;
++ esac
++ done
++ tmp_libs=
++ for deplib in $new_libs; do
++ case $deplib in
++ -L*)
++ case " $tmp_libs " in
++ *" $deplib "*) ;;
++ *) tmp_libs="$tmp_libs $deplib" ;;
++ esac
++ ;;
++ *) tmp_libs="$tmp_libs $deplib" ;;
++ esac
++ done
++ eval $var=\"$tmp_libs\"
++ done # for var
++ fi
++ # Last step: remove runtime libs from dependency_libs
++ # (they stay in deplibs)
++ tmp_libs=
++ for i in $dependency_libs ; do
++ case " $predeps $postdeps $compiler_lib_search_path " in
++ *" $i "*)
++ i=""
++ ;;
++ esac
++ if test -n "$i" ; then
++ tmp_libs="$tmp_libs $i"
++ fi
++ done
++ dependency_libs=$tmp_libs
++ done # for pass
++ if test "$linkmode" = prog; then
++ dlfiles="$newdlfiles"
++ fi
++ if test "$linkmode" = prog || test "$linkmode" = lib; then
++ dlprefiles="$newdlprefiles"
++ fi
++
++ case $linkmode in
++ oldlib)
++ if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
++ func_warning "\`-dlopen' is ignored for archives"
++ fi
++
++ case " $deplibs" in
++ *\ -l* | *\ -L*)
++ func_warning "\`-l' and \`-L' are ignored for archives" ;;
++ esac
++
++ test -n "$rpath" && \
++ func_warning "\`-rpath' is ignored for archives"
++
++ test -n "$xrpath" && \
++ func_warning "\`-R' is ignored for archives"
++
++ test -n "$vinfo" && \
++ func_warning "\`-version-info/-version-number' is ignored for archives"
++
++ test -n "$release" && \
++ func_warning "\`-release' is ignored for archives"
++
++ test -n "$export_symbols$export_symbols_regex" && \
++ func_warning "\`-export-symbols' is ignored for archives"
++
++ # Now set the variables for building old libraries.
++ build_libtool_libs=no
++ oldlibs="$output"
++ objs="$objs$old_deplibs"
++ ;;
++
++ lib)
++ # Make sure we only generate libraries of the form `libNAME.la'.
++ case $outputname in
++ lib*)
++ func_stripname 'lib' '.la' "$outputname"
++ name=$func_stripname_result
++ eval shared_ext=\"$shrext_cmds\"
++ eval libname=\"$libname_spec\"
++ ;;
++ *)
++ test "$module" = no && \
++ func_fatal_help "libtool library \`$output' must begin with \`lib'"
++
++ if test "$need_lib_prefix" != no; then
++ # Add the "lib" prefix for modules if required
++ func_stripname '' '.la' "$outputname"
++ name=$func_stripname_result
++ eval shared_ext=\"$shrext_cmds\"
++ eval libname=\"$libname_spec\"
++ else
++ func_stripname '' '.la' "$outputname"
++ libname=$func_stripname_result
++ fi
++ ;;
++ esac
++
++ if test -n "$objs"; then
++ if test "$deplibs_check_method" != pass_all; then
++ func_fatal_error "cannot build libtool library \`$output' from non-libtool objects on this host:$objs"
++ else
++ $ECHO
++ $ECHO "*** Warning: Linking the shared library $output against the non-libtool"
++ $ECHO "*** objects $objs is not portable!"
++ libobjs="$libobjs $objs"
++ fi
++ fi
++
++ test "$dlself" != no && \
++ func_warning "\`-dlopen self' is ignored for libtool libraries"
++
++ set dummy $rpath
++ shift
++ test "$#" -gt 1 && \
++ func_warning "ignoring multiple \`-rpath's for a libtool library"
++
++ install_libdir="$1"
++
++ oldlibs=
++ if test -z "$rpath"; then
++ if test "$build_libtool_libs" = yes; then
++ # Building a libtool convenience library.
++ # Some compilers have problems with a `.al' extension so
++ # convenience libraries should have the same extension an
++ # archive normally would.
++ oldlibs="$output_objdir/$libname.$libext $oldlibs"
++ build_libtool_libs=convenience
++ build_old_libs=yes
++ fi
++
++ test -n "$vinfo" && \
++ func_warning "\`-version-info/-version-number' is ignored for convenience libraries"
++
++ test -n "$release" && \
++ func_warning "\`-release' is ignored for convenience libraries"
++ else
++
++ # Parse the version information argument.
++ save_ifs="$IFS"; IFS=':'
++ set dummy $vinfo 0 0 0
++ shift
++ IFS="$save_ifs"
++
++ test -n "$7" && \
++ func_fatal_help "too many parameters to \`-version-info'"
++
++ # convert absolute version numbers to libtool ages
++ # this retains compatibility with .la files and attempts
++ # to make the code below a bit more comprehensible
++
++ case $vinfo_number in
++ yes)
++ number_major="$1"
++ number_minor="$2"
++ number_revision="$3"
++ #
++ # There are really only two kinds -- those that
++ # use the current revision as the major version
++ # and those that subtract age and use age as
++ # a minor version. But, then there is irix
++ # which has an extra 1 added just for fun
++ #
++ case $version_type in
++ darwin|linux|osf|windows|none)
++ func_arith $number_major + $number_minor
++ current=$func_arith_result
++ age="$number_minor"
++ revision="$number_revision"
++ ;;
++ freebsd-aout|freebsd-elf|sunos)
++ current="$number_major"
++ revision="$number_minor"
++ age="0"
++ ;;
++ irix|nonstopux)
++ func_arith $number_major + $number_minor
++ current=$func_arith_result
++ age="$number_minor"
++ revision="$number_minor"
++ lt_irix_increment=no
++ ;;
++ *)
++ func_fatal_configuration "$modename: unknown library version type \`$version_type'"
++ ;;
++ esac
++ ;;
++ no)
++ current="$1"
++ revision="$2"
++ age="$3"
++ ;;
++ esac
++
++ # Check that each of the things are valid numbers.
++ case $current in
++ 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
++ *)
++ func_error "CURRENT \`$current' must be a nonnegative integer"
++ func_fatal_error "\`$vinfo' is not valid version information"
++ ;;
++ esac
++
++ case $revision in
++ 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
++ *)
++ func_error "REVISION \`$revision' must be a nonnegative integer"
++ func_fatal_error "\`$vinfo' is not valid version information"
++ ;;
++ esac
++
++ case $age in
++ 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;;
++ *)
++ func_error "AGE \`$age' must be a nonnegative integer"
++ func_fatal_error "\`$vinfo' is not valid version information"
++ ;;
++ esac
++
++ if test "$age" -gt "$current"; then
++ func_error "AGE \`$age' is greater than the current interface number \`$current'"
++ func_fatal_error "\`$vinfo' is not valid version information"
++ fi
++
++ # Calculate the version variables.
++ major=
++ versuffix=
++ verstring=
++ case $version_type in
++ none) ;;
++
++ darwin)
++ # Like Linux, but with the current version available in
++ # verstring for coding it into the library header
++ func_arith $current - $age
++ major=.$func_arith_result
++ versuffix="$major.$age.$revision"
++ # Darwin ld doesn't like 0 for these options...
++ func_arith $current + 1
++ minor_current=$func_arith_result
++ xlcverstring="${wl}-compatibility_version ${wl}$minor_current ${wl}-current_version ${wl}$minor_current.$revision"
++ verstring="-compatibility_version $minor_current -current_version $minor_current.$revision"
++ ;;
++
++ freebsd-aout)
++ major=".$current"
++ versuffix=".$current.$revision";
++ ;;
++
++ freebsd-elf)
++ major=".$current"
++ versuffix=".$current"
++ ;;
++
++ irix | nonstopux)
++ if test "X$lt_irix_increment" = "Xno"; then
++ func_arith $current - $age
++ else
++ func_arith $current - $age + 1
++ fi
++ major=$func_arith_result
++
++ case $version_type in
++ nonstopux) verstring_prefix=nonstopux ;;
++ *) verstring_prefix=sgi ;;
++ esac
++ verstring="$verstring_prefix$major.$revision"
++
++ # Add in all the interfaces that we are compatible with.
++ loop=$revision
++ while test "$loop" -ne 0; do
++ func_arith $revision - $loop
++ iface=$func_arith_result
++ func_arith $loop - 1
++ loop=$func_arith_result
++ verstring="$verstring_prefix$major.$iface:$verstring"
++ done
++
++ # Before this point, $major must not contain `.'.
++ major=.$major
++ versuffix="$major.$revision"
++ ;;
++
++ linux)
++ func_arith $current - $age
++ major=.$func_arith_result
++ versuffix="$major.$age.$revision"
++ ;;
++
++ osf)
++ func_arith $current - $age
++ major=.$func_arith_result
++ versuffix=".$current.$age.$revision"
++ verstring="$current.$age.$revision"
++
++ # Add in all the interfaces that we are compatible with.
++ loop=$age
++ while test "$loop" -ne 0; do
++ func_arith $current - $loop
++ iface=$func_arith_result
++ func_arith $loop - 1
++ loop=$func_arith_result
++ verstring="$verstring:${iface}.0"
++ done
++
++ # Make executables depend on our current version.
++ verstring="$verstring:${current}.0"
++ ;;
++
++ qnx)
++ major=".$current"
++ versuffix=".$current"
++ ;;
++
++ sunos)
++ major=".$current"
++ versuffix=".$current.$revision"
++ ;;
++
++ windows)
++ # Use '-' rather than '.', since we only want one
++ # extension on DOS 8.3 filesystems.
++ func_arith $current - $age
++ major=$func_arith_result
++ versuffix="-$major"
++ ;;
++
++ *)
++ func_fatal_configuration "unknown library version type \`$version_type'"
++ ;;
++ esac
++
++ # Clear the version info if we defaulted, and they specified a release.
++ if test -z "$vinfo" && test -n "$release"; then
++ major=
++ case $version_type in
++ darwin)
++ # we can't check for "0.0" in archive_cmds due to quoting
++ # problems, so we reset it completely
++ verstring=
++ ;;
++ *)
++ verstring="0.0"
++ ;;
++ esac
++ if test "$need_version" = no; then
++ versuffix=
++ else
++ versuffix=".0.0"
++ fi
++ fi
++
++ # Remove version info from name if versioning should be avoided
++ if test "$avoid_version" = yes && test "$need_version" = no; then
++ major=
++ versuffix=
++ verstring=""
++ fi
++
++ # Check to see if the archive will have undefined symbols.
++ if test "$allow_undefined" = yes; then
++ if test "$allow_undefined_flag" = unsupported; then
++ func_warning "undefined symbols not allowed in $host shared libraries"
++ build_libtool_libs=no
++ build_old_libs=yes
++ fi
++ else
++ # Don't allow undefined symbols.
++ allow_undefined_flag="$no_undefined_flag"
++ fi
++
++ fi
++
++ func_generate_dlsyms "$libname" "$libname" "yes"
++ libobjs="$libobjs $symfileobj"
++ test "X$libobjs" = "X " && libobjs=
++
++ if test "$mode" != relink; then
++ # Remove our outputs, but don't remove object files since they
++ # may have been created when compiling PIC objects.
++ removelist=
++ tempremovelist=`$ECHO "$output_objdir/*"`
++ for p in $tempremovelist; do
++ case $p in
++ *.$objext | *.gcno)
++ ;;
++ $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/${libname}${release}.*)
++ if test "X$precious_files_regex" != "X"; then
++ if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1
++ then
++ continue
++ fi
++ fi
++ removelist="$removelist $p"
++ ;;
++ *) ;;
++ esac
++ done
++ test -n "$removelist" && \
++ func_show_eval "${RM}r \$removelist"
++ fi
++
++ # Now set the variables for building old libraries.
++ if test "$build_old_libs" = yes && test "$build_libtool_libs" != convenience ; then
++ oldlibs="$oldlibs $output_objdir/$libname.$libext"
++
++ # Transform .lo files to .o files.
++ oldobjs="$objs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}'$/d' -e "$lo2o" | $NL2SP`
++ fi
++
++ # Eliminate all temporary directories.
++ #for path in $notinst_path; do
++ # lib_search_path=`$ECHO "X$lib_search_path " | $Xsed -e "s% $path % %g"`
++ # deplibs=`$ECHO "X$deplibs " | $Xsed -e "s% -L$path % %g"`
++ # dependency_libs=`$ECHO "X$dependency_libs " | $Xsed -e "s% -L$path % %g"`
++ #done
++
++ if test -n "$xrpath"; then
++ # If the user specified any rpath flags, then add them.
++ temp_xrpath=
++ for libdir in $xrpath; do
++ temp_xrpath="$temp_xrpath -R$libdir"
++ case "$finalize_rpath " in
++ *" $libdir "*) ;;
++ *) finalize_rpath="$finalize_rpath $libdir" ;;
++ esac
++ done
++ if test "$hardcode_into_libs" != yes || test "$build_old_libs" = yes; then
++ dependency_libs="$temp_xrpath $dependency_libs"
++ fi
++ fi
++
++ # Make sure dlfiles contains only unique files that won't be dlpreopened
++ old_dlfiles="$dlfiles"
++ dlfiles=
++ for lib in $old_dlfiles; do
++ case " $dlprefiles $dlfiles " in
++ *" $lib "*) ;;
++ *) dlfiles="$dlfiles $lib" ;;
++ esac
++ done
++
++ # Make sure dlprefiles contains only unique files
++ old_dlprefiles="$dlprefiles"
++ dlprefiles=
++ for lib in $old_dlprefiles; do
++ case "$dlprefiles " in
++ *" $lib "*) ;;
++ *) dlprefiles="$dlprefiles $lib" ;;
++ esac
++ done
++
++ if test "$build_libtool_libs" = yes; then
++ if test -n "$rpath"; then
++ case $host in
++ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc*)
++ # these systems don't actually have a c library (as such)!
++ ;;
++ *-*-rhapsody* | *-*-darwin1.[012])
++ # Rhapsody C library is in the System framework
++ deplibs="$deplibs System.ltframework"
++ ;;
++ *-*-netbsd*)
++ # Don't link with libc until the a.out ld.so is fixed.
++ ;;
++ *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*)
++ # Do not include libc due to us having libc/libc_r.
++ ;;
++ *-*-sco3.2v5* | *-*-sco5v6*)
++ # Causes problems with __ctype
++ ;;
++ *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*)
++ # Compiler inserts libc in the correct place for threads to work
++ ;;
++ *)
++ # Add libc to deplibs on all other systems if necessary.
++ if test "$build_libtool_need_lc" = "yes"; then
++ deplibs="$deplibs -lc"
++ fi
++ ;;
++ esac
++ fi
++
++ # Transform deplibs into only deplibs that can be linked in shared.
++ name_save=$name
++ libname_save=$libname
++ release_save=$release
++ versuffix_save=$versuffix
++ major_save=$major
++ # I'm not sure if I'm treating the release correctly. I think
++ # release should show up in the -l (ie -lgmp5) so we don't want to
++ # add it in twice. Is that correct?
++ release=""
++ versuffix=""
++ major=""
++ newdeplibs=
++ droppeddeps=no
++ case $deplibs_check_method in
++ pass_all)
++ # Don't check for shared/static. Everything works.
++ # This might be a little naive. We might want to check
++ # whether the library exists or not. But this is on
++ # osf3 & osf4 and I'm not really sure... Just
++ # implementing what was already the behavior.
++ newdeplibs=$deplibs
++ ;;
++ test_compile)
++ # This code stresses the "libraries are programs" paradigm to its
++ # limits. Maybe even breaks it. We compile a program, linking it
++ # against the deplibs as a proxy for the library. Then we can check
++ # whether they linked in statically or dynamically with ldd.
++ $opt_dry_run || $RM conftest.c
++ cat > conftest.c <<EOF
++ int main() { return 0; }
++EOF
++ $opt_dry_run || $RM conftest
++ if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then
++ ldd_output=`ldd conftest`
++ for i in $deplibs; do
++ case $i in
++ -l*)
++ func_stripname -l '' "$i"
++ name=$func_stripname_result
++ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
++ case " $predeps $postdeps " in
++ *" $i "*)
++ newdeplibs="$newdeplibs $i"
++ i=""
++ ;;
++ esac
++ fi
++ if test -n "$i" ; then
++ libname=`eval "\\$ECHO \"$libname_spec\""`
++ deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
++ set dummy $deplib_matches; shift
++ deplib_match=$1
++ if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
++ newdeplibs="$newdeplibs $i"
++ else
++ droppeddeps=yes
++ $ECHO
++ $ECHO "*** Warning: dynamic linker does not accept needed library $i."
++ $ECHO "*** I have the capability to make that library automatically link in when"
++ $ECHO "*** you link to this library. But I can only do this if you have a"
++ $ECHO "*** shared version of the library, which I believe you do not have"
++ $ECHO "*** because a test_compile did reveal that the linker did not use it for"
++ $ECHO "*** its dynamic dependency list that programs get resolved with at runtime."
++ fi
++ fi
++ ;;
++ *)
++ newdeplibs="$newdeplibs $i"
++ ;;
++ esac
++ done
++ else
++ # Error occurred in the first compile. Let's try to salvage
++ # the situation: Compile a separate program for each library.
++ for i in $deplibs; do
++ case $i in
++ -l*)
++ func_stripname -l '' "$i"
++ name=$func_stripname_result
++ $opt_dry_run || $RM conftest
++ if $LTCC $LTCFLAGS -o conftest conftest.c $i; then
++ ldd_output=`ldd conftest`
++ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
++ case " $predeps $postdeps " in
++ *" $i "*)
++ newdeplibs="$newdeplibs $i"
++ i=""
++ ;;
++ esac
++ fi
++ if test -n "$i" ; then
++ libname=`eval "\\$ECHO \"$libname_spec\""`
++ deplib_matches=`eval "\\$ECHO \"$library_names_spec\""`
++ set dummy $deplib_matches; shift
++ deplib_match=$1
++ if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0 ; then
++ newdeplibs="$newdeplibs $i"
++ else
++ droppeddeps=yes
++ $ECHO
++ $ECHO "*** Warning: dynamic linker does not accept needed library $i."
++ $ECHO "*** I have the capability to make that library automatically link in when"
++ $ECHO "*** you link to this library. But I can only do this if you have a"
++ $ECHO "*** shared version of the library, which you do not appear to have"
++ $ECHO "*** because a test_compile did reveal that the linker did not use this one"
++ $ECHO "*** as a dynamic dependency that programs can get resolved with at runtime."
++ fi
++ fi
++ else
++ droppeddeps=yes
++ $ECHO
++ $ECHO "*** Warning! Library $i is needed by this library but I was not able to"
++ $ECHO "*** make it link in! You will probably need to install it or some"
++ $ECHO "*** library that it depends on before this library will be fully"
++ $ECHO "*** functional. Installing it before continuing would be even better."
++ fi
++ ;;
++ *)
++ newdeplibs="$newdeplibs $i"
++ ;;
++ esac
++ done
++ fi
++ ;;
++ file_magic*)
++ set dummy $deplibs_check_method; shift
++ file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
++ for a_deplib in $deplibs; do
++ case $a_deplib in
++ -l*)
++ func_stripname -l '' "$a_deplib"
++ name=$func_stripname_result
++ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
++ case " $predeps $postdeps " in
++ *" $a_deplib "*)
++ newdeplibs="$newdeplibs $a_deplib"
++ a_deplib=""
++ ;;
++ esac
++ fi
++ if test -n "$a_deplib" ; then
++ libname=`eval "\\$ECHO \"$libname_spec\""`
++ for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
++ potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
++ for potent_lib in $potential_libs; do
++ # Follow soft links.
++ if ls -lLd "$potent_lib" 2>/dev/null |
++ $GREP " -> " >/dev/null; then
++ continue
++ fi
++ # The statement above tries to avoid entering an
++ # endless loop below, in case of cyclic links.
++ # We might still enter an endless loop, since a link
++ # loop can be closed while we follow links,
++ # but so what?
++ potlib="$potent_lib"
++ while test -h "$potlib" 2>/dev/null; do
++ potliblink=`ls -ld $potlib | ${SED} 's/.* -> //'`
++ case $potliblink in
++ [\\/]* | [A-Za-z]:[\\/]*) potlib="$potliblink";;
++ *) potlib=`$ECHO "X$potlib" | $Xsed -e 's,[^/]*$,,'`"$potliblink";;
++ esac
++ done
++ if eval $file_magic_cmd \"\$potlib\" 2>/dev/null |
++ $SED -e 10q |
++ $EGREP "$file_magic_regex" > /dev/null; then
++ newdeplibs="$newdeplibs $a_deplib"
++ a_deplib=""
++ break 2
++ fi
++ done
++ done
++ fi
++ if test -n "$a_deplib" ; then
++ droppeddeps=yes
++ $ECHO
++ $ECHO "*** Warning: linker path does not have real file for library $a_deplib."
++ $ECHO "*** I have the capability to make that library automatically link in when"
++ $ECHO "*** you link to this library. But I can only do this if you have a"
++ $ECHO "*** shared version of the library, which you do not appear to have"
++ $ECHO "*** because I did check the linker path looking for a file starting"
++ if test -z "$potlib" ; then
++ $ECHO "*** with $libname but no candidates were found. (...for file magic test)"
++ else
++ $ECHO "*** with $libname and none of the candidates passed a file format test"
++ $ECHO "*** using a file magic. Last file checked: $potlib"
++ fi
++ fi
++ ;;
++ *)
++ # Add a -L argument.
++ newdeplibs="$newdeplibs $a_deplib"
++ ;;
++ esac
++ done # Gone through all deplibs.
++ ;;
++ match_pattern*)
++ set dummy $deplibs_check_method; shift
++ match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"`
++ for a_deplib in $deplibs; do
++ case $a_deplib in
++ -l*)
++ func_stripname -l '' "$a_deplib"
++ name=$func_stripname_result
++ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
++ case " $predeps $postdeps " in
++ *" $a_deplib "*)
++ newdeplibs="$newdeplibs $a_deplib"
++ a_deplib=""
++ ;;
++ esac
++ fi
++ if test -n "$a_deplib" ; then
++ libname=`eval "\\$ECHO \"$libname_spec\""`
++ for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do
++ potential_libs=`ls $i/$libname[.-]* 2>/dev/null`
++ for potent_lib in $potential_libs; do
++ potlib="$potent_lib" # see symlink-check above in file_magic test
++ if eval "\$ECHO \"X$potent_lib\"" 2>/dev/null | $Xsed -e 10q | \
++ $EGREP "$match_pattern_regex" > /dev/null; then
++ newdeplibs="$newdeplibs $a_deplib"
++ a_deplib=""
++ break 2
++ fi
++ done
++ done
++ fi
++ if test -n "$a_deplib" ; then
++ droppeddeps=yes
++ $ECHO
++ $ECHO "*** Warning: linker path does not have real file for library $a_deplib."
++ $ECHO "*** I have the capability to make that library automatically link in when"
++ $ECHO "*** you link to this library. But I can only do this if you have a"
++ $ECHO "*** shared version of the library, which you do not appear to have"
++ $ECHO "*** because I did check the linker path looking for a file starting"
++ if test -z "$potlib" ; then
++ $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)"
++ else
++ $ECHO "*** with $libname and none of the candidates passed a file format test"
++ $ECHO "*** using a regex pattern. Last file checked: $potlib"
++ fi
++ fi
++ ;;
++ *)
++ # Add a -L argument.
++ newdeplibs="$newdeplibs $a_deplib"
++ ;;
++ esac
++ done # Gone through all deplibs.
++ ;;
++ none | unknown | *)
++ newdeplibs=""
++ tmp_deplibs=`$ECHO "X $deplibs" | $Xsed \
++ -e 's/ -lc$//' -e 's/ -[LR][^ ]*//g'`
++ if test "X$allow_libtool_libs_with_static_runtimes" = "Xyes" ; then
++ for i in $predeps $postdeps ; do
++ # can't use Xsed below, because $i might contain '/'
++ tmp_deplibs=`$ECHO "X $tmp_deplibs" | $Xsed -e "s,$i,,"`
++ done
++ fi
++ if $ECHO "X $tmp_deplibs" | $Xsed -e 's/[ ]//g' |
++ $GREP . >/dev/null; then
++ $ECHO
++ if test "X$deplibs_check_method" = "Xnone"; then
++ $ECHO "*** Warning: inter-library dependencies are not supported in this platform."
++ else
++ $ECHO "*** Warning: inter-library dependencies are not known to be supported."
++ fi
++ $ECHO "*** All declared inter-library dependencies are being dropped."
++ droppeddeps=yes
++ fi
++ ;;
++ esac
++ versuffix=$versuffix_save
++ major=$major_save
++ release=$release_save
++ libname=$libname_save
++ name=$name_save
++
++ case $host in
++ *-*-rhapsody* | *-*-darwin1.[012])
++ # On Rhapsody replace the C library with the System framework
++ newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
++ ;;
++ esac
++
++ if test "$droppeddeps" = yes; then
++ if test "$module" = yes; then
++ $ECHO
++ $ECHO "*** Warning: libtool could not satisfy all declared inter-library"
++ $ECHO "*** dependencies of module $libname. Therefore, libtool will create"
++ $ECHO "*** a static module, that should work as long as the dlopening"
++ $ECHO "*** application is linked with the -dlopen flag."
++ if test -z "$global_symbol_pipe"; then
++ $ECHO
++ $ECHO "*** However, this would only work if libtool was able to extract symbol"
++ $ECHO "*** lists from a program, using \`nm' or equivalent, but libtool could"
++ $ECHO "*** not find such a program. So, this module is probably useless."
++ $ECHO "*** \`nm' from GNU binutils and a full rebuild may help."
++ fi
++ if test "$build_old_libs" = no; then
++ oldlibs="$output_objdir/$libname.$libext"
++ build_libtool_libs=module
++ build_old_libs=yes
++ else
++ build_libtool_libs=no
++ fi
++ else
++ $ECHO "*** The inter-library dependencies that have been dropped here will be"
++ $ECHO "*** automatically added whenever a program is linked with this library"
++ $ECHO "*** or is declared to -dlopen it."
++
++ if test "$allow_undefined" = no; then
++ $ECHO
++ $ECHO "*** Since this library must not contain undefined symbols,"
++ $ECHO "*** because either the platform does not support them or"
++ $ECHO "*** it was explicitly requested with -no-undefined,"
++ $ECHO "*** libtool will only create a static version of it."
++ if test "$build_old_libs" = no; then
++ oldlibs="$output_objdir/$libname.$libext"
++ build_libtool_libs=module
++ build_old_libs=yes
++ else
++ build_libtool_libs=no
++ fi
++ fi
++ fi
++ fi
++ # Done checking deplibs!
++ deplibs=$newdeplibs
++ fi
++ # Time to change all our "foo.ltframework" stuff back to "-framework foo"
++ case $host in
++ *-*-darwin*)
++ newdeplibs=`$ECHO "X $newdeplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
++ new_inherited_linker_flags=`$ECHO "X $new_inherited_linker_flags" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
++ deplibs=`$ECHO "X $deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
++ ;;
++ esac
++
++ # move library search paths that coincide with paths to not yet
++ # installed libraries to the beginning of the library search list
++ new_libs=
++ for path in $notinst_path; do
++ case " $new_libs " in
++ *" -L$path/$objdir "*) ;;
++ *)
++ case " $deplibs " in
++ *" -L$path/$objdir "*)
++ new_libs="$new_libs -L$path/$objdir" ;;
++ esac
++ ;;
++ esac
++ done
++ for deplib in $deplibs; do
++ case $deplib in
++ -L*)
++ case " $new_libs " in
++ *" $deplib "*) ;;
++ *) new_libs="$new_libs $deplib" ;;
++ esac
++ ;;
++ *) new_libs="$new_libs $deplib" ;;
++ esac
++ done
++ deplibs="$new_libs"
++
++ # All the library-specific variables (install_libdir is set above).
++ library_names=
++ old_library=
++ dlname=
++
++ # Test again, we may have decided not to build it any more
++ if test "$build_libtool_libs" = yes; then
++ if test "$hardcode_into_libs" = yes; then
++ # Hardcode the library paths
++ hardcode_libdirs=
++ dep_rpath=
++ rpath="$finalize_rpath"
++ test "$mode" != relink && rpath="$compile_rpath$rpath"
++ for libdir in $rpath; do
++ if test -n "$hardcode_libdir_flag_spec"; then
++ if test -n "$hardcode_libdir_separator"; then
++ if test -z "$hardcode_libdirs"; then
++ hardcode_libdirs="$libdir"
++ else
++ # Just accumulate the unique libdirs.
++ case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
++ *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
++ ;;
++ *)
++ hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
++ ;;
++ esac
++ fi
++ else
++ eval flag=\"$hardcode_libdir_flag_spec\"
++ dep_rpath="$dep_rpath $flag"
++ fi
++ elif test -n "$runpath_var"; then
++ case "$perm_rpath " in
++ *" $libdir "*) ;;
++ *) perm_rpath="$perm_rpath $libdir" ;;
++ esac
++ fi
++ done
++ # Substitute the hardcoded libdirs into the rpath.
++ if test -n "$hardcode_libdir_separator" &&
++ test -n "$hardcode_libdirs"; then
++ libdir="$hardcode_libdirs"
++ if test -n "$hardcode_libdir_flag_spec_ld"; then
++ eval dep_rpath=\"$hardcode_libdir_flag_spec_ld\"
++ else
++ eval dep_rpath=\"$hardcode_libdir_flag_spec\"
++ fi
++ fi
++ if test -n "$runpath_var" && test -n "$perm_rpath"; then
++ # We should set the runpath_var.
++ rpath=
++ for dir in $perm_rpath; do
++ rpath="$rpath$dir:"
++ done
++ eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var"
++ fi
++ test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs"
++ fi
++
++ shlibpath="$finalize_shlibpath"
++ test "$mode" != relink && shlibpath="$compile_shlibpath$shlibpath"
++ if test -n "$shlibpath"; then
++ eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var"
++ fi
++
++ # Get the real and link names of the library.
++ eval shared_ext=\"$shrext_cmds\"
++ eval library_names=\"$library_names_spec\"
++ set dummy $library_names
++ shift
++ realname="$1"
++ shift
++
++ if test -n "$soname_spec"; then
++ eval soname=\"$soname_spec\"
++ else
++ soname="$realname"
++ fi
++ if test -z "$dlname"; then
++ dlname=$soname
++ fi
++
++ lib="$output_objdir/$realname"
++ linknames=
++ for link
++ do
++ linknames="$linknames $link"
++ done
++
++ # Use standard objects if they are pic
++ test -z "$pic_flag" && libobjs=`$ECHO "X$libobjs" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
++ test "X$libobjs" = "X " && libobjs=
++
++ delfiles=
++ if test -n "$export_symbols" && test -n "$include_expsyms"; then
++ $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp"
++ export_symbols="$output_objdir/$libname.uexp"
++ delfiles="$delfiles $export_symbols"
++ fi
++
++ orig_export_symbols=
++ case $host_os in
++ cygwin* | mingw* | cegcc*)
++ if test -n "$export_symbols" && test -z "$export_symbols_regex"; then
++ # exporting using user supplied symfile
++ if test "x`$SED 1q $export_symbols`" != xEXPORTS; then
++ # and it's NOT already a .def file. Must figure out
++ # which of the given symbols are data symbols and tag
++ # them as such. So, trigger use of export_symbols_cmds.
++ # export_symbols gets reassigned inside the "prepare
++ # the list of exported symbols" if statement, so the
++ # include_expsyms logic still works.
++ orig_export_symbols="$export_symbols"
++ export_symbols=
++ always_export_symbols=yes
++ fi
++ fi
++ ;;
++ esac
++
++ # Prepare the list of exported symbols
++ if test -z "$export_symbols"; then
++ if test "$always_export_symbols" = yes || test -n "$export_symbols_regex"; then
++ func_verbose "generating symbol list for \`$libname.la'"
++ export_symbols="$output_objdir/$libname.exp"
++ $opt_dry_run || $RM $export_symbols
++ cmds=$export_symbols_cmds
++ save_ifs="$IFS"; IFS='~'
++ for cmd in $cmds; do
++ IFS="$save_ifs"
++ eval cmd=\"$cmd\"
++ func_len " $cmd"
++ len=$func_len_result
++ if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
++ func_show_eval "$cmd" 'exit $?'
++ skipped_export=false
++ else
++ # The command line is too long to execute in one step.
++ func_verbose "using reloadable object file for export list..."
++ skipped_export=:
++ # Break out early, otherwise skipped_export may be
++ # set to false by a later but shorter cmd.
++ break
++ fi
++ done
++ IFS="$save_ifs"
++ if test -n "$export_symbols_regex" && test "X$skipped_export" != "X:"; then
++ func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
++ func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
++ fi
++ fi
++ fi
++
++ if test -n "$export_symbols" && test -n "$include_expsyms"; then
++ tmp_export_symbols="$export_symbols"
++ test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
++ $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"'
++ fi
++
++ if test "X$skipped_export" != "X:" && test -n "$orig_export_symbols"; then
++ # The given exports_symbols file has to be filtered, so filter it.
++ func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
++ # FIXME: $output_objdir/$libname.filter potentially contains lots of
++ # 's' commands which not all seds can handle. GNU sed should be fine
++ # though. Also, the filter scales superlinearly with the number of
++ # global variables. join(1) would be nice here, but unfortunately
++ # isn't a blessed tool.
++ $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
++ delfiles="$delfiles $export_symbols $output_objdir/$libname.filter"
++ export_symbols=$output_objdir/$libname.def
++ $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
++ fi
++
++ tmp_deplibs=
++ for test_deplib in $deplibs; do
++ case " $convenience " in
++ *" $test_deplib "*) ;;
++ *)
++ tmp_deplibs="$tmp_deplibs $test_deplib"
++ ;;
++ esac
++ done
++ deplibs="$tmp_deplibs"
++
++ if test -n "$convenience"; then
++ if test -n "$whole_archive_flag_spec" &&
++ test "$compiler_needs_object" = yes &&
++ test -z "$libobjs"; then
++ # extract the archives, so we have objects to list.
++ # TODO: could optimize this to just extract one archive.
++ whole_archive_flag_spec=
++ fi
++ if test -n "$whole_archive_flag_spec"; then
++ save_libobjs=$libobjs
++ eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
++ test "X$libobjs" = "X " && libobjs=
++ else
++ gentop="$output_objdir/${outputname}x"
++ generated="$generated $gentop"
++
++ func_extract_archives $gentop $convenience
++ libobjs="$libobjs $func_extract_archives_result"
++ test "X$libobjs" = "X " && libobjs=
++ fi
++ fi
++
++ if test "$thread_safe" = yes && test -n "$thread_safe_flag_spec"; then
++ eval flag=\"$thread_safe_flag_spec\"
++ linker_flags="$linker_flags $flag"
++ fi
++
++ # Make a backup of the uninstalled library when relinking
++ if test "$mode" = relink; then
++ $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $?
++ fi
++
++ # Do each of the archive commands.
++ if test "$module" = yes && test -n "$module_cmds" ; then
++ if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
++ eval test_cmds=\"$module_expsym_cmds\"
++ cmds=$module_expsym_cmds
++ else
++ eval test_cmds=\"$module_cmds\"
++ cmds=$module_cmds
++ fi
++ else
++ if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
++ eval test_cmds=\"$archive_expsym_cmds\"
++ cmds=$archive_expsym_cmds
++ else
++ eval test_cmds=\"$archive_cmds\"
++ cmds=$archive_cmds
++ fi
++ fi
++
++ if test "X$skipped_export" != "X:" &&
++ func_len " $test_cmds" &&
++ len=$func_len_result &&
++ test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
++ :
++ else
++ # The command line is too long to link in one step, link piecewise
++ # or, if using GNU ld and skipped_export is not :, use a linker
++ # script.
++
++ # Save the value of $output and $libobjs because we want to
++ # use them later. If we have whole_archive_flag_spec, we
++ # want to use save_libobjs as it was before
++ # whole_archive_flag_spec was expanded, because we can't
++ # assume the linker understands whole_archive_flag_spec.
++ # This may have to be revisited, in case too many
++ # convenience libraries get linked in and end up exceeding
++ # the spec.
++ if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then
++ save_libobjs=$libobjs
++ fi
++ save_output=$output
++ output_la=`$ECHO "X$output" | $Xsed -e "$basename"`
++
++ # Clear the reloadable object creation command queue and
++ # initialize k to one.
++ test_cmds=
++ concat_cmds=
++ objlist=
++ last_robj=
++ k=1
++
++ if test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "$with_gnu_ld" = yes; then
++ output=${output_objdir}/${output_la}.lnkscript
++ func_verbose "creating GNU ld script: $output"
++ $ECHO 'INPUT (' > $output
++ for obj in $save_libobjs
++ do
++ $ECHO "$obj" >> $output
++ done
++ $ECHO ')' >> $output
++ delfiles="$delfiles $output"
++ elif test -n "$save_libobjs" && test "X$skipped_export" != "X:" && test "X$file_list_spec" != X; then
++ output=${output_objdir}/${output_la}.lnk
++ func_verbose "creating linker input file list: $output"
++ : > $output
++ set x $save_libobjs
++ shift
++ firstobj=
++ if test "$compiler_needs_object" = yes; then
++ firstobj="$1 "
++ shift
++ fi
++ for obj
++ do
++ $ECHO "$obj" >> $output
++ done
++ delfiles="$delfiles $output"
++ output=$firstobj\"$file_list_spec$output\"
++ else
++ if test -n "$save_libobjs"; then
++ func_verbose "creating reloadable object files..."
++ output=$output_objdir/$output_la-${k}.$objext
++ eval test_cmds=\"$reload_cmds\"
++ func_len " $test_cmds"
++ len0=$func_len_result
++ len=$len0
++
++ # Loop over the list of objects to be linked.
++ for obj in $save_libobjs
++ do
++ func_len " $obj"
++ func_arith $len + $func_len_result
++ len=$func_arith_result
++ if test "X$objlist" = X ||
++ test "$len" -lt "$max_cmd_len"; then
++ func_append objlist " $obj"
++ else
++ # The command $test_cmds is almost too long, add a
++ # command to the queue.
++ if test "$k" -eq 1 ; then
++ # The first file doesn't have a previous command to add.
++ eval concat_cmds=\"$reload_cmds $objlist $last_robj\"
++ else
++ # All subsequent reloadable object files will link in
++ # the last one created.
++ eval concat_cmds=\"\$concat_cmds~$reload_cmds $objlist $last_robj~\$RM $last_robj\"
++ fi
++ last_robj=$output_objdir/$output_la-${k}.$objext
++ func_arith $k + 1
++ k=$func_arith_result
++ output=$output_objdir/$output_la-${k}.$objext
++ objlist=$obj
++ func_len " $last_robj"
++ func_arith $len0 + $func_len_result
++ len=$func_arith_result
++ fi
++ done
++ # Handle the remaining objects by creating one last
++ # reloadable object file. All subsequent reloadable object
++ # files will link in the last one created.
++ test -z "$concat_cmds" || concat_cmds=$concat_cmds~
++ eval concat_cmds=\"\${concat_cmds}$reload_cmds $objlist $last_robj\"
++ if test -n "$last_robj"; then
++ eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\"
++ fi
++ delfiles="$delfiles $output"
++
++ else
++ output=
++ fi
++
++ if ${skipped_export-false}; then
++ func_verbose "generating symbol list for \`$libname.la'"
++ export_symbols="$output_objdir/$libname.exp"
++ $opt_dry_run || $RM $export_symbols
++ libobjs=$output
++ # Append the command to create the export file.
++ test -z "$concat_cmds" || concat_cmds=$concat_cmds~
++ eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\"
++ if test -n "$last_robj"; then
++ eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\"
++ fi
++ fi
++
++ test -n "$save_libobjs" &&
++ func_verbose "creating a temporary reloadable object file: $output"
++
++ # Loop through the commands generated above and execute them.
++ save_ifs="$IFS"; IFS='~'
++ for cmd in $concat_cmds; do
++ IFS="$save_ifs"
++ $opt_silent || {
++ func_quote_for_expand "$cmd"
++ eval "func_echo $func_quote_for_expand_result"
++ }
++ $opt_dry_run || eval "$cmd" || {
++ lt_exit=$?
++
++ # Restore the uninstalled library and exit
++ if test "$mode" = relink; then
++ ( cd "$output_objdir" && \
++ $RM "${realname}T" && \
++ $MV "${realname}U" "$realname" )
++ fi
++
++ exit $lt_exit
++ }
++ done
++ IFS="$save_ifs"
++
++ if test -n "$export_symbols_regex" && ${skipped_export-false}; then
++ func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"'
++ func_show_eval '$MV "${export_symbols}T" "$export_symbols"'
++ fi
++ fi
++
++ if ${skipped_export-false}; then
++ if test -n "$export_symbols" && test -n "$include_expsyms"; then
++ tmp_export_symbols="$export_symbols"
++ test -n "$orig_export_symbols" && tmp_export_symbols="$orig_export_symbols"
++ $opt_dry_run || eval '$ECHO "X$include_expsyms" | $Xsed | $SP2NL >> "$tmp_export_symbols"'
++ fi
++
++ if test -n "$orig_export_symbols"; then
++ # The given exports_symbols file has to be filtered, so filter it.
++ func_verbose "filter symbol list for \`$libname.la' to tag DATA exports"
++ # FIXME: $output_objdir/$libname.filter potentially contains lots of
++ # 's' commands which not all seds can handle. GNU sed should be fine
++ # though. Also, the filter scales superlinearly with the number of
++ # global variables. join(1) would be nice here, but unfortunately
++ # isn't a blessed tool.
++ $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter
++ delfiles="$delfiles $export_symbols $output_objdir/$libname.filter"
++ export_symbols=$output_objdir/$libname.def
++ $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols
++ fi
++ fi
++
++ libobjs=$output
++ # Restore the value of output.
++ output=$save_output
++
++ if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then
++ eval libobjs=\"\$libobjs $whole_archive_flag_spec\"
++ test "X$libobjs" = "X " && libobjs=
++ fi
++ # Expand the library linking commands again to reset the
++ # value of $libobjs for piecewise linking.
++
++ # Do each of the archive commands.
++ if test "$module" = yes && test -n "$module_cmds" ; then
++ if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then
++ cmds=$module_expsym_cmds
++ else
++ cmds=$module_cmds
++ fi
++ else
++ if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then
++ cmds=$archive_expsym_cmds
++ else
++ cmds=$archive_cmds
++ fi
++ fi
++ fi
++
++ if test -n "$delfiles"; then
++ # Append the command to remove temporary files to $cmds.
++ eval cmds=\"\$cmds~\$RM $delfiles\"
++ fi
++
++ # Add any objects from preloaded convenience libraries
++ if test -n "$dlprefiles"; then
++ gentop="$output_objdir/${outputname}x"
++ generated="$generated $gentop"
++
++ func_extract_archives $gentop $dlprefiles
++ libobjs="$libobjs $func_extract_archives_result"
++ test "X$libobjs" = "X " && libobjs=
++ fi
++
++ save_ifs="$IFS"; IFS='~'
++ for cmd in $cmds; do
++ IFS="$save_ifs"
++ eval cmd=\"$cmd\"
++ $opt_silent || {
++ func_quote_for_expand "$cmd"
++ eval "func_echo $func_quote_for_expand_result"
++ }
++ $opt_dry_run || eval "$cmd" || {
++ lt_exit=$?
++
++ # Restore the uninstalled library and exit
++ if test "$mode" = relink; then
++ ( cd "$output_objdir" && \
++ $RM "${realname}T" && \
++ $MV "${realname}U" "$realname" )
++ fi
++
++ exit $lt_exit
++ }
++ done
++ IFS="$save_ifs"
++
++ # Restore the uninstalled library and exit
++ if test "$mode" = relink; then
++ $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $?
++
++ if test -n "$convenience"; then
++ if test -z "$whole_archive_flag_spec"; then
++ func_show_eval '${RM}r "$gentop"'
++ fi
++ fi
++
++ exit $EXIT_SUCCESS
++ fi
++
++ # Create links to the real library.
++ for linkname in $linknames; do
++ if test "$realname" != "$linkname"; then
++ func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?'
++ fi
++ done
++
++ # If -module or -export-dynamic was specified, set the dlname.
++ if test "$module" = yes || test "$export_dynamic" = yes; then
++ # On all known operating systems, these are identical.
++ dlname="$soname"
++ fi
++ fi
++ ;;
++
++ obj)
++ if test -n "$dlfiles$dlprefiles" || test "$dlself" != no; then
++ func_warning "\`-dlopen' is ignored for objects"
++ fi
++
++ case " $deplibs" in
++ *\ -l* | *\ -L*)
++ func_warning "\`-l' and \`-L' are ignored for objects" ;;
++ esac
++
++ test -n "$rpath" && \
++ func_warning "\`-rpath' is ignored for objects"
++
++ test -n "$xrpath" && \
++ func_warning "\`-R' is ignored for objects"
++
++ test -n "$vinfo" && \
++ func_warning "\`-version-info' is ignored for objects"
++
++ test -n "$release" && \
++ func_warning "\`-release' is ignored for objects"
++
++ case $output in
++ *.lo)
++ test -n "$objs$old_deplibs" && \
++ func_fatal_error "cannot build library object \`$output' from non-libtool objects"
++
++ libobj=$output
++ func_lo2o "$libobj"
++ obj=$func_lo2o_result
++ ;;
++ *)
++ libobj=
++ obj="$output"
++ ;;
++ esac
++
++ # Delete the old objects.
++ $opt_dry_run || $RM $obj $libobj
++
++ # Objects from convenience libraries. This assumes
++ # single-version convenience libraries. Whenever we create
++ # different ones for PIC/non-PIC, this we'll have to duplicate
++ # the extraction.
++ reload_conv_objs=
++ gentop=
++ # reload_cmds runs $LD directly, so let us get rid of
++ # -Wl from whole_archive_flag_spec and hope we can get by with
++ # turning comma into space..
++ wl=
++
++ if test -n "$convenience"; then
++ if test -n "$whole_archive_flag_spec"; then
++ eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\"
++ reload_conv_objs=$reload_objs\ `$ECHO "X$tmp_whole_archive_flags" | $Xsed -e 's|,| |g'`
++ else
++ gentop="$output_objdir/${obj}x"
++ generated="$generated $gentop"
++
++ func_extract_archives $gentop $convenience
++ reload_conv_objs="$reload_objs $func_extract_archives_result"
++ fi
++ fi
++
++ # Create the old-style object.
++ reload_objs="$objs$old_deplibs "`$ECHO "X$libobjs" | $SP2NL | $Xsed -e '/\.'${libext}$'/d' -e '/\.lib$/d' -e "$lo2o" | $NL2SP`" $reload_conv_objs" ### testsuite: skip nested quoting test
++
++ output="$obj"
++ func_execute_cmds "$reload_cmds" 'exit $?'
++
++ # Exit if we aren't doing a library object file.
++ if test -z "$libobj"; then
++ if test -n "$gentop"; then
++ func_show_eval '${RM}r "$gentop"'
++ fi
++
++ exit $EXIT_SUCCESS
++ fi
++
++ if test "$build_libtool_libs" != yes; then
++ if test -n "$gentop"; then
++ func_show_eval '${RM}r "$gentop"'
++ fi
++
++ # Create an invalid libtool object if no PIC, so that we don't
++ # accidentally link it into a program.
++ # $show "echo timestamp > $libobj"
++ # $opt_dry_run || eval "echo timestamp > $libobj" || exit $?
++ exit $EXIT_SUCCESS
++ fi
++
++ if test -n "$pic_flag" || test "$pic_mode" != default; then
++ # Only do commands if we really have different PIC objects.
++ reload_objs="$libobjs $reload_conv_objs"
++ output="$libobj"
++ func_execute_cmds "$reload_cmds" 'exit $?'
++ fi
++
++ if test -n "$gentop"; then
++ func_show_eval '${RM}r "$gentop"'
++ fi
++
++ exit $EXIT_SUCCESS
++ ;;
++
++ prog)
++ case $host in
++ *cygwin*) func_stripname '' '.exe' "$output"
++ output=$func_stripname_result.exe;;
++ esac
++ test -n "$vinfo" && \
++ func_warning "\`-version-info' is ignored for programs"
++
++ test -n "$release" && \
++ func_warning "\`-release' is ignored for programs"
++
++ test "$preload" = yes \
++ && test "$dlopen_support" = unknown \
++ && test "$dlopen_self" = unknown \
++ && test "$dlopen_self_static" = unknown && \
++ func_warning "\`LT_INIT([dlopen])' not used. Assuming no dlopen support."
++
++ case $host in
++ *-*-rhapsody* | *-*-darwin1.[012])
++ # On Rhapsody replace the C library is the System framework
++ compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
++ finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's/ -lc / System.ltframework /'`
++ ;;
++ esac
++
++ case $host in
++ *-*-darwin*)
++ # Don't allow lazy linking, it breaks C++ global constructors
++ # But is supposedly fixed on 10.4 or later (yay!).
++ if test "$tagname" = CXX ; then
++ case ${MACOSX_DEPLOYMENT_TARGET-10.0} in
++ 10.[0123])
++ compile_command="$compile_command ${wl}-bind_at_load"
++ finalize_command="$finalize_command ${wl}-bind_at_load"
++ ;;
++ esac
++ fi
++ # Time to change all our "foo.ltframework" stuff back to "-framework foo"
++ compile_deplibs=`$ECHO "X $compile_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
++ finalize_deplibs=`$ECHO "X $finalize_deplibs" | $Xsed -e 's% \([^ $]*\).ltframework% -framework \1%g'`
++ ;;
++ esac
++
++
++ # move library search paths that coincide with paths to not yet
++ # installed libraries to the beginning of the library search list
++ new_libs=
++ for path in $notinst_path; do
++ case " $new_libs " in
++ *" -L$path/$objdir "*) ;;
++ *)
++ case " $compile_deplibs " in
++ *" -L$path/$objdir "*)
++ new_libs="$new_libs -L$path/$objdir" ;;
++ esac
++ ;;
++ esac
++ done
++ for deplib in $compile_deplibs; do
++ case $deplib in
++ -L*)
++ case " $new_libs " in
++ *" $deplib "*) ;;
++ *) new_libs="$new_libs $deplib" ;;
++ esac
++ ;;
++ *) new_libs="$new_libs $deplib" ;;
++ esac
++ done
++ compile_deplibs="$new_libs"
++
++
++ compile_command="$compile_command $compile_deplibs"
++ finalize_command="$finalize_command $finalize_deplibs"
++
++ if test -n "$rpath$xrpath"; then
++ # If the user specified any rpath flags, then add them.
++ for libdir in $rpath $xrpath; do
++ # This is the magic to use -rpath.
++ case "$finalize_rpath " in
++ *" $libdir "*) ;;
++ *) finalize_rpath="$finalize_rpath $libdir" ;;
++ esac
++ done
++ fi
++
++ # Now hardcode the library paths
++ rpath=
++ hardcode_libdirs=
++ for libdir in $compile_rpath $finalize_rpath; do
++ if test -n "$hardcode_libdir_flag_spec"; then
++ if test -n "$hardcode_libdir_separator"; then
++ if test -z "$hardcode_libdirs"; then
++ hardcode_libdirs="$libdir"
++ else
++ # Just accumulate the unique libdirs.
++ case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
++ *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
++ ;;
++ *)
++ hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
++ ;;
++ esac
++ fi
++ else
++ eval flag=\"$hardcode_libdir_flag_spec\"
++ rpath="$rpath $flag"
++ fi
++ elif test -n "$runpath_var"; then
++ case "$perm_rpath " in
++ *" $libdir "*) ;;
++ *) perm_rpath="$perm_rpath $libdir" ;;
++ esac
++ fi
++ case $host in
++ *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*)
++ testbindir=`${ECHO} "$libdir" | ${SED} -e 's*/lib$*/bin*'`
++ case :$dllsearchpath: in
++ *":$libdir:"*) ;;
++ ::) dllsearchpath=$libdir;;
++ *) dllsearchpath="$dllsearchpath:$libdir";;
++ esac
++ case :$dllsearchpath: in
++ *":$testbindir:"*) ;;
++ ::) dllsearchpath=$testbindir;;
++ *) dllsearchpath="$dllsearchpath:$testbindir";;
++ esac
++ ;;
++ esac
++ done
++ # Substitute the hardcoded libdirs into the rpath.
++ if test -n "$hardcode_libdir_separator" &&
++ test -n "$hardcode_libdirs"; then
++ libdir="$hardcode_libdirs"
++ eval rpath=\" $hardcode_libdir_flag_spec\"
++ fi
++ compile_rpath="$rpath"
++
++ rpath=
++ hardcode_libdirs=
++ for libdir in $finalize_rpath; do
++ if test -n "$hardcode_libdir_flag_spec"; then
++ if test -n "$hardcode_libdir_separator"; then
++ if test -z "$hardcode_libdirs"; then
++ hardcode_libdirs="$libdir"
++ else
++ # Just accumulate the unique libdirs.
++ case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in
++ *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*)
++ ;;
++ *)
++ hardcode_libdirs="$hardcode_libdirs$hardcode_libdir_separator$libdir"
++ ;;
++ esac
++ fi
++ else
++ eval flag=\"$hardcode_libdir_flag_spec\"
++ rpath="$rpath $flag"
++ fi
++ elif test -n "$runpath_var"; then
++ case "$finalize_perm_rpath " in
++ *" $libdir "*) ;;
++ *) finalize_perm_rpath="$finalize_perm_rpath $libdir" ;;
++ esac
++ fi
++ done
++ # Substitute the hardcoded libdirs into the rpath.
++ if test -n "$hardcode_libdir_separator" &&
++ test -n "$hardcode_libdirs"; then
++ libdir="$hardcode_libdirs"
++ eval rpath=\" $hardcode_libdir_flag_spec\"
++ fi
++ finalize_rpath="$rpath"
++
++ if test -n "$libobjs" && test "$build_old_libs" = yes; then
++ # Transform all the library objects into standard objects.
++ compile_command=`$ECHO "X$compile_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
++ finalize_command=`$ECHO "X$finalize_command" | $SP2NL | $Xsed -e "$lo2o" | $NL2SP`
++ fi
++
++ func_generate_dlsyms "$outputname" "@PROGRAM@" "no"
++
++ # template prelinking step
++ if test -n "$prelink_cmds"; then
++ func_execute_cmds "$prelink_cmds" 'exit $?'
++ fi
++
++ wrappers_required=yes
++ case $host in
++ *cygwin* | *mingw* )
++ if test "$build_libtool_libs" != yes; then
++ wrappers_required=no
++ fi
++ ;;
++ *cegcc)
++ # Disable wrappers for cegcc, we are cross compiling anyway.
++ wrappers_required=no
++ ;;
++ *)
++ if test "$need_relink" = no || test "$build_libtool_libs" != yes; then
++ wrappers_required=no
++ fi
++ ;;
++ esac
++ if test "$wrappers_required" = no; then
++ # Replace the output file specification.
++ compile_command=`$ECHO "X$compile_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
++ link_command="$compile_command$compile_rpath"
++
++ # We have no uninstalled library dependencies, so finalize right now.
++ exit_status=0
++ func_show_eval "$link_command" 'exit_status=$?'
++
++ # Delete the generated files.
++ if test -f "$output_objdir/${outputname}S.${objext}"; then
++ func_show_eval '$RM "$output_objdir/${outputname}S.${objext}"'
++ fi
++
++ exit $exit_status
++ fi
++
++ if test -n "$compile_shlibpath$finalize_shlibpath"; then
++ compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command"
++ fi
++ if test -n "$finalize_shlibpath"; then
++ finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command"
++ fi
++
++ compile_var=
++ finalize_var=
++ if test -n "$runpath_var"; then
++ if test -n "$perm_rpath"; then
++ # We should set the runpath_var.
++ rpath=
++ for dir in $perm_rpath; do
++ rpath="$rpath$dir:"
++ done
++ compile_var="$runpath_var=\"$rpath\$$runpath_var\" "
++ fi
++ if test -n "$finalize_perm_rpath"; then
++ # We should set the runpath_var.
++ rpath=
++ for dir in $finalize_perm_rpath; do
++ rpath="$rpath$dir:"
++ done
++ finalize_var="$runpath_var=\"$rpath\$$runpath_var\" "
++ fi
++ fi
++
++ if test "$no_install" = yes; then
++ # We don't need to create a wrapper script.
++ link_command="$compile_var$compile_command$compile_rpath"
++ # Replace the output file specification.
++ link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output"'%g'`
++ # Delete the old output file.
++ $opt_dry_run || $RM $output
++ # Link the executable and exit
++ func_show_eval "$link_command" 'exit $?'
++ exit $EXIT_SUCCESS
++ fi
++
++ if test "$hardcode_action" = relink; then
++ # Fast installation is not supported
++ link_command="$compile_var$compile_command$compile_rpath"
++ relink_command="$finalize_var$finalize_command$finalize_rpath"
++
++ func_warning "this platform does not like uninstalled shared libraries"
++ func_warning "\`$output' will be relinked during installation"
++ else
++ if test "$fast_install" != no; then
++ link_command="$finalize_var$compile_command$finalize_rpath"
++ if test "$fast_install" = yes; then
++ relink_command=`$ECHO "X$compile_var$compile_command$compile_rpath" | $Xsed -e 's%@OUTPUT@%\$progdir/\$file%g'`
++ else
++ # fast_install is set to needless
++ relink_command=
++ fi
++ else
++ link_command="$compile_var$compile_command$compile_rpath"
++ relink_command="$finalize_var$finalize_command$finalize_rpath"
++ fi
++ fi
++
++ # Replace the output file specification.
++ link_command=`$ECHO "X$link_command" | $Xsed -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'`
++
++ # Delete the old output files.
++ $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname
++
++ func_show_eval "$link_command" 'exit $?'
++
++ # Now create the wrapper script.
++ func_verbose "creating $output"
++
++ # Quote the relink command for shipping.
++ if test -n "$relink_command"; then
++ # Preserve any variables that may affect compiler behavior
++ for var in $variables_saved_for_relink; do
++ if eval test -z \"\${$var+set}\"; then
++ relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
++ elif eval var_value=\$$var; test -z "$var_value"; then
++ relink_command="$var=; export $var; $relink_command"
++ else
++ func_quote_for_eval "$var_value"
++ relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
++ fi
++ done
++ relink_command="(cd `pwd`; $relink_command)"
++ relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"`
++ fi
++
++ # Quote $ECHO for shipping.
++ if test "X$ECHO" = "X$SHELL $progpath --fallback-echo"; then
++ case $progpath in
++ [\\/]* | [A-Za-z]:[\\/]*) qecho="$SHELL $progpath --fallback-echo";;
++ *) qecho="$SHELL `pwd`/$progpath --fallback-echo";;
++ esac
++ qecho=`$ECHO "X$qecho" | $Xsed -e "$sed_quote_subst"`
++ else
++ qecho=`$ECHO "X$ECHO" | $Xsed -e "$sed_quote_subst"`
++ fi
++
++ # Only actually do things if not in dry run mode.
++ $opt_dry_run || {
++ # win32 will think the script is a binary if it has
++ # a .exe suffix, so we strip it off here.
++ case $output in
++ *.exe) func_stripname '' '.exe' "$output"
++ output=$func_stripname_result ;;
++ esac
++ # test for cygwin because mv fails w/o .exe extensions
++ case $host in
++ *cygwin*)
++ exeext=.exe
++ func_stripname '' '.exe' "$outputname"
++ outputname=$func_stripname_result ;;
++ *) exeext= ;;
++ esac
++ case $host in
++ *cygwin* | *mingw* )
++ func_dirname_and_basename "$output" "" "."
++ output_name=$func_basename_result
++ output_path=$func_dirname_result
++ cwrappersource="$output_path/$objdir/lt-$output_name.c"
++ cwrapper="$output_path/$output_name.exe"
++ $RM $cwrappersource $cwrapper
++ trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15
++
++ func_emit_cwrapperexe_src > $cwrappersource
++
++ # The wrapper executable is built using the $host compiler,
++ # because it contains $host paths and files. If cross-
++ # compiling, it, like the target executable, must be
++ # executed on the $host or under an emulation environment.
++ $opt_dry_run || {
++ $LTCC $LTCFLAGS -o $cwrapper $cwrappersource
++ $STRIP $cwrapper
++ }
++
++ # Now, create the wrapper script for func_source use:
++ func_ltwrapper_scriptname $cwrapper
++ $RM $func_ltwrapper_scriptname_result
++ trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15
++ $opt_dry_run || {
++ # note: this script will not be executed, so do not chmod.
++ if test "x$build" = "x$host" ; then
++ $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result
++ else
++ func_emit_wrapper no > $func_ltwrapper_scriptname_result
++ fi
++ }
++ ;;
++ * )
++ $RM $output
++ trap "$RM $output; exit $EXIT_FAILURE" 1 2 15
++
++ func_emit_wrapper no > $output
++ chmod +x $output
++ ;;
++ esac
++ }
++ exit $EXIT_SUCCESS
++ ;;
++ esac
++
++ # See if we need to build an old-fashioned archive.
++ for oldlib in $oldlibs; do
++
++ if test "$build_libtool_libs" = convenience; then
++ oldobjs="$libobjs_save $symfileobj"
++ addlibs="$convenience"
++ build_libtool_libs=no
++ else
++ if test "$build_libtool_libs" = module; then
++ oldobjs="$libobjs_save"
++ build_libtool_libs=no
++ else
++ oldobjs="$old_deplibs $non_pic_objects"
++ if test "$preload" = yes && test -f "$symfileobj"; then
++ oldobjs="$oldobjs $symfileobj"
++ fi
++ fi
++ addlibs="$old_convenience"
++ fi
++
++ if test -n "$addlibs"; then
++ gentop="$output_objdir/${outputname}x"
++ generated="$generated $gentop"
++
++ func_extract_archives $gentop $addlibs
++ oldobjs="$oldobjs $func_extract_archives_result"
++ fi
++
++ # Do each command in the archive commands.
++ if test -n "$old_archive_from_new_cmds" && test "$build_libtool_libs" = yes; then
++ cmds=$old_archive_from_new_cmds
++ else
++
++ # Add any objects from preloaded convenience libraries
++ if test -n "$dlprefiles"; then
++ gentop="$output_objdir/${outputname}x"
++ generated="$generated $gentop"
++
++ func_extract_archives $gentop $dlprefiles
++ oldobjs="$oldobjs $func_extract_archives_result"
++ fi
++
++ # POSIX demands no paths to be encoded in archives. We have
++ # to avoid creating archives with duplicate basenames if we
++ # might have to extract them afterwards, e.g., when creating a
++ # static archive out of a convenience library, or when linking
++ # the entirety of a libtool archive into another (currently
++ # not supported by libtool).
++ if (for obj in $oldobjs
++ do
++ func_basename "$obj"
++ $ECHO "$func_basename_result"
++ done | sort | sort -uc >/dev/null 2>&1); then
++ :
++ else
++ $ECHO "copying selected object files to avoid basename conflicts..."
++ gentop="$output_objdir/${outputname}x"
++ generated="$generated $gentop"
++ func_mkdir_p "$gentop"
++ save_oldobjs=$oldobjs
++ oldobjs=
++ counter=1
++ for obj in $save_oldobjs
++ do
++ func_basename "$obj"
++ objbase="$func_basename_result"
++ case " $oldobjs " in
++ " ") oldobjs=$obj ;;
++ *[\ /]"$objbase "*)
++ while :; do
++ # Make sure we don't pick an alternate name that also
++ # overlaps.
++ newobj=lt$counter-$objbase
++ func_arith $counter + 1
++ counter=$func_arith_result
++ case " $oldobjs " in
++ *[\ /]"$newobj "*) ;;
++ *) if test ! -f "$gentop/$newobj"; then break; fi ;;
++ esac
++ done
++ func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj"
++ oldobjs="$oldobjs $gentop/$newobj"
++ ;;
++ *) oldobjs="$oldobjs $obj" ;;
++ esac
++ done
++ fi
++ eval cmds=\"$old_archive_cmds\"
++
++ func_len " $cmds"
++ len=$func_len_result
++ if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then
++ cmds=$old_archive_cmds
++ else
++ # the command line is too long to link in one step, link in parts
++ func_verbose "using piecewise archive linking..."
++ save_RANLIB=$RANLIB
++ RANLIB=:
++ objlist=
++ concat_cmds=
++ save_oldobjs=$oldobjs
++ oldobjs=
++ # Is there a better way of finding the last object in the list?
++ for obj in $save_oldobjs
++ do
++ last_oldobj=$obj
++ done
++ eval test_cmds=\"$old_archive_cmds\"
++ func_len " $test_cmds"
++ len0=$func_len_result
++ len=$len0
++ for obj in $save_oldobjs
++ do
++ func_len " $obj"
++ func_arith $len + $func_len_result
++ len=$func_arith_result
++ func_append objlist " $obj"
++ if test "$len" -lt "$max_cmd_len"; then
++ :
++ else
++ # the above command should be used before it gets too long
++ oldobjs=$objlist
++ if test "$obj" = "$last_oldobj" ; then
++ RANLIB=$save_RANLIB
++ fi
++ test -z "$concat_cmds" || concat_cmds=$concat_cmds~
++ eval concat_cmds=\"\${concat_cmds}$old_archive_cmds\"
++ objlist=
++ len=$len0
++ fi
++ done
++ RANLIB=$save_RANLIB
++ oldobjs=$objlist
++ if test "X$oldobjs" = "X" ; then
++ eval cmds=\"\$concat_cmds\"
++ else
++ eval cmds=\"\$concat_cmds~\$old_archive_cmds\"
++ fi
++ fi
++ fi
++ func_execute_cmds "$cmds" 'exit $?'
++ done
++
++ test -n "$generated" && \
++ func_show_eval "${RM}r$generated"
++
++ # Now create the libtool archive.
++ case $output in
++ *.la)
++ old_library=
++ test "$build_old_libs" = yes && old_library="$libname.$libext"
++ func_verbose "creating $output"
++
++ # Preserve any variables that may affect compiler behavior
++ for var in $variables_saved_for_relink; do
++ if eval test -z \"\${$var+set}\"; then
++ relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command"
++ elif eval var_value=\$$var; test -z "$var_value"; then
++ relink_command="$var=; export $var; $relink_command"
++ else
++ func_quote_for_eval "$var_value"
++ relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command"
++ fi
++ done
++ # Quote the link command for shipping.
++ relink_command="(cd `pwd`; $SHELL $progpath $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)"
++ relink_command=`$ECHO "X$relink_command" | $Xsed -e "$sed_quote_subst"`
++ if test "$hardcode_automatic" = yes ; then
++ relink_command=
++ fi
++
++ # Only create the output if not a dry run.
++ $opt_dry_run || {
++ for installed in no yes; do
++ if test "$installed" = yes; then
++ if test -z "$install_libdir"; then
++ break
++ fi
++ output="$output_objdir/$outputname"i
++ # Replace all uninstalled libtool libraries with the installed ones
++ newdependency_libs=
++ for deplib in $dependency_libs; do
++ case $deplib in
++ *.la)
++ func_basename "$deplib"
++ name="$func_basename_result"
++ eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $deplib`
++ test -z "$libdir" && \
++ func_fatal_error "\`$deplib' is not a valid libtool archive"
++ newdependency_libs="$newdependency_libs $libdir/$name"
++ ;;
++ *) newdependency_libs="$newdependency_libs $deplib" ;;
++ esac
++ done
++ dependency_libs="$newdependency_libs"
++ newdlfiles=
++
++ for lib in $dlfiles; do
++ case $lib in
++ *.la)
++ func_basename "$lib"
++ name="$func_basename_result"
++ eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
++ test -z "$libdir" && \
++ func_fatal_error "\`$lib' is not a valid libtool archive"
++ newdlfiles="$newdlfiles $libdir/$name"
++ ;;
++ *) newdlfiles="$newdlfiles $lib" ;;
++ esac
++ done
++ dlfiles="$newdlfiles"
++ newdlprefiles=
++ for lib in $dlprefiles; do
++ case $lib in
++ *.la)
++ # Only pass preopened files to the pseudo-archive (for
++ # eventual linking with the app. that links it) if we
++ # didn't already link the preopened objects directly into
++ # the library:
++ func_basename "$lib"
++ name="$func_basename_result"
++ eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $lib`
++ test -z "$libdir" && \
++ func_fatal_error "\`$lib' is not a valid libtool archive"
++ newdlprefiles="$newdlprefiles $libdir/$name"
++ ;;
++ esac
++ done
++ dlprefiles="$newdlprefiles"
++ else
++ newdlfiles=
++ for lib in $dlfiles; do
++ case $lib in
++ [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
++ *) abs=`pwd`"/$lib" ;;
++ esac
++ newdlfiles="$newdlfiles $abs"
++ done
++ dlfiles="$newdlfiles"
++ newdlprefiles=
++ for lib in $dlprefiles; do
++ case $lib in
++ [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;;
++ *) abs=`pwd`"/$lib" ;;
++ esac
++ newdlprefiles="$newdlprefiles $abs"
++ done
++ dlprefiles="$newdlprefiles"
++ fi
++ $RM $output
++ # place dlname in correct position for cygwin
++ tdlname=$dlname
++ case $host,$output,$installed,$module,$dlname in
++ *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) tdlname=../bin/$dlname ;;
++ esac
++ $ECHO > $output "\
++# $outputname - a libtool library file
++# Generated by $PROGRAM (GNU $PACKAGE$TIMESTAMP) $VERSION
++#
++# Please DO NOT delete this file!
++# It is necessary for linking the library.
++
++# The name that we can dlopen(3).
++dlname='$tdlname'
++
++# Names of this library.
++library_names='$library_names'
++
++# The name of the static archive.
++old_library='$old_library'
++
++# Linker flags that can not go in dependency_libs.
++inherited_linker_flags='$new_inherited_linker_flags'
++
++# Libraries that this one depends upon.
++dependency_libs='$dependency_libs'
++
++# Names of additional weak libraries provided by this library
++weak_library_names='$weak_libs'
++
++# Version information for $libname.
++current=$current
++age=$age
++revision=$revision
++
++# Is this an already installed library?
++installed=$installed
++
++# Should we warn about portability when linking against -modules?
++shouldnotlink=$module
++
++# Files to dlopen/dlpreopen
++dlopen='$dlfiles'
++dlpreopen='$dlprefiles'
++
++# Directory that this library needs to be installed in:
++libdir='$install_libdir'"
++ if test "$installed" = no && test "$need_relink" = yes; then
++ $ECHO >> $output "\
++relink_command=\"$relink_command\""
++ fi
++ done
++ }
++
++ # Do a symbolic link so that the libtool archive can be found in
++ # LD_LIBRARY_PATH before the program is installed.
++ func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?'
++ ;;
++ esac
++ exit $EXIT_SUCCESS
++}
++
++{ test "$mode" = link || test "$mode" = relink; } &&
++ func_mode_link ${1+"$@"}
++
++
++# func_mode_uninstall arg...
++func_mode_uninstall ()
++{
++ $opt_debug
++ RM="$nonopt"
++ files=
++ rmforce=
++ exit_status=0
++
++ # This variable tells wrapper scripts just to set variables rather
++ # than running their programs.
++ libtool_install_magic="$magic"
++
++ for arg
++ do
++ case $arg in
++ -f) RM="$RM $arg"; rmforce=yes ;;
++ -*) RM="$RM $arg" ;;
++ *) files="$files $arg" ;;
++ esac
++ done
++
++ test -z "$RM" && \
++ func_fatal_help "you must specify an RM program"
++
++ rmdirs=
++
++ origobjdir="$objdir"
++ for file in $files; do
++ func_dirname "$file" "" "."
++ dir="$func_dirname_result"
++ if test "X$dir" = X.; then
++ objdir="$origobjdir"
++ else
++ objdir="$dir/$origobjdir"
++ fi
++ func_basename "$file"
++ name="$func_basename_result"
++ test "$mode" = uninstall && objdir="$dir"
++
++ # Remember objdir for removal later, being careful to avoid duplicates
++ if test "$mode" = clean; then
++ case " $rmdirs " in
++ *" $objdir "*) ;;
++ *) rmdirs="$rmdirs $objdir" ;;
++ esac
++ fi
++
++ # Don't error if the file doesn't exist and rm -f was used.
++ if { test -L "$file"; } >/dev/null 2>&1 ||
++ { test -h "$file"; } >/dev/null 2>&1 ||
++ test -f "$file"; then
++ :
++ elif test -d "$file"; then
++ exit_status=1
++ continue
++ elif test "$rmforce" = yes; then
++ continue
++ fi
++
++ rmfiles="$file"
++
++ case $name in
++ *.la)
++ # Possibly a libtool archive, so verify it.
++ if func_lalib_p "$file"; then
++ func_source $dir/$name
++
++ # Delete the libtool libraries and symlinks.
++ for n in $library_names; do
++ rmfiles="$rmfiles $objdir/$n"
++ done
++ test -n "$old_library" && rmfiles="$rmfiles $objdir/$old_library"
++
++ case "$mode" in
++ clean)
++ case " $library_names " in
++ # " " in the beginning catches empty $dlname
++ *" $dlname "*) ;;
++ *) rmfiles="$rmfiles $objdir/$dlname" ;;
++ esac
++ test -n "$libdir" && rmfiles="$rmfiles $objdir/$name $objdir/${name}i"
++ ;;
++ uninstall)
++ if test -n "$library_names"; then
++ # Do each command in the postuninstall commands.
++ func_execute_cmds "$postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
++ fi
++
++ if test -n "$old_library"; then
++ # Do each command in the old_postuninstall commands.
++ func_execute_cmds "$old_postuninstall_cmds" 'test "$rmforce" = yes || exit_status=1'
++ fi
++ # FIXME: should reinstall the best remaining shared library.
++ ;;
++ esac
++ fi
++ ;;
++
++ *.lo)
++ # Possibly a libtool object, so verify it.
++ if func_lalib_p "$file"; then
++
++ # Read the .lo file
++ func_source $dir/$name
++
++ # Add PIC object to the list of files to remove.
++ if test -n "$pic_object" &&
++ test "$pic_object" != none; then
++ rmfiles="$rmfiles $dir/$pic_object"
++ fi
++
++ # Add non-PIC object to the list of files to remove.
++ if test -n "$non_pic_object" &&
++ test "$non_pic_object" != none; then
++ rmfiles="$rmfiles $dir/$non_pic_object"
++ fi
++ fi
++ ;;
++
++ *)
++ if test "$mode" = clean ; then
++ noexename=$name
++ case $file in
++ *.exe)
++ func_stripname '' '.exe' "$file"
++ file=$func_stripname_result
++ func_stripname '' '.exe' "$name"
++ noexename=$func_stripname_result
++ # $file with .exe has already been added to rmfiles,
++ # add $file without .exe
++ rmfiles="$rmfiles $file"
++ ;;
++ esac
++ # Do a test to see if this is a libtool program.
++ if func_ltwrapper_p "$file"; then
++ if func_ltwrapper_executable_p "$file"; then
++ func_ltwrapper_scriptname "$file"
++ relink_command=
++ func_source $func_ltwrapper_scriptname_result
++ rmfiles="$rmfiles $func_ltwrapper_scriptname_result"
++ else
++ relink_command=
++ func_source $dir/$noexename
++ fi
++
++ # note $name still contains .exe if it was in $file originally
++ # as does the version of $file that was added into $rmfiles
++ rmfiles="$rmfiles $objdir/$name $objdir/${name}S.${objext}"
++ if test "$fast_install" = yes && test -n "$relink_command"; then
++ rmfiles="$rmfiles $objdir/lt-$name"
++ fi
++ if test "X$noexename" != "X$name" ; then
++ rmfiles="$rmfiles $objdir/lt-${noexename}.c"
++ fi
++ fi
++ fi
++ ;;
++ esac
++ func_show_eval "$RM $rmfiles" 'exit_status=1'
++ done
++ objdir="$origobjdir"
++
++ # Try to remove the ${objdir}s in the directories where we deleted files
++ for dir in $rmdirs; do
++ if test -d "$dir"; then
++ func_show_eval "rmdir $dir >/dev/null 2>&1"
++ fi
++ done
++
++ exit $exit_status
++}
++
++{ test "$mode" = uninstall || test "$mode" = clean; } &&
++ func_mode_uninstall ${1+"$@"}
++
++test -z "$mode" && {
++ help="$generic_help"
++ func_fatal_help "you must specify a MODE"
++}
++
++test -z "$exec_cmd" && \
++ func_fatal_help "invalid operation mode \`$mode'"
++
++if test -n "$exec_cmd"; then
++ eval exec "$exec_cmd"
++ exit $EXIT_FAILURE
++fi
++
++exit $exit_status
++
++
++# The TAGs below are defined such that we never get into a situation
++# in which we disable both kinds of libraries. Given conflicting
++# choices, we go for a static library, that is the most portable,
++# since we can't tell whether shared libraries were disabled because
++# the user asked for that or because the platform doesn't support
++# them. This is particularly important on AIX, because we don't
++# support having both static and shared libraries enabled at the same
++# time on that platform, so we default to a shared-only configuration.
++# If a disable-shared tag is given, we'll fallback to a static-only
++# configuration. But we'll never go from static-only to shared-only.
++
++# ### BEGIN LIBTOOL TAG CONFIG: disable-shared
++build_libtool_libs=no
++build_old_libs=yes
++# ### END LIBTOOL TAG CONFIG: disable-shared
++
++# ### BEGIN LIBTOOL TAG CONFIG: disable-static
++build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac`
++# ### END LIBTOOL TAG CONFIG: disable-static
++
++# Local Variables:
++# mode:shell-script
++# sh-indentation:2
++# End:
++# vi:sw=2
++
+Index: libdessert0.86-0.86.14/m4/ac_doxygen.m4
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/m4/ac_doxygen.m4 2009-12-09 16:38:27.254756172 +0100
+@@ -0,0 +1,324 @@
++#
++# Copyright 2007 Oren Ben-Kiki
++#
++# Licensed under the Apache License, Version 2.0 (the "License");
++# you may not use this file except in compliance with the License.
++# You may obtain a copy of the License at
++#
++# http://www.apache.org/licenses/LICENSE-2.0
++#
++# Unless required by applicable law or agreed to in writing,
++# software distributed under the License is distributed on an "AS IS" BASIS,
++# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
++# implied. See the License for the specific language governing
++# permissions and limitations under the License.
++#
++
++
++# Generate automatic documentation using Doxygen. Works in concert with the
++# aminclude.m4 file and a compatible doxygen configuration file. Defines the
++# following public macros:
++#
++# DX_???_FEATURE(ON|OFF) - control the default setting fo a Doxygen feature.
++# Supported features are 'DOXYGEN' itself, 'DOT' for generating graphics,
++# 'HTML' for plain HTML, 'CHM' for compressed HTML help (for MS users), 'CHI'
++# for generating a seperate .chi file by the .chm file, and 'MAN', 'RTF',
++# 'XML', 'PDF' and 'PS' for the appropriate output formats. The environment
++# variable DOXYGEN_PAPER_SIZE may be specified to override the default 'a4wide'
++# paper size.
++#
++# By default, HTML, PDF and PS documentation is generated as this seems to be
++# the most popular and portable combination. MAN pages created by Doxygen are
++# usually problematic, though by picking an appropriate subset and doing some
++# massaging they might be better than nothing. CHM and RTF are specific for MS
++# (note that you can't generate both HTML and CHM at the same time). The XML is
++# rather useless unless you apply specialized post-processing to it.
++#
++# The macro mainly controls the default state of the feature. The use can
++# override the default by specifying --enable or --disable. The macros ensure
++# that contradictory flags are not given (e.g., --enable-doxygen-html and
++# --enable-doxygen-chm, --enable-doxygen-anything with --disable-doxygen, etc.)
++# Finally, each feature will be automatically disabled (with a warning) if the
++# required programs are missing.
++#
++# Once all the feature defaults have been specified, call DX_INIT_DOXYGEN with
++# the following parameters: a one-word name for the project for use as a
++# filename base etc., an optional configuration file name (the default is
++# 'Doxyfile', the same as Doxygen's default), and an optional output directory
++# name (the default is 'doxygen-doc').
++
++## ----------##
++## Defaults. ##
++## ----------##
++
++DX_ENV=""
++AC_DEFUN([DX_FEATURE_doc], ON)
++AC_DEFUN([DX_FEATURE_dot], ON)
++AC_DEFUN([DX_FEATURE_man], OFF)
++AC_DEFUN([DX_FEATURE_html], ON)
++AC_DEFUN([DX_FEATURE_chm], OFF)
++AC_DEFUN([DX_FEATURE_chi], OFF)
++AC_DEFUN([DX_FEATURE_rtf], OFF)
++AC_DEFUN([DX_FEATURE_xml], OFF)
++AC_DEFUN([DX_FEATURE_pdf], ON)
++AC_DEFUN([DX_FEATURE_ps], ON)
++
++## --------------- ##
++## Private macros. ##
++## --------------- ##
++
++# DX_ENV_APPEND(VARIABLE, VALUE)
++# ------------------------------
++# Append VARIABLE="VALUE" to DX_ENV for invoking doxygen.
++AC_DEFUN([DX_ENV_APPEND], [AC_SUBST([DX_ENV], ["$DX_ENV $1='$2'"])])
++
++# DX_DIRNAME_EXPR
++# ---------------
++# Expand into a shell expression prints the directory part of a path.
++AC_DEFUN([DX_DIRNAME_EXPR],
++ [[expr ".$1" : '\(\.\)[^/]*$' \| "x$1" : 'x\(.*\)/[^/]*$']])
++
++# DX_IF_FEATURE(FEATURE, IF-ON, IF-OFF)
++# -------------------------------------
++# Expands according to the M4 (static) status of the feature.
++AC_DEFUN([DX_IF_FEATURE], [ifelse(DX_FEATURE_$1, ON, [$2], [$3])])
++
++# DX_REQUIRE_PROG(VARIABLE, PROGRAM)
++# ----------------------------------
++# Require the specified program to be found for the DX_CURRENT_FEATURE to work.
++AC_DEFUN([DX_REQUIRE_PROG], [
++AC_PATH_TOOL([$1], [$2])
++if test "$DX_FLAG_$[DX_CURRENT_FEATURE$$1]" = 1; then
++ AC_MSG_WARN([$2 not found - will not DX_CURRENT_DESCRIPTION])
++ AC_SUBST([DX_FLAG_]DX_CURRENT_FEATURE, 0)
++fi
++])
++
++# DX_TEST_FEATURE(FEATURE)
++# ------------------------
++# Expand to a shell expression testing whether the feature is active.
++AC_DEFUN([DX_TEST_FEATURE], [test "$DX_FLAG_$1" = 1])
++
++# DX_CHECK_DEPEND(REQUIRED_FEATURE, REQUIRED_STATE)
++# -------------------------------------------------
++# Verify that a required features has the right state before trying to turn on
++# the DX_CURRENT_FEATURE.
++AC_DEFUN([DX_CHECK_DEPEND], [
++test "$DX_FLAG_$1" = "$2" \
++|| AC_MSG_ERROR([doxygen-DX_CURRENT_FEATURE ifelse([$2], 1,
++ requires, contradicts) doxygen-DX_CURRENT_FEATURE])
++])
++
++# DX_CLEAR_DEPEND(FEATURE, REQUIRED_FEATURE, REQUIRED_STATE)
++# ----------------------------------------------------------
++# Turn off the DX_CURRENT_FEATURE if the required feature is off.
++AC_DEFUN([DX_CLEAR_DEPEND], [
++test "$DX_FLAG_$1" = "$2" || AC_SUBST([DX_FLAG_]DX_CURRENT_FEATURE, 0)
++])
++
++# DX_FEATURE_ARG(FEATURE, DESCRIPTION,
++# CHECK_DEPEND, CLEAR_DEPEND,
++# REQUIRE, DO-IF-ON, DO-IF-OFF)
++# --------------------------------------------
++# Parse the command-line option controlling a feature. CHECK_DEPEND is called
++# if the user explicitly turns the feature on (and invokes DX_CHECK_DEPEND),
++# otherwise CLEAR_DEPEND is called to turn off the default state if a required
++# feature is disabled (using DX_CLEAR_DEPEND). REQUIRE performs additional
++# requirement tests (DX_REQUIRE_PROG). Finally, an automake flag is set and
++# DO-IF-ON or DO-IF-OFF are called according to the final state of the feature.
++AC_DEFUN([DX_ARG_ABLE], [
++ AC_DEFUN([DX_CURRENT_FEATURE], [$1])
++ AC_DEFUN([DX_CURRENT_DESCRIPTION], [$2])
++ AC_ARG_ENABLE(doxygen-$1,
++ [AS_HELP_STRING(DX_IF_FEATURE([$1], [--disable-doxygen-$1],
++ [--enable-doxygen-$1]),
++ DX_IF_FEATURE([$1], [don't $2], [$2]))],
++ [
++case "$enableval" in
++#(
++y|Y|yes|Yes|YES)
++ AC_SUBST([DX_FLAG_$1], 1)
++ $3
++;; #(
++n|N|no|No|NO)
++ AC_SUBST([DX_FLAG_$1], 0)
++;; #(
++*)
++ AC_MSG_ERROR([invalid value '$enableval' given to doxygen-$1])
++;;
++esac
++], [
++AC_SUBST([DX_FLAG_$1], [DX_IF_FEATURE([$1], 1, 0)])
++$4
++])
++if DX_TEST_FEATURE([$1]); then
++ $5
++ :
++fi
++if DX_TEST_FEATURE([$1]); then
++ AM_CONDITIONAL(DX_COND_$1, :)
++ $6
++ :
++else
++ AM_CONDITIONAL(DX_COND_$1, false)
++ $7
++ :
++fi
++])
++
++## -------------- ##
++## Public macros. ##
++## -------------- ##
++
++# DX_XXX_FEATURE(DEFAULT_STATE)
++# -----------------------------
++AC_DEFUN([DX_DOXYGEN_FEATURE], [AC_DEFUN([DX_FEATURE_doc], [$1])])
++AC_DEFUN([DX_MAN_FEATURE], [AC_DEFUN([DX_FEATURE_man], [$1])])
++AC_DEFUN([DX_HTML_FEATURE], [AC_DEFUN([DX_FEATURE_html], [$1])])
++AC_DEFUN([DX_CHM_FEATURE], [AC_DEFUN([DX_FEATURE_chm], [$1])])
++AC_DEFUN([DX_CHI_FEATURE], [AC_DEFUN([DX_FEATURE_chi], [$1])])
++AC_DEFUN([DX_RTF_FEATURE], [AC_DEFUN([DX_FEATURE_rtf], [$1])])
++AC_DEFUN([DX_XML_FEATURE], [AC_DEFUN([DX_FEATURE_xml], [$1])])
++AC_DEFUN([DX_XML_FEATURE], [AC_DEFUN([DX_FEATURE_xml], [$1])])
++AC_DEFUN([DX_PDF_FEATURE], [AC_DEFUN([DX_FEATURE_pdf], [$1])])
++AC_DEFUN([DX_PS_FEATURE], [AC_DEFUN([DX_FEATURE_ps], [$1])])
++
++# DX_INIT_DOXYGEN(PROJECT, [CONFIG-FILE], [OUTPUT-DOC-DIR])
++# ---------------------------------------------------------
++# PROJECT also serves as the base name for the documentation files.
++# The default CONFIG-FILE is "Doxyfile" and OUTPUT-DOC-DIR is "doxygen-doc".
++AC_DEFUN([DX_INIT_DOXYGEN], [
++
++# Files:
++AC_SUBST([DX_PROJECT], [$1])
++AC_SUBST([DX_CONFIG], [ifelse([$2], [], Doxyfile, [$2])])
++AC_SUBST([DX_DOCDIR], [ifelse([$3], [], doxygen-doc, [$3])])
++
++# Environment variables used inside doxygen.cfg:
++DX_ENV_APPEND(SRCDIR, $srcdir)
++DX_ENV_APPEND(PROJECT, $DX_PROJECT)
++DX_ENV_APPEND(DOCDIR, $DX_DOCDIR)
++DX_ENV_APPEND(VERSION, $PACKAGE_VERSION)
++
++# Doxygen itself:
++DX_ARG_ABLE(doc, [generate any doxygen documentation],
++ [],
++ [],
++ [DX_REQUIRE_PROG([DX_DOXYGEN], doxygen)
++ DX_REQUIRE_PROG([DX_PERL], perl)],
++ [DX_ENV_APPEND(PERL_PATH, $DX_PERL)])
++
++# Dot for graphics:
++DX_ARG_ABLE(dot, [generate graphics for doxygen documentation],
++ [DX_CHECK_DEPEND(doc, 1)],
++ [DX_CLEAR_DEPEND(doc, 1)],
++ [DX_REQUIRE_PROG([DX_DOT], dot)],
++ [DX_ENV_APPEND(HAVE_DOT, YES)
++ DX_ENV_APPEND(DOT_PATH, [`DX_DIRNAME_EXPR($DX_DOT)`])],
++ [DX_ENV_APPEND(HAVE_DOT, NO)])
++
++# Man pages generation:
++DX_ARG_ABLE(man, [generate doxygen manual pages],
++ [DX_CHECK_DEPEND(doc, 1)],
++ [DX_CLEAR_DEPEND(doc, 1)],
++ [],
++ [DX_ENV_APPEND(GENERATE_MAN, YES)],
++ [DX_ENV_APPEND(GENERATE_MAN, NO)])
++
++# RTF file generation:
++DX_ARG_ABLE(rtf, [generate doxygen RTF documentation],
++ [DX_CHECK_DEPEND(doc, 1)],
++ [DX_CLEAR_DEPEND(doc, 1)],
++ [],
++ [DX_ENV_APPEND(GENERATE_RTF, YES)],
++ [DX_ENV_APPEND(GENERATE_RTF, NO)])
++
++# XML file generation:
++DX_ARG_ABLE(xml, [generate doxygen XML documentation],
++ [DX_CHECK_DEPEND(doc, 1)],
++ [DX_CLEAR_DEPEND(doc, 1)],
++ [],
++ [DX_ENV_APPEND(GENERATE_XML, YES)],
++ [DX_ENV_APPEND(GENERATE_XML, NO)])
++
++# (Compressed) HTML help generation:
++DX_ARG_ABLE(chm, [generate doxygen compressed HTML help documentation],
++ [DX_CHECK_DEPEND(doc, 1)],
++ [DX_CLEAR_DEPEND(doc, 1)],
++ [DX_REQUIRE_PROG([DX_HHC], hhc)],
++ [DX_ENV_APPEND(HHC_PATH, $DX_HHC)
++ DX_ENV_APPEND(GENERATE_HTML, YES)
++ DX_ENV_APPEND(GENERATE_HTMLHELP, YES)],
++ [DX_ENV_APPEND(GENERATE_HTMLHELP, NO)])
++
++# Seperate CHI file generation.
++DX_ARG_ABLE(chi, [generate doxygen seperate compressed HTML help index file],
++ [DX_CHECK_DEPEND(chm, 1)],
++ [DX_CLEAR_DEPEND(chm, 1)],
++ [],
++ [DX_ENV_APPEND(GENERATE_CHI, YES)],
++ [DX_ENV_APPEND(GENERATE_CHI, NO)])
++
++# Plain HTML pages generation:
++DX_ARG_ABLE(html, [generate doxygen plain HTML documentation],
++ [DX_CHECK_DEPEND(doc, 1) DX_CHECK_DEPEND(chm, 0)],
++ [DX_CLEAR_DEPEND(doc, 1) DX_CLEAR_DEPEND(chm, 0)],
++ [],
++ [DX_ENV_APPEND(GENERATE_HTML, YES)],
++ [DX_TEST_FEATURE(chm) || DX_ENV_APPEND(GENERATE_HTML, NO)])
++
++# PostScript file generation:
++DX_ARG_ABLE(ps, [generate doxygen PostScript documentation],
++ [DX_CHECK_DEPEND(doc, 1)],
++ [DX_CLEAR_DEPEND(doc, 1)],
++ [DX_REQUIRE_PROG([DX_LATEX], latex)
++ DX_REQUIRE_PROG([DX_MAKEINDEX], makeindex)
++ DX_REQUIRE_PROG([DX_DVIPS], dvips)
++ DX_REQUIRE_PROG([DX_EGREP], egrep)])
++
++# PDF file generation:
++DX_ARG_ABLE(pdf, [generate doxygen PDF documentation],
++ [DX_CHECK_DEPEND(doc, 1)],
++ [DX_CLEAR_DEPEND(doc, 1)],
++ [DX_REQUIRE_PROG([DX_PDFLATEX], pdflatex)
++ DX_REQUIRE_PROG([DX_MAKEINDEX], makeindex)
++ DX_REQUIRE_PROG([DX_EGREP], egrep)])
++
++# LaTeX generation for PS and/or PDF:
++if DX_TEST_FEATURE(ps) || DX_TEST_FEATURE(pdf); then
++ AM_CONDITIONAL(DX_COND_latex, :)
++ DX_ENV_APPEND(GENERATE_LATEX, YES)
++else
++ AM_CONDITIONAL(DX_COND_latex, false)
++ DX_ENV_APPEND(GENERATE_LATEX, NO)
++fi
++
++# Paper size for PS and/or PDF:
++AC_ARG_VAR(DOXYGEN_PAPER_SIZE,
++ [a4wide (default), a4, letter, legal or executive])
++case "$DOXYGEN_PAPER_SIZE" in
++#(
++"")
++ AC_SUBST(DOXYGEN_PAPER_SIZE, "")
++;; #(
++a4wide|a4|letter|legal|executive)
++ DX_ENV_APPEND(PAPER_SIZE, $DOXYGEN_PAPER_SIZE)
++;; #(
++*)
++ AC_MSG_ERROR([unknown DOXYGEN_PAPER_SIZE='$DOXYGEN_PAPER_SIZE'])
++;;
++esac
++
++#For debugging:
++#echo DX_FLAG_doc=$DX_FLAG_doc
++#echo DX_FLAG_dot=$DX_FLAG_dot
++#echo DX_FLAG_man=$DX_FLAG_man
++#echo DX_FLAG_html=$DX_FLAG_html
++#echo DX_FLAG_chm=$DX_FLAG_chm
++#echo DX_FLAG_chi=$DX_FLAG_chi
++#echo DX_FLAG_rtf=$DX_FLAG_rtf
++#echo DX_FLAG_xml=$DX_FLAG_xml
++#echo DX_FLAG_pdf=$DX_FLAG_pdf
++#echo DX_FLAG_ps=$DX_FLAG_ps
++#echo DX_ENV=$DX_ENV
++])
+Index: libdessert0.86-0.86.14/m4/ax_pthread.m4
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/m4/ax_pthread.m4 2009-12-09 16:38:27.254756172 +0100
+@@ -0,0 +1,272 @@
++# ===========================================================================
++# http://www.nongnu.org/autoconf-archive/ax_pthread.html
++# ===========================================================================
++#
++# SYNOPSIS
++#
++# AX_PTHREAD([ACTION-IF-FOUND[, ACTION-IF-NOT-FOUND]])
++#
++# DESCRIPTION
++#
++# This macro figures out how to build C programs using POSIX threads. It
++# sets the PTHREAD_LIBS output variable to the threads library and linker
++# flags, and the PTHREAD_CFLAGS output variable to any special C compiler
++# flags that are needed. (The user can also force certain compiler
++# flags/libs to be tested by setting these environment variables.)
++#
++# Also sets PTHREAD_CC to any special C compiler that is needed for
++# multi-threaded programs (defaults to the value of CC otherwise). (This
++# is necessary on AIX to use the special cc_r compiler alias.)
++#
++# NOTE: You are assumed to not only compile your program with these flags,
++# but also link it with them as well. e.g. you should link with
++# $PTHREAD_CC $CFLAGS $PTHREAD_CFLAGS $LDFLAGS ... $PTHREAD_LIBS $LIBS
++#
++# If you are only building threads programs, you may wish to use these
++# variables in your default LIBS, CFLAGS, and CC:
++#
++# LIBS="$PTHREAD_LIBS $LIBS"
++# CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
++# CC="$PTHREAD_CC"
++#
++# In addition, if the PTHREAD_CREATE_JOINABLE thread-attribute constant
++# has a nonstandard name, defines PTHREAD_CREATE_JOINABLE to that name
++# (e.g. PTHREAD_CREATE_UNDETACHED on AIX).
++#
++# ACTION-IF-FOUND is a list of shell commands to run if a threads library
++# is found, and ACTION-IF-NOT-FOUND is a list of commands to run it if it
++# is not found. If ACTION-IF-FOUND is not specified, the default action
++# will define HAVE_PTHREAD.
++#
++# Please let the authors know if this macro fails on any platform, or if
++# you have any other suggestions or comments. This macro was based on work
++# by SGJ on autoconf scripts for FFTW (http://www.fftw.org/) (with help
++# from M. Frigo), as well as ac_pthread and hb_pthread macros posted by
++# Alejandro Forero Cuervo to the autoconf macro repository. We are also
++# grateful for the helpful feedback of numerous users.
++#
++# LICENSE
++#
++# Copyright (c) 2008 Steven G. Johnson <stevenj@alum.mit.edu>
++#
++# This program is free software: you can redistribute it and/or modify it
++# under the terms of the GNU General Public License as published by the
++# Free Software Foundation, either version 3 of the License, or (at your
++# option) any later version.
++#
++# This program is distributed in the hope that it will be useful, but
++# WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
++# Public License for more details.
++#
++# You should have received a copy of the GNU General Public License along
++# with this program. If not, see <http://www.gnu.org/licenses/>.
++#
++# As a special exception, the respective Autoconf Macro's copyright owner
++# gives unlimited permission to copy, distribute and modify the configure
++# scripts that are the output of Autoconf when processing the Macro. You
++# need not follow the terms of the GNU General Public License when using
++# or distributing such scripts, even though portions of the text of the
++# Macro appear in them. The GNU General Public License (GPL) does govern
++# all other use of the material that constitutes the Autoconf Macro.
++#
++# This special exception to the GPL applies to versions of the Autoconf
++# Macro released by the Autoconf Archive. When you make and distribute a
++# modified version of the Autoconf Macro, you may extend this special
++# exception to the GPL to apply to your modified version as well.
++
++AU_ALIAS([ACX_PTHREAD], [AX_PTHREAD])
++AC_DEFUN([AX_PTHREAD], [
++AC_REQUIRE([AC_CANONICAL_HOST])
++AC_LANG_SAVE
++AC_LANG_C
++ax_pthread_ok=no
++
++# We used to check for pthread.h first, but this fails if pthread.h
++# requires special compiler flags (e.g. on True64 or Sequent).
++# It gets checked for in the link test anyway.
++
++# First of all, check if the user has set any of the PTHREAD_LIBS,
++# etcetera environment variables, and if threads linking works using
++# them:
++if test x"$PTHREAD_LIBS$PTHREAD_CFLAGS" != x; then
++ save_CFLAGS="$CFLAGS"
++ CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
++ save_LIBS="$LIBS"
++ LIBS="$PTHREAD_LIBS $LIBS"
++ AC_MSG_CHECKING([for pthread_join in LIBS=$PTHREAD_LIBS with CFLAGS=$PTHREAD_CFLAGS])
++ AC_TRY_LINK_FUNC(pthread_join, ax_pthread_ok=yes)
++ AC_MSG_RESULT($ax_pthread_ok)
++ if test x"$ax_pthread_ok" = xno; then
++ PTHREAD_LIBS=""
++ PTHREAD_CFLAGS=""
++ fi
++ LIBS="$save_LIBS"
++ CFLAGS="$save_CFLAGS"
++fi
++
++# We must check for the threads library under a number of different
++# names; the ordering is very important because some systems
++# (e.g. DEC) have both -lpthread and -lpthreads, where one of the
++# libraries is broken (non-POSIX).
++
++# Create a list of thread flags to try. Items starting with a "-" are
++# C compiler flags, and other items are library names, except for "none"
++# which indicates that we try without any flags at all, and "pthread-config"
++# which is a program returning the flags for the Pth emulation library.
++
++ax_pthread_flags="pthread pthreads none -Kthread -kthread lthread -pthread -pthreads -mthreads pthread --thread-safe -mt pthread-config"
++
++# The ordering *is* (sometimes) important. Some notes on the
++# individual items follow:
++
++# pthreads: AIX (must check this before -lpthread)
++# none: in case threads are in libc; should be tried before -Kthread and
++# other compiler flags to prevent continual compiler warnings
++# -Kthread: Sequent (threads in libc, but -Kthread needed for pthread.h)
++# -kthread: FreeBSD kernel threads (preferred to -pthread since SMP-able)
++# lthread: LinuxThreads port on FreeBSD (also preferred to -pthread)
++# -pthread: Linux/gcc (kernel threads), BSD/gcc (userland threads)
++# -pthreads: Solaris/gcc
++# -mthreads: Mingw32/gcc, Lynx/gcc
++# -mt: Sun Workshop C (may only link SunOS threads [-lthread], but it
++# doesn't hurt to check since this sometimes defines pthreads too;
++# also defines -D_REENTRANT)
++# ... -mt is also the pthreads flag for HP/aCC
++# pthread: Linux, etcetera
++# --thread-safe: KAI C++
++# pthread-config: use pthread-config program (for GNU Pth library)
++
++case "${host_cpu}-${host_os}" in
++ *solaris*)
++
++ # On Solaris (at least, for some versions), libc contains stubbed
++ # (non-functional) versions of the pthreads routines, so link-based
++ # tests will erroneously succeed. (We need to link with -pthreads/-mt/
++ # -lpthread.) (The stubs are missing pthread_cleanup_push, or rather
++ # a function called by this macro, so we could check for that, but
++ # who knows whether they'll stub that too in a future libc.) So,
++ # we'll just look for -pthreads and -lpthread first:
++
++ ax_pthread_flags="-pthreads pthread -mt -pthread $ax_pthread_flags"
++ ;;
++esac
++
++if test x"$ax_pthread_ok" = xno; then
++for flag in $ax_pthread_flags; do
++
++ case $flag in
++ none)
++ AC_MSG_CHECKING([whether pthreads work without any flags])
++ ;;
++
++ -*)
++ AC_MSG_CHECKING([whether pthreads work with $flag])
++ PTHREAD_CFLAGS="$flag"
++ ;;
++
++ pthread-config)
++ AC_CHECK_PROG(ax_pthread_config, pthread-config, yes, no)
++ if test x"$ax_pthread_config" = xno; then continue; fi
++ PTHREAD_CFLAGS="`pthread-config --cflags`"
++ PTHREAD_LIBS="`pthread-config --ldflags` `pthread-config --libs`"
++ ;;
++
++ *)
++ AC_MSG_CHECKING([for the pthreads library -l$flag])
++ PTHREAD_LIBS="-l$flag"
++ ;;
++ esac
++
++ save_LIBS="$LIBS"
++ save_CFLAGS="$CFLAGS"
++ LIBS="$PTHREAD_LIBS $LIBS"
++ CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
++
++ # Check for various functions. We must include pthread.h,
++ # since some functions may be macros. (On the Sequent, we
++ # need a special flag -Kthread to make this header compile.)
++ # We check for pthread_join because it is in -lpthread on IRIX
++ # while pthread_create is in libc. We check for pthread_attr_init
++ # due to DEC craziness with -lpthreads. We check for
++ # pthread_cleanup_push because it is one of the few pthread
++ # functions on Solaris that doesn't have a non-functional libc stub.
++ # We try pthread_create on general principles.
++ AC_TRY_LINK([#include <pthread.h>],
++ [pthread_t th; pthread_join(th, 0);
++ pthread_attr_init(0); pthread_cleanup_push(0, 0);
++ pthread_create(0,0,0,0); pthread_cleanup_pop(0); ],
++ [ax_pthread_ok=yes])
++
++ LIBS="$save_LIBS"
++ CFLAGS="$save_CFLAGS"
++
++ AC_MSG_RESULT($ax_pthread_ok)
++ if test "x$ax_pthread_ok" = xyes; then
++ break;
++ fi
++
++ PTHREAD_LIBS=""
++ PTHREAD_CFLAGS=""
++done
++fi
++
++# Various other checks:
++if test "x$ax_pthread_ok" = xyes; then
++ save_LIBS="$LIBS"
++ LIBS="$PTHREAD_LIBS $LIBS"
++ save_CFLAGS="$CFLAGS"
++ CFLAGS="$CFLAGS $PTHREAD_CFLAGS"
++
++ # Detect AIX lossage: JOINABLE attribute is called UNDETACHED.
++ AC_MSG_CHECKING([for joinable pthread attribute])
++ attr_name=unknown
++ for attr in PTHREAD_CREATE_JOINABLE PTHREAD_CREATE_UNDETACHED; do
++ AC_TRY_LINK([#include <pthread.h>], [int attr=$attr; return attr;],
++ [attr_name=$attr; break])
++ done
++ AC_MSG_RESULT($attr_name)
++ if test "$attr_name" != PTHREAD_CREATE_JOINABLE; then
++ AC_DEFINE_UNQUOTED(PTHREAD_CREATE_JOINABLE, $attr_name,
++ [Define to necessary symbol if this constant
++ uses a non-standard name on your system.])
++ fi
++
++ AC_MSG_CHECKING([if more special flags are required for pthreads])
++ flag=no
++ case "${host_cpu}-${host_os}" in
++ *-aix* | *-freebsd* | *-darwin*) flag="-D_THREAD_SAFE";;
++ *solaris* | *-osf* | *-hpux*) flag="-D_REENTRANT";;
++ esac
++ AC_MSG_RESULT(${flag})
++ if test "x$flag" != xno; then
++ PTHREAD_CFLAGS="$flag $PTHREAD_CFLAGS"
++ fi
++
++ LIBS="$save_LIBS"
++ CFLAGS="$save_CFLAGS"
++
++ # More AIX lossage: must compile with xlc_r or cc_r
++ if test x"$GCC" != xyes; then
++ AC_CHECK_PROGS(PTHREAD_CC, xlc_r cc_r, ${CC})
++ else
++ PTHREAD_CC=$CC
++ fi
++else
++ PTHREAD_CC="$CC"
++fi
++
++AC_SUBST(PTHREAD_LIBS)
++AC_SUBST(PTHREAD_CFLAGS)
++AC_SUBST(PTHREAD_CC)
++
++# Finally, execute ACTION-IF-FOUND/ACTION-IF-NOT-FOUND:
++if test x"$ax_pthread_ok" = xyes; then
++ ifelse([$1],,AC_DEFINE(HAVE_PTHREAD,1,[Define if you have POSIX threads libraries and header files.]),[$1])
++ :
++else
++ ax_pthread_ok=no
++ $2
++fi
++AC_LANG_RESTORE
++])dnl AX_PTHREAD
+Index: libdessert0.86-0.86.14/m4/libtool.m4
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/m4/libtool.m4 2009-12-09 16:38:27.261422553 +0100
+@@ -0,0 +1,7376 @@
++# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*-
++#
++# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
++# 2006, 2007, 2008 Free Software Foundation, Inc.
++# Written by Gordon Matzigkeit, 1996
++#
++# This file is free software; the Free Software Foundation gives
++# unlimited permission to copy and/or distribute it, with or without
++# modifications, as long as this notice is preserved.
++
++m4_define([_LT_COPYING], [dnl
++# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005,
++# 2006, 2007, 2008 Free Software Foundation, Inc.
++# Written by Gordon Matzigkeit, 1996
++#
++# This file is part of GNU Libtool.
++#
++# GNU Libtool is free software; you can redistribute it and/or
++# modify it under the terms of the GNU General Public License as
++# published by the Free Software Foundation; either version 2 of
++# the License, or (at your option) any later version.
++#
++# As a special exception to the GNU General Public License,
++# if you distribute this file as part of a program or library that
++# is built using GNU Libtool, you may include this file under the
++# same distribution terms that you use for the rest of that program.
++#
++# GNU Libtool is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with GNU Libtool; see the file COPYING. If not, a copy
++# can be downloaded from http://www.gnu.org/licenses/gpl.html, or
++# obtained by writing to the Free Software Foundation, Inc.,
++# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
++])
++
++# serial 56 LT_INIT
++
++
++# LT_PREREQ(VERSION)
++# ------------------
++# Complain and exit if this libtool version is less that VERSION.
++m4_defun([LT_PREREQ],
++[m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1,
++ [m4_default([$3],
++ [m4_fatal([Libtool version $1 or higher is required],
++ 63)])],
++ [$2])])
++
++
++# _LT_CHECK_BUILDDIR
++# ------------------
++# Complain if the absolute build directory name contains unusual characters
++m4_defun([_LT_CHECK_BUILDDIR],
++[case `pwd` in
++ *\ * | *\ *)
++ AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;;
++esac
++])
++
++
++# LT_INIT([OPTIONS])
++# ------------------
++AC_DEFUN([LT_INIT],
++[AC_PREREQ([2.58])dnl We use AC_INCLUDES_DEFAULT
++AC_BEFORE([$0], [LT_LANG])dnl
++AC_BEFORE([$0], [LT_OUTPUT])dnl
++AC_BEFORE([$0], [LTDL_INIT])dnl
++m4_require([_LT_CHECK_BUILDDIR])dnl
++
++dnl Autoconf doesn't catch unexpanded LT_ macros by default:
++m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl
++m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl
++dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4
++dnl unless we require an AC_DEFUNed macro:
++AC_REQUIRE([LTOPTIONS_VERSION])dnl
++AC_REQUIRE([LTSUGAR_VERSION])dnl
++AC_REQUIRE([LTVERSION_VERSION])dnl
++AC_REQUIRE([LTOBSOLETE_VERSION])dnl
++m4_require([_LT_PROG_LTMAIN])dnl
++
++dnl Parse OPTIONS
++_LT_SET_OPTIONS([$0], [$1])
++
++# This can be used to rebuild libtool when needed
++LIBTOOL_DEPS="$ltmain"
++
++# Always use our own libtool.
++LIBTOOL='$(SHELL) $(top_builddir)/libtool'
++AC_SUBST(LIBTOOL)dnl
++
++_LT_SETUP
++
++# Only expand once:
++m4_define([LT_INIT])
++])# LT_INIT
++
++# Old names:
++AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT])
++AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT])
++dnl aclocal-1.4 backwards compatibility:
++dnl AC_DEFUN([AC_PROG_LIBTOOL], [])
++dnl AC_DEFUN([AM_PROG_LIBTOOL], [])
++
++
++# _LT_CC_BASENAME(CC)
++# -------------------
++# Calculate cc_basename. Skip known compiler wrappers and cross-prefix.
++m4_defun([_LT_CC_BASENAME],
++[for cc_temp in $1""; do
++ case $cc_temp in
++ compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;;
++ distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;;
++ \-*) ;;
++ *) break;;
++ esac
++done
++cc_basename=`$ECHO "X$cc_temp" | $Xsed -e 's%.*/%%' -e "s%^$host_alias-%%"`
++])
++
++
++# _LT_FILEUTILS_DEFAULTS
++# ----------------------
++# It is okay to use these file commands and assume they have been set
++# sensibly after `m4_require([_LT_FILEUTILS_DEFAULTS])'.
++m4_defun([_LT_FILEUTILS_DEFAULTS],
++[: ${CP="cp -f"}
++: ${MV="mv -f"}
++: ${RM="rm -f"}
++])# _LT_FILEUTILS_DEFAULTS
++
++
++# _LT_SETUP
++# ---------
++m4_defun([_LT_SETUP],
++[AC_REQUIRE([AC_CANONICAL_HOST])dnl
++AC_REQUIRE([AC_CANONICAL_BUILD])dnl
++_LT_DECL([], [host_alias], [0], [The host system])dnl
++_LT_DECL([], [host], [0])dnl
++_LT_DECL([], [host_os], [0])dnl
++dnl
++_LT_DECL([], [build_alias], [0], [The build system])dnl
++_LT_DECL([], [build], [0])dnl
++_LT_DECL([], [build_os], [0])dnl
++dnl
++AC_REQUIRE([AC_PROG_CC])dnl
++AC_REQUIRE([LT_PATH_LD])dnl
++AC_REQUIRE([LT_PATH_NM])dnl
++dnl
++AC_REQUIRE([AC_PROG_LN_S])dnl
++test -z "$LN_S" && LN_S="ln -s"
++_LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl
++dnl
++AC_REQUIRE([LT_CMD_MAX_LEN])dnl
++_LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl
++_LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl
++dnl
++m4_require([_LT_FILEUTILS_DEFAULTS])dnl
++m4_require([_LT_CHECK_SHELL_FEATURES])dnl
++m4_require([_LT_CMD_RELOAD])dnl
++m4_require([_LT_CHECK_MAGIC_METHOD])dnl
++m4_require([_LT_CMD_OLD_ARCHIVE])dnl
++m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
++
++_LT_CONFIG_LIBTOOL_INIT([
++# See if we are running on zsh, and set the options which allow our
++# commands through without removal of \ escapes INIT.
++if test -n "\${ZSH_VERSION+set}" ; then
++ setopt NO_GLOB_SUBST
++fi
++])
++if test -n "${ZSH_VERSION+set}" ; then
++ setopt NO_GLOB_SUBST
++fi
++
++_LT_CHECK_OBJDIR
++
++m4_require([_LT_TAG_COMPILER])dnl
++_LT_PROG_ECHO_BACKSLASH
++
++case $host_os in
++aix3*)
++ # AIX sometimes has problems with the GCC collect2 program. For some
++ # reason, if we set the COLLECT_NAMES environment variable, the problems
++ # vanish in a puff of smoke.
++ if test "X${COLLECT_NAMES+set}" != Xset; then
++ COLLECT_NAMES=
++ export COLLECT_NAMES
++ fi
++ ;;
++esac
++
++# Sed substitution that helps us do robust quoting. It backslashifies
++# metacharacters that are still active within double-quoted strings.
++sed_quote_subst='s/\([["`$\\]]\)/\\\1/g'
++
++# Same as above, but do not quote variable references.
++double_quote_subst='s/\([["`\\]]\)/\\\1/g'
++
++# Sed substitution to delay expansion of an escaped shell variable in a
++# double_quote_subst'ed string.
++delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g'
++
++# Sed substitution to delay expansion of an escaped single quote.
++delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g'
++
++# Sed substitution to avoid accidental globbing in evaled expressions
++no_glob_subst='s/\*/\\\*/g'
++
++# Global variables:
++ofile=libtool
++can_build_shared=yes
++
++# All known linkers require a `.a' archive for static linking (except MSVC,
++# which needs '.lib').
++libext=a
++
++with_gnu_ld="$lt_cv_prog_gnu_ld"
++
++old_CC="$CC"
++old_CFLAGS="$CFLAGS"
++
++# Set sane defaults for various variables
++test -z "$CC" && CC=cc
++test -z "$LTCC" && LTCC=$CC
++test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS
++test -z "$LD" && LD=ld
++test -z "$ac_objext" && ac_objext=o
++
++_LT_CC_BASENAME([$compiler])
++
++# Only perform the check for file, if the check method requires it
++test -z "$MAGIC_CMD" && MAGIC_CMD=file
++case $deplibs_check_method in
++file_magic*)
++ if test "$file_magic_cmd" = '$MAGIC_CMD'; then
++ _LT_PATH_MAGIC
++ fi
++ ;;
++esac
++
++# Use C for the default configuration in the libtool script
++LT_SUPPORTED_TAG([CC])
++_LT_LANG_C_CONFIG
++_LT_LANG_DEFAULT_CONFIG
++_LT_CONFIG_COMMANDS
++])# _LT_SETUP
++
++
++# _LT_PROG_LTMAIN
++# ---------------
++# Note that this code is called both from `configure', and `config.status'
++# now that we use AC_CONFIG_COMMANDS to generate libtool. Notably,
++# `config.status' has no value for ac_aux_dir unless we are using Automake,
++# so we pass a copy along to make sure it has a sensible value anyway.
++m4_defun([_LT_PROG_LTMAIN],
++[m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl
++_LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir'])
++ltmain="$ac_aux_dir/ltmain.sh"
++])# _LT_PROG_LTMAIN
++
++
++## ------------------------------------- ##
++## Accumulate code for creating libtool. ##
++## ------------------------------------- ##
++
++# So that we can recreate a full libtool script including additional
++# tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS
++# in macros and then make a single call at the end using the `libtool'
++# label.
++
++
++# _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS])
++# ----------------------------------------
++# Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later.
++m4_define([_LT_CONFIG_LIBTOOL_INIT],
++[m4_ifval([$1],
++ [m4_append([_LT_OUTPUT_LIBTOOL_INIT],
++ [$1
++])])])
++
++# Initialize.
++m4_define([_LT_OUTPUT_LIBTOOL_INIT])
++
++
++# _LT_CONFIG_LIBTOOL([COMMANDS])
++# ------------------------------
++# Register COMMANDS to be passed to AC_CONFIG_COMMANDS later.
++m4_define([_LT_CONFIG_LIBTOOL],
++[m4_ifval([$1],
++ [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS],
++ [$1
++])])])
++
++# Initialize.
++m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS])
++
++
++# _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS])
++# -----------------------------------------------------
++m4_defun([_LT_CONFIG_SAVE_COMMANDS],
++[_LT_CONFIG_LIBTOOL([$1])
++_LT_CONFIG_LIBTOOL_INIT([$2])
++])
++
++
++# _LT_FORMAT_COMMENT([COMMENT])
++# -----------------------------
++# Add leading comment marks to the start of each line, and a trailing
++# full-stop to the whole comment if one is not present already.
++m4_define([_LT_FORMAT_COMMENT],
++[m4_ifval([$1], [
++m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])],
++ [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.])
++)])
++
++
++
++## ------------------------ ##
++## FIXME: Eliminate VARNAME ##
++## ------------------------ ##
++
++
++# _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?])
++# -------------------------------------------------------------------
++# CONFIGNAME is the name given to the value in the libtool script.
++# VARNAME is the (base) name used in the configure script.
++# VALUE may be 0, 1 or 2 for a computed quote escaped value based on
++# VARNAME. Any other value will be used directly.
++m4_define([_LT_DECL],
++[lt_if_append_uniq([lt_decl_varnames], [$2], [, ],
++ [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name],
++ [m4_ifval([$1], [$1], [$2])])
++ lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3])
++ m4_ifval([$4],
++ [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])])
++ lt_dict_add_subkey([lt_decl_dict], [$2],
++ [tagged?], [m4_ifval([$5], [yes], [no])])])
++])
++
++
++# _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION])
++# --------------------------------------------------------
++m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])])
++
++
++# lt_decl_tag_varnames([SEPARATOR], [VARNAME1...])
++# ------------------------------------------------
++m4_define([lt_decl_tag_varnames],
++[_lt_decl_filter([tagged?], [yes], $@)])
++
++
++# _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..])
++# ---------------------------------------------------------
++m4_define([_lt_decl_filter],
++[m4_case([$#],
++ [0], [m4_fatal([$0: too few arguments: $#])],
++ [1], [m4_fatal([$0: too few arguments: $#: $1])],
++ [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)],
++ [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)],
++ [lt_dict_filter([lt_decl_dict], $@)])[]dnl
++])
++
++
++# lt_decl_quote_varnames([SEPARATOR], [VARNAME1...])
++# --------------------------------------------------
++m4_define([lt_decl_quote_varnames],
++[_lt_decl_filter([value], [1], $@)])
++
++
++# lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...])
++# ---------------------------------------------------
++m4_define([lt_decl_dquote_varnames],
++[_lt_decl_filter([value], [2], $@)])
++
++
++# lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...])
++# ---------------------------------------------------
++m4_define([lt_decl_varnames_tagged],
++[m4_assert([$# <= 2])dnl
++_$0(m4_quote(m4_default([$1], [[, ]])),
++ m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]),
++ m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))])
++m4_define([_lt_decl_varnames_tagged],
++[m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])])
++
++
++# lt_decl_all_varnames([SEPARATOR], [VARNAME1...])
++# ------------------------------------------------
++m4_define([lt_decl_all_varnames],
++[_$0(m4_quote(m4_default([$1], [[, ]])),
++ m4_if([$2], [],
++ m4_quote(lt_decl_varnames),
++ m4_quote(m4_shift($@))))[]dnl
++])
++m4_define([_lt_decl_all_varnames],
++[lt_join($@, lt_decl_varnames_tagged([$1],
++ lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl
++])
++
++
++# _LT_CONFIG_STATUS_DECLARE([VARNAME])
++# ------------------------------------
++# Quote a variable value, and forward it to `config.status' so that its
++# declaration there will have the same value as in `configure'. VARNAME
++# must have a single quote delimited value for this to work.
++m4_define([_LT_CONFIG_STATUS_DECLARE],
++[$1='`$ECHO "X$][$1" | $Xsed -e "$delay_single_quote_subst"`'])
++
++
++# _LT_CONFIG_STATUS_DECLARATIONS
++# ------------------------------
++# We delimit libtool config variables with single quotes, so when
++# we write them to config.status, we have to be sure to quote all
++# embedded single quotes properly. In configure, this macro expands
++# each variable declared with _LT_DECL (and _LT_TAGDECL) into:
++#
++# <var>='`$ECHO "X$<var>" | $Xsed -e "$delay_single_quote_subst"`'
++m4_defun([_LT_CONFIG_STATUS_DECLARATIONS],
++[m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames),
++ [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])])
++
++
++# _LT_LIBTOOL_TAGS
++# ----------------
++# Output comment and list of tags supported by the script
++m4_defun([_LT_LIBTOOL_TAGS],
++[_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl
++available_tags="_LT_TAGS"dnl
++])
++
++
++# _LT_LIBTOOL_DECLARE(VARNAME, [TAG])
++# -----------------------------------
++# Extract the dictionary values for VARNAME (optionally with TAG) and
++# expand to a commented shell variable setting:
++#
++# # Some comment about what VAR is for.
++# visible_name=$lt_internal_name
++m4_define([_LT_LIBTOOL_DECLARE],
++[_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1],
++ [description])))[]dnl
++m4_pushdef([_libtool_name],
++ m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl
++m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])),
++ [0], [_libtool_name=[$]$1],
++ [1], [_libtool_name=$lt_[]$1],
++ [2], [_libtool_name=$lt_[]$1],
++ [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl
++m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl
++])
++
++
++# _LT_LIBTOOL_CONFIG_VARS
++# -----------------------
++# Produce commented declarations of non-tagged libtool config variables
++# suitable for insertion in the LIBTOOL CONFIG section of the `libtool'
++# script. Tagged libtool config variables (even for the LIBTOOL CONFIG
++# section) are produced by _LT_LIBTOOL_TAG_VARS.
++m4_defun([_LT_LIBTOOL_CONFIG_VARS],
++[m4_foreach([_lt_var],
++ m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)),
++ [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])])
++
++
++# _LT_LIBTOOL_TAG_VARS(TAG)
++# -------------------------
++m4_define([_LT_LIBTOOL_TAG_VARS],
++[m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames),
++ [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])])
++
++
++# _LT_TAGVAR(VARNAME, [TAGNAME])
++# ------------------------------
++m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])])
++
++
++# _LT_CONFIG_COMMANDS
++# -------------------
++# Send accumulated output to $CONFIG_STATUS. Thanks to the lists of
++# variables for single and double quote escaping we saved from calls
++# to _LT_DECL, we can put quote escaped variables declarations
++# into `config.status', and then the shell code to quote escape them in
++# for loops in `config.status'. Finally, any additional code accumulated
++# from calls to _LT_CONFIG_LIBTOOL_INIT is expanded.
++m4_defun([_LT_CONFIG_COMMANDS],
++[AC_PROVIDE_IFELSE([LT_OUTPUT],
++ dnl If the libtool generation code has been placed in $CONFIG_LT,
++ dnl instead of duplicating it all over again into config.status,
++ dnl then we will have config.status run $CONFIG_LT later, so it
++ dnl needs to know what name is stored there:
++ [AC_CONFIG_COMMANDS([libtool],
++ [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])],
++ dnl If the libtool generation code is destined for config.status,
++ dnl expand the accumulated commands and init code now:
++ [AC_CONFIG_COMMANDS([libtool],
++ [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])])
++])#_LT_CONFIG_COMMANDS
++
++
++# Initialize.
++m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT],
++[
++
++# The HP-UX ksh and POSIX shell print the target directory to stdout
++# if CDPATH is set.
++(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
++
++sed_quote_subst='$sed_quote_subst'
++double_quote_subst='$double_quote_subst'
++delay_variable_subst='$delay_variable_subst'
++_LT_CONFIG_STATUS_DECLARATIONS
++LTCC='$LTCC'
++LTCFLAGS='$LTCFLAGS'
++compiler='$compiler_DEFAULT'
++
++# Quote evaled strings.
++for var in lt_decl_all_varnames([[ \
++]], lt_decl_quote_varnames); do
++ case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
++ *[[\\\\\\\`\\"\\\$]]*)
++ eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$sed_quote_subst\\"\\\`\\\\\\""
++ ;;
++ *)
++ eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
++ ;;
++ esac
++done
++
++# Double-quote double-evaled strings.
++for var in lt_decl_all_varnames([[ \
++]], lt_decl_dquote_varnames); do
++ case \`eval \\\\\$ECHO "X\\\\\$\$var"\` in
++ *[[\\\\\\\`\\"\\\$]]*)
++ eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"X\\\$\$var\\" | \\\$Xsed -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\""
++ ;;
++ *)
++ eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\""
++ ;;
++ esac
++done
++
++# Fix-up fallback echo if it was mangled by the above quoting rules.
++case \$lt_ECHO in
++*'\\\[$]0 --fallback-echo"')dnl "
++ lt_ECHO=\`\$ECHO "X\$lt_ECHO" | \$Xsed -e 's/\\\\\\\\\\\\\\\[$]0 --fallback-echo"\[$]/\[$]0 --fallback-echo"/'\`
++ ;;
++esac
++
++_LT_OUTPUT_LIBTOOL_INIT
++])
++
++
++# LT_OUTPUT
++# ---------
++# This macro allows early generation of the libtool script (before
++# AC_OUTPUT is called), incase it is used in configure for compilation
++# tests.
++AC_DEFUN([LT_OUTPUT],
++[: ${CONFIG_LT=./config.lt}
++AC_MSG_NOTICE([creating $CONFIG_LT])
++cat >"$CONFIG_LT" <<_LTEOF
++#! $SHELL
++# Generated by $as_me.
++# Run this file to recreate a libtool stub with the current configuration.
++
++lt_cl_silent=false
++SHELL=\${CONFIG_SHELL-$SHELL}
++_LTEOF
++
++cat >>"$CONFIG_LT" <<\_LTEOF
++AS_SHELL_SANITIZE
++_AS_PREPARE
++
++exec AS_MESSAGE_FD>&1
++exec AS_MESSAGE_LOG_FD>>config.log
++{
++ echo
++ AS_BOX([Running $as_me.])
++} >&AS_MESSAGE_LOG_FD
++
++lt_cl_help="\
++\`$as_me' creates a local libtool stub from the current configuration,
++for use in further configure time tests before the real libtool is
++generated.
++
++Usage: $[0] [[OPTIONS]]
++
++ -h, --help print this help, then exit
++ -V, --version print version number, then exit
++ -q, --quiet do not print progress messages
++ -d, --debug don't remove temporary files
++
++Report bugs to <bug-libtool@gnu.org>."
++
++lt_cl_version="\
++m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl
++m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION])
++configured by $[0], generated by m4_PACKAGE_STRING.
++
++Copyright (C) 2008 Free Software Foundation, Inc.
++This config.lt script is free software; the Free Software Foundation
++gives unlimited permision to copy, distribute and modify it."
++
++while test $[#] != 0
++do
++ case $[1] in
++ --version | --v* | -V )
++ echo "$lt_cl_version"; exit 0 ;;
++ --help | --h* | -h )
++ echo "$lt_cl_help"; exit 0 ;;
++ --debug | --d* | -d )
++ debug=: ;;
++ --quiet | --q* | --silent | --s* | -q )
++ lt_cl_silent=: ;;
++
++ -*) AC_MSG_ERROR([unrecognized option: $[1]
++Try \`$[0] --help' for more information.]) ;;
++
++ *) AC_MSG_ERROR([unrecognized argument: $[1]
++Try \`$[0] --help' for more information.]) ;;
++ esac
++ shift
++done
++
++if $lt_cl_silent; then
++ exec AS_MESSAGE_FD>/dev/null
++fi
++_LTEOF
++
++cat >>"$CONFIG_LT" <<_LTEOF
++_LT_OUTPUT_LIBTOOL_COMMANDS_INIT
++_LTEOF
++
++cat >>"$CONFIG_LT" <<\_LTEOF
++AC_MSG_NOTICE([creating $ofile])
++_LT_OUTPUT_LIBTOOL_COMMANDS
++AS_EXIT(0)
++_LTEOF
++chmod +x "$CONFIG_LT"
++
++# configure is writing to config.log, but config.lt does its own redirection,
++# appending to config.log, which fails on DOS, as config.log is still kept
++# open by configure. Here we exec the FD to /dev/null, effectively closing
++# config.log, so it can be properly (re)opened and appended to by config.lt.
++if test "$no_create" != yes; then
++ lt_cl_success=:
++ test "$silent" = yes &&
++ lt_config_lt_args="$lt_config_lt_args --quiet"
++ exec AS_MESSAGE_LOG_FD>/dev/null
++ $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false
++ exec AS_MESSAGE_LOG_FD>>config.log
++ $lt_cl_success || AS_EXIT(1)
++fi
++])# LT_OUTPUT
++
++
++# _LT_CONFIG(TAG)
++# ---------------
++# If TAG is the built-in tag, create an initial libtool script with a
++# default configuration from the untagged config vars. Otherwise add code
++# to config.status for appending the configuration named by TAG from the
++# matching tagged config vars.
++m4_defun([_LT_CONFIG],
++[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
++_LT_CONFIG_SAVE_COMMANDS([
++ m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl
++ m4_if(_LT_TAG, [C], [
++ # See if we are running on zsh, and set the options which allow our
++ # commands through without removal of \ escapes.
++ if test -n "${ZSH_VERSION+set}" ; then
++ setopt NO_GLOB_SUBST
++ fi
++
++ cfgfile="${ofile}T"
++ trap "$RM \"$cfgfile\"; exit 1" 1 2 15
++ $RM "$cfgfile"
++
++ cat <<_LT_EOF >> "$cfgfile"
++#! $SHELL
++
++# `$ECHO "$ofile" | sed 's%^.*/%%'` - Provide generalized library-building support services.
++# Generated automatically by $as_me ($PACKAGE$TIMESTAMP) $VERSION
++# Libtool was configured on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
++# NOTE: Changes made to this file will be lost: look at ltmain.sh.
++#
++_LT_COPYING
++_LT_LIBTOOL_TAGS
++
++# ### BEGIN LIBTOOL CONFIG
++_LT_LIBTOOL_CONFIG_VARS
++_LT_LIBTOOL_TAG_VARS
++# ### END LIBTOOL CONFIG
++
++_LT_EOF
++
++ case $host_os in
++ aix3*)
++ cat <<\_LT_EOF >> "$cfgfile"
++# AIX sometimes has problems with the GCC collect2 program. For some
++# reason, if we set the COLLECT_NAMES environment variable, the problems
++# vanish in a puff of smoke.
++if test "X${COLLECT_NAMES+set}" != Xset; then
++ COLLECT_NAMES=
++ export COLLECT_NAMES
++fi
++_LT_EOF
++ ;;
++ esac
++
++ _LT_PROG_LTMAIN
++
++ # We use sed instead of cat because bash on DJGPP gets confused if
++ # if finds mixed CR/LF and LF-only lines. Since sed operates in
++ # text mode, it properly converts lines to CR/LF. This bash problem
++ # is reportedly fixed, but why not run on old versions too?
++ sed '/^# Generated shell functions inserted here/q' "$ltmain" >> "$cfgfile" \
++ || (rm -f "$cfgfile"; exit 1)
++
++ _LT_PROG_XSI_SHELLFNS
++
++ sed -n '/^# Generated shell functions inserted here/,$p' "$ltmain" >> "$cfgfile" \
++ || (rm -f "$cfgfile"; exit 1)
++
++ mv -f "$cfgfile" "$ofile" ||
++ (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile")
++ chmod +x "$ofile"
++],
++[cat <<_LT_EOF >> "$ofile"
++
++dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded
++dnl in a comment (ie after a #).
++# ### BEGIN LIBTOOL TAG CONFIG: $1
++_LT_LIBTOOL_TAG_VARS(_LT_TAG)
++# ### END LIBTOOL TAG CONFIG: $1
++_LT_EOF
++])dnl /m4_if
++],
++[m4_if([$1], [], [
++ PACKAGE='$PACKAGE'
++ VERSION='$VERSION'
++ TIMESTAMP='$TIMESTAMP'
++ RM='$RM'
++ ofile='$ofile'], [])
++])dnl /_LT_CONFIG_SAVE_COMMANDS
++])# _LT_CONFIG
++
++
++# LT_SUPPORTED_TAG(TAG)
++# ---------------------
++# Trace this macro to discover what tags are supported by the libtool
++# --tag option, using:
++# autoconf --trace 'LT_SUPPORTED_TAG:$1'
++AC_DEFUN([LT_SUPPORTED_TAG], [])
++
++
++# C support is built-in for now
++m4_define([_LT_LANG_C_enabled], [])
++m4_define([_LT_TAGS], [])
++
++
++# LT_LANG(LANG)
++# -------------
++# Enable libtool support for the given language if not already enabled.
++AC_DEFUN([LT_LANG],
++[AC_BEFORE([$0], [LT_OUTPUT])dnl
++m4_case([$1],
++ [C], [_LT_LANG(C)],
++ [C++], [_LT_LANG(CXX)],
++ [Java], [_LT_LANG(GCJ)],
++ [Fortran 77], [_LT_LANG(F77)],
++ [Fortran], [_LT_LANG(FC)],
++ [Windows Resource], [_LT_LANG(RC)],
++ [m4_ifdef([_LT_LANG_]$1[_CONFIG],
++ [_LT_LANG($1)],
++ [m4_fatal([$0: unsupported language: "$1"])])])dnl
++])# LT_LANG
++
++
++# _LT_LANG(LANGNAME)
++# ------------------
++m4_defun([_LT_LANG],
++[m4_ifdef([_LT_LANG_]$1[_enabled], [],
++ [LT_SUPPORTED_TAG([$1])dnl
++ m4_append([_LT_TAGS], [$1 ])dnl
++ m4_define([_LT_LANG_]$1[_enabled], [])dnl
++ _LT_LANG_$1_CONFIG($1)])dnl
++])# _LT_LANG
++
++
++# _LT_LANG_DEFAULT_CONFIG
++# -----------------------
++m4_defun([_LT_LANG_DEFAULT_CONFIG],
++[AC_PROVIDE_IFELSE([AC_PROG_CXX],
++ [LT_LANG(CXX)],
++ [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])])
++
++AC_PROVIDE_IFELSE([AC_PROG_F77],
++ [LT_LANG(F77)],
++ [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])])
++
++AC_PROVIDE_IFELSE([AC_PROG_FC],
++ [LT_LANG(FC)],
++ [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])])
++
++dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal
++dnl pulling things in needlessly.
++AC_PROVIDE_IFELSE([AC_PROG_GCJ],
++ [LT_LANG(GCJ)],
++ [AC_PROVIDE_IFELSE([A][M_PROG_GCJ],
++ [LT_LANG(GCJ)],
++ [AC_PROVIDE_IFELSE([LT_PROG_GCJ],
++ [LT_LANG(GCJ)],
++ [m4_ifdef([AC_PROG_GCJ],
++ [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])])
++ m4_ifdef([A][M_PROG_GCJ],
++ [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])])
++ m4_ifdef([LT_PROG_GCJ],
++ [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])])
++
++AC_PROVIDE_IFELSE([LT_PROG_RC],
++ [LT_LANG(RC)],
++ [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])])
++])# _LT_LANG_DEFAULT_CONFIG
++
++# Obsolete macros:
++AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)])
++AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)])
++AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)])
++AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)])
++dnl aclocal-1.4 backwards compatibility:
++dnl AC_DEFUN([AC_LIBTOOL_CXX], [])
++dnl AC_DEFUN([AC_LIBTOOL_F77], [])
++dnl AC_DEFUN([AC_LIBTOOL_FC], [])
++dnl AC_DEFUN([AC_LIBTOOL_GCJ], [])
++
++
++# _LT_TAG_COMPILER
++# ----------------
++m4_defun([_LT_TAG_COMPILER],
++[AC_REQUIRE([AC_PROG_CC])dnl
++
++_LT_DECL([LTCC], [CC], [1], [A C compiler])dnl
++_LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl
++_LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl
++_LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl
++
++# If no C compiler was specified, use CC.
++LTCC=${LTCC-"$CC"}
++
++# If no C compiler flags were specified, use CFLAGS.
++LTCFLAGS=${LTCFLAGS-"$CFLAGS"}
++
++# Allow CC to be a program name with arguments.
++compiler=$CC
++])# _LT_TAG_COMPILER
++
++
++# _LT_COMPILER_BOILERPLATE
++# ------------------------
++# Check for compiler boilerplate output or warnings with
++# the simple compiler test code.
++m4_defun([_LT_COMPILER_BOILERPLATE],
++[m4_require([_LT_DECL_SED])dnl
++ac_outfile=conftest.$ac_objext
++echo "$lt_simple_compile_test_code" >conftest.$ac_ext
++eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
++_lt_compiler_boilerplate=`cat conftest.err`
++$RM conftest*
++])# _LT_COMPILER_BOILERPLATE
++
++
++# _LT_LINKER_BOILERPLATE
++# ----------------------
++# Check for linker boilerplate output or warnings with
++# the simple link test code.
++m4_defun([_LT_LINKER_BOILERPLATE],
++[m4_require([_LT_DECL_SED])dnl
++ac_outfile=conftest.$ac_objext
++echo "$lt_simple_link_test_code" >conftest.$ac_ext
++eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err
++_lt_linker_boilerplate=`cat conftest.err`
++$RM -r conftest*
++])# _LT_LINKER_BOILERPLATE
++
++# _LT_REQUIRED_DARWIN_CHECKS
++# -------------------------
++m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[
++ case $host_os in
++ rhapsody* | darwin*)
++ AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:])
++ AC_CHECK_TOOL([NMEDIT], [nmedit], [:])
++ AC_CHECK_TOOL([LIPO], [lipo], [:])
++ AC_CHECK_TOOL([OTOOL], [otool], [:])
++ AC_CHECK_TOOL([OTOOL64], [otool64], [:])
++ _LT_DECL([], [DSYMUTIL], [1],
++ [Tool to manipulate archived DWARF debug symbol files on Mac OS X])
++ _LT_DECL([], [NMEDIT], [1],
++ [Tool to change global to local symbols on Mac OS X])
++ _LT_DECL([], [LIPO], [1],
++ [Tool to manipulate fat objects and archives on Mac OS X])
++ _LT_DECL([], [OTOOL], [1],
++ [ldd/readelf like tool for Mach-O binaries on Mac OS X])
++ _LT_DECL([], [OTOOL64], [1],
++ [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4])
++
++ AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod],
++ [lt_cv_apple_cc_single_mod=no
++ if test -z "${LT_MULTI_MODULE}"; then
++ # By default we will add the -single_module flag. You can override
++ # by either setting the environment variable LT_MULTI_MODULE
++ # non-empty at configure time, or by adding -multi_module to the
++ # link flags.
++ rm -rf libconftest.dylib*
++ echo "int foo(void){return 1;}" > conftest.c
++ echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
++-dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD
++ $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \
++ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err
++ _lt_result=$?
++ if test -f libconftest.dylib && test ! -s conftest.err && test $_lt_result = 0; then
++ lt_cv_apple_cc_single_mod=yes
++ else
++ cat conftest.err >&AS_MESSAGE_LOG_FD
++ fi
++ rm -rf libconftest.dylib*
++ rm -f conftest.*
++ fi])
++ AC_CACHE_CHECK([for -exported_symbols_list linker flag],
++ [lt_cv_ld_exported_symbols_list],
++ [lt_cv_ld_exported_symbols_list=no
++ save_LDFLAGS=$LDFLAGS
++ echo "_main" > conftest.sym
++ LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym"
++ AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
++ [lt_cv_ld_exported_symbols_list=yes],
++ [lt_cv_ld_exported_symbols_list=no])
++ LDFLAGS="$save_LDFLAGS"
++ ])
++ case $host_os in
++ rhapsody* | darwin1.[[012]])
++ _lt_dar_allow_undefined='${wl}-undefined ${wl}suppress' ;;
++ darwin1.*)
++ _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
++ darwin*) # darwin 5.x on
++ # if running on 10.5 or later, the deployment target defaults
++ # to the OS version, if on x86, and 10.4, the deployment
++ # target defaults to 10.4. Don't you love it?
++ case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in
++ 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*)
++ _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
++ 10.[[012]]*)
++ _lt_dar_allow_undefined='${wl}-flat_namespace ${wl}-undefined ${wl}suppress' ;;
++ 10.*)
++ _lt_dar_allow_undefined='${wl}-undefined ${wl}dynamic_lookup' ;;
++ esac
++ ;;
++ esac
++ if test "$lt_cv_apple_cc_single_mod" = "yes"; then
++ _lt_dar_single_mod='$single_module'
++ fi
++ if test "$lt_cv_ld_exported_symbols_list" = "yes"; then
++ _lt_dar_export_syms=' ${wl}-exported_symbols_list,$output_objdir/${libname}-symbols.expsym'
++ else
++ _lt_dar_export_syms='~$NMEDIT -s $output_objdir/${libname}-symbols.expsym ${lib}'
++ fi
++ if test "$DSYMUTIL" != ":"; then
++ _lt_dsymutil='~$DSYMUTIL $lib || :'
++ else
++ _lt_dsymutil=
++ fi
++ ;;
++ esac
++])
++
++
++# _LT_DARWIN_LINKER_FEATURES
++# --------------------------
++# Checks for linker and compiler features on darwin
++m4_defun([_LT_DARWIN_LINKER_FEATURES],
++[
++ m4_require([_LT_REQUIRED_DARWIN_CHECKS])
++ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
++ _LT_TAGVAR(hardcode_direct, $1)=no
++ _LT_TAGVAR(hardcode_automatic, $1)=yes
++ _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
++ _LT_TAGVAR(whole_archive_flag_spec, $1)=''
++ _LT_TAGVAR(link_all_deplibs, $1)=yes
++ _LT_TAGVAR(allow_undefined_flag, $1)="$_lt_dar_allow_undefined"
++ case $cc_basename in
++ ifort*) _lt_dar_can_shared=yes ;;
++ *) _lt_dar_can_shared=$GCC ;;
++ esac
++ if test "$_lt_dar_can_shared" = "yes"; then
++ output_verbose_link_cmd=echo
++ _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod${_lt_dsymutil}"
++ _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dsymutil}"
++ _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring ${_lt_dar_single_mod}${_lt_dar_export_syms}${_lt_dsymutil}"
++ _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags${_lt_dar_export_syms}${_lt_dsymutil}"
++ m4_if([$1], [CXX],
++[ if test "$lt_cv_apple_cc_single_mod" != "yes"; then
++ _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dsymutil}"
++ _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's,^,_,' < \$export_symbols > \$output_objdir/\${libname}-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \${lib}-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \${lib}-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring${_lt_dar_export_syms}${_lt_dsymutil}"
++ fi
++],[])
++ else
++ _LT_TAGVAR(ld_shlibs, $1)=no
++ fi
++])
++
++# _LT_SYS_MODULE_PATH_AIX
++# -----------------------
++# Links a minimal program and checks the executable
++# for the system default hardcoded library path. In most cases,
++# this is /usr/lib:/lib, but when the MPI compilers are used
++# the location of the communication and MPI libs are included too.
++# If we don't find anything, use the default library path according
++# to the aix ld manual.
++m4_defun([_LT_SYS_MODULE_PATH_AIX],
++[m4_require([_LT_DECL_SED])dnl
++AC_LINK_IFELSE(AC_LANG_PROGRAM,[
++lt_aix_libpath_sed='
++ /Import File Strings/,/^$/ {
++ /^0/ {
++ s/^0 *\(.*\)$/\1/
++ p
++ }
++ }'
++aix_libpath=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
++# Check for a 64-bit object if we didn't find anything.
++if test -z "$aix_libpath"; then
++ aix_libpath=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"`
++fi],[])
++if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib"; fi
++])# _LT_SYS_MODULE_PATH_AIX
++
++
++# _LT_SHELL_INIT(ARG)
++# -------------------
++m4_define([_LT_SHELL_INIT],
++[ifdef([AC_DIVERSION_NOTICE],
++ [AC_DIVERT_PUSH(AC_DIVERSION_NOTICE)],
++ [AC_DIVERT_PUSH(NOTICE)])
++$1
++AC_DIVERT_POP
++])# _LT_SHELL_INIT
++
++
++# _LT_PROG_ECHO_BACKSLASH
++# -----------------------
++# Add some code to the start of the generated configure script which
++# will find an echo command which doesn't interpret backslashes.
++m4_defun([_LT_PROG_ECHO_BACKSLASH],
++[_LT_SHELL_INIT([
++# Check that we are running under the correct shell.
++SHELL=${CONFIG_SHELL-/bin/sh}
++
++case X$lt_ECHO in
++X*--fallback-echo)
++ # Remove one level of quotation (which was required for Make).
++ ECHO=`echo "$lt_ECHO" | sed 's,\\\\\[$]\\[$]0,'[$]0','`
++ ;;
++esac
++
++ECHO=${lt_ECHO-echo}
++if test "X[$]1" = X--no-reexec; then
++ # Discard the --no-reexec flag, and continue.
++ shift
++elif test "X[$]1" = X--fallback-echo; then
++ # Avoid inline document here, it may be left over
++ :
++elif test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' ; then
++ # Yippee, $ECHO works!
++ :
++else
++ # Restart under the correct shell.
++ exec $SHELL "[$]0" --no-reexec ${1+"[$]@"}
++fi
++
++if test "X[$]1" = X--fallback-echo; then
++ # used as fallback echo
++ shift
++ cat <<_LT_EOF
++[$]*
++_LT_EOF
++ exit 0
++fi
++
++# The HP-UX ksh and POSIX shell print the target directory to stdout
++# if CDPATH is set.
++(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
++
++if test -z "$lt_ECHO"; then
++ if test "X${echo_test_string+set}" != Xset; then
++ # find a string as large as possible, as long as the shell can cope with it
++ for cmd in 'sed 50q "[$]0"' 'sed 20q "[$]0"' 'sed 10q "[$]0"' 'sed 2q "[$]0"' 'echo test'; do
++ # expected sizes: less than 2Kb, 1Kb, 512 bytes, 16 bytes, ...
++ if { echo_test_string=`eval $cmd`; } 2>/dev/null &&
++ { test "X$echo_test_string" = "X$echo_test_string"; } 2>/dev/null
++ then
++ break
++ fi
++ done
++ fi
++
++ if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
++ echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
++ test "X$echo_testing_string" = "X$echo_test_string"; then
++ :
++ else
++ # The Solaris, AIX, and Digital Unix default echo programs unquote
++ # backslashes. This makes it impossible to quote backslashes using
++ # echo "$something" | sed 's/\\/\\\\/g'
++ #
++ # So, first we look for a working echo in the user's PATH.
++
++ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
++ for dir in $PATH /usr/ucb; do
++ IFS="$lt_save_ifs"
++ if (test -f $dir/echo || test -f $dir/echo$ac_exeext) &&
++ test "X`($dir/echo '\t') 2>/dev/null`" = 'X\t' &&
++ echo_testing_string=`($dir/echo "$echo_test_string") 2>/dev/null` &&
++ test "X$echo_testing_string" = "X$echo_test_string"; then
++ ECHO="$dir/echo"
++ break
++ fi
++ done
++ IFS="$lt_save_ifs"
++
++ if test "X$ECHO" = Xecho; then
++ # We didn't find a better echo, so look for alternatives.
++ if test "X`{ print -r '\t'; } 2>/dev/null`" = 'X\t' &&
++ echo_testing_string=`{ print -r "$echo_test_string"; } 2>/dev/null` &&
++ test "X$echo_testing_string" = "X$echo_test_string"; then
++ # This shell has a builtin print -r that does the trick.
++ ECHO='print -r'
++ elif { test -f /bin/ksh || test -f /bin/ksh$ac_exeext; } &&
++ test "X$CONFIG_SHELL" != X/bin/ksh; then
++ # If we have ksh, try running configure again with it.
++ ORIGINAL_CONFIG_SHELL=${CONFIG_SHELL-/bin/sh}
++ export ORIGINAL_CONFIG_SHELL
++ CONFIG_SHELL=/bin/ksh
++ export CONFIG_SHELL
++ exec $CONFIG_SHELL "[$]0" --no-reexec ${1+"[$]@"}
++ else
++ # Try using printf.
++ ECHO='printf %s\n'
++ if test "X`{ $ECHO '\t'; } 2>/dev/null`" = 'X\t' &&
++ echo_testing_string=`{ $ECHO "$echo_test_string"; } 2>/dev/null` &&
++ test "X$echo_testing_string" = "X$echo_test_string"; then
++ # Cool, printf works
++ :
++ elif echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
++ test "X$echo_testing_string" = 'X\t' &&
++ echo_testing_string=`($ORIGINAL_CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
++ test "X$echo_testing_string" = "X$echo_test_string"; then
++ CONFIG_SHELL=$ORIGINAL_CONFIG_SHELL
++ export CONFIG_SHELL
++ SHELL="$CONFIG_SHELL"
++ export SHELL
++ ECHO="$CONFIG_SHELL [$]0 --fallback-echo"
++ elif echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo '\t') 2>/dev/null` &&
++ test "X$echo_testing_string" = 'X\t' &&
++ echo_testing_string=`($CONFIG_SHELL "[$]0" --fallback-echo "$echo_test_string") 2>/dev/null` &&
++ test "X$echo_testing_string" = "X$echo_test_string"; then
++ ECHO="$CONFIG_SHELL [$]0 --fallback-echo"
++ else
++ # maybe with a smaller string...
++ prev=:
++
++ for cmd in 'echo test' 'sed 2q "[$]0"' 'sed 10q "[$]0"' 'sed 20q "[$]0"' 'sed 50q "[$]0"'; do
++ if { test "X$echo_test_string" = "X`eval $cmd`"; } 2>/dev/null
++ then
++ break
++ fi
++ prev="$cmd"
++ done
++
++ if test "$prev" != 'sed 50q "[$]0"'; then
++ echo_test_string=`eval $prev`
++ export echo_test_string
++ exec ${ORIGINAL_CONFIG_SHELL-${CONFIG_SHELL-/bin/sh}} "[$]0" ${1+"[$]@"}
++ else
++ # Oops. We lost completely, so just stick with echo.
++ ECHO=echo
++ fi
++ fi
++ fi
++ fi
++ fi
++fi
++
++# Copy echo and quote the copy suitably for passing to libtool from
++# the Makefile, instead of quoting the original, which is used later.
++lt_ECHO=$ECHO
++if test "X$lt_ECHO" = "X$CONFIG_SHELL [$]0 --fallback-echo"; then
++ lt_ECHO="$CONFIG_SHELL \\\$\[$]0 --fallback-echo"
++fi
++
++AC_SUBST(lt_ECHO)
++])
++_LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts])
++_LT_DECL([], [ECHO], [1],
++ [An echo program that does not interpret backslashes])
++])# _LT_PROG_ECHO_BACKSLASH
++
++
++# _LT_ENABLE_LOCK
++# ---------------
++m4_defun([_LT_ENABLE_LOCK],
++[AC_ARG_ENABLE([libtool-lock],
++ [AS_HELP_STRING([--disable-libtool-lock],
++ [avoid locking (might break parallel builds)])])
++test "x$enable_libtool_lock" != xno && enable_libtool_lock=yes
++
++# Some flags need to be propagated to the compiler or linker for good
++# libtool support.
++case $host in
++ia64-*-hpux*)
++ # Find out which ABI we are using.
++ echo 'int i;' > conftest.$ac_ext
++ if AC_TRY_EVAL(ac_compile); then
++ case `/usr/bin/file conftest.$ac_objext` in
++ *ELF-32*)
++ HPUX_IA64_MODE="32"
++ ;;
++ *ELF-64*)
++ HPUX_IA64_MODE="64"
++ ;;
++ esac
++ fi
++ rm -rf conftest*
++ ;;
++*-*-irix6*)
++ # Find out which ABI we are using.
++ echo '[#]line __oline__ "configure"' > conftest.$ac_ext
++ if AC_TRY_EVAL(ac_compile); then
++ if test "$lt_cv_prog_gnu_ld" = yes; then
++ case `/usr/bin/file conftest.$ac_objext` in
++ *32-bit*)
++ LD="${LD-ld} -melf32bsmip"
++ ;;
++ *N32*)
++ LD="${LD-ld} -melf32bmipn32"
++ ;;
++ *64-bit*)
++ LD="${LD-ld} -melf64bmip"
++ ;;
++ esac
++ else
++ case `/usr/bin/file conftest.$ac_objext` in
++ *32-bit*)
++ LD="${LD-ld} -32"
++ ;;
++ *N32*)
++ LD="${LD-ld} -n32"
++ ;;
++ *64-bit*)
++ LD="${LD-ld} -64"
++ ;;
++ esac
++ fi
++ fi
++ rm -rf conftest*
++ ;;
++
++x86_64-*kfreebsd*-gnu|x86_64-*linux*|ppc*-*linux*|powerpc*-*linux*| \
++s390*-*linux*|s390*-*tpf*|sparc*-*linux*)
++ # Find out which ABI we are using.
++ echo 'int i;' > conftest.$ac_ext
++ if AC_TRY_EVAL(ac_compile); then
++ case `/usr/bin/file conftest.o` in
++ *32-bit*)
++ case $host in
++ x86_64-*kfreebsd*-gnu)
++ LD="${LD-ld} -m elf_i386_fbsd"
++ ;;
++ x86_64-*linux*)
++ LD="${LD-ld} -m elf_i386"
++ ;;
++ ppc64-*linux*|powerpc64-*linux*)
++ LD="${LD-ld} -m elf32ppclinux"
++ ;;
++ s390x-*linux*)
++ LD="${LD-ld} -m elf_s390"
++ ;;
++ sparc64-*linux*)
++ LD="${LD-ld} -m elf32_sparc"
++ ;;
++ esac
++ ;;
++ *64-bit*)
++ case $host in
++ x86_64-*kfreebsd*-gnu)
++ LD="${LD-ld} -m elf_x86_64_fbsd"
++ ;;
++ x86_64-*linux*)
++ LD="${LD-ld} -m elf_x86_64"
++ ;;
++ ppc*-*linux*|powerpc*-*linux*)
++ LD="${LD-ld} -m elf64ppc"
++ ;;
++ s390*-*linux*|s390*-*tpf*)
++ LD="${LD-ld} -m elf64_s390"
++ ;;
++ sparc*-*linux*)
++ LD="${LD-ld} -m elf64_sparc"
++ ;;
++ esac
++ ;;
++ esac
++ fi
++ rm -rf conftest*
++ ;;
++
++*-*-sco3.2v5*)
++ # On SCO OpenServer 5, we need -belf to get full-featured binaries.
++ SAVE_CFLAGS="$CFLAGS"
++ CFLAGS="$CFLAGS -belf"
++ AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf,
++ [AC_LANG_PUSH(C)
++ AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no])
++ AC_LANG_POP])
++ if test x"$lt_cv_cc_needs_belf" != x"yes"; then
++ # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf
++ CFLAGS="$SAVE_CFLAGS"
++ fi
++ ;;
++sparc*-*solaris*)
++ # Find out which ABI we are using.
++ echo 'int i;' > conftest.$ac_ext
++ if AC_TRY_EVAL(ac_compile); then
++ case `/usr/bin/file conftest.o` in
++ *64-bit*)
++ case $lt_cv_prog_gnu_ld in
++ yes*) LD="${LD-ld} -m elf64_sparc" ;;
++ *)
++ if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then
++ LD="${LD-ld} -64"
++ fi
++ ;;
++ esac
++ ;;
++ esac
++ fi
++ rm -rf conftest*
++ ;;
++esac
++
++need_locks="$enable_libtool_lock"
++])# _LT_ENABLE_LOCK
++
++
++# _LT_CMD_OLD_ARCHIVE
++# -------------------
++m4_defun([_LT_CMD_OLD_ARCHIVE],
++[AC_CHECK_TOOL(AR, ar, false)
++test -z "$AR" && AR=ar
++test -z "$AR_FLAGS" && AR_FLAGS=cru
++_LT_DECL([], [AR], [1], [The archiver])
++_LT_DECL([], [AR_FLAGS], [1])
++
++AC_CHECK_TOOL(STRIP, strip, :)
++test -z "$STRIP" && STRIP=:
++_LT_DECL([], [STRIP], [1], [A symbol stripping program])
++
++AC_CHECK_TOOL(RANLIB, ranlib, :)
++test -z "$RANLIB" && RANLIB=:
++_LT_DECL([], [RANLIB], [1],
++ [Commands used to install an old-style archive])
++
++# Determine commands to create old-style static archives.
++old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs'
++old_postinstall_cmds='chmod 644 $oldlib'
++old_postuninstall_cmds=
++
++if test -n "$RANLIB"; then
++ case $host_os in
++ openbsd*)
++ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$oldlib"
++ ;;
++ *)
++ old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$oldlib"
++ ;;
++ esac
++ old_archive_cmds="$old_archive_cmds~\$RANLIB \$oldlib"
++fi
++_LT_DECL([], [old_postinstall_cmds], [2])
++_LT_DECL([], [old_postuninstall_cmds], [2])
++_LT_TAGDECL([], [old_archive_cmds], [2],
++ [Commands used to build an old-style archive])
++])# _LT_CMD_OLD_ARCHIVE
++
++
++# _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
++# [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE])
++# ----------------------------------------------------------------
++# Check whether the given compiler option works
++AC_DEFUN([_LT_COMPILER_OPTION],
++[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
++m4_require([_LT_DECL_SED])dnl
++AC_CACHE_CHECK([$1], [$2],
++ [$2=no
++ m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4])
++ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
++ lt_compiler_flag="$3"
++ # Insert the option either (1) after the last *FLAGS variable, or
++ # (2) before a word containing "conftest.", or (3) at the end.
++ # Note that $ac_compile itself does not contain backslashes and begins
++ # with a dollar sign (not a hyphen), so the echo should work correctly.
++ # The option is referenced via a variable to avoid confusing sed.
++ lt_compile=`echo "$ac_compile" | $SED \
++ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
++ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
++ -e 's:$: $lt_compiler_flag:'`
++ (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
++ (eval "$lt_compile" 2>conftest.err)
++ ac_status=$?
++ cat conftest.err >&AS_MESSAGE_LOG_FD
++ echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
++ if (exit $ac_status) && test -s "$ac_outfile"; then
++ # The compiler can only warn and ignore the option if not recognized
++ # So say no if there are warnings other than the usual output.
++ $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' >conftest.exp
++ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
++ if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then
++ $2=yes
++ fi
++ fi
++ $RM conftest*
++])
++
++if test x"[$]$2" = xyes; then
++ m4_if([$5], , :, [$5])
++else
++ m4_if([$6], , :, [$6])
++fi
++])# _LT_COMPILER_OPTION
++
++# Old name:
++AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION])
++dnl aclocal-1.4 backwards compatibility:
++dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], [])
++
++
++# _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS,
++# [ACTION-SUCCESS], [ACTION-FAILURE])
++# ----------------------------------------------------
++# Check whether the given linker option works
++AC_DEFUN([_LT_LINKER_OPTION],
++[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
++m4_require([_LT_DECL_SED])dnl
++AC_CACHE_CHECK([$1], [$2],
++ [$2=no
++ save_LDFLAGS="$LDFLAGS"
++ LDFLAGS="$LDFLAGS $3"
++ echo "$lt_simple_link_test_code" > conftest.$ac_ext
++ if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then
++ # The linker can only warn and ignore the option if not recognized
++ # So say no if there are warnings
++ if test -s conftest.err; then
++ # Append any errors to the config.log.
++ cat conftest.err 1>&AS_MESSAGE_LOG_FD
++ $ECHO "X$_lt_linker_boilerplate" | $Xsed -e '/^$/d' > conftest.exp
++ $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2
++ if diff conftest.exp conftest.er2 >/dev/null; then
++ $2=yes
++ fi
++ else
++ $2=yes
++ fi
++ fi
++ $RM -r conftest*
++ LDFLAGS="$save_LDFLAGS"
++])
++
++if test x"[$]$2" = xyes; then
++ m4_if([$4], , :, [$4])
++else
++ m4_if([$5], , :, [$5])
++fi
++])# _LT_LINKER_OPTION
++
++# Old name:
++AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION])
++dnl aclocal-1.4 backwards compatibility:
++dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], [])
++
++
++# LT_CMD_MAX_LEN
++#---------------
++AC_DEFUN([LT_CMD_MAX_LEN],
++[AC_REQUIRE([AC_CANONICAL_HOST])dnl
++# find the maximum length of command line arguments
++AC_MSG_CHECKING([the maximum length of command line arguments])
++AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl
++ i=0
++ teststring="ABCD"
++
++ case $build_os in
++ msdosdjgpp*)
++ # On DJGPP, this test can blow up pretty badly due to problems in libc
++ # (any single argument exceeding 2000 bytes causes a buffer overrun
++ # during glob expansion). Even if it were fixed, the result of this
++ # check would be larger than it should be.
++ lt_cv_sys_max_cmd_len=12288; # 12K is about right
++ ;;
++
++ gnu*)
++ # Under GNU Hurd, this test is not required because there is
++ # no limit to the length of command line arguments.
++ # Libtool will interpret -1 as no limit whatsoever
++ lt_cv_sys_max_cmd_len=-1;
++ ;;
++
++ cygwin* | mingw* | cegcc*)
++ # On Win9x/ME, this test blows up -- it succeeds, but takes
++ # about 5 minutes as the teststring grows exponentially.
++ # Worse, since 9x/ME are not pre-emptively multitasking,
++ # you end up with a "frozen" computer, even though with patience
++ # the test eventually succeeds (with a max line length of 256k).
++ # Instead, let's just punt: use the minimum linelength reported by
++ # all of the supported platforms: 8192 (on NT/2K/XP).
++ lt_cv_sys_max_cmd_len=8192;
++ ;;
++
++ amigaos*)
++ # On AmigaOS with pdksh, this test takes hours, literally.
++ # So we just punt and use a minimum line length of 8192.
++ lt_cv_sys_max_cmd_len=8192;
++ ;;
++
++ netbsd* | freebsd* | openbsd* | darwin* | dragonfly*)
++ # This has been around since 386BSD, at least. Likely further.
++ if test -x /sbin/sysctl; then
++ lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax`
++ elif test -x /usr/sbin/sysctl; then
++ lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax`
++ else
++ lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs
++ fi
++ # And add a safety zone
++ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
++ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
++ ;;
++
++ interix*)
++ # We know the value 262144 and hardcode it with a safety zone (like BSD)
++ lt_cv_sys_max_cmd_len=196608
++ ;;
++
++ osf*)
++ # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure
++ # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not
++ # nice to cause kernel panics so lets avoid the loop below.
++ # First set a reasonable default.
++ lt_cv_sys_max_cmd_len=16384
++ #
++ if test -x /sbin/sysconfig; then
++ case `/sbin/sysconfig -q proc exec_disable_arg_limit` in
++ *1*) lt_cv_sys_max_cmd_len=-1 ;;
++ esac
++ fi
++ ;;
++ sco3.2v5*)
++ lt_cv_sys_max_cmd_len=102400
++ ;;
++ sysv5* | sco5v6* | sysv4.2uw2*)
++ kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null`
++ if test -n "$kargmax"; then
++ lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'`
++ else
++ lt_cv_sys_max_cmd_len=32768
++ fi
++ ;;
++ *)
++ lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null`
++ if test -n "$lt_cv_sys_max_cmd_len"; then
++ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4`
++ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3`
++ else
++ # Make teststring a little bigger before we do anything with it.
++ # a 1K string should be a reasonable start.
++ for i in 1 2 3 4 5 6 7 8 ; do
++ teststring=$teststring$teststring
++ done
++ SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}}
++ # If test is not a shell built-in, we'll probably end up computing a
++ # maximum length that is only half of the actual maximum length, but
++ # we can't tell.
++ while { test "X"`$SHELL [$]0 --fallback-echo "X$teststring$teststring" 2>/dev/null` \
++ = "XX$teststring$teststring"; } >/dev/null 2>&1 &&
++ test $i != 17 # 1/2 MB should be enough
++ do
++ i=`expr $i + 1`
++ teststring=$teststring$teststring
++ done
++ # Only check the string length outside the loop.
++ lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1`
++ teststring=
++ # Add a significant safety factor because C++ compilers can tack on
++ # massive amounts of additional arguments before passing them to the
++ # linker. It appears as though 1/2 is a usable value.
++ lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2`
++ fi
++ ;;
++ esac
++])
++if test -n $lt_cv_sys_max_cmd_len ; then
++ AC_MSG_RESULT($lt_cv_sys_max_cmd_len)
++else
++ AC_MSG_RESULT(none)
++fi
++max_cmd_len=$lt_cv_sys_max_cmd_len
++_LT_DECL([], [max_cmd_len], [0],
++ [What is the maximum length of a command?])
++])# LT_CMD_MAX_LEN
++
++# Old name:
++AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN])
++dnl aclocal-1.4 backwards compatibility:
++dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], [])
++
++
++# _LT_HEADER_DLFCN
++# ----------------
++m4_defun([_LT_HEADER_DLFCN],
++[AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl
++])# _LT_HEADER_DLFCN
++
++
++# _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE,
++# ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING)
++# ----------------------------------------------------------------
++m4_defun([_LT_TRY_DLOPEN_SELF],
++[m4_require([_LT_HEADER_DLFCN])dnl
++if test "$cross_compiling" = yes; then :
++ [$4]
++else
++ lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
++ lt_status=$lt_dlunknown
++ cat > conftest.$ac_ext <<_LT_EOF
++[#line __oline__ "configure"
++#include "confdefs.h"
++
++#if HAVE_DLFCN_H
++#include <dlfcn.h>
++#endif
++
++#include <stdio.h>
++
++#ifdef RTLD_GLOBAL
++# define LT_DLGLOBAL RTLD_GLOBAL
++#else
++# ifdef DL_GLOBAL
++# define LT_DLGLOBAL DL_GLOBAL
++# else
++# define LT_DLGLOBAL 0
++# endif
++#endif
++
++/* We may have to define LT_DLLAZY_OR_NOW in the command line if we
++ find out it does not work in some platform. */
++#ifndef LT_DLLAZY_OR_NOW
++# ifdef RTLD_LAZY
++# define LT_DLLAZY_OR_NOW RTLD_LAZY
++# else
++# ifdef DL_LAZY
++# define LT_DLLAZY_OR_NOW DL_LAZY
++# else
++# ifdef RTLD_NOW
++# define LT_DLLAZY_OR_NOW RTLD_NOW
++# else
++# ifdef DL_NOW
++# define LT_DLLAZY_OR_NOW DL_NOW
++# else
++# define LT_DLLAZY_OR_NOW 0
++# endif
++# endif
++# endif
++# endif
++#endif
++
++void fnord() { int i=42;}
++int main ()
++{
++ void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW);
++ int status = $lt_dlunknown;
++
++ if (self)
++ {
++ if (dlsym (self,"fnord")) status = $lt_dlno_uscore;
++ else if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore;
++ /* dlclose (self); */
++ }
++ else
++ puts (dlerror ());
++
++ return status;
++}]
++_LT_EOF
++ if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext} 2>/dev/null; then
++ (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null
++ lt_status=$?
++ case x$lt_status in
++ x$lt_dlno_uscore) $1 ;;
++ x$lt_dlneed_uscore) $2 ;;
++ x$lt_dlunknown|x*) $3 ;;
++ esac
++ else :
++ # compilation failed
++ $3
++ fi
++fi
++rm -fr conftest*
++])# _LT_TRY_DLOPEN_SELF
++
++
++# LT_SYS_DLOPEN_SELF
++# ------------------
++AC_DEFUN([LT_SYS_DLOPEN_SELF],
++[m4_require([_LT_HEADER_DLFCN])dnl
++if test "x$enable_dlopen" != xyes; then
++ enable_dlopen=unknown
++ enable_dlopen_self=unknown
++ enable_dlopen_self_static=unknown
++else
++ lt_cv_dlopen=no
++ lt_cv_dlopen_libs=
++
++ case $host_os in
++ beos*)
++ lt_cv_dlopen="load_add_on"
++ lt_cv_dlopen_libs=
++ lt_cv_dlopen_self=yes
++ ;;
++
++ mingw* | pw32* | cegcc*)
++ lt_cv_dlopen="LoadLibrary"
++ lt_cv_dlopen_libs=
++ ;;
++
++ cygwin*)
++ lt_cv_dlopen="dlopen"
++ lt_cv_dlopen_libs=
++ ;;
++
++ darwin*)
++ # if libdl is installed we need to link against it
++ AC_CHECK_LIB([dl], [dlopen],
++ [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],[
++ lt_cv_dlopen="dyld"
++ lt_cv_dlopen_libs=
++ lt_cv_dlopen_self=yes
++ ])
++ ;;
++
++ *)
++ AC_CHECK_FUNC([shl_load],
++ [lt_cv_dlopen="shl_load"],
++ [AC_CHECK_LIB([dld], [shl_load],
++ [lt_cv_dlopen="shl_load" lt_cv_dlopen_libs="-ldld"],
++ [AC_CHECK_FUNC([dlopen],
++ [lt_cv_dlopen="dlopen"],
++ [AC_CHECK_LIB([dl], [dlopen],
++ [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-ldl"],
++ [AC_CHECK_LIB([svld], [dlopen],
++ [lt_cv_dlopen="dlopen" lt_cv_dlopen_libs="-lsvld"],
++ [AC_CHECK_LIB([dld], [dld_link],
++ [lt_cv_dlopen="dld_link" lt_cv_dlopen_libs="-ldld"])
++ ])
++ ])
++ ])
++ ])
++ ])
++ ;;
++ esac
++
++ if test "x$lt_cv_dlopen" != xno; then
++ enable_dlopen=yes
++ else
++ enable_dlopen=no
++ fi
++
++ case $lt_cv_dlopen in
++ dlopen)
++ save_CPPFLAGS="$CPPFLAGS"
++ test "x$ac_cv_header_dlfcn_h" = xyes && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H"
++
++ save_LDFLAGS="$LDFLAGS"
++ wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\"
++
++ save_LIBS="$LIBS"
++ LIBS="$lt_cv_dlopen_libs $LIBS"
++
++ AC_CACHE_CHECK([whether a program can dlopen itself],
++ lt_cv_dlopen_self, [dnl
++ _LT_TRY_DLOPEN_SELF(
++ lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes,
++ lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross)
++ ])
++
++ if test "x$lt_cv_dlopen_self" = xyes; then
++ wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\"
++ AC_CACHE_CHECK([whether a statically linked program can dlopen itself],
++ lt_cv_dlopen_self_static, [dnl
++ _LT_TRY_DLOPEN_SELF(
++ lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes,
++ lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross)
++ ])
++ fi
++
++ CPPFLAGS="$save_CPPFLAGS"
++ LDFLAGS="$save_LDFLAGS"
++ LIBS="$save_LIBS"
++ ;;
++ esac
++
++ case $lt_cv_dlopen_self in
++ yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;;
++ *) enable_dlopen_self=unknown ;;
++ esac
++
++ case $lt_cv_dlopen_self_static in
++ yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;;
++ *) enable_dlopen_self_static=unknown ;;
++ esac
++fi
++_LT_DECL([dlopen_support], [enable_dlopen], [0],
++ [Whether dlopen is supported])
++_LT_DECL([dlopen_self], [enable_dlopen_self], [0],
++ [Whether dlopen of programs is supported])
++_LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0],
++ [Whether dlopen of statically linked programs is supported])
++])# LT_SYS_DLOPEN_SELF
++
++# Old name:
++AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF])
++dnl aclocal-1.4 backwards compatibility:
++dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], [])
++
++
++# _LT_COMPILER_C_O([TAGNAME])
++# ---------------------------
++# Check to see if options -c and -o are simultaneously supported by compiler.
++# This macro does not hard code the compiler like AC_PROG_CC_C_O.
++m4_defun([_LT_COMPILER_C_O],
++[m4_require([_LT_DECL_SED])dnl
++m4_require([_LT_FILEUTILS_DEFAULTS])dnl
++m4_require([_LT_TAG_COMPILER])dnl
++AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext],
++ [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)],
++ [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no
++ $RM -r conftest 2>/dev/null
++ mkdir conftest
++ cd conftest
++ mkdir out
++ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
++
++ lt_compiler_flag="-o out/conftest2.$ac_objext"
++ # Insert the option either (1) after the last *FLAGS variable, or
++ # (2) before a word containing "conftest.", or (3) at the end.
++ # Note that $ac_compile itself does not contain backslashes and begins
++ # with a dollar sign (not a hyphen), so the echo should work correctly.
++ lt_compile=`echo "$ac_compile" | $SED \
++ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
++ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \
++ -e 's:$: $lt_compiler_flag:'`
++ (eval echo "\"\$as_me:__oline__: $lt_compile\"" >&AS_MESSAGE_LOG_FD)
++ (eval "$lt_compile" 2>out/conftest.err)
++ ac_status=$?
++ cat out/conftest.err >&AS_MESSAGE_LOG_FD
++ echo "$as_me:__oline__: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
++ if (exit $ac_status) && test -s out/conftest2.$ac_objext
++ then
++ # The compiler can only warn and ignore the option if not recognized
++ # So say no if there are warnings
++ $ECHO "X$_lt_compiler_boilerplate" | $Xsed -e '/^$/d' > out/conftest.exp
++ $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2
++ if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then
++ _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
++ fi
++ fi
++ chmod u+w . 2>&AS_MESSAGE_LOG_FD
++ $RM conftest*
++ # SGI C++ compiler will create directory out/ii_files/ for
++ # template instantiation
++ test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files
++ $RM out/* && rmdir out
++ cd ..
++ $RM -r conftest
++ $RM conftest*
++])
++_LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1],
++ [Does compiler simultaneously support -c and -o options?])
++])# _LT_COMPILER_C_O
++
++
++# _LT_COMPILER_FILE_LOCKS([TAGNAME])
++# ----------------------------------
++# Check to see if we can do hard links to lock some files if needed
++m4_defun([_LT_COMPILER_FILE_LOCKS],
++[m4_require([_LT_ENABLE_LOCK])dnl
++m4_require([_LT_FILEUTILS_DEFAULTS])dnl
++_LT_COMPILER_C_O([$1])
++
++hard_links="nottested"
++if test "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" = no && test "$need_locks" != no; then
++ # do not overwrite the value of need_locks provided by the user
++ AC_MSG_CHECKING([if we can lock with hard links])
++ hard_links=yes
++ $RM conftest*
++ ln conftest.a conftest.b 2>/dev/null && hard_links=no
++ touch conftest.a
++ ln conftest.a conftest.b 2>&5 || hard_links=no
++ ln conftest.a conftest.b 2>/dev/null && hard_links=no
++ AC_MSG_RESULT([$hard_links])
++ if test "$hard_links" = no; then
++ AC_MSG_WARN([`$CC' does not support `-c -o', so `make -j' may be unsafe])
++ need_locks=warn
++ fi
++else
++ need_locks=no
++fi
++_LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?])
++])# _LT_COMPILER_FILE_LOCKS
++
++
++# _LT_CHECK_OBJDIR
++# ----------------
++m4_defun([_LT_CHECK_OBJDIR],
++[AC_CACHE_CHECK([for objdir], [lt_cv_objdir],
++[rm -f .libs 2>/dev/null
++mkdir .libs 2>/dev/null
++if test -d .libs; then
++ lt_cv_objdir=.libs
++else
++ # MS-DOS does not allow filenames that begin with a dot.
++ lt_cv_objdir=_libs
++fi
++rmdir .libs 2>/dev/null])
++objdir=$lt_cv_objdir
++_LT_DECL([], [objdir], [0],
++ [The name of the directory that contains temporary libtool files])dnl
++m4_pattern_allow([LT_OBJDIR])dnl
++AC_DEFINE_UNQUOTED(LT_OBJDIR, "$lt_cv_objdir/",
++ [Define to the sub-directory in which libtool stores uninstalled libraries.])
++])# _LT_CHECK_OBJDIR
++
++
++# _LT_LINKER_HARDCODE_LIBPATH([TAGNAME])
++# --------------------------------------
++# Check hardcoding attributes.
++m4_defun([_LT_LINKER_HARDCODE_LIBPATH],
++[AC_MSG_CHECKING([how to hardcode library paths into programs])
++_LT_TAGVAR(hardcode_action, $1)=
++if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" ||
++ test -n "$_LT_TAGVAR(runpath_var, $1)" ||
++ test "X$_LT_TAGVAR(hardcode_automatic, $1)" = "Xyes" ; then
++
++ # We can hardcode non-existent directories.
++ if test "$_LT_TAGVAR(hardcode_direct, $1)" != no &&
++ # If the only mechanism to avoid hardcoding is shlibpath_var, we
++ # have to relink, otherwise we might link with an installed library
++ # when we should be linking with a yet-to-be-installed one
++ ## test "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" != no &&
++ test "$_LT_TAGVAR(hardcode_minus_L, $1)" != no; then
++ # Linking always hardcodes the temporary library directory.
++ _LT_TAGVAR(hardcode_action, $1)=relink
++ else
++ # We can link without hardcoding, and we can hardcode nonexisting dirs.
++ _LT_TAGVAR(hardcode_action, $1)=immediate
++ fi
++else
++ # We cannot hardcode anything, or else we can only hardcode existing
++ # directories.
++ _LT_TAGVAR(hardcode_action, $1)=unsupported
++fi
++AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)])
++
++if test "$_LT_TAGVAR(hardcode_action, $1)" = relink ||
++ test "$_LT_TAGVAR(inherit_rpath, $1)" = yes; then
++ # Fast installation is not supported
++ enable_fast_install=no
++elif test "$shlibpath_overrides_runpath" = yes ||
++ test "$enable_shared" = no; then
++ # Fast installation is not necessary
++ enable_fast_install=needless
++fi
++_LT_TAGDECL([], [hardcode_action], [0],
++ [How to hardcode a shared library path into an executable])
++])# _LT_LINKER_HARDCODE_LIBPATH
++
++
++# _LT_CMD_STRIPLIB
++# ----------------
++m4_defun([_LT_CMD_STRIPLIB],
++[m4_require([_LT_DECL_EGREP])
++striplib=
++old_striplib=
++AC_MSG_CHECKING([whether stripping libraries is possible])
++if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then
++ test -z "$old_striplib" && old_striplib="$STRIP --strip-debug"
++ test -z "$striplib" && striplib="$STRIP --strip-unneeded"
++ AC_MSG_RESULT([yes])
++else
++# FIXME - insert some real tests, host_os isn't really good enough
++ case $host_os in
++ darwin*)
++ if test -n "$STRIP" ; then
++ striplib="$STRIP -x"
++ old_striplib="$STRIP -S"
++ AC_MSG_RESULT([yes])
++ else
++ AC_MSG_RESULT([no])
++ fi
++ ;;
++ *)
++ AC_MSG_RESULT([no])
++ ;;
++ esac
++fi
++_LT_DECL([], [old_striplib], [1], [Commands to strip libraries])
++_LT_DECL([], [striplib], [1])
++])# _LT_CMD_STRIPLIB
++
++
++# _LT_SYS_DYNAMIC_LINKER([TAG])
++# -----------------------------
++# PORTME Fill in your ld.so characteristics
++m4_defun([_LT_SYS_DYNAMIC_LINKER],
++[AC_REQUIRE([AC_CANONICAL_HOST])dnl
++m4_require([_LT_DECL_EGREP])dnl
++m4_require([_LT_FILEUTILS_DEFAULTS])dnl
++m4_require([_LT_DECL_OBJDUMP])dnl
++m4_require([_LT_DECL_SED])dnl
++AC_MSG_CHECKING([dynamic linker characteristics])
++m4_if([$1],
++ [], [
++if test "$GCC" = yes; then
++ case $host_os in
++ darwin*) lt_awk_arg="/^libraries:/,/LR/" ;;
++ *) lt_awk_arg="/^libraries:/" ;;
++ esac
++ lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e "s,=/,/,g"`
++ if $ECHO "$lt_search_path_spec" | $GREP ';' >/dev/null ; then
++ # if the path contains ";" then we assume it to be the separator
++ # otherwise default to the standard path separator (i.e. ":") - it is
++ # assumed that no part of a normal pathname contains ";" but that should
++ # okay in the real world where ";" in dirpaths is itself problematic.
++ lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e 's/;/ /g'`
++ else
++ lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
++ fi
++ # Ok, now we have the path, separated by spaces, we can step through it
++ # and add multilib dir if necessary.
++ lt_tmp_lt_search_path_spec=
++ lt_multi_os_dir=`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null`
++ for lt_sys_path in $lt_search_path_spec; do
++ if test -d "$lt_sys_path/$lt_multi_os_dir"; then
++ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path/$lt_multi_os_dir"
++ else
++ test -d "$lt_sys_path" && \
++ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path"
++ fi
++ done
++ lt_search_path_spec=`$ECHO $lt_tmp_lt_search_path_spec | awk '
++BEGIN {RS=" "; FS="/|\n";} {
++ lt_foo="";
++ lt_count=0;
++ for (lt_i = NF; lt_i > 0; lt_i--) {
++ if ($lt_i != "" && $lt_i != ".") {
++ if ($lt_i == "..") {
++ lt_count++;
++ } else {
++ if (lt_count == 0) {
++ lt_foo="/" $lt_i lt_foo;
++ } else {
++ lt_count--;
++ }
++ }
++ }
++ }
++ if (lt_foo != "") { lt_freq[[lt_foo]]++; }
++ if (lt_freq[[lt_foo]] == 1) { print lt_foo; }
++}'`
++ sys_lib_search_path_spec=`$ECHO $lt_search_path_spec`
++else
++ sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib"
++fi])
++library_names_spec=
++libname_spec='lib$name'
++soname_spec=
++shrext_cmds=".so"
++postinstall_cmds=
++postuninstall_cmds=
++finish_cmds=
++finish_eval=
++shlibpath_var=
++shlibpath_overrides_runpath=unknown
++version_type=none
++dynamic_linker="$host_os ld.so"
++sys_lib_dlsearch_path_spec="/lib /usr/lib"
++need_lib_prefix=unknown
++hardcode_into_libs=no
++
++# when you set need_version to no, make sure it does not cause -set_version
++# flags to be left without arguments
++need_version=unknown
++
++case $host_os in
++aix3*)
++ version_type=linux
++ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname.a'
++ shlibpath_var=LIBPATH
++
++ # AIX 3 has no versioning support, so we append a major version to the name.
++ soname_spec='${libname}${release}${shared_ext}$major'
++ ;;
++
++aix[[4-9]]*)
++ version_type=linux
++ need_lib_prefix=no
++ need_version=no
++ hardcode_into_libs=yes
++ if test "$host_cpu" = ia64; then
++ # AIX 5 supports IA64
++ library_names_spec='${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext}$versuffix $libname${shared_ext}'
++ shlibpath_var=LD_LIBRARY_PATH
++ else
++ # With GCC up to 2.95.x, collect2 would create an import file
++ # for dependence libraries. The import file would start with
++ # the line `#! .'. This would cause the generated library to
++ # depend on `.', always an invalid library. This was fixed in
++ # development snapshots of GCC prior to 3.0.
++ case $host_os in
++ aix4 | aix4.[[01]] | aix4.[[01]].*)
++ if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)'
++ echo ' yes '
++ echo '#endif'; } | ${CC} -E - | $GREP yes > /dev/null; then
++ :
++ else
++ can_build_shared=no
++ fi
++ ;;
++ esac
++ # AIX (on Power*) has no versioning support, so currently we can not hardcode correct
++ # soname into executable. Probably we can add versioning support to
++ # collect2, so additional links can be useful in future.
++ if test "$aix_use_runtimelinking" = yes; then
++ # If using run time linking (on AIX 4.2 or later) use lib<name>.so
++ # instead of lib<name>.a to let people know that these are not
++ # typical AIX shared libraries.
++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
++ else
++ # We preserve .a as extension for shared libraries through AIX4.2
++ # and later when we are not doing run time linking.
++ library_names_spec='${libname}${release}.a $libname.a'
++ soname_spec='${libname}${release}${shared_ext}$major'
++ fi
++ shlibpath_var=LIBPATH
++ fi
++ ;;
++
++amigaos*)
++ case $host_cpu in
++ powerpc)
++ # Since July 2007 AmigaOS4 officially supports .so libraries.
++ # When compiling the executable, add -use-dynld -Lsobjs: to the compileline.
++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
++ ;;
++ m68k)
++ library_names_spec='$libname.ixlibrary $libname.a'
++ # Create ${libname}_ixlibrary.a entries in /sys/libs.
++ finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`$ECHO "X$lib" | $Xsed -e '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; test $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done'
++ ;;
++ esac
++ ;;
++
++beos*)
++ library_names_spec='${libname}${shared_ext}'
++ dynamic_linker="$host_os ld.so"
++ shlibpath_var=LIBRARY_PATH
++ ;;
++
++bsdi[[45]]*)
++ version_type=linux
++ need_version=no
++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
++ soname_spec='${libname}${release}${shared_ext}$major'
++ finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir'
++ shlibpath_var=LD_LIBRARY_PATH
++ sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib"
++ sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib"
++ # the default ld.so.conf also contains /usr/contrib/lib and
++ # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow
++ # libtool to hard-code these into programs
++ ;;
++
++cygwin* | mingw* | pw32* | cegcc*)
++ version_type=windows
++ shrext_cmds=".dll"
++ need_version=no
++ need_lib_prefix=no
++
++ case $GCC,$host_os in
++ yes,cygwin* | yes,mingw* | yes,pw32* | yes,cegcc*)
++ library_names_spec='$libname.dll.a'
++ # DLL is installed to $(libdir)/../bin by postinstall_cmds
++ postinstall_cmds='base_file=`basename \${file}`~
++ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\${base_file}'\''i; echo \$dlname'\''`~
++ dldir=$destdir/`dirname \$dlpath`~
++ test -d \$dldir || mkdir -p \$dldir~
++ $install_prog $dir/$dlname \$dldir/$dlname~
++ chmod a+x \$dldir/$dlname~
++ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then
++ eval '\''$striplib \$dldir/$dlname'\'' || exit \$?;
++ fi'
++ postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~
++ dlpath=$dir/\$dldll~
++ $RM \$dlpath'
++ shlibpath_overrides_runpath=yes
++
++ case $host_os in
++ cygwin*)
++ # Cygwin DLLs use 'cyg' prefix rather than 'lib'
++ soname_spec='`echo ${libname} | sed -e 's/^lib/cyg/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
++ sys_lib_search_path_spec="/usr/lib /lib/w32api /lib /usr/local/lib"
++ ;;
++ mingw* | cegcc*)
++ # MinGW DLLs use traditional 'lib' prefix
++ soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
++ sys_lib_search_path_spec=`$CC -print-search-dirs | $GREP "^libraries:" | $SED -e "s/^libraries://" -e "s,=/,/,g"`
++ if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then
++ # It is most probably a Windows format PATH printed by
++ # mingw gcc, but we are running on Cygwin. Gcc prints its search
++ # path with ; separators, and with drive letters. We can handle the
++ # drive letters (cygwin fileutils understands them), so leave them,
++ # especially as we might pass files found there to a mingw objdump,
++ # which wouldn't understand a cygwinified path. Ahh.
++ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'`
++ else
++ sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"`
++ fi
++ ;;
++ pw32*)
++ # pw32 DLLs use 'pw' prefix rather than 'lib'
++ library_names_spec='`echo ${libname} | sed -e 's/^lib/pw/'``echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}'
++ ;;
++ esac
++ ;;
++
++ *)
++ library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib'
++ ;;
++ esac
++ dynamic_linker='Win32 ld.exe'
++ # FIXME: first we should search . and the directory the executable is in
++ shlibpath_var=PATH
++ ;;
++
++darwin* | rhapsody*)
++ dynamic_linker="$host_os dyld"
++ version_type=darwin
++ need_lib_prefix=no
++ need_version=no
++ library_names_spec='${libname}${release}${major}$shared_ext ${libname}$shared_ext'
++ soname_spec='${libname}${release}${major}$shared_ext'
++ shlibpath_overrides_runpath=yes
++ shlibpath_var=DYLD_LIBRARY_PATH
++ shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`'
++m4_if([$1], [],[
++ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"])
++ sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib'
++ ;;
++
++dgux*)
++ version_type=linux
++ need_lib_prefix=no
++ need_version=no
++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname$shared_ext'
++ soname_spec='${libname}${release}${shared_ext}$major'
++ shlibpath_var=LD_LIBRARY_PATH
++ ;;
++
++freebsd1*)
++ dynamic_linker=no
++ ;;
++
++freebsd* | dragonfly*)
++ # DragonFly does not have aout. When/if they implement a new
++ # versioning mechanism, adjust this.
++ if test -x /usr/bin/objformat; then
++ objformat=`/usr/bin/objformat`
++ else
++ case $host_os in
++ freebsd[[123]]*) objformat=aout ;;
++ *) objformat=elf ;;
++ esac
++ fi
++ version_type=freebsd-$objformat
++ case $version_type in
++ freebsd-elf*)
++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
++ need_version=no
++ need_lib_prefix=no
++ ;;
++ freebsd-*)
++ library_names_spec='${libname}${release}${shared_ext}$versuffix $libname${shared_ext}$versuffix'
++ need_version=yes
++ ;;
++ esac
++ shlibpath_var=LD_LIBRARY_PATH
++ case $host_os in
++ freebsd2*)
++ shlibpath_overrides_runpath=yes
++ ;;
++ freebsd3.[[01]]* | freebsdelf3.[[01]]*)
++ shlibpath_overrides_runpath=yes
++ hardcode_into_libs=yes
++ ;;
++ freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \
++ freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1)
++ shlibpath_overrides_runpath=no
++ hardcode_into_libs=yes
++ ;;
++ *) # from 4.6 on, and DragonFly
++ shlibpath_overrides_runpath=yes
++ hardcode_into_libs=yes
++ ;;
++ esac
++ ;;
++
++gnu*)
++ version_type=linux
++ need_lib_prefix=no
++ need_version=no
++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}${major} ${libname}${shared_ext}'
++ soname_spec='${libname}${release}${shared_ext}$major'
++ shlibpath_var=LD_LIBRARY_PATH
++ hardcode_into_libs=yes
++ ;;
++
++hpux9* | hpux10* | hpux11*)
++ # Give a soname corresponding to the major version so that dld.sl refuses to
++ # link against other versions.
++ version_type=sunos
++ need_lib_prefix=no
++ need_version=no
++ case $host_cpu in
++ ia64*)
++ shrext_cmds='.so'
++ hardcode_into_libs=yes
++ dynamic_linker="$host_os dld.so"
++ shlibpath_var=LD_LIBRARY_PATH
++ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
++ soname_spec='${libname}${release}${shared_ext}$major'
++ if test "X$HPUX_IA64_MODE" = X32; then
++ sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib"
++ else
++ sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64"
++ fi
++ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
++ ;;
++ hppa*64*)
++ shrext_cmds='.sl'
++ hardcode_into_libs=yes
++ dynamic_linker="$host_os dld.sl"
++ shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH
++ shlibpath_overrides_runpath=yes # Unless +noenvvar is specified.
++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
++ soname_spec='${libname}${release}${shared_ext}$major'
++ sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64"
++ sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec
++ ;;
++ *)
++ shrext_cmds='.sl'
++ dynamic_linker="$host_os dld.sl"
++ shlibpath_var=SHLIB_PATH
++ shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH
++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
++ soname_spec='${libname}${release}${shared_ext}$major'
++ ;;
++ esac
++ # HP-UX runs *really* slowly unless shared libraries are mode 555.
++ postinstall_cmds='chmod 555 $lib'
++ ;;
++
++interix[[3-9]]*)
++ version_type=linux
++ need_lib_prefix=no
++ need_version=no
++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
++ soname_spec='${libname}${release}${shared_ext}$major'
++ dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)'
++ shlibpath_var=LD_LIBRARY_PATH
++ shlibpath_overrides_runpath=no
++ hardcode_into_libs=yes
++ ;;
++
++irix5* | irix6* | nonstopux*)
++ case $host_os in
++ nonstopux*) version_type=nonstopux ;;
++ *)
++ if test "$lt_cv_prog_gnu_ld" = yes; then
++ version_type=linux
++ else
++ version_type=irix
++ fi ;;
++ esac
++ need_lib_prefix=no
++ need_version=no
++ soname_spec='${libname}${release}${shared_ext}$major'
++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${release}${shared_ext} $libname${shared_ext}'
++ case $host_os in
++ irix5* | nonstopux*)
++ libsuff= shlibsuff=
++ ;;
++ *)
++ case $LD in # libtool.m4 will add one of these switches to LD
++ *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ")
++ libsuff= shlibsuff= libmagic=32-bit;;
++ *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ")
++ libsuff=32 shlibsuff=N32 libmagic=N32;;
++ *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ")
++ libsuff=64 shlibsuff=64 libmagic=64-bit;;
++ *) libsuff= shlibsuff= libmagic=never-match;;
++ esac
++ ;;
++ esac
++ shlibpath_var=LD_LIBRARY${shlibsuff}_PATH
++ shlibpath_overrides_runpath=no
++ sys_lib_search_path_spec="/usr/lib${libsuff} /lib${libsuff} /usr/local/lib${libsuff}"
++ sys_lib_dlsearch_path_spec="/usr/lib${libsuff} /lib${libsuff}"
++ hardcode_into_libs=yes
++ ;;
++
++# No shared lib support for Linux oldld, aout, or coff.
++linux*oldld* | linux*aout* | linux*coff*)
++ dynamic_linker=no
++ ;;
++
++# This must be Linux ELF.
++linux* | k*bsd*-gnu)
++ version_type=linux
++ need_lib_prefix=no
++ need_version=no
++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
++ soname_spec='${libname}${release}${shared_ext}$major'
++ finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir'
++ shlibpath_var=LD_LIBRARY_PATH
++ shlibpath_overrides_runpath=no
++ # Some binutils ld are patched to set DT_RUNPATH
++ save_LDFLAGS=$LDFLAGS
++ save_libdir=$libdir
++ eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \
++ LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\""
++ AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])],
++ [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null],
++ [shlibpath_overrides_runpath=yes])])
++ LDFLAGS=$save_LDFLAGS
++ libdir=$save_libdir
++
++ # This implies no fast_install, which is unacceptable.
++ # Some rework will be needed to allow for fast_install
++ # before this can be enabled.
++ hardcode_into_libs=yes
++
++ # Append ld.so.conf contents to the search path
++ if test -f /etc/ld.so.conf; then
++ lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;/^$/d' | tr '\n' ' '`
++ sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra"
++ fi
++
++ # We used to test for /lib/ld.so.1 and disable shared libraries on
++ # powerpc, because MkLinux only supported shared libraries with the
++ # GNU dynamic linker. Since this was broken with cross compilers,
++ # most powerpc-linux boxes support dynamic linking these days and
++ # people can always --disable-shared, the test was removed, and we
++ # assume the GNU/Linux dynamic linker is in use.
++ dynamic_linker='GNU/Linux ld.so'
++ ;;
++
++netbsdelf*-gnu)
++ version_type=linux
++ need_lib_prefix=no
++ need_version=no
++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
++ soname_spec='${libname}${release}${shared_ext}$major'
++ shlibpath_var=LD_LIBRARY_PATH
++ shlibpath_overrides_runpath=no
++ hardcode_into_libs=yes
++ dynamic_linker='NetBSD ld.elf_so'
++ ;;
++
++netbsd*)
++ version_type=sunos
++ need_lib_prefix=no
++ need_version=no
++ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
++ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
++ dynamic_linker='NetBSD (a.out) ld.so'
++ else
++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}'
++ soname_spec='${libname}${release}${shared_ext}$major'
++ dynamic_linker='NetBSD ld.elf_so'
++ fi
++ shlibpath_var=LD_LIBRARY_PATH
++ shlibpath_overrides_runpath=yes
++ hardcode_into_libs=yes
++ ;;
++
++newsos6)
++ version_type=linux
++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
++ shlibpath_var=LD_LIBRARY_PATH
++ shlibpath_overrides_runpath=yes
++ ;;
++
++*nto* | *qnx*)
++ version_type=qnx
++ need_lib_prefix=no
++ need_version=no
++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
++ soname_spec='${libname}${release}${shared_ext}$major'
++ shlibpath_var=LD_LIBRARY_PATH
++ shlibpath_overrides_runpath=no
++ hardcode_into_libs=yes
++ dynamic_linker='ldqnx.so'
++ ;;
++
++openbsd*)
++ version_type=sunos
++ sys_lib_dlsearch_path_spec="/usr/lib"
++ need_lib_prefix=no
++ # Some older versions of OpenBSD (3.3 at least) *do* need versioned libs.
++ case $host_os in
++ openbsd3.3 | openbsd3.3.*) need_version=yes ;;
++ *) need_version=no ;;
++ esac
++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
++ finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir'
++ shlibpath_var=LD_LIBRARY_PATH
++ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
++ case $host_os in
++ openbsd2.[[89]] | openbsd2.[[89]].*)
++ shlibpath_overrides_runpath=no
++ ;;
++ *)
++ shlibpath_overrides_runpath=yes
++ ;;
++ esac
++ else
++ shlibpath_overrides_runpath=yes
++ fi
++ ;;
++
++os2*)
++ libname_spec='$name'
++ shrext_cmds=".dll"
++ need_lib_prefix=no
++ library_names_spec='$libname${shared_ext} $libname.a'
++ dynamic_linker='OS/2 ld.exe'
++ shlibpath_var=LIBPATH
++ ;;
++
++osf3* | osf4* | osf5*)
++ version_type=osf
++ need_lib_prefix=no
++ need_version=no
++ soname_spec='${libname}${release}${shared_ext}$major'
++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
++ shlibpath_var=LD_LIBRARY_PATH
++ sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib"
++ sys_lib_dlsearch_path_spec="$sys_lib_search_path_spec"
++ ;;
++
++rdos*)
++ dynamic_linker=no
++ ;;
++
++solaris*)
++ version_type=linux
++ need_lib_prefix=no
++ need_version=no
++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
++ soname_spec='${libname}${release}${shared_ext}$major'
++ shlibpath_var=LD_LIBRARY_PATH
++ shlibpath_overrides_runpath=yes
++ hardcode_into_libs=yes
++ # ldd complains unless libraries are executable
++ postinstall_cmds='chmod +x $lib'
++ ;;
++
++sunos4*)
++ version_type=sunos
++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${shared_ext}$versuffix'
++ finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir'
++ shlibpath_var=LD_LIBRARY_PATH
++ shlibpath_overrides_runpath=yes
++ if test "$with_gnu_ld" = yes; then
++ need_lib_prefix=no
++ fi
++ need_version=yes
++ ;;
++
++sysv4 | sysv4.3*)
++ version_type=linux
++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
++ soname_spec='${libname}${release}${shared_ext}$major'
++ shlibpath_var=LD_LIBRARY_PATH
++ case $host_vendor in
++ sni)
++ shlibpath_overrides_runpath=no
++ need_lib_prefix=no
++ runpath_var=LD_RUN_PATH
++ ;;
++ siemens)
++ need_lib_prefix=no
++ ;;
++ motorola)
++ need_lib_prefix=no
++ need_version=no
++ shlibpath_overrides_runpath=no
++ sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib'
++ ;;
++ esac
++ ;;
++
++sysv4*MP*)
++ if test -d /usr/nec ;then
++ version_type=linux
++ library_names_spec='$libname${shared_ext}.$versuffix $libname${shared_ext}.$major $libname${shared_ext}'
++ soname_spec='$libname${shared_ext}.$major'
++ shlibpath_var=LD_LIBRARY_PATH
++ fi
++ ;;
++
++sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
++ version_type=freebsd-elf
++ need_lib_prefix=no
++ need_version=no
++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext} $libname${shared_ext}'
++ soname_spec='${libname}${release}${shared_ext}$major'
++ shlibpath_var=LD_LIBRARY_PATH
++ shlibpath_overrides_runpath=yes
++ hardcode_into_libs=yes
++ if test "$with_gnu_ld" = yes; then
++ sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib'
++ else
++ sys_lib_search_path_spec='/usr/ccs/lib /usr/lib'
++ case $host_os in
++ sco3.2v5*)
++ sys_lib_search_path_spec="$sys_lib_search_path_spec /lib"
++ ;;
++ esac
++ fi
++ sys_lib_dlsearch_path_spec='/usr/lib'
++ ;;
++
++tpf*)
++ # TPF is a cross-target only. Preferred cross-host = GNU/Linux.
++ version_type=linux
++ need_lib_prefix=no
++ need_version=no
++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
++ shlibpath_var=LD_LIBRARY_PATH
++ shlibpath_overrides_runpath=no
++ hardcode_into_libs=yes
++ ;;
++
++uts4*)
++ version_type=linux
++ library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major $libname${shared_ext}'
++ soname_spec='${libname}${release}${shared_ext}$major'
++ shlibpath_var=LD_LIBRARY_PATH
++ ;;
++
++*)
++ dynamic_linker=no
++ ;;
++esac
++AC_MSG_RESULT([$dynamic_linker])
++test "$dynamic_linker" = no && can_build_shared=no
++
++variables_saved_for_relink="PATH $shlibpath_var $runpath_var"
++if test "$GCC" = yes; then
++ variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH"
++fi
++
++if test "${lt_cv_sys_lib_search_path_spec+set}" = set; then
++ sys_lib_search_path_spec="$lt_cv_sys_lib_search_path_spec"
++fi
++if test "${lt_cv_sys_lib_dlsearch_path_spec+set}" = set; then
++ sys_lib_dlsearch_path_spec="$lt_cv_sys_lib_dlsearch_path_spec"
++fi
++
++_LT_DECL([], [variables_saved_for_relink], [1],
++ [Variables whose values should be saved in libtool wrapper scripts and
++ restored at link time])
++_LT_DECL([], [need_lib_prefix], [0],
++ [Do we need the "lib" prefix for modules?])
++_LT_DECL([], [need_version], [0], [Do we need a version for libraries?])
++_LT_DECL([], [version_type], [0], [Library versioning type])
++_LT_DECL([], [runpath_var], [0], [Shared library runtime path variable])
++_LT_DECL([], [shlibpath_var], [0],[Shared library path variable])
++_LT_DECL([], [shlibpath_overrides_runpath], [0],
++ [Is shlibpath searched before the hard-coded library search path?])
++_LT_DECL([], [libname_spec], [1], [Format of library name prefix])
++_LT_DECL([], [library_names_spec], [1],
++ [[List of archive names. First name is the real one, the rest are links.
++ The last name is the one that the linker finds with -lNAME]])
++_LT_DECL([], [soname_spec], [1],
++ [[The coded name of the library, if different from the real name]])
++_LT_DECL([], [postinstall_cmds], [2],
++ [Command to use after installation of a shared archive])
++_LT_DECL([], [postuninstall_cmds], [2],
++ [Command to use after uninstallation of a shared archive])
++_LT_DECL([], [finish_cmds], [2],
++ [Commands used to finish a libtool library installation in a directory])
++_LT_DECL([], [finish_eval], [1],
++ [[As "finish_cmds", except a single script fragment to be evaled but
++ not shown]])
++_LT_DECL([], [hardcode_into_libs], [0],
++ [Whether we should hardcode library paths into libraries])
++_LT_DECL([], [sys_lib_search_path_spec], [2],
++ [Compile-time system search path for libraries])
++_LT_DECL([], [sys_lib_dlsearch_path_spec], [2],
++ [Run-time system search path for libraries])
++])# _LT_SYS_DYNAMIC_LINKER
++
++
++# _LT_PATH_TOOL_PREFIX(TOOL)
++# --------------------------
++# find a file program which can recognize shared library
++AC_DEFUN([_LT_PATH_TOOL_PREFIX],
++[m4_require([_LT_DECL_EGREP])dnl
++AC_MSG_CHECKING([for $1])
++AC_CACHE_VAL(lt_cv_path_MAGIC_CMD,
++[case $MAGIC_CMD in
++[[\\/*] | ?:[\\/]*])
++ lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path.
++ ;;
++*)
++ lt_save_MAGIC_CMD="$MAGIC_CMD"
++ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
++dnl $ac_dummy forces splitting on constant user-supplied paths.
++dnl POSIX.2 word splitting is done only on the output of word expansions,
++dnl not every word. This closes a longstanding sh security hole.
++ ac_dummy="m4_if([$2], , $PATH, [$2])"
++ for ac_dir in $ac_dummy; do
++ IFS="$lt_save_ifs"
++ test -z "$ac_dir" && ac_dir=.
++ if test -f $ac_dir/$1; then
++ lt_cv_path_MAGIC_CMD="$ac_dir/$1"
++ if test -n "$file_magic_test_file"; then
++ case $deplibs_check_method in
++ "file_magic "*)
++ file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"`
++ MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
++ if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null |
++ $EGREP "$file_magic_regex" > /dev/null; then
++ :
++ else
++ cat <<_LT_EOF 1>&2
++
++*** Warning: the command libtool uses to detect shared libraries,
++*** $file_magic_cmd, produces output that libtool cannot recognize.
++*** The result is that libtool may fail to recognize shared libraries
++*** as such. This will affect the creation of libtool libraries that
++*** depend on shared libraries, but programs linked with such libtool
++*** libraries will work regardless of this problem. Nevertheless, you
++*** may want to report the problem to your system manager and/or to
++*** bug-libtool@gnu.org
++
++_LT_EOF
++ fi ;;
++ esac
++ fi
++ break
++ fi
++ done
++ IFS="$lt_save_ifs"
++ MAGIC_CMD="$lt_save_MAGIC_CMD"
++ ;;
++esac])
++MAGIC_CMD="$lt_cv_path_MAGIC_CMD"
++if test -n "$MAGIC_CMD"; then
++ AC_MSG_RESULT($MAGIC_CMD)
++else
++ AC_MSG_RESULT(no)
++fi
++_LT_DECL([], [MAGIC_CMD], [0],
++ [Used to examine libraries when file_magic_cmd begins with "file"])dnl
++])# _LT_PATH_TOOL_PREFIX
++
++# Old name:
++AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX])
++dnl aclocal-1.4 backwards compatibility:
++dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], [])
++
++
++# _LT_PATH_MAGIC
++# --------------
++# find a file program which can recognize a shared library
++m4_defun([_LT_PATH_MAGIC],
++[_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH)
++if test -z "$lt_cv_path_MAGIC_CMD"; then
++ if test -n "$ac_tool_prefix"; then
++ _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH)
++ else
++ MAGIC_CMD=:
++ fi
++fi
++])# _LT_PATH_MAGIC
++
++
++# LT_PATH_LD
++# ----------
++# find the pathname to the GNU or non-GNU linker
++AC_DEFUN([LT_PATH_LD],
++[AC_REQUIRE([AC_PROG_CC])dnl
++AC_REQUIRE([AC_CANONICAL_HOST])dnl
++AC_REQUIRE([AC_CANONICAL_BUILD])dnl
++m4_require([_LT_DECL_SED])dnl
++m4_require([_LT_DECL_EGREP])dnl
++
++AC_ARG_WITH([gnu-ld],
++ [AS_HELP_STRING([--with-gnu-ld],
++ [assume the C compiler uses GNU ld @<:@default=no@:>@])],
++ [test "$withval" = no || with_gnu_ld=yes],
++ [with_gnu_ld=no])dnl
++
++ac_prog=ld
++if test "$GCC" = yes; then
++ # Check if gcc -print-prog-name=ld gives a path.
++ AC_MSG_CHECKING([for ld used by $CC])
++ case $host in
++ *-*-mingw*)
++ # gcc leaves a trailing carriage return which upsets mingw
++ ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;;
++ *)
++ ac_prog=`($CC -print-prog-name=ld) 2>&5` ;;
++ esac
++ case $ac_prog in
++ # Accept absolute paths.
++ [[\\/]]* | ?:[[\\/]]*)
++ re_direlt='/[[^/]][[^/]]*/\.\./'
++ # Canonicalize the pathname of ld
++ ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'`
++ while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do
++ ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"`
++ done
++ test -z "$LD" && LD="$ac_prog"
++ ;;
++ "")
++ # If it fails, then pretend we aren't using GCC.
++ ac_prog=ld
++ ;;
++ *)
++ # If it is relative, then search for the first ld in PATH.
++ with_gnu_ld=unknown
++ ;;
++ esac
++elif test "$with_gnu_ld" = yes; then
++ AC_MSG_CHECKING([for GNU ld])
++else
++ AC_MSG_CHECKING([for non-GNU ld])
++fi
++AC_CACHE_VAL(lt_cv_path_LD,
++[if test -z "$LD"; then
++ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
++ for ac_dir in $PATH; do
++ IFS="$lt_save_ifs"
++ test -z "$ac_dir" && ac_dir=.
++ if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then
++ lt_cv_path_LD="$ac_dir/$ac_prog"
++ # Check to see if the program is GNU ld. I'd rather use --version,
++ # but apparently some variants of GNU ld only accept -v.
++ # Break only if it was the GNU/non-GNU ld that we prefer.
++ case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in
++ *GNU* | *'with BFD'*)
++ test "$with_gnu_ld" != no && break
++ ;;
++ *)
++ test "$with_gnu_ld" != yes && break
++ ;;
++ esac
++ fi
++ done
++ IFS="$lt_save_ifs"
++else
++ lt_cv_path_LD="$LD" # Let the user override the test with a path.
++fi])
++LD="$lt_cv_path_LD"
++if test -n "$LD"; then
++ AC_MSG_RESULT($LD)
++else
++ AC_MSG_RESULT(no)
++fi
++test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH])
++_LT_PATH_LD_GNU
++AC_SUBST([LD])
++
++_LT_TAGDECL([], [LD], [1], [The linker used to build libraries])
++])# LT_PATH_LD
++
++# Old names:
++AU_ALIAS([AM_PROG_LD], [LT_PATH_LD])
++AU_ALIAS([AC_PROG_LD], [LT_PATH_LD])
++dnl aclocal-1.4 backwards compatibility:
++dnl AC_DEFUN([AM_PROG_LD], [])
++dnl AC_DEFUN([AC_PROG_LD], [])
++
++
++# _LT_PATH_LD_GNU
++#- --------------
++m4_defun([_LT_PATH_LD_GNU],
++[AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld,
++[# I'd rather use --version here, but apparently some GNU lds only accept -v.
++case `$LD -v 2>&1 </dev/null` in
++*GNU* | *'with BFD'*)
++ lt_cv_prog_gnu_ld=yes
++ ;;
++*)
++ lt_cv_prog_gnu_ld=no
++ ;;
++esac])
++with_gnu_ld=$lt_cv_prog_gnu_ld
++])# _LT_PATH_LD_GNU
++
++
++# _LT_CMD_RELOAD
++# --------------
++# find reload flag for linker
++# -- PORTME Some linkers may need a different reload flag.
++m4_defun([_LT_CMD_RELOAD],
++[AC_CACHE_CHECK([for $LD option to reload object files],
++ lt_cv_ld_reload_flag,
++ [lt_cv_ld_reload_flag='-r'])
++reload_flag=$lt_cv_ld_reload_flag
++case $reload_flag in
++"" | " "*) ;;
++*) reload_flag=" $reload_flag" ;;
++esac
++reload_cmds='$LD$reload_flag -o $output$reload_objs'
++case $host_os in
++ darwin*)
++ if test "$GCC" = yes; then
++ reload_cmds='$LTCC $LTCFLAGS -nostdlib ${wl}-r -o $output$reload_objs'
++ else
++ reload_cmds='$LD$reload_flag -o $output$reload_objs'
++ fi
++ ;;
++esac
++_LT_DECL([], [reload_flag], [1], [How to create reloadable object files])dnl
++_LT_DECL([], [reload_cmds], [2])dnl
++])# _LT_CMD_RELOAD
++
++
++# _LT_CHECK_MAGIC_METHOD
++# ----------------------
++# how to check for library dependencies
++# -- PORTME fill in with the dynamic library characteristics
++m4_defun([_LT_CHECK_MAGIC_METHOD],
++[m4_require([_LT_DECL_EGREP])
++m4_require([_LT_DECL_OBJDUMP])
++AC_CACHE_CHECK([how to recognize dependent libraries],
++lt_cv_deplibs_check_method,
++[lt_cv_file_magic_cmd='$MAGIC_CMD'
++lt_cv_file_magic_test_file=
++lt_cv_deplibs_check_method='unknown'
++# Need to set the preceding variable on all platforms that support
++# interlibrary dependencies.
++# 'none' -- dependencies not supported.
++# `unknown' -- same as none, but documents that we really don't know.
++# 'pass_all' -- all dependencies passed with no checks.
++# 'test_compile' -- check by making test program.
++# 'file_magic [[regex]]' -- check by looking for files in library path
++# which responds to the $file_magic_cmd with a given extended regex.
++# If you have `file' or equivalent on your system and you're not sure
++# whether `pass_all' will *always* work, you probably want this one.
++
++case $host_os in
++aix[[4-9]]*)
++ lt_cv_deplibs_check_method=pass_all
++ ;;
++
++beos*)
++ lt_cv_deplibs_check_method=pass_all
++ ;;
++
++bsdi[[45]]*)
++ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)'
++ lt_cv_file_magic_cmd='/usr/bin/file -L'
++ lt_cv_file_magic_test_file=/shlib/libc.so
++ ;;
++
++cygwin*)
++ # func_win32_libid is a shell function defined in ltmain.sh
++ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
++ lt_cv_file_magic_cmd='func_win32_libid'
++ ;;
++
++mingw* | pw32*)
++ # Base MSYS/MinGW do not provide the 'file' command needed by
++ # func_win32_libid shell function, so use a weaker test based on 'objdump',
++ # unless we find 'file', for example because we are cross-compiling.
++ if ( file / ) >/dev/null 2>&1; then
++ lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL'
++ lt_cv_file_magic_cmd='func_win32_libid'
++ else
++ lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?'
++ lt_cv_file_magic_cmd='$OBJDUMP -f'
++ fi
++ ;;
++
++cegcc)
++ # use the weaker test based on 'objdump'. See mingw*.
++ lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?'
++ lt_cv_file_magic_cmd='$OBJDUMP -f'
++ ;;
++
++darwin* | rhapsody*)
++ lt_cv_deplibs_check_method=pass_all
++ ;;
++
++freebsd* | dragonfly*)
++ if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
++ case $host_cpu in
++ i*86 )
++ # Not sure whether the presence of OpenBSD here was a mistake.
++ # Let's accept both of them until this is cleared up.
++ lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library'
++ lt_cv_file_magic_cmd=/usr/bin/file
++ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*`
++ ;;
++ esac
++ else
++ lt_cv_deplibs_check_method=pass_all
++ fi
++ ;;
++
++gnu*)
++ lt_cv_deplibs_check_method=pass_all
++ ;;
++
++hpux10.20* | hpux11*)
++ lt_cv_file_magic_cmd=/usr/bin/file
++ case $host_cpu in
++ ia64*)
++ lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64'
++ lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so
++ ;;
++ hppa*64*)
++ [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - PA-RISC [0-9].[0-9]']
++ lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl
++ ;;
++ *)
++ lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]].[[0-9]]) shared library'
++ lt_cv_file_magic_test_file=/usr/lib/libc.sl
++ ;;
++ esac
++ ;;
++
++interix[[3-9]]*)
++ # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here
++ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$'
++ ;;
++
++irix5* | irix6* | nonstopux*)
++ case $LD in
++ *-32|*"-32 ") libmagic=32-bit;;
++ *-n32|*"-n32 ") libmagic=N32;;
++ *-64|*"-64 ") libmagic=64-bit;;
++ *) libmagic=never-match;;
++ esac
++ lt_cv_deplibs_check_method=pass_all
++ ;;
++
++# This must be Linux ELF.
++linux* | k*bsd*-gnu)
++ lt_cv_deplibs_check_method=pass_all
++ ;;
++
++netbsd* | netbsdelf*-gnu)
++ if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then
++ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
++ else
++ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$'
++ fi
++ ;;
++
++newos6*)
++ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)'
++ lt_cv_file_magic_cmd=/usr/bin/file
++ lt_cv_file_magic_test_file=/usr/lib/libnls.so
++ ;;
++
++*nto* | *qnx*)
++ lt_cv_deplibs_check_method=pass_all
++ ;;
++
++openbsd*)
++ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
++ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$'
++ else
++ lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$'
++ fi
++ ;;
++
++osf3* | osf4* | osf5*)
++ lt_cv_deplibs_check_method=pass_all
++ ;;
++
++rdos*)
++ lt_cv_deplibs_check_method=pass_all
++ ;;
++
++solaris*)
++ lt_cv_deplibs_check_method=pass_all
++ ;;
++
++sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
++ lt_cv_deplibs_check_method=pass_all
++ ;;
++
++sysv4 | sysv4.3*)
++ case $host_vendor in
++ motorola)
++ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]'
++ lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*`
++ ;;
++ ncr)
++ lt_cv_deplibs_check_method=pass_all
++ ;;
++ sequent)
++ lt_cv_file_magic_cmd='/bin/file'
++ lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )'
++ ;;
++ sni)
++ lt_cv_file_magic_cmd='/bin/file'
++ lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib"
++ lt_cv_file_magic_test_file=/lib/libc.so
++ ;;
++ siemens)
++ lt_cv_deplibs_check_method=pass_all
++ ;;
++ pc)
++ lt_cv_deplibs_check_method=pass_all
++ ;;
++ esac
++ ;;
++
++tpf*)
++ lt_cv_deplibs_check_method=pass_all
++ ;;
++esac
++])
++file_magic_cmd=$lt_cv_file_magic_cmd
++deplibs_check_method=$lt_cv_deplibs_check_method
++test -z "$deplibs_check_method" && deplibs_check_method=unknown
++
++_LT_DECL([], [deplibs_check_method], [1],
++ [Method to check whether dependent libraries are shared objects])
++_LT_DECL([], [file_magic_cmd], [1],
++ [Command to use when deplibs_check_method == "file_magic"])
++])# _LT_CHECK_MAGIC_METHOD
++
++
++# LT_PATH_NM
++# ----------
++# find the pathname to a BSD- or MS-compatible name lister
++AC_DEFUN([LT_PATH_NM],
++[AC_REQUIRE([AC_PROG_CC])dnl
++AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM,
++[if test -n "$NM"; then
++ # Let the user override the test.
++ lt_cv_path_NM="$NM"
++else
++ lt_nm_to_check="${ac_tool_prefix}nm"
++ if test -n "$ac_tool_prefix" && test "$build" = "$host"; then
++ lt_nm_to_check="$lt_nm_to_check nm"
++ fi
++ for lt_tmp_nm in $lt_nm_to_check; do
++ lt_save_ifs="$IFS"; IFS=$PATH_SEPARATOR
++ for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do
++ IFS="$lt_save_ifs"
++ test -z "$ac_dir" && ac_dir=.
++ tmp_nm="$ac_dir/$lt_tmp_nm"
++ if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext" ; then
++ # Check to see if the nm accepts a BSD-compat flag.
++ # Adding the `sed 1q' prevents false positives on HP-UX, which says:
++ # nm: unknown option "B" ignored
++ # Tru64's nm complains that /dev/null is an invalid object file
++ case `"$tmp_nm" -B /dev/null 2>&1 | sed '1q'` in
++ */dev/null* | *'Invalid file or object type'*)
++ lt_cv_path_NM="$tmp_nm -B"
++ break
++ ;;
++ *)
++ case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in
++ */dev/null*)
++ lt_cv_path_NM="$tmp_nm -p"
++ break
++ ;;
++ *)
++ lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but
++ continue # so that we can try to find one that supports BSD flags
++ ;;
++ esac
++ ;;
++ esac
++ fi
++ done
++ IFS="$lt_save_ifs"
++ done
++ : ${lt_cv_path_NM=no}
++fi])
++if test "$lt_cv_path_NM" != "no"; then
++ NM="$lt_cv_path_NM"
++else
++ # Didn't find any BSD compatible name lister, look for dumpbin.
++ AC_CHECK_TOOLS(DUMPBIN, ["dumpbin -symbols" "link -dump -symbols"], :)
++ AC_SUBST([DUMPBIN])
++ if test "$DUMPBIN" != ":"; then
++ NM="$DUMPBIN"
++ fi
++fi
++test -z "$NM" && NM=nm
++AC_SUBST([NM])
++_LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl
++
++AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface],
++ [lt_cv_nm_interface="BSD nm"
++ echo "int some_variable = 0;" > conftest.$ac_ext
++ (eval echo "\"\$as_me:__oline__: $ac_compile\"" >&AS_MESSAGE_LOG_FD)
++ (eval "$ac_compile" 2>conftest.err)
++ cat conftest.err >&AS_MESSAGE_LOG_FD
++ (eval echo "\"\$as_me:__oline__: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD)
++ (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
++ cat conftest.err >&AS_MESSAGE_LOG_FD
++ (eval echo "\"\$as_me:__oline__: output\"" >&AS_MESSAGE_LOG_FD)
++ cat conftest.out >&AS_MESSAGE_LOG_FD
++ if $GREP 'External.*some_variable' conftest.out > /dev/null; then
++ lt_cv_nm_interface="MS dumpbin"
++ fi
++ rm -f conftest*])
++])# LT_PATH_NM
++
++# Old names:
++AU_ALIAS([AM_PROG_NM], [LT_PATH_NM])
++AU_ALIAS([AC_PROG_NM], [LT_PATH_NM])
++dnl aclocal-1.4 backwards compatibility:
++dnl AC_DEFUN([AM_PROG_NM], [])
++dnl AC_DEFUN([AC_PROG_NM], [])
++
++
++# LT_LIB_M
++# --------
++# check for math library
++AC_DEFUN([LT_LIB_M],
++[AC_REQUIRE([AC_CANONICAL_HOST])dnl
++LIBM=
++case $host in
++*-*-beos* | *-*-cygwin* | *-*-pw32* | *-*-darwin*)
++ # These system don't have libm, or don't need it
++ ;;
++*-ncr-sysv4.3*)
++ AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM="-lmw")
++ AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm")
++ ;;
++*)
++ AC_CHECK_LIB(m, cos, LIBM="-lm")
++ ;;
++esac
++AC_SUBST([LIBM])
++])# LT_LIB_M
++
++# Old name:
++AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M])
++dnl aclocal-1.4 backwards compatibility:
++dnl AC_DEFUN([AC_CHECK_LIBM], [])
++
++
++# _LT_COMPILER_NO_RTTI([TAGNAME])
++# -------------------------------
++m4_defun([_LT_COMPILER_NO_RTTI],
++[m4_require([_LT_TAG_COMPILER])dnl
++
++_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
++
++if test "$GCC" = yes; then
++ _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
++
++ _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions],
++ lt_cv_prog_compiler_rtti_exceptions,
++ [-fno-rtti -fno-exceptions], [],
++ [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"])
++fi
++_LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1],
++ [Compiler flag to turn off builtin functions])
++])# _LT_COMPILER_NO_RTTI
++
++
++# _LT_CMD_GLOBAL_SYMBOLS
++# ----------------------
++m4_defun([_LT_CMD_GLOBAL_SYMBOLS],
++[AC_REQUIRE([AC_CANONICAL_HOST])dnl
++AC_REQUIRE([AC_PROG_CC])dnl
++AC_REQUIRE([LT_PATH_NM])dnl
++AC_REQUIRE([LT_PATH_LD])dnl
++m4_require([_LT_DECL_SED])dnl
++m4_require([_LT_DECL_EGREP])dnl
++m4_require([_LT_TAG_COMPILER])dnl
++
++# Check for command to grab the raw symbol name followed by C symbol from nm.
++AC_MSG_CHECKING([command to parse $NM output from $compiler object])
++AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe],
++[
++# These are sane defaults that work on at least a few old systems.
++# [They come from Ultrix. What could be older than Ultrix?!! ;)]
++
++# Character class describing NM global symbol codes.
++symcode='[[BCDEGRST]]'
++
++# Regexp to match symbols that can be accessed directly from C.
++sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)'
++
++# Define system-specific variables.
++case $host_os in
++aix*)
++ symcode='[[BCDT]]'
++ ;;
++cygwin* | mingw* | pw32* | cegcc*)
++ symcode='[[ABCDGISTW]]'
++ ;;
++hpux*)
++ if test "$host_cpu" = ia64; then
++ symcode='[[ABCDEGRST]]'
++ fi
++ ;;
++irix* | nonstopux*)
++ symcode='[[BCDEGRST]]'
++ ;;
++osf*)
++ symcode='[[BCDEGQRST]]'
++ ;;
++solaris*)
++ symcode='[[BDRT]]'
++ ;;
++sco3.2v5*)
++ symcode='[[DT]]'
++ ;;
++sysv4.2uw2*)
++ symcode='[[DT]]'
++ ;;
++sysv5* | sco5v6* | unixware* | OpenUNIX*)
++ symcode='[[ABDT]]'
++ ;;
++sysv4)
++ symcode='[[DFNSTU]]'
++ ;;
++esac
++
++# If we're using GNU nm, then use its standard symbol codes.
++case `$NM -V 2>&1` in
++*GNU* | *'with BFD'*)
++ symcode='[[ABCDGIRSTW]]' ;;
++esac
++
++# Transform an extracted symbol line into a proper C declaration.
++# Some systems (esp. on ia64) link data and code symbols differently,
++# so use this general approach.
++lt_cv_sys_global_symbol_to_cdecl="sed -n -e 's/^T .* \(.*\)$/extern int \1();/p' -e 's/^$symcode* .* \(.*\)$/extern char \1;/p'"
++
++# Transform an extracted symbol line into symbol name and symbol address
++lt_cv_sys_global_symbol_to_c_name_address="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p'"
++lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n -e 's/^: \([[^ ]]*\) $/ {\\\"\1\\\", (void *) 0},/p' -e 's/^$symcode* \([[^ ]]*\) \(lib[[^ ]]*\)$/ {\"\2\", (void *) \&\2},/p' -e 's/^$symcode* \([[^ ]]*\) \([[^ ]]*\)$/ {\"lib\2\", (void *) \&\2},/p'"
++
++# Handle CRLF in mingw tool chain
++opt_cr=
++case $build_os in
++mingw*)
++ opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp
++ ;;
++esac
++
++# Try without a prefix underscore, then with it.
++for ac_symprfx in "" "_"; do
++
++ # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol.
++ symxfrm="\\1 $ac_symprfx\\2 \\2"
++
++ # Write the raw and C identifiers.
++ if test "$lt_cv_nm_interface" = "MS dumpbin"; then
++ # Fake it for dumpbin and say T for any non-static function
++ # and D for any global variable.
++ # Also find C++ and __fastcall symbols from MSVC++,
++ # which start with @ or ?.
++ lt_cv_sys_global_symbol_pipe="$AWK ['"\
++" {last_section=section; section=\$ 3};"\
++" /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\
++" \$ 0!~/External *\|/{next};"\
++" / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\
++" {if(hide[section]) next};"\
++" {f=0}; \$ 0~/\(\).*\|/{f=1}; {printf f ? \"T \" : \"D \"};"\
++" {split(\$ 0, a, /\||\r/); split(a[2], s)};"\
++" s[1]~/^[@?]/{print s[1], s[1]; next};"\
++" s[1]~prfx {split(s[1],t,\"@\"); print t[1], substr(t[1],length(prfx))}"\
++" ' prfx=^$ac_symprfx]"
++ else
++ lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'"
++ fi
++
++ # Check to see that the pipe works correctly.
++ pipe_works=no
++
++ rm -f conftest*
++ cat > conftest.$ac_ext <<_LT_EOF
++#ifdef __cplusplus
++extern "C" {
++#endif
++char nm_test_var;
++void nm_test_func(void);
++void nm_test_func(void){}
++#ifdef __cplusplus
++}
++#endif
++int main(){nm_test_var='a';nm_test_func();return(0);}
++_LT_EOF
++
++ if AC_TRY_EVAL(ac_compile); then
++ # Now try to grab the symbols.
++ nlist=conftest.nm
++ if AC_TRY_EVAL(NM conftest.$ac_objext \| $lt_cv_sys_global_symbol_pipe \> $nlist) && test -s "$nlist"; then
++ # Try sorting and uniquifying the output.
++ if sort "$nlist" | uniq > "$nlist"T; then
++ mv -f "$nlist"T "$nlist"
++ else
++ rm -f "$nlist"T
++ fi
++
++ # Make sure that we snagged all the symbols we need.
++ if $GREP ' nm_test_var$' "$nlist" >/dev/null; then
++ if $GREP ' nm_test_func$' "$nlist" >/dev/null; then
++ cat <<_LT_EOF > conftest.$ac_ext
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++_LT_EOF
++ # Now generate the symbol file.
++ eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext'
++
++ cat <<_LT_EOF >> conftest.$ac_ext
++
++/* The mapping between symbol names and symbols. */
++const struct {
++ const char *name;
++ void *address;
++}
++lt__PROGRAM__LTX_preloaded_symbols[[]] =
++{
++ { "@PROGRAM@", (void *) 0 },
++_LT_EOF
++ $SED "s/^$symcode$symcode* \(.*\) \(.*\)$/ {\"\2\", (void *) \&\2},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext
++ cat <<\_LT_EOF >> conftest.$ac_ext
++ {0, (void *) 0}
++};
++
++/* This works around a problem in FreeBSD linker */
++#ifdef FREEBSD_WORKAROUND
++static const void *lt_preloaded_setup() {
++ return lt__PROGRAM__LTX_preloaded_symbols;
++}
++#endif
++
++#ifdef __cplusplus
++}
++#endif
++_LT_EOF
++ # Now try linking the two files.
++ mv conftest.$ac_objext conftstm.$ac_objext
++ lt_save_LIBS="$LIBS"
++ lt_save_CFLAGS="$CFLAGS"
++ LIBS="conftstm.$ac_objext"
++ CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)"
++ if AC_TRY_EVAL(ac_link) && test -s conftest${ac_exeext}; then
++ pipe_works=yes
++ fi
++ LIBS="$lt_save_LIBS"
++ CFLAGS="$lt_save_CFLAGS"
++ else
++ echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD
++ fi
++ else
++ echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD
++ fi
++ else
++ echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD
++ fi
++ else
++ echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD
++ cat conftest.$ac_ext >&5
++ fi
++ rm -rf conftest* conftst*
++
++ # Do not use the global_symbol_pipe unless it works.
++ if test "$pipe_works" = yes; then
++ break
++ else
++ lt_cv_sys_global_symbol_pipe=
++ fi
++done
++])
++if test -z "$lt_cv_sys_global_symbol_pipe"; then
++ lt_cv_sys_global_symbol_to_cdecl=
++fi
++if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then
++ AC_MSG_RESULT(failed)
++else
++ AC_MSG_RESULT(ok)
++fi
++
++_LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1],
++ [Take the output of nm and produce a listing of raw symbols and C names])
++_LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1],
++ [Transform the output of nm in a proper C declaration])
++_LT_DECL([global_symbol_to_c_name_address],
++ [lt_cv_sys_global_symbol_to_c_name_address], [1],
++ [Transform the output of nm in a C name address pair])
++_LT_DECL([global_symbol_to_c_name_address_lib_prefix],
++ [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1],
++ [Transform the output of nm in a C name address pair when lib prefix is needed])
++]) # _LT_CMD_GLOBAL_SYMBOLS
++
++
++# _LT_COMPILER_PIC([TAGNAME])
++# ---------------------------
++m4_defun([_LT_COMPILER_PIC],
++[m4_require([_LT_TAG_COMPILER])dnl
++_LT_TAGVAR(lt_prog_compiler_wl, $1)=
++_LT_TAGVAR(lt_prog_compiler_pic, $1)=
++_LT_TAGVAR(lt_prog_compiler_static, $1)=
++
++AC_MSG_CHECKING([for $compiler option to produce PIC])
++m4_if([$1], [CXX], [
++ # C++ specific cases for pic, static, wl, etc.
++ if test "$GXX" = yes; then
++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
++
++ case $host_os in
++ aix*)
++ # All AIX code is PIC.
++ if test "$host_cpu" = ia64; then
++ # AIX 5 now supports IA64 processor
++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
++ fi
++ ;;
++
++ amigaos*)
++ case $host_cpu in
++ powerpc)
++ # see comment about AmigaOS4 .so support
++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
++ ;;
++ m68k)
++ # FIXME: we need at least 68020 code to build shared libraries, but
++ # adding the `-m68020' flag to GCC prevents building anything better,
++ # like `-m68040'.
++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
++ ;;
++ esac
++ ;;
++
++ beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
++ # PIC is the default for these OSes.
++ ;;
++ mingw* | cygwin* | os2* | pw32* | cegcc*)
++ # This hack is so that the source file can tell whether it is being
++ # built for inclusion in a dll (and should export symbols for example).
++ # Although the cygwin gcc ignores -fPIC, still need this for old-style
++ # (--disable-auto-import) libraries
++ m4_if([$1], [GCJ], [],
++ [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
++ ;;
++ darwin* | rhapsody*)
++ # PIC is the default on this platform
++ # Common symbols not allowed in MH_DYLIB files
++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
++ ;;
++ *djgpp*)
++ # DJGPP does not support shared libraries at all
++ _LT_TAGVAR(lt_prog_compiler_pic, $1)=
++ ;;
++ interix[[3-9]]*)
++ # Interix 3.x gcc -fpic/-fPIC options generate broken code.
++ # Instead, we relocate shared libraries at runtime.
++ ;;
++ sysv4*MP*)
++ if test -d /usr/nec; then
++ _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
++ fi
++ ;;
++ hpux*)
++ # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
++ # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag
++ # sets the default TLS model and affects inlining.
++ case $host_cpu in
++ hppa*64*)
++ ;;
++ *)
++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
++ ;;
++ esac
++ ;;
++ *qnx* | *nto*)
++ # QNX uses GNU C++, but need to define -shared option too, otherwise
++ # it will coredump.
++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
++ ;;
++ *)
++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
++ ;;
++ esac
++ else
++ case $host_os in
++ aix[[4-9]]*)
++ # All AIX code is PIC.
++ if test "$host_cpu" = ia64; then
++ # AIX 5 now supports IA64 processor
++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
++ else
++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
++ fi
++ ;;
++ chorus*)
++ case $cc_basename in
++ cxch68*)
++ # Green Hills C++ Compiler
++ # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a"
++ ;;
++ esac
++ ;;
++ dgux*)
++ case $cc_basename in
++ ec++*)
++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
++ ;;
++ ghcx*)
++ # Green Hills C++ Compiler
++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
++ ;;
++ *)
++ ;;
++ esac
++ ;;
++ freebsd* | dragonfly*)
++ # FreeBSD uses GNU C++
++ ;;
++ hpux9* | hpux10* | hpux11*)
++ case $cc_basename in
++ CC*)
++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
++ _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
++ if test "$host_cpu" != ia64; then
++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
++ fi
++ ;;
++ aCC*)
++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
++ _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
++ case $host_cpu in
++ hppa*64*|ia64*)
++ # +Z the default
++ ;;
++ *)
++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
++ ;;
++ esac
++ ;;
++ *)
++ ;;
++ esac
++ ;;
++ interix*)
++ # This is c89, which is MS Visual C++ (no shared libs)
++ # Anyone wants to do a port?
++ ;;
++ irix5* | irix6* | nonstopux*)
++ case $cc_basename in
++ CC*)
++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
++ # CC pic flag -KPIC is the default.
++ ;;
++ *)
++ ;;
++ esac
++ ;;
++ linux* | k*bsd*-gnu)
++ case $cc_basename in
++ KCC*)
++ # KAI C++ Compiler
++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
++ ;;
++ ecpc* )
++ # old Intel C++ for x86_64 which still supported -KPIC.
++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
++ ;;
++ icpc* )
++ # Intel C++, used to be incompatible with GCC.
++ # ICC 10 doesn't accept -KPIC any more.
++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
++ ;;
++ pgCC* | pgcpp*)
++ # Portland Group C++ compiler
++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
++ ;;
++ cxx*)
++ # Compaq C++
++ # Make sure the PIC flag is empty. It appears that all Alpha
++ # Linux and Compaq Tru64 Unix objects are PIC.
++ _LT_TAGVAR(lt_prog_compiler_pic, $1)=
++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
++ ;;
++ xlc* | xlC*)
++ # IBM XL 8.0 on PPC
++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
++ ;;
++ *)
++ case `$CC -V 2>&1 | sed 5q` in
++ *Sun\ C*)
++ # Sun C++ 5.9
++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
++ ;;
++ esac
++ ;;
++ esac
++ ;;
++ lynxos*)
++ ;;
++ m88k*)
++ ;;
++ mvs*)
++ case $cc_basename in
++ cxx*)
++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall'
++ ;;
++ *)
++ ;;
++ esac
++ ;;
++ netbsd* | netbsdelf*-gnu)
++ ;;
++ *qnx* | *nto*)
++ # QNX uses GNU C++, but need to define -shared option too, otherwise
++ # it will coredump.
++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
++ ;;
++ osf3* | osf4* | osf5*)
++ case $cc_basename in
++ KCC*)
++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,'
++ ;;
++ RCC*)
++ # Rational C++ 2.4.1
++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
++ ;;
++ cxx*)
++ # Digital/Compaq C++
++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
++ # Make sure the PIC flag is empty. It appears that all Alpha
++ # Linux and Compaq Tru64 Unix objects are PIC.
++ _LT_TAGVAR(lt_prog_compiler_pic, $1)=
++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
++ ;;
++ *)
++ ;;
++ esac
++ ;;
++ psos*)
++ ;;
++ solaris*)
++ case $cc_basename in
++ CC*)
++ # Sun C++ 4.2, 5.x and Centerline C++
++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
++ ;;
++ gcx*)
++ # Green Hills C++ Compiler
++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
++ ;;
++ *)
++ ;;
++ esac
++ ;;
++ sunos4*)
++ case $cc_basename in
++ CC*)
++ # Sun C++ 4.x
++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
++ ;;
++ lcc*)
++ # Lucid
++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
++ ;;
++ *)
++ ;;
++ esac
++ ;;
++ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
++ case $cc_basename in
++ CC*)
++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
++ ;;
++ esac
++ ;;
++ tandem*)
++ case $cc_basename in
++ NCC*)
++ # NonStop-UX NCC 3.20
++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
++ ;;
++ *)
++ ;;
++ esac
++ ;;
++ vxworks*)
++ ;;
++ *)
++ _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
++ ;;
++ esac
++ fi
++],
++[
++ if test "$GCC" = yes; then
++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
++
++ case $host_os in
++ aix*)
++ # All AIX code is PIC.
++ if test "$host_cpu" = ia64; then
++ # AIX 5 now supports IA64 processor
++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
++ fi
++ ;;
++
++ amigaos*)
++ case $host_cpu in
++ powerpc)
++ # see comment about AmigaOS4 .so support
++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
++ ;;
++ m68k)
++ # FIXME: we need at least 68020 code to build shared libraries, but
++ # adding the `-m68020' flag to GCC prevents building anything better,
++ # like `-m68040'.
++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4'
++ ;;
++ esac
++ ;;
++
++ beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*)
++ # PIC is the default for these OSes.
++ ;;
++
++ mingw* | cygwin* | pw32* | os2* | cegcc*)
++ # This hack is so that the source file can tell whether it is being
++ # built for inclusion in a dll (and should export symbols for example).
++ # Although the cygwin gcc ignores -fPIC, still need this for old-style
++ # (--disable-auto-import) libraries
++ m4_if([$1], [GCJ], [],
++ [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
++ ;;
++
++ darwin* | rhapsody*)
++ # PIC is the default on this platform
++ # Common symbols not allowed in MH_DYLIB files
++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common'
++ ;;
++
++ hpux*)
++ # PIC is the default for 64-bit PA HP-UX, but not for 32-bit
++ # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag
++ # sets the default TLS model and affects inlining.
++ case $host_cpu in
++ hppa*64*)
++ # +Z the default
++ ;;
++ *)
++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
++ ;;
++ esac
++ ;;
++
++ interix[[3-9]]*)
++ # Interix 3.x gcc -fpic/-fPIC options generate broken code.
++ # Instead, we relocate shared libraries at runtime.
++ ;;
++
++ msdosdjgpp*)
++ # Just because we use GCC doesn't mean we suddenly get shared libraries
++ # on systems that don't support them.
++ _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
++ enable_shared=no
++ ;;
++
++ *nto* | *qnx*)
++ # QNX uses GNU C++, but need to define -shared option too, otherwise
++ # it will coredump.
++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
++ ;;
++
++ sysv4*MP*)
++ if test -d /usr/nec; then
++ _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic
++ fi
++ ;;
++
++ *)
++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
++ ;;
++ esac
++ else
++ # PORTME Check for flag to pass linker flags through the system compiler.
++ case $host_os in
++ aix*)
++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
++ if test "$host_cpu" = ia64; then
++ # AIX 5 now supports IA64 processor
++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
++ else
++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp'
++ fi
++ ;;
++
++ mingw* | cygwin* | pw32* | os2* | cegcc*)
++ # This hack is so that the source file can tell whether it is being
++ # built for inclusion in a dll (and should export symbols for example).
++ m4_if([$1], [GCJ], [],
++ [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT'])
++ ;;
++
++ hpux9* | hpux10* | hpux11*)
++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
++ # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but
++ # not for PA HP-UX.
++ case $host_cpu in
++ hppa*64*|ia64*)
++ # +Z the default
++ ;;
++ *)
++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z'
++ ;;
++ esac
++ # Is there a better lt_prog_compiler_static that works with the bundled CC?
++ _LT_TAGVAR(lt_prog_compiler_static, $1)='${wl}-a ${wl}archive'
++ ;;
++
++ irix5* | irix6* | nonstopux*)
++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
++ # PIC (with -KPIC) is the default.
++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
++ ;;
++
++ linux* | k*bsd*-gnu)
++ case $cc_basename in
++ # old Intel for x86_64 which still supported -KPIC.
++ ecc*)
++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
++ ;;
++ # icc used to be incompatible with GCC.
++ # ICC 10 doesn't accept -KPIC any more.
++ icc* | ifort*)
++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC'
++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-static'
++ ;;
++ # Lahey Fortran 8.1.
++ lf95*)
++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared'
++ _LT_TAGVAR(lt_prog_compiler_static, $1)='--static'
++ ;;
++ pgcc* | pgf77* | pgf90* | pgf95*)
++ # Portland Group compilers (*not* the Pentium gcc compiler,
++ # which looks to be a dead project)
++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic'
++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
++ ;;
++ ccc*)
++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
++ # All Alpha code is PIC.
++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
++ ;;
++ xl*)
++ # IBM XL C 8.0/Fortran 10.1 on PPC
++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic'
++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink'
++ ;;
++ *)
++ case `$CC -V 2>&1 | sed 5q` in
++ *Sun\ C*)
++ # Sun C 5.9
++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
++ ;;
++ *Sun\ F*)
++ # Sun Fortran 8.3 passes all unrecognized flags to the linker
++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
++ _LT_TAGVAR(lt_prog_compiler_wl, $1)=''
++ ;;
++ esac
++ ;;
++ esac
++ ;;
++
++ newsos6)
++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
++ ;;
++
++ *nto* | *qnx*)
++ # QNX uses GNU C++, but need to define -shared option too, otherwise
++ # it will coredump.
++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared'
++ ;;
++
++ osf3* | osf4* | osf5*)
++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
++ # All OSF/1 code is PIC.
++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
++ ;;
++
++ rdos*)
++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared'
++ ;;
++
++ solaris*)
++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
++ case $cc_basename in
++ f77* | f90* | f95*)
++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';;
++ *)
++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';;
++ esac
++ ;;
++
++ sunos4*)
++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld '
++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC'
++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
++ ;;
++
++ sysv4 | sysv4.2uw2* | sysv4.3*)
++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
++ ;;
++
++ sysv4*MP*)
++ if test -d /usr/nec ;then
++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic'
++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
++ fi
++ ;;
++
++ sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC'
++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
++ ;;
++
++ unicos*)
++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,'
++ _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
++ ;;
++
++ uts4*)
++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic'
++ _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic'
++ ;;
++
++ *)
++ _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no
++ ;;
++ esac
++ fi
++])
++case $host_os in
++ # For platforms which do not support PIC, -DPIC is meaningless:
++ *djgpp*)
++ _LT_TAGVAR(lt_prog_compiler_pic, $1)=
++ ;;
++ *)
++ _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])"
++ ;;
++esac
++AC_MSG_RESULT([$_LT_TAGVAR(lt_prog_compiler_pic, $1)])
++_LT_TAGDECL([wl], [lt_prog_compiler_wl], [1],
++ [How to pass a linker flag through the compiler])
++
++#
++# Check to make sure the PIC flag actually works.
++#
++if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then
++ _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works],
++ [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)],
++ [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [],
++ [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in
++ "" | " "*) ;;
++ *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;;
++ esac],
++ [_LT_TAGVAR(lt_prog_compiler_pic, $1)=
++ _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no])
++fi
++_LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1],
++ [Additional compiler flags for building library objects])
++
++#
++# Check to make sure the static flag actually works.
++#
++wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\"
++_LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works],
++ _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1),
++ $lt_tmp_static_flag,
++ [],
++ [_LT_TAGVAR(lt_prog_compiler_static, $1)=])
++_LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1],
++ [Compiler flag to prevent dynamic linking])
++])# _LT_COMPILER_PIC
++
++
++# _LT_LINKER_SHLIBS([TAGNAME])
++# ----------------------------
++# See if the linker supports building shared libraries.
++m4_defun([_LT_LINKER_SHLIBS],
++[AC_REQUIRE([LT_PATH_LD])dnl
++AC_REQUIRE([LT_PATH_NM])dnl
++m4_require([_LT_FILEUTILS_DEFAULTS])dnl
++m4_require([_LT_DECL_EGREP])dnl
++m4_require([_LT_DECL_SED])dnl
++m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl
++m4_require([_LT_TAG_COMPILER])dnl
++AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
++m4_if([$1], [CXX], [
++ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
++ case $host_os in
++ aix[[4-9]]*)
++ # If we're using GNU nm, then we don't want the "-C" option.
++ # -C means demangle to AIX nm, but means don't demangle with GNU nm
++ if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
++ _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
++ else
++ _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
++ fi
++ ;;
++ pw32*)
++ _LT_TAGVAR(export_symbols_cmds, $1)="$ltdll_cmds"
++ ;;
++ cygwin* | mingw* | cegcc*)
++ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;/^.*[[ ]]__nm__/s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols'
++ ;;
++ linux* | k*bsd*-gnu)
++ _LT_TAGVAR(link_all_deplibs, $1)=no
++ ;;
++ *)
++ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
++ ;;
++ esac
++ _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
++], [
++ runpath_var=
++ _LT_TAGVAR(allow_undefined_flag, $1)=
++ _LT_TAGVAR(always_export_symbols, $1)=no
++ _LT_TAGVAR(archive_cmds, $1)=
++ _LT_TAGVAR(archive_expsym_cmds, $1)=
++ _LT_TAGVAR(compiler_needs_object, $1)=no
++ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
++ _LT_TAGVAR(export_dynamic_flag_spec, $1)=
++ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols'
++ _LT_TAGVAR(hardcode_automatic, $1)=no
++ _LT_TAGVAR(hardcode_direct, $1)=no
++ _LT_TAGVAR(hardcode_direct_absolute, $1)=no
++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
++ _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
++ _LT_TAGVAR(hardcode_libdir_separator, $1)=
++ _LT_TAGVAR(hardcode_minus_L, $1)=no
++ _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
++ _LT_TAGVAR(inherit_rpath, $1)=no
++ _LT_TAGVAR(link_all_deplibs, $1)=unknown
++ _LT_TAGVAR(module_cmds, $1)=
++ _LT_TAGVAR(module_expsym_cmds, $1)=
++ _LT_TAGVAR(old_archive_from_new_cmds, $1)=
++ _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)=
++ _LT_TAGVAR(thread_safe_flag_spec, $1)=
++ _LT_TAGVAR(whole_archive_flag_spec, $1)=
++ # include_expsyms should be a list of space-separated symbols to be *always*
++ # included in the symbol list
++ _LT_TAGVAR(include_expsyms, $1)=
++ # exclude_expsyms can be an extended regexp of symbols to exclude
++ # it will be wrapped by ` (' and `)$', so one must not match beginning or
++ # end of line. Example: `a|bc|.*d.*' will exclude the symbols `a' and `bc',
++ # as well as any symbol that contains `d'.
++ _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*']
++ # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out
++ # platforms (ab)use it in PIC code, but their linkers get confused if
++ # the symbol is explicitly referenced. Since portable code cannot
++ # rely on this symbol name, it's probably fine to never include it in
++ # preloaded symbol tables.
++ # Exclude shared library initialization/finalization symbols.
++dnl Note also adjust exclude_expsyms for C++ above.
++ extract_expsyms_cmds=
++
++ case $host_os in
++ cygwin* | mingw* | pw32* | cegcc*)
++ # FIXME: the MSVC++ port hasn't been tested in a loooong time
++ # When not using gcc, we currently assume that we are using
++ # Microsoft Visual C++.
++ if test "$GCC" != yes; then
++ with_gnu_ld=no
++ fi
++ ;;
++ interix*)
++ # we just hope/assume this is gcc and not c89 (= MSVC++)
++ with_gnu_ld=yes
++ ;;
++ openbsd*)
++ with_gnu_ld=no
++ ;;
++ linux* | k*bsd*-gnu)
++ _LT_TAGVAR(link_all_deplibs, $1)=no
++ ;;
++ esac
++
++ _LT_TAGVAR(ld_shlibs, $1)=yes
++ if test "$with_gnu_ld" = yes; then
++ # If archive_cmds runs LD, not CC, wlarc should be empty
++ wlarc='${wl}'
++
++ # Set some defaults for GNU ld with shared library support. These
++ # are reset later if shared libraries are not supported. Putting them
++ # here allows them to be overridden if necessary.
++ runpath_var=LD_RUN_PATH
++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
++ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
++ # ancient GNU ld didn't support --whole-archive et. al.
++ if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then
++ _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
++ else
++ _LT_TAGVAR(whole_archive_flag_spec, $1)=
++ fi
++ supports_anon_versioning=no
++ case `$LD -v 2>&1` in
++ *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11
++ *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ...
++ *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ...
++ *\ 2.11.*) ;; # other 2.11 versions
++ *) supports_anon_versioning=yes ;;
++ esac
++
++ # See if GNU ld supports shared libraries.
++ case $host_os in
++ aix[[3-9]]*)
++ # On AIX/PPC, the GNU linker is very broken
++ if test "$host_cpu" != ia64; then
++ _LT_TAGVAR(ld_shlibs, $1)=no
++ cat <<_LT_EOF 1>&2
++
++*** Warning: the GNU linker, at least up to release 2.9.1, is reported
++*** to be unable to reliably create shared libraries on AIX.
++*** Therefore, libtool is disabling shared libraries support. If you
++*** really care for shared libraries, you may want to modify your PATH
++*** so that a non-GNU linker is found, and then restart.
++
++_LT_EOF
++ fi
++ ;;
++
++ amigaos*)
++ case $host_cpu in
++ powerpc)
++ # see comment about AmigaOS4 .so support
++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
++ _LT_TAGVAR(archive_expsym_cmds, $1)=''
++ ;;
++ m68k)
++ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
++ _LT_TAGVAR(hardcode_minus_L, $1)=yes
++ ;;
++ esac
++ ;;
++
++ beos*)
++ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
++ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
++ # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
++ # support --undefined. This deserves some investigation. FIXME
++ _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
++ else
++ _LT_TAGVAR(ld_shlibs, $1)=no
++ fi
++ ;;
++
++ cygwin* | mingw* | pw32* | cegcc*)
++ # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
++ # as there is no search path for DLLs.
++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
++ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
++ _LT_TAGVAR(always_export_symbols, $1)=no
++ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
++ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols'
++
++ if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
++ # If the export-symbols file already is a .def file (1st line
++ # is EXPORTS), use it as is; otherwise, prepend...
++ _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
++ cp $export_symbols $output_objdir/$soname.def;
++ else
++ echo EXPORTS > $output_objdir/$soname.def;
++ cat $export_symbols >> $output_objdir/$soname.def;
++ fi~
++ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
++ else
++ _LT_TAGVAR(ld_shlibs, $1)=no
++ fi
++ ;;
++
++ interix[[3-9]]*)
++ _LT_TAGVAR(hardcode_direct, $1)=no
++ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
++ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
++ # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
++ # Instead, shared libraries are loaded at an image base (0x10000000 by
++ # default) and relocated if they conflict, which is a slow very memory
++ # consuming and fragmenting process. To avoid this, we pick a random,
++ # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
++ # time. Moving up from 0x10000000 also allows more sbrk(2) space.
++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
++ _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
++ ;;
++
++ gnu* | linux* | tpf* | k*bsd*-gnu)
++ tmp_diet=no
++ if test "$host_os" = linux-dietlibc; then
++ case $cc_basename in
++ diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn)
++ esac
++ fi
++ if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \
++ && test "$tmp_diet" = no
++ then
++ tmp_addflag=
++ tmp_sharedflag='-shared'
++ case $cc_basename,$host_cpu in
++ pgcc*) # Portland Group C compiler
++ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
++ tmp_addflag=' $pic_flag'
++ ;;
++ pgf77* | pgf90* | pgf95*) # Portland Group f77 and f90 compilers
++ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
++ tmp_addflag=' $pic_flag -Mnomain' ;;
++ ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64
++ tmp_addflag=' -i_dynamic' ;;
++ efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64
++ tmp_addflag=' -i_dynamic -nofor_main' ;;
++ ifc* | ifort*) # Intel Fortran compiler
++ tmp_addflag=' -nofor_main' ;;
++ lf95*) # Lahey Fortran 8.1
++ _LT_TAGVAR(whole_archive_flag_spec, $1)=
++ tmp_sharedflag='--shared' ;;
++ xl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below)
++ tmp_sharedflag='-qmkshrobj'
++ tmp_addflag= ;;
++ esac
++ case `$CC -V 2>&1 | sed 5q` in
++ *Sun\ C*) # Sun C 5.9
++ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
++ _LT_TAGVAR(compiler_needs_object, $1)=yes
++ tmp_sharedflag='-G' ;;
++ *Sun\ F*) # Sun Fortran 8.3
++ tmp_sharedflag='-G' ;;
++ esac
++ _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
++
++ if test "x$supports_anon_versioning" = xyes; then
++ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
++ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
++ echo "local: *; };" >> $output_objdir/$libname.ver~
++ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
++ fi
++
++ case $cc_basename in
++ xlf*)
++ # IBM XL Fortran 10.1 on PPC cannot create shared libs itself
++ _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive'
++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
++ _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='-rpath $libdir'
++ _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $compiler_flags -soname $soname -o $lib'
++ if test "x$supports_anon_versioning" = xyes; then
++ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
++ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
++ echo "local: *; };" >> $output_objdir/$libname.ver~
++ $LD -shared $libobjs $deplibs $compiler_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib'
++ fi
++ ;;
++ esac
++ else
++ _LT_TAGVAR(ld_shlibs, $1)=no
++ fi
++ ;;
++
++ netbsd* | netbsdelf*-gnu)
++ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
++ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib'
++ wlarc=
++ else
++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
++ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
++ fi
++ ;;
++
++ solaris*)
++ if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then
++ _LT_TAGVAR(ld_shlibs, $1)=no
++ cat <<_LT_EOF 1>&2
++
++*** Warning: The releases 2.8.* of the GNU linker cannot reliably
++*** create shared libraries on Solaris systems. Therefore, libtool
++*** is disabling shared libraries support. We urge you to upgrade GNU
++*** binutils to release 2.9.1 or newer. Another option is to modify
++*** your PATH or compiler configuration so that the native linker is
++*** used, and then restart.
++
++_LT_EOF
++ elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
++ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
++ else
++ _LT_TAGVAR(ld_shlibs, $1)=no
++ fi
++ ;;
++
++ sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
++ case `$LD -v 2>&1` in
++ *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*)
++ _LT_TAGVAR(ld_shlibs, $1)=no
++ cat <<_LT_EOF 1>&2
++
++*** Warning: Releases of the GNU linker prior to 2.16.91.0.3 can not
++*** reliably create shared libraries on SCO systems. Therefore, libtool
++*** is disabling shared libraries support. We urge you to upgrade GNU
++*** binutils to release 2.16.91.0.3 or newer. Another option is to modify
++*** your PATH or compiler configuration so that the native linker is
++*** used, and then restart.
++
++_LT_EOF
++ ;;
++ *)
++ # For security reasons, it is highly recommended that you always
++ # use absolute paths for naming shared libraries, and exclude the
++ # DT_RUNPATH tag from executables and libraries. But doing so
++ # requires that you compile everything twice, which is a pain.
++ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
++ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
++ else
++ _LT_TAGVAR(ld_shlibs, $1)=no
++ fi
++ ;;
++ esac
++ ;;
++
++ sunos4*)
++ _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags'
++ wlarc=
++ _LT_TAGVAR(hardcode_direct, $1)=yes
++ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
++ ;;
++
++ *)
++ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
++ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
++ else
++ _LT_TAGVAR(ld_shlibs, $1)=no
++ fi
++ ;;
++ esac
++
++ if test "$_LT_TAGVAR(ld_shlibs, $1)" = no; then
++ runpath_var=
++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
++ _LT_TAGVAR(export_dynamic_flag_spec, $1)=
++ _LT_TAGVAR(whole_archive_flag_spec, $1)=
++ fi
++ else
++ # PORTME fill in a description of your system's linker (not GNU ld)
++ case $host_os in
++ aix3*)
++ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
++ _LT_TAGVAR(always_export_symbols, $1)=yes
++ _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname'
++ # Note: this linker hardcodes the directories in LIBPATH if there
++ # are no directories specified by -L.
++ _LT_TAGVAR(hardcode_minus_L, $1)=yes
++ if test "$GCC" = yes && test -z "$lt_prog_compiler_static"; then
++ # Neither direct hardcoding nor static linking is supported with a
++ # broken collect2.
++ _LT_TAGVAR(hardcode_direct, $1)=unsupported
++ fi
++ ;;
++
++ aix[[4-9]]*)
++ if test "$host_cpu" = ia64; then
++ # On IA64, the linker does run time linking by default, so we don't
++ # have to do anything special.
++ aix_use_runtimelinking=no
++ exp_sym_flag='-Bexport'
++ no_entry_flag=""
++ else
++ # If we're using GNU nm, then we don't want the "-C" option.
++ # -C means demangle to AIX nm, but means don't demangle with GNU nm
++ if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then
++ _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
++ else
++ _LT_TAGVAR(export_symbols_cmds, $1)='$NM -BCpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B")) && ([substr](\$ 3,1,1) != ".")) { print \$ 3 } }'\'' | sort -u > $export_symbols'
++ fi
++ aix_use_runtimelinking=no
++
++ # Test if we are trying to use run time linking or normal
++ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
++ # need to do runtime linking.
++ case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
++ for ld_flag in $LDFLAGS; do
++ if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
++ aix_use_runtimelinking=yes
++ break
++ fi
++ done
++ ;;
++ esac
++
++ exp_sym_flag='-bexport'
++ no_entry_flag='-bnoentry'
++ fi
++
++ # When large executables or shared objects are built, AIX ld can
++ # have problems creating the table of contents. If linking a library
++ # or program results in "error TOC overflow" add -mminimal-toc to
++ # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
++ # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
++
++ _LT_TAGVAR(archive_cmds, $1)=''
++ _LT_TAGVAR(hardcode_direct, $1)=yes
++ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
++ _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
++ _LT_TAGVAR(link_all_deplibs, $1)=yes
++ _LT_TAGVAR(file_list_spec, $1)='${wl}-f,'
++
++ if test "$GCC" = yes; then
++ case $host_os in aix4.[[012]]|aix4.[[012]].*)
++ # We only want to do this on AIX 4.2 and lower, the check
++ # below for broken collect2 doesn't work under 4.3+
++ collect2name=`${CC} -print-prog-name=collect2`
++ if test -f "$collect2name" &&
++ strings "$collect2name" | $GREP resolve_lib_name >/dev/null
++ then
++ # We have reworked collect2
++ :
++ else
++ # We have old collect2
++ _LT_TAGVAR(hardcode_direct, $1)=unsupported
++ # It fails to find uninstalled libraries when the uninstalled
++ # path is not listed in the libpath. Setting hardcode_minus_L
++ # to unsupported forces relinking
++ _LT_TAGVAR(hardcode_minus_L, $1)=yes
++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
++ _LT_TAGVAR(hardcode_libdir_separator, $1)=
++ fi
++ ;;
++ esac
++ shared_flag='-shared'
++ if test "$aix_use_runtimelinking" = yes; then
++ shared_flag="$shared_flag "'${wl}-G'
++ fi
++ _LT_TAGVAR(link_all_deplibs, $1)=no
++ else
++ # not using gcc
++ if test "$host_cpu" = ia64; then
++ # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
++ # chokes on -Wl,-G. The following line is correct:
++ shared_flag='-G'
++ else
++ if test "$aix_use_runtimelinking" = yes; then
++ shared_flag='${wl}-G'
++ else
++ shared_flag='${wl}-bM:SRE'
++ fi
++ fi
++ fi
++
++ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall'
++ # It seems that -bexpall does not export symbols beginning with
++ # underscore (_), so it is better to generate a list of symbols to export.
++ _LT_TAGVAR(always_export_symbols, $1)=yes
++ if test "$aix_use_runtimelinking" = yes; then
++ # Warning - without using the other runtime loading flags (-brtl),
++ # -berok will link without error, but may produce a broken library.
++ _LT_TAGVAR(allow_undefined_flag, $1)='-berok'
++ # Determine the default libpath from the value encoded in an
++ # empty executable.
++ _LT_SYS_MODULE_PATH_AIX
++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
++ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
++ else
++ if test "$host_cpu" = ia64; then
++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
++ _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
++ _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
++ else
++ # Determine the default libpath from the value encoded in an
++ # empty executable.
++ _LT_SYS_MODULE_PATH_AIX
++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
++ # Warning - without using the other run time loading flags,
++ # -berok will link without error, but may produce a broken library.
++ _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
++ _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
++ # Exported symbols can be pulled into shared objects from archives
++ _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
++ _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
++ # This is similar to how AIX traditionally builds its shared libraries.
++ _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
++ fi
++ fi
++ ;;
++
++ amigaos*)
++ case $host_cpu in
++ powerpc)
++ # see comment about AmigaOS4 .so support
++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
++ _LT_TAGVAR(archive_expsym_cmds, $1)=''
++ ;;
++ m68k)
++ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)'
++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
++ _LT_TAGVAR(hardcode_minus_L, $1)=yes
++ ;;
++ esac
++ ;;
++
++ bsdi[[45]]*)
++ _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic
++ ;;
++
++ cygwin* | mingw* | pw32* | cegcc*)
++ # When not using gcc, we currently assume that we are using
++ # Microsoft Visual C++.
++ # hardcode_libdir_flag_spec is actually meaningless, as there is
++ # no search path for DLLs.
++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' '
++ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
++ # Tell ltmain to make .lib files, not .a files.
++ libext=lib
++ # Tell ltmain to make .dll files, not .so files.
++ shrext_cmds=".dll"
++ # FIXME: Setting linknames here is a bad hack.
++ _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `$ECHO "X$deplibs" | $Xsed -e '\''s/ -lc$//'\''` -link -dll~linknames='
++ # The linker will automatically build a .lib file if we build a DLL.
++ _LT_TAGVAR(old_archive_from_new_cmds, $1)='true'
++ # FIXME: Should let the user specify the lib program.
++ _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs'
++ _LT_TAGVAR(fix_srcfile_path, $1)='`cygpath -w "$srcfile"`'
++ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
++ ;;
++
++ darwin* | rhapsody*)
++ _LT_DARWIN_LINKER_FEATURES($1)
++ ;;
++
++ dgux*)
++ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
++ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
++ ;;
++
++ freebsd1*)
++ _LT_TAGVAR(ld_shlibs, $1)=no
++ ;;
++
++ # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor
++ # support. Future versions do this automatically, but an explicit c++rt0.o
++ # does not break anything, and helps significantly (at the cost of a little
++ # extra space).
++ freebsd2.2*)
++ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o'
++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
++ _LT_TAGVAR(hardcode_direct, $1)=yes
++ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
++ ;;
++
++ # Unfortunately, older versions of FreeBSD 2 do not have this feature.
++ freebsd2*)
++ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
++ _LT_TAGVAR(hardcode_direct, $1)=yes
++ _LT_TAGVAR(hardcode_minus_L, $1)=yes
++ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
++ ;;
++
++ # FreeBSD 3 and greater uses gcc -shared to do shared libraries.
++ freebsd* | dragonfly*)
++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -o $lib $libobjs $deplibs $compiler_flags'
++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
++ _LT_TAGVAR(hardcode_direct, $1)=yes
++ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
++ ;;
++
++ hpux9*)
++ if test "$GCC" = yes; then
++ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
++ else
++ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
++ fi
++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
++ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
++ _LT_TAGVAR(hardcode_direct, $1)=yes
++
++ # hardcode_minus_L: Not really in the search PATH,
++ # but as the default location of the library.
++ _LT_TAGVAR(hardcode_minus_L, $1)=yes
++ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
++ ;;
++
++ hpux10*)
++ if test "$GCC" = yes -a "$with_gnu_ld" = no; then
++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
++ else
++ _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'
++ fi
++ if test "$with_gnu_ld" = no; then
++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
++ _LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)='+b $libdir'
++ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
++ _LT_TAGVAR(hardcode_direct, $1)=yes
++ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
++ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
++ # hardcode_minus_L: Not really in the search PATH,
++ # but as the default location of the library.
++ _LT_TAGVAR(hardcode_minus_L, $1)=yes
++ fi
++ ;;
++
++ hpux11*)
++ if test "$GCC" = yes -a "$with_gnu_ld" = no; then
++ case $host_cpu in
++ hppa*64*)
++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
++ ;;
++ ia64*)
++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
++ ;;
++ *)
++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
++ ;;
++ esac
++ else
++ case $host_cpu in
++ hppa*64*)
++ _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
++ ;;
++ ia64*)
++ _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags'
++ ;;
++ *)
++ _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'
++ ;;
++ esac
++ fi
++ if test "$with_gnu_ld" = no; then
++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
++ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
++
++ case $host_cpu in
++ hppa*64*|ia64*)
++ _LT_TAGVAR(hardcode_direct, $1)=no
++ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
++ ;;
++ *)
++ _LT_TAGVAR(hardcode_direct, $1)=yes
++ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
++ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
++
++ # hardcode_minus_L: Not really in the search PATH,
++ # but as the default location of the library.
++ _LT_TAGVAR(hardcode_minus_L, $1)=yes
++ ;;
++ esac
++ fi
++ ;;
++
++ irix5* | irix6* | nonstopux*)
++ if test "$GCC" = yes; then
++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
++ # Try to use the -exported_symbol ld option, if it does not
++ # work, assume that -exports_file does not work either and
++ # implicitly export all symbols.
++ save_LDFLAGS="$LDFLAGS"
++ LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null"
++ AC_LINK_IFELSE(int foo(void) {},
++ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib'
++ )
++ LDFLAGS="$save_LDFLAGS"
++ else
++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
++ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -exports_file $export_symbols -o $lib'
++ fi
++ _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
++ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
++ _LT_TAGVAR(inherit_rpath, $1)=yes
++ _LT_TAGVAR(link_all_deplibs, $1)=yes
++ ;;
++
++ netbsd* | netbsdelf*-gnu)
++ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
++ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out
++ else
++ _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF
++ fi
++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
++ _LT_TAGVAR(hardcode_direct, $1)=yes
++ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
++ ;;
++
++ newsos6)
++ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
++ _LT_TAGVAR(hardcode_direct, $1)=yes
++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
++ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
++ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
++ ;;
++
++ *nto* | *qnx*)
++ ;;
++
++ openbsd*)
++ if test -f /usr/libexec/ld.so; then
++ _LT_TAGVAR(hardcode_direct, $1)=yes
++ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
++ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
++ if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
++ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags ${wl}-retain-symbols-file,$export_symbols'
++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
++ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
++ else
++ case $host_os in
++ openbsd[[01]].* | openbsd2.[[0-7]] | openbsd2.[[0-7]].*)
++ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags'
++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
++ ;;
++ *)
++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags'
++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
++ ;;
++ esac
++ fi
++ else
++ _LT_TAGVAR(ld_shlibs, $1)=no
++ fi
++ ;;
++
++ os2*)
++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
++ _LT_TAGVAR(hardcode_minus_L, $1)=yes
++ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
++ _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY $libname INITINSTANCE" > $output_objdir/$libname.def~$ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~$ECHO DATA >> $output_objdir/$libname.def~$ECHO " SINGLE NONSHARED" >> $output_objdir/$libname.def~$ECHO EXPORTS >> $output_objdir/$libname.def~emxexp $libobjs >> $output_objdir/$libname.def~$CC -Zdll -Zcrtdll -o $lib $libobjs $deplibs $compiler_flags $output_objdir/$libname.def'
++ _LT_TAGVAR(old_archive_from_new_cmds, $1)='emximp -o $output_objdir/$libname.a $output_objdir/$libname.def'
++ ;;
++
++ osf3*)
++ if test "$GCC" = yes; then
++ _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
++ else
++ _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
++ fi
++ _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
++ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
++ ;;
++
++ osf4* | osf5*) # as osf3* with the addition of -msym flag
++ if test "$GCC" = yes; then
++ _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
++ else
++ _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
++ _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~
++ $CC -shared${allow_undefined_flag} ${wl}-input ${wl}$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~$RM $lib.exp'
++
++ # Both c and cxx compiler support -rpath directly
++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
++ fi
++ _LT_TAGVAR(archive_cmds_need_lc, $1)='no'
++ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
++ ;;
++
++ solaris*)
++ _LT_TAGVAR(no_undefined_flag, $1)=' -z defs'
++ if test "$GCC" = yes; then
++ wlarc='${wl}'
++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-z ${wl}text ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags'
++ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
++ $CC -shared ${wl}-z ${wl}text ${wl}-M ${wl}$lib.exp ${wl}-h ${wl}$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
++ else
++ case `$CC -V 2>&1` in
++ *"Compilers 5.0"*)
++ wlarc=''
++ _LT_TAGVAR(archive_cmds, $1)='$LD -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $linker_flags'
++ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
++ $LD -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp'
++ ;;
++ *)
++ wlarc='${wl}'
++ _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h $soname -o $lib $libobjs $deplibs $compiler_flags'
++ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
++ $CC -G${allow_undefined_flag} -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp'
++ ;;
++ esac
++ fi
++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
++ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
++ case $host_os in
++ solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
++ *)
++ # The compiler driver will combine and reorder linker options,
++ # but understands `-z linker_flag'. GCC discards it without `$wl',
++ # but is careful enough not to reorder.
++ # Supported since Solaris 2.6 (maybe 2.5.1?)
++ if test "$GCC" = yes; then
++ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
++ else
++ _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
++ fi
++ ;;
++ esac
++ _LT_TAGVAR(link_all_deplibs, $1)=yes
++ ;;
++
++ sunos4*)
++ if test "x$host_vendor" = xsequent; then
++ # Use $CC to link under sequent, because it throws in some extra .o
++ # files that make .init and .fini sections work.
++ _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h $soname -o $lib $libobjs $deplibs $compiler_flags'
++ else
++ _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags'
++ fi
++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
++ _LT_TAGVAR(hardcode_direct, $1)=yes
++ _LT_TAGVAR(hardcode_minus_L, $1)=yes
++ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
++ ;;
++
++ sysv4)
++ case $host_vendor in
++ sni)
++ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
++ _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true???
++ ;;
++ siemens)
++ ## LD is ld it makes a PLAMLIB
++ ## CC just makes a GrossModule.
++ _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags'
++ _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs'
++ _LT_TAGVAR(hardcode_direct, $1)=no
++ ;;
++ motorola)
++ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
++ _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie
++ ;;
++ esac
++ runpath_var='LD_RUN_PATH'
++ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
++ ;;
++
++ sysv4.3*)
++ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
++ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
++ _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport'
++ ;;
++
++ sysv4*MP*)
++ if test -d /usr/nec; then
++ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
++ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
++ runpath_var=LD_RUN_PATH
++ hardcode_runpath_var=yes
++ _LT_TAGVAR(ld_shlibs, $1)=yes
++ fi
++ ;;
++
++ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
++ _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
++ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
++ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
++ runpath_var='LD_RUN_PATH'
++
++ if test "$GCC" = yes; then
++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
++ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
++ else
++ _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
++ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
++ fi
++ ;;
++
++ sysv5* | sco3.2v5* | sco5v6*)
++ # Note: We can NOT use -z defs as we might desire, because we do not
++ # link with -lc, and that would cause any symbols used from libc to
++ # always be unresolved, which means just about no library would
++ # ever link correctly. If we're not using GNU ld we use -z text
++ # though, which does catch some bad symbols but isn't as heavy-handed
++ # as -z defs.
++ _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
++ _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
++ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
++ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir'
++ _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
++ _LT_TAGVAR(link_all_deplibs, $1)=yes
++ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
++ runpath_var='LD_RUN_PATH'
++
++ if test "$GCC" = yes; then
++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
++ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
++ else
++ _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
++ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
++ fi
++ ;;
++
++ uts4*)
++ _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags'
++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
++ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
++ ;;
++
++ *)
++ _LT_TAGVAR(ld_shlibs, $1)=no
++ ;;
++ esac
++
++ if test x$host_vendor = xsni; then
++ case $host in
++ sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*)
++ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Blargedynsym'
++ ;;
++ esac
++ fi
++ fi
++])
++AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
++test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
++
++_LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld
++
++_LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl
++_LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl
++_LT_DECL([], [extract_expsyms_cmds], [2],
++ [The commands to extract the exported symbol list from a shared archive])
++
++#
++# Do we need to explicitly link libc?
++#
++case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in
++x|xyes)
++ # Assume -lc should be added
++ _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
++
++ if test "$enable_shared" = yes && test "$GCC" = yes; then
++ case $_LT_TAGVAR(archive_cmds, $1) in
++ *'~'*)
++ # FIXME: we may have to deal with multi-command sequences.
++ ;;
++ '$CC '*)
++ # Test whether the compiler implicitly links with -lc since on some
++ # systems, -lgcc has to come before -lc. If gcc already passes -lc
++ # to ld, don't add -lc before -lgcc.
++ AC_MSG_CHECKING([whether -lc should be explicitly linked in])
++ $RM conftest*
++ echo "$lt_simple_compile_test_code" > conftest.$ac_ext
++
++ if AC_TRY_EVAL(ac_compile) 2>conftest.err; then
++ soname=conftest
++ lib=conftest
++ libobjs=conftest.$ac_objext
++ deplibs=
++ wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1)
++ pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1)
++ compiler_flags=-v
++ linker_flags=-v
++ verstring=
++ output_objdir=.
++ libname=conftest
++ lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1)
++ _LT_TAGVAR(allow_undefined_flag, $1)=
++ if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1)
++ then
++ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
++ else
++ _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
++ fi
++ _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag
++ else
++ cat conftest.err 1>&5
++ fi
++ $RM conftest*
++ AC_MSG_RESULT([$_LT_TAGVAR(archive_cmds_need_lc, $1)])
++ ;;
++ esac
++ fi
++ ;;
++esac
++
++_LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0],
++ [Whether or not to add -lc for building shared libraries])
++_LT_TAGDECL([allow_libtool_libs_with_static_runtimes],
++ [enable_shared_with_static_runtimes], [0],
++ [Whether or not to disallow shared libs when runtime libs are static])
++_LT_TAGDECL([], [export_dynamic_flag_spec], [1],
++ [Compiler flag to allow reflexive dlopens])
++_LT_TAGDECL([], [whole_archive_flag_spec], [1],
++ [Compiler flag to generate shared objects directly from archives])
++_LT_TAGDECL([], [compiler_needs_object], [1],
++ [Whether the compiler copes with passing no objects directly])
++_LT_TAGDECL([], [old_archive_from_new_cmds], [2],
++ [Create an old-style archive from a shared archive])
++_LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2],
++ [Create a temporary old-style archive to link instead of a shared archive])
++_LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive])
++_LT_TAGDECL([], [archive_expsym_cmds], [2])
++_LT_TAGDECL([], [module_cmds], [2],
++ [Commands used to build a loadable module if different from building
++ a shared archive.])
++_LT_TAGDECL([], [module_expsym_cmds], [2])
++_LT_TAGDECL([], [with_gnu_ld], [1],
++ [Whether we are building with GNU ld or not])
++_LT_TAGDECL([], [allow_undefined_flag], [1],
++ [Flag that allows shared libraries with undefined symbols to be built])
++_LT_TAGDECL([], [no_undefined_flag], [1],
++ [Flag that enforces no undefined symbols])
++_LT_TAGDECL([], [hardcode_libdir_flag_spec], [1],
++ [Flag to hardcode $libdir into a binary during linking.
++ This must work even if $libdir does not exist])
++_LT_TAGDECL([], [hardcode_libdir_flag_spec_ld], [1],
++ [[If ld is used when linking, flag to hardcode $libdir into a binary
++ during linking. This must work even if $libdir does not exist]])
++_LT_TAGDECL([], [hardcode_libdir_separator], [1],
++ [Whether we need a single "-rpath" flag with a separated argument])
++_LT_TAGDECL([], [hardcode_direct], [0],
++ [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes
++ DIR into the resulting binary])
++_LT_TAGDECL([], [hardcode_direct_absolute], [0],
++ [Set to "yes" if using DIR/libNAME${shared_ext} during linking hardcodes
++ DIR into the resulting binary and the resulting library dependency is
++ "absolute", i.e impossible to change by setting ${shlibpath_var} if the
++ library is relocated])
++_LT_TAGDECL([], [hardcode_minus_L], [0],
++ [Set to "yes" if using the -LDIR flag during linking hardcodes DIR
++ into the resulting binary])
++_LT_TAGDECL([], [hardcode_shlibpath_var], [0],
++ [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR
++ into the resulting binary])
++_LT_TAGDECL([], [hardcode_automatic], [0],
++ [Set to "yes" if building a shared library automatically hardcodes DIR
++ into the library and all subsequent libraries and executables linked
++ against it])
++_LT_TAGDECL([], [inherit_rpath], [0],
++ [Set to yes if linker adds runtime paths of dependent libraries
++ to runtime path list])
++_LT_TAGDECL([], [link_all_deplibs], [0],
++ [Whether libtool must link a program against all its dependency libraries])
++_LT_TAGDECL([], [fix_srcfile_path], [1],
++ [Fix the shell variable $srcfile for the compiler])
++_LT_TAGDECL([], [always_export_symbols], [0],
++ [Set to "yes" if exported symbols are required])
++_LT_TAGDECL([], [export_symbols_cmds], [2],
++ [The commands to list exported symbols])
++_LT_TAGDECL([], [exclude_expsyms], [1],
++ [Symbols that should not be listed in the preloaded symbols])
++_LT_TAGDECL([], [include_expsyms], [1],
++ [Symbols that must always be exported])
++_LT_TAGDECL([], [prelink_cmds], [2],
++ [Commands necessary for linking programs (against libraries) with templates])
++_LT_TAGDECL([], [file_list_spec], [1],
++ [Specify filename containing input files])
++dnl FIXME: Not yet implemented
++dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1],
++dnl [Compiler flag to generate thread safe objects])
++])# _LT_LINKER_SHLIBS
++
++
++# _LT_LANG_C_CONFIG([TAG])
++# ------------------------
++# Ensure that the configuration variables for a C compiler are suitably
++# defined. These variables are subsequently used by _LT_CONFIG to write
++# the compiler configuration to `libtool'.
++m4_defun([_LT_LANG_C_CONFIG],
++[m4_require([_LT_DECL_EGREP])dnl
++lt_save_CC="$CC"
++AC_LANG_PUSH(C)
++
++# Source file extension for C test sources.
++ac_ext=c
++
++# Object file extension for compiled C test sources.
++objext=o
++_LT_TAGVAR(objext, $1)=$objext
++
++# Code to be used in simple compile tests
++lt_simple_compile_test_code="int some_variable = 0;"
++
++# Code to be used in simple link tests
++lt_simple_link_test_code='int main(){return(0);}'
++
++_LT_TAG_COMPILER
++# Save the default compiler, since it gets overwritten when the other
++# tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP.
++compiler_DEFAULT=$CC
++
++# save warnings/boilerplate of simple test code
++_LT_COMPILER_BOILERPLATE
++_LT_LINKER_BOILERPLATE
++
++## CAVEAT EMPTOR:
++## There is no encapsulation within the following macros, do not change
++## the running order or otherwise move them around unless you know exactly
++## what you are doing...
++if test -n "$compiler"; then
++ _LT_COMPILER_NO_RTTI($1)
++ _LT_COMPILER_PIC($1)
++ _LT_COMPILER_C_O($1)
++ _LT_COMPILER_FILE_LOCKS($1)
++ _LT_LINKER_SHLIBS($1)
++ _LT_SYS_DYNAMIC_LINKER($1)
++ _LT_LINKER_HARDCODE_LIBPATH($1)
++ LT_SYS_DLOPEN_SELF
++ _LT_CMD_STRIPLIB
++
++ # Report which library types will actually be built
++ AC_MSG_CHECKING([if libtool supports shared libraries])
++ AC_MSG_RESULT([$can_build_shared])
++
++ AC_MSG_CHECKING([whether to build shared libraries])
++ test "$can_build_shared" = "no" && enable_shared=no
++
++ # On AIX, shared libraries and static libraries use the same namespace, and
++ # are all built from PIC.
++ case $host_os in
++ aix3*)
++ test "$enable_shared" = yes && enable_static=no
++ if test -n "$RANLIB"; then
++ archive_cmds="$archive_cmds~\$RANLIB \$lib"
++ postinstall_cmds='$RANLIB $lib'
++ fi
++ ;;
++
++ aix[[4-9]]*)
++ if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
++ test "$enable_shared" = yes && enable_static=no
++ fi
++ ;;
++ esac
++ AC_MSG_RESULT([$enable_shared])
++
++ AC_MSG_CHECKING([whether to build static libraries])
++ # Make sure either enable_shared or enable_static is yes.
++ test "$enable_shared" = yes || enable_static=yes
++ AC_MSG_RESULT([$enable_static])
++
++ _LT_CONFIG($1)
++fi
++AC_LANG_POP
++CC="$lt_save_CC"
++])# _LT_LANG_C_CONFIG
++
++
++# _LT_PROG_CXX
++# ------------
++# Since AC_PROG_CXX is broken, in that it returns g++ if there is no c++
++# compiler, we have our own version here.
++m4_defun([_LT_PROG_CXX],
++[
++pushdef([AC_MSG_ERROR], [_lt_caught_CXX_error=yes])
++AC_PROG_CXX
++if test -n "$CXX" && ( test "X$CXX" != "Xno" &&
++ ( (test "X$CXX" = "Xg++" && `g++ -v >/dev/null 2>&1` ) ||
++ (test "X$CXX" != "Xg++"))) ; then
++ AC_PROG_CXXCPP
++else
++ _lt_caught_CXX_error=yes
++fi
++popdef([AC_MSG_ERROR])
++])# _LT_PROG_CXX
++
++dnl aclocal-1.4 backwards compatibility:
++dnl AC_DEFUN([_LT_PROG_CXX], [])
++
++
++# _LT_LANG_CXX_CONFIG([TAG])
++# --------------------------
++# Ensure that the configuration variables for a C++ compiler are suitably
++# defined. These variables are subsequently used by _LT_CONFIG to write
++# the compiler configuration to `libtool'.
++m4_defun([_LT_LANG_CXX_CONFIG],
++[AC_REQUIRE([_LT_PROG_CXX])dnl
++m4_require([_LT_FILEUTILS_DEFAULTS])dnl
++m4_require([_LT_DECL_EGREP])dnl
++
++AC_LANG_PUSH(C++)
++_LT_TAGVAR(archive_cmds_need_lc, $1)=no
++_LT_TAGVAR(allow_undefined_flag, $1)=
++_LT_TAGVAR(always_export_symbols, $1)=no
++_LT_TAGVAR(archive_expsym_cmds, $1)=
++_LT_TAGVAR(compiler_needs_object, $1)=no
++_LT_TAGVAR(export_dynamic_flag_spec, $1)=
++_LT_TAGVAR(hardcode_direct, $1)=no
++_LT_TAGVAR(hardcode_direct_absolute, $1)=no
++_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
++_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
++_LT_TAGVAR(hardcode_libdir_separator, $1)=
++_LT_TAGVAR(hardcode_minus_L, $1)=no
++_LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported
++_LT_TAGVAR(hardcode_automatic, $1)=no
++_LT_TAGVAR(inherit_rpath, $1)=no
++_LT_TAGVAR(module_cmds, $1)=
++_LT_TAGVAR(module_expsym_cmds, $1)=
++_LT_TAGVAR(link_all_deplibs, $1)=unknown
++_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
++_LT_TAGVAR(no_undefined_flag, $1)=
++_LT_TAGVAR(whole_archive_flag_spec, $1)=
++_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
++
++# Source file extension for C++ test sources.
++ac_ext=cpp
++
++# Object file extension for compiled C++ test sources.
++objext=o
++_LT_TAGVAR(objext, $1)=$objext
++
++# No sense in running all these tests if we already determined that
++# the CXX compiler isn't working. Some variables (like enable_shared)
++# are currently assumed to apply to all compilers on this platform,
++# and will be corrupted by setting them based on a non-working compiler.
++if test "$_lt_caught_CXX_error" != yes; then
++ # Code to be used in simple compile tests
++ lt_simple_compile_test_code="int some_variable = 0;"
++
++ # Code to be used in simple link tests
++ lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }'
++
++ # ltmain only uses $CC for tagged configurations so make sure $CC is set.
++ _LT_TAG_COMPILER
++
++ # save warnings/boilerplate of simple test code
++ _LT_COMPILER_BOILERPLATE
++ _LT_LINKER_BOILERPLATE
++
++ # Allow CC to be a program name with arguments.
++ lt_save_CC=$CC
++ lt_save_LD=$LD
++ lt_save_GCC=$GCC
++ GCC=$GXX
++ lt_save_with_gnu_ld=$with_gnu_ld
++ lt_save_path_LD=$lt_cv_path_LD
++ if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then
++ lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx
++ else
++ $as_unset lt_cv_prog_gnu_ld
++ fi
++ if test -n "${lt_cv_path_LDCXX+set}"; then
++ lt_cv_path_LD=$lt_cv_path_LDCXX
++ else
++ $as_unset lt_cv_path_LD
++ fi
++ test -z "${LDCXX+set}" || LD=$LDCXX
++ CC=${CXX-"c++"}
++ compiler=$CC
++ _LT_TAGVAR(compiler, $1)=$CC
++ _LT_CC_BASENAME([$compiler])
++
++ if test -n "$compiler"; then
++ # We don't want -fno-exception when compiling C++ code, so set the
++ # no_builtin_flag separately
++ if test "$GXX" = yes; then
++ _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin'
++ else
++ _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=
++ fi
++
++ if test "$GXX" = yes; then
++ # Set up default GNU C++ configuration
++
++ LT_PATH_LD
++
++ # Check if GNU C++ uses GNU ld as the underlying linker, since the
++ # archiving commands below assume that GNU ld is being used.
++ if test "$with_gnu_ld" = yes; then
++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
++ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
++
++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
++ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
++
++ # If archive_cmds runs LD, not CC, wlarc should be empty
++ # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to
++ # investigate it a little bit more. (MM)
++ wlarc='${wl}'
++
++ # ancient GNU ld didn't support --whole-archive et. al.
++ if eval "`$CC -print-prog-name=ld` --help 2>&1" |
++ $GREP 'no-whole-archive' > /dev/null; then
++ _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
++ else
++ _LT_TAGVAR(whole_archive_flag_spec, $1)=
++ fi
++ else
++ with_gnu_ld=no
++ wlarc=
++
++ # A generic and very simple default shared library creation
++ # command for GNU C++ for the case where it uses the native
++ # linker, instead of GNU ld. If possible, this setting should
++ # overridden to take advantage of the native linker features on
++ # the platform it is being used on.
++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
++ fi
++
++ # Commands to make compiler produce verbose output that lists
++ # what "hidden" libraries, object files and flags are used when
++ # linking a shared library.
++ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
++
++ else
++ GXX=no
++ with_gnu_ld=no
++ wlarc=
++ fi
++
++ # PORTME: fill in a description of your system's C++ link characteristics
++ AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries])
++ _LT_TAGVAR(ld_shlibs, $1)=yes
++ case $host_os in
++ aix3*)
++ # FIXME: insert proper C++ library support
++ _LT_TAGVAR(ld_shlibs, $1)=no
++ ;;
++ aix[[4-9]]*)
++ if test "$host_cpu" = ia64; then
++ # On IA64, the linker does run time linking by default, so we don't
++ # have to do anything special.
++ aix_use_runtimelinking=no
++ exp_sym_flag='-Bexport'
++ no_entry_flag=""
++ else
++ aix_use_runtimelinking=no
++
++ # Test if we are trying to use run time linking or normal
++ # AIX style linking. If -brtl is somewhere in LDFLAGS, we
++ # need to do runtime linking.
++ case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*)
++ for ld_flag in $LDFLAGS; do
++ case $ld_flag in
++ *-brtl*)
++ aix_use_runtimelinking=yes
++ break
++ ;;
++ esac
++ done
++ ;;
++ esac
++
++ exp_sym_flag='-bexport'
++ no_entry_flag='-bnoentry'
++ fi
++
++ # When large executables or shared objects are built, AIX ld can
++ # have problems creating the table of contents. If linking a library
++ # or program results in "error TOC overflow" add -mminimal-toc to
++ # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not
++ # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS.
++
++ _LT_TAGVAR(archive_cmds, $1)=''
++ _LT_TAGVAR(hardcode_direct, $1)=yes
++ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
++ _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
++ _LT_TAGVAR(link_all_deplibs, $1)=yes
++ _LT_TAGVAR(file_list_spec, $1)='${wl}-f,'
++
++ if test "$GXX" = yes; then
++ case $host_os in aix4.[[012]]|aix4.[[012]].*)
++ # We only want to do this on AIX 4.2 and lower, the check
++ # below for broken collect2 doesn't work under 4.3+
++ collect2name=`${CC} -print-prog-name=collect2`
++ if test -f "$collect2name" &&
++ strings "$collect2name" | $GREP resolve_lib_name >/dev/null
++ then
++ # We have reworked collect2
++ :
++ else
++ # We have old collect2
++ _LT_TAGVAR(hardcode_direct, $1)=unsupported
++ # It fails to find uninstalled libraries when the uninstalled
++ # path is not listed in the libpath. Setting hardcode_minus_L
++ # to unsupported forces relinking
++ _LT_TAGVAR(hardcode_minus_L, $1)=yes
++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
++ _LT_TAGVAR(hardcode_libdir_separator, $1)=
++ fi
++ esac
++ shared_flag='-shared'
++ if test "$aix_use_runtimelinking" = yes; then
++ shared_flag="$shared_flag "'${wl}-G'
++ fi
++ else
++ # not using gcc
++ if test "$host_cpu" = ia64; then
++ # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release
++ # chokes on -Wl,-G. The following line is correct:
++ shared_flag='-G'
++ else
++ if test "$aix_use_runtimelinking" = yes; then
++ shared_flag='${wl}-G'
++ else
++ shared_flag='${wl}-bM:SRE'
++ fi
++ fi
++ fi
++
++ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-bexpall'
++ # It seems that -bexpall does not export symbols beginning with
++ # underscore (_), so it is better to generate a list of symbols to
++ # export.
++ _LT_TAGVAR(always_export_symbols, $1)=yes
++ if test "$aix_use_runtimelinking" = yes; then
++ # Warning - without using the other runtime loading flags (-brtl),
++ # -berok will link without error, but may produce a broken library.
++ _LT_TAGVAR(allow_undefined_flag, $1)='-berok'
++ # Determine the default libpath from the value encoded in an empty
++ # executable.
++ _LT_SYS_MODULE_PATH_AIX
++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
++
++ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags `if test "x${allow_undefined_flag}" != "x"; then $ECHO "X${wl}${allow_undefined_flag}" | $Xsed; else :; fi` '"\${wl}$exp_sym_flag:\$export_symbols $shared_flag"
++ else
++ if test "$host_cpu" = ia64; then
++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $libdir:/usr/lib:/lib'
++ _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs"
++ _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\${wl}$no_entry_flag"' $compiler_flags ${wl}${allow_undefined_flag} '"\${wl}$exp_sym_flag:\$export_symbols"
++ else
++ # Determine the default libpath from the value encoded in an
++ # empty executable.
++ _LT_SYS_MODULE_PATH_AIX
++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-blibpath:$libdir:'"$aix_libpath"
++ # Warning - without using the other run time loading flags,
++ # -berok will link without error, but may produce a broken library.
++ _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-bernotok'
++ _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-berok'
++ # Exported symbols can be pulled into shared objects from archives
++ _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience'
++ _LT_TAGVAR(archive_cmds_need_lc, $1)=yes
++ # This is similar to how AIX traditionally builds its shared
++ # libraries.
++ _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs ${wl}-bnoentry $compiler_flags ${wl}-bE:$export_symbols${allow_undefined_flag}~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$soname'
++ fi
++ fi
++ ;;
++
++ beos*)
++ if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then
++ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
++ # Joseph Beckenbach <jrb3@best.com> says some releases of gcc
++ # support --undefined. This deserves some investigation. FIXME
++ _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
++ else
++ _LT_TAGVAR(ld_shlibs, $1)=no
++ fi
++ ;;
++
++ chorus*)
++ case $cc_basename in
++ *)
++ # FIXME: insert proper C++ library support
++ _LT_TAGVAR(ld_shlibs, $1)=no
++ ;;
++ esac
++ ;;
++
++ cygwin* | mingw* | pw32* | cegcc*)
++ # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless,
++ # as there is no search path for DLLs.
++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir'
++ _LT_TAGVAR(allow_undefined_flag, $1)=unsupported
++ _LT_TAGVAR(always_export_symbols, $1)=no
++ _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes
++
++ if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then
++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
++ # If the export-symbols file already is a .def file (1st line
++ # is EXPORTS), use it as is; otherwise, prepend...
++ _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then
++ cp $export_symbols $output_objdir/$soname.def;
++ else
++ echo EXPORTS > $output_objdir/$soname.def;
++ cat $export_symbols >> $output_objdir/$soname.def;
++ fi~
++ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname ${wl}--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib'
++ else
++ _LT_TAGVAR(ld_shlibs, $1)=no
++ fi
++ ;;
++ darwin* | rhapsody*)
++ _LT_DARWIN_LINKER_FEATURES($1)
++ ;;
++
++ dgux*)
++ case $cc_basename in
++ ec++*)
++ # FIXME: insert proper C++ library support
++ _LT_TAGVAR(ld_shlibs, $1)=no
++ ;;
++ ghcx*)
++ # Green Hills C++ Compiler
++ # FIXME: insert proper C++ library support
++ _LT_TAGVAR(ld_shlibs, $1)=no
++ ;;
++ *)
++ # FIXME: insert proper C++ library support
++ _LT_TAGVAR(ld_shlibs, $1)=no
++ ;;
++ esac
++ ;;
++
++ freebsd[[12]]*)
++ # C++ shared libraries reported to be fairly broken before
++ # switch to ELF
++ _LT_TAGVAR(ld_shlibs, $1)=no
++ ;;
++
++ freebsd-elf*)
++ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
++ ;;
++
++ freebsd* | dragonfly*)
++ # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF
++ # conventions
++ _LT_TAGVAR(ld_shlibs, $1)=yes
++ ;;
++
++ gnu*)
++ ;;
++
++ hpux9*)
++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
++ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
++ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
++ _LT_TAGVAR(hardcode_direct, $1)=yes
++ _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
++ # but as the default
++ # location of the library.
++
++ case $cc_basename in
++ CC*)
++ # FIXME: insert proper C++ library support
++ _LT_TAGVAR(ld_shlibs, $1)=no
++ ;;
++ aCC*)
++ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
++ # Commands to make compiler produce verbose output that lists
++ # what "hidden" libraries, object files and flags are used when
++ # linking a shared library.
++ #
++ # There doesn't appear to be a way to prevent this compiler from
++ # explicitly linking system object files so we need to strip them
++ # from the output so that they don't get included in the library
++ # dependencies.
++ output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
++ ;;
++ *)
++ if test "$GXX" = yes; then
++ _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib -fPIC ${wl}+b ${wl}$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test $output_objdir/$soname = $lib || mv $output_objdir/$soname $lib'
++ else
++ # FIXME: insert proper C++ library support
++ _LT_TAGVAR(ld_shlibs, $1)=no
++ fi
++ ;;
++ esac
++ ;;
++
++ hpux10*|hpux11*)
++ if test $with_gnu_ld = no; then
++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}+b ${wl}$libdir'
++ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
++
++ case $host_cpu in
++ hppa*64*|ia64*)
++ ;;
++ *)
++ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
++ ;;
++ esac
++ fi
++ case $host_cpu in
++ hppa*64*|ia64*)
++ _LT_TAGVAR(hardcode_direct, $1)=no
++ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
++ ;;
++ *)
++ _LT_TAGVAR(hardcode_direct, $1)=yes
++ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
++ _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH,
++ # but as the default
++ # location of the library.
++ ;;
++ esac
++
++ case $cc_basename in
++ CC*)
++ # FIXME: insert proper C++ library support
++ _LT_TAGVAR(ld_shlibs, $1)=no
++ ;;
++ aCC*)
++ case $host_cpu in
++ hppa*64*)
++ _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
++ ;;
++ ia64*)
++ _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
++ ;;
++ *)
++ _LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
++ ;;
++ esac
++ # Commands to make compiler produce verbose output that lists
++ # what "hidden" libraries, object files and flags are used when
++ # linking a shared library.
++ #
++ # There doesn't appear to be a way to prevent this compiler from
++ # explicitly linking system object files so we need to strip them
++ # from the output so that they don't get included in the library
++ # dependencies.
++ output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
++ ;;
++ *)
++ if test "$GXX" = yes; then
++ if test $with_gnu_ld = no; then
++ case $host_cpu in
++ hppa*64*)
++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
++ ;;
++ ia64*)
++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
++ ;;
++ *)
++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
++ ;;
++ esac
++ fi
++ else
++ # FIXME: insert proper C++ library support
++ _LT_TAGVAR(ld_shlibs, $1)=no
++ fi
++ ;;
++ esac
++ ;;
++
++ interix[[3-9]]*)
++ _LT_TAGVAR(hardcode_direct, $1)=no
++ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
++ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
++ # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc.
++ # Instead, shared libraries are loaded at an image base (0x10000000 by
++ # default) and relocated if they conflict, which is a slow very memory
++ # consuming and fragmenting process. To avoid this, we pick a random,
++ # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link
++ # time. Moving up from 0x10000000 also allows more sbrk(2) space.
++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
++ _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s,^,_," $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-h,$soname ${wl}--retain-symbols-file,$output_objdir/$soname.expsym ${wl}--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib'
++ ;;
++ irix5* | irix6*)
++ case $cc_basename in
++ CC*)
++ # SGI C++
++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
++
++ # Archives containing C++ object files must be created using
++ # "CC -ar", where "CC" is the IRIX C++ compiler. This is
++ # necessary to make sure instantiated templates are included
++ # in the archive.
++ _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs'
++ ;;
++ *)
++ if test "$GXX" = yes; then
++ if test "$with_gnu_ld" = no; then
++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
++ else
++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` -o $lib'
++ fi
++ fi
++ _LT_TAGVAR(link_all_deplibs, $1)=yes
++ ;;
++ esac
++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
++ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
++ _LT_TAGVAR(inherit_rpath, $1)=yes
++ ;;
++
++ linux* | k*bsd*-gnu)
++ case $cc_basename in
++ KCC*)
++ # Kuck and Associates, Inc. (KAI) C++ Compiler
++
++ # KCC will only create a shared library if the output file
++ # ends with ".so" (or ".sl" for HP-UX), so rename the library
++ # to its proper name (with version) after linking.
++ _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
++ _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib ${wl}-retain-symbols-file,$export_symbols; mv \$templib $lib'
++ # Commands to make compiler produce verbose output that lists
++ # what "hidden" libraries, object files and flags are used when
++ # linking a shared library.
++ #
++ # There doesn't appear to be a way to prevent this compiler from
++ # explicitly linking system object files so we need to strip them
++ # from the output so that they don't get included in the library
++ # dependencies.
++ output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
++
++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
++ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
++
++ # Archives containing C++ object files must be created using
++ # "CC -Bstatic", where "CC" is the KAI C++ compiler.
++ _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs'
++ ;;
++ icpc* | ecpc* )
++ # Intel C++
++ with_gnu_ld=yes
++ # version 8.0 and above of icpc choke on multiply defined symbols
++ # if we add $predep_objects and $postdep_objects, however 7.1 and
++ # earlier do not add the objects themselves.
++ case `$CC -V 2>&1` in
++ *"Version 7."*)
++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
++ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
++ ;;
++ *) # Version 8.0 or newer
++ tmp_idyn=
++ case $host_cpu in
++ ia64*) tmp_idyn=' -i_dynamic';;
++ esac
++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
++ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-retain-symbols-file $wl$export_symbols -o $lib'
++ ;;
++ esac
++ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
++ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
++ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive'
++ ;;
++ pgCC* | pgcpp*)
++ # Portland Group C++ compiler
++ case `$CC -V` in
++ *pgCC\ [[1-5]]* | *pgcpp\ [[1-5]]*)
++ _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~
++ rm -rf $tpldir~
++ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~
++ compile_command="$compile_command `find $tpldir -name \*.o | $NL2SP`"'
++ _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~
++ rm -rf $tpldir~
++ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~
++ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | $NL2SP`~
++ $RANLIB $oldlib'
++ _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~
++ rm -rf $tpldir~
++ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
++ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
++ _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~
++ rm -rf $tpldir~
++ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~
++ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
++ ;;
++ *) # Version 6 will use weak symbols
++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname -o $lib'
++ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib'
++ ;;
++ esac
++
++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}--rpath ${wl}$libdir'
++ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
++ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
++ ;;
++ cxx*)
++ # Compaq C++
++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib'
++ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib ${wl}-retain-symbols-file $wl$export_symbols'
++
++ runpath_var=LD_RUN_PATH
++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
++ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
++
++ # Commands to make compiler produce verbose output that lists
++ # what "hidden" libraries, object files and flags are used when
++ # linking a shared library.
++ #
++ # There doesn't appear to be a way to prevent this compiler from
++ # explicitly linking system object files so we need to strip them
++ # from the output so that they don't get included in the library
++ # dependencies.
++ output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
++ ;;
++ xl*)
++ # IBM XL 8.0 on PPC, with GNU ld
++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
++ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}--export-dynamic'
++ _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib'
++ if test "x$supports_anon_versioning" = xyes; then
++ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~
++ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~
++ echo "local: *; };" >> $output_objdir/$libname.ver~
++ $CC -qmkshrobj $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname ${wl}-version-script ${wl}$output_objdir/$libname.ver -o $lib'
++ fi
++ ;;
++ *)
++ case `$CC -V 2>&1 | sed 5q` in
++ *Sun\ C*)
++ # Sun C++ 5.9
++ _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
++ _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
++ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file ${wl}$export_symbols'
++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
++ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; $ECHO \"$new_convenience\"` ${wl}--no-whole-archive'
++ _LT_TAGVAR(compiler_needs_object, $1)=yes
++
++ # Not sure whether something based on
++ # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1
++ # would be better.
++ output_verbose_link_cmd='echo'
++
++ # Archives containing C++ object files must be created using
++ # "CC -xar", where "CC" is the Sun C++ compiler. This is
++ # necessary to make sure instantiated templates are included
++ # in the archive.
++ _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
++ ;;
++ esac
++ ;;
++ esac
++ ;;
++
++ lynxos*)
++ # FIXME: insert proper C++ library support
++ _LT_TAGVAR(ld_shlibs, $1)=no
++ ;;
++
++ m88k*)
++ # FIXME: insert proper C++ library support
++ _LT_TAGVAR(ld_shlibs, $1)=no
++ ;;
++
++ mvs*)
++ case $cc_basename in
++ cxx*)
++ # FIXME: insert proper C++ library support
++ _LT_TAGVAR(ld_shlibs, $1)=no
++ ;;
++ *)
++ # FIXME: insert proper C++ library support
++ _LT_TAGVAR(ld_shlibs, $1)=no
++ ;;
++ esac
++ ;;
++
++ netbsd*)
++ if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then
++ _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags'
++ wlarc=
++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
++ _LT_TAGVAR(hardcode_direct, $1)=yes
++ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
++ fi
++ # Workaround some broken pre-1.5 toolchains
++ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"'
++ ;;
++
++ *nto* | *qnx*)
++ _LT_TAGVAR(ld_shlibs, $1)=yes
++ ;;
++
++ openbsd2*)
++ # C++ shared libraries are fairly broken
++ _LT_TAGVAR(ld_shlibs, $1)=no
++ ;;
++
++ openbsd*)
++ if test -f /usr/libexec/ld.so; then
++ _LT_TAGVAR(hardcode_direct, $1)=yes
++ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
++ _LT_TAGVAR(hardcode_direct_absolute, $1)=yes
++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib'
++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
++ if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
++ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-retain-symbols-file,$export_symbols -o $lib'
++ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-E'
++ _LT_TAGVAR(whole_archive_flag_spec, $1)="$wlarc"'--whole-archive$convenience '"$wlarc"'--no-whole-archive'
++ fi
++ output_verbose_link_cmd=echo
++ else
++ _LT_TAGVAR(ld_shlibs, $1)=no
++ fi
++ ;;
++
++ osf3* | osf4* | osf5*)
++ case $cc_basename in
++ KCC*)
++ # Kuck and Associates, Inc. (KAI) C++ Compiler
++
++ # KCC will only create a shared library if the output file
++ # ends with ".so" (or ".sl" for HP-UX), so rename the library
++ # to its proper name (with version) after linking.
++ _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\${tempext}\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib'
++
++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath,$libdir'
++ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
++
++ # Archives containing C++ object files must be created using
++ # the KAI C++ compiler.
++ case $host in
++ osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;;
++ *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;;
++ esac
++ ;;
++ RCC*)
++ # Rational C++ 2.4.1
++ # FIXME: insert proper C++ library support
++ _LT_TAGVAR(ld_shlibs, $1)=no
++ ;;
++ cxx*)
++ case $host in
++ osf3*)
++ _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $soname `test -n "$verstring" && $ECHO "X${wl}-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
++ ;;
++ *)
++ _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*'
++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib'
++ _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~
++ echo "-hidden">> $lib.exp~
++ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname ${wl}-input ${wl}$lib.exp `test -n "$verstring" && $ECHO "X-set_version $verstring" | $Xsed` -update_registry ${output_objdir}/so_locations -o $lib~
++ $RM $lib.exp'
++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir'
++ ;;
++ esac
++
++ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
++
++ # Commands to make compiler produce verbose output that lists
++ # what "hidden" libraries, object files and flags are used when
++ # linking a shared library.
++ #
++ # There doesn't appear to be a way to prevent this compiler from
++ # explicitly linking system object files so we need to strip them
++ # from the output so that they don't get included in the library
++ # dependencies.
++ output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`$ECHO "X$templist" | $Xsed -e "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; $ECHO "X$list" | $Xsed'
++ ;;
++ *)
++ if test "$GXX" = yes && test "$with_gnu_ld" = no; then
++ _LT_TAGVAR(allow_undefined_flag, $1)=' ${wl}-expect_unresolved ${wl}\*'
++ case $host in
++ osf3*)
++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "X${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
++ ;;
++ *)
++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && $ECHO "${wl}-set_version ${wl}$verstring" | $Xsed` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib'
++ ;;
++ esac
++
++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-rpath ${wl}$libdir'
++ _LT_TAGVAR(hardcode_libdir_separator, $1)=:
++
++ # Commands to make compiler produce verbose output that lists
++ # what "hidden" libraries, object files and flags are used when
++ # linking a shared library.
++ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
++
++ else
++ # FIXME: insert proper C++ library support
++ _LT_TAGVAR(ld_shlibs, $1)=no
++ fi
++ ;;
++ esac
++ ;;
++
++ psos*)
++ # FIXME: insert proper C++ library support
++ _LT_TAGVAR(ld_shlibs, $1)=no
++ ;;
++
++ sunos4*)
++ case $cc_basename in
++ CC*)
++ # Sun C++ 4.x
++ # FIXME: insert proper C++ library support
++ _LT_TAGVAR(ld_shlibs, $1)=no
++ ;;
++ lcc*)
++ # Lucid
++ # FIXME: insert proper C++ library support
++ _LT_TAGVAR(ld_shlibs, $1)=no
++ ;;
++ *)
++ # FIXME: insert proper C++ library support
++ _LT_TAGVAR(ld_shlibs, $1)=no
++ ;;
++ esac
++ ;;
++
++ solaris*)
++ case $cc_basename in
++ CC*)
++ # Sun C++ 4.2, 5.x and Centerline C++
++ _LT_TAGVAR(archive_cmds_need_lc,$1)=yes
++ _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs'
++ _LT_TAGVAR(archive_cmds, $1)='$CC -G${allow_undefined_flag} -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags'
++ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
++ $CC -G${allow_undefined_flag} ${wl}-M ${wl}$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
++
++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir'
++ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
++ case $host_os in
++ solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
++ *)
++ # The compiler driver will combine and reorder linker options,
++ # but understands `-z linker_flag'.
++ # Supported since Solaris 2.6 (maybe 2.5.1?)
++ _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract'
++ ;;
++ esac
++ _LT_TAGVAR(link_all_deplibs, $1)=yes
++
++ output_verbose_link_cmd='echo'
++
++ # Archives containing C++ object files must be created using
++ # "CC -xar", where "CC" is the Sun C++ compiler. This is
++ # necessary to make sure instantiated templates are included
++ # in the archive.
++ _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs'
++ ;;
++ gcx*)
++ # Green Hills C++ Compiler
++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
++
++ # The C++ compiler must be used to create the archive.
++ _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs'
++ ;;
++ *)
++ # GNU C++ compiler with Solaris linker
++ if test "$GXX" = yes && test "$with_gnu_ld" = no; then
++ _LT_TAGVAR(no_undefined_flag, $1)=' ${wl}-z ${wl}defs'
++ if $CC --version | $GREP -v '^2\.7' > /dev/null; then
++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
++ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
++ $CC -shared -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
++
++ # Commands to make compiler produce verbose output that lists
++ # what "hidden" libraries, object files and flags are used when
++ # linking a shared library.
++ output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
++ else
++ # g++ 2.7 appears to require `-G' NOT `-shared' on this
++ # platform.
++ _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $LDFLAGS $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-h $wl$soname -o $lib'
++ _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~
++ $CC -G -nostdlib ${wl}-M $wl$lib.exp -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp'
++
++ # Commands to make compiler produce verbose output that lists
++ # what "hidden" libraries, object files and flags are used when
++ # linking a shared library.
++ output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP "\-L"'
++ fi
++
++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R $wl$libdir'
++ case $host_os in
++ solaris2.[[0-5]] | solaris2.[[0-5]].*) ;;
++ *)
++ _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}-z ${wl}allextract$convenience ${wl}-z ${wl}defaultextract'
++ ;;
++ esac
++ fi
++ ;;
++ esac
++ ;;
++
++ sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*)
++ _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
++ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
++ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
++ runpath_var='LD_RUN_PATH'
++
++ case $cc_basename in
++ CC*)
++ _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
++ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
++ ;;
++ *)
++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
++ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
++ ;;
++ esac
++ ;;
++
++ sysv5* | sco3.2v5* | sco5v6*)
++ # Note: We can NOT use -z defs as we might desire, because we do not
++ # link with -lc, and that would cause any symbols used from libc to
++ # always be unresolved, which means just about no library would
++ # ever link correctly. If we're not using GNU ld we use -z text
++ # though, which does catch some bad symbols but isn't as heavy-handed
++ # as -z defs.
++ _LT_TAGVAR(no_undefined_flag, $1)='${wl}-z,text'
++ _LT_TAGVAR(allow_undefined_flag, $1)='${wl}-z,nodefs'
++ _LT_TAGVAR(archive_cmds_need_lc, $1)=no
++ _LT_TAGVAR(hardcode_shlibpath_var, $1)=no
++ _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='${wl}-R,$libdir'
++ _LT_TAGVAR(hardcode_libdir_separator, $1)=':'
++ _LT_TAGVAR(link_all_deplibs, $1)=yes
++ _LT_TAGVAR(export_dynamic_flag_spec, $1)='${wl}-Bexport'
++ runpath_var='LD_RUN_PATH'
++
++ case $cc_basename in
++ CC*)
++ _LT_TAGVAR(archive_cmds, $1)='$CC -G ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
++ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
++ ;;
++ *)
++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
++ _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared ${wl}-Bexport:$export_symbols ${wl}-h,$soname -o $lib $libobjs $deplibs $compiler_flags'
++ ;;
++ esac
++ ;;
++
++ tandem*)
++ case $cc_basename in
++ NCC*)
++ # NonStop-UX NCC 3.20
++ # FIXME: insert proper C++ library support
++ _LT_TAGVAR(ld_shlibs, $1)=no
++ ;;
++ *)
++ # FIXME: insert proper C++ library support
++ _LT_TAGVAR(ld_shlibs, $1)=no
++ ;;
++ esac
++ ;;
++
++ vxworks*)
++ # FIXME: insert proper C++ library support
++ _LT_TAGVAR(ld_shlibs, $1)=no
++ ;;
++
++ *)
++ # FIXME: insert proper C++ library support
++ _LT_TAGVAR(ld_shlibs, $1)=no
++ ;;
++ esac
++
++ AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)])
++ test "$_LT_TAGVAR(ld_shlibs, $1)" = no && can_build_shared=no
++
++ _LT_TAGVAR(GCC, $1)="$GXX"
++ _LT_TAGVAR(LD, $1)="$LD"
++
++ ## CAVEAT EMPTOR:
++ ## There is no encapsulation within the following macros, do not change
++ ## the running order or otherwise move them around unless you know exactly
++ ## what you are doing...
++ _LT_SYS_HIDDEN_LIBDEPS($1)
++ _LT_COMPILER_PIC($1)
++ _LT_COMPILER_C_O($1)
++ _LT_COMPILER_FILE_LOCKS($1)
++ _LT_LINKER_SHLIBS($1)
++ _LT_SYS_DYNAMIC_LINKER($1)
++ _LT_LINKER_HARDCODE_LIBPATH($1)
++
++ _LT_CONFIG($1)
++ fi # test -n "$compiler"
++
++ CC=$lt_save_CC
++ LDCXX=$LD
++ LD=$lt_save_LD
++ GCC=$lt_save_GCC
++ with_gnu_ld=$lt_save_with_gnu_ld
++ lt_cv_path_LDCXX=$lt_cv_path_LD
++ lt_cv_path_LD=$lt_save_path_LD
++ lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld
++ lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld
++fi # test "$_lt_caught_CXX_error" != yes
++
++AC_LANG_POP
++])# _LT_LANG_CXX_CONFIG
++
++
++# _LT_SYS_HIDDEN_LIBDEPS([TAGNAME])
++# ---------------------------------
++# Figure out "hidden" library dependencies from verbose
++# compiler output when linking a shared library.
++# Parse the compiler output and extract the necessary
++# objects, libraries and library flags.
++m4_defun([_LT_SYS_HIDDEN_LIBDEPS],
++[m4_require([_LT_FILEUTILS_DEFAULTS])dnl
++# Dependencies to place before and after the object being linked:
++_LT_TAGVAR(predep_objects, $1)=
++_LT_TAGVAR(postdep_objects, $1)=
++_LT_TAGVAR(predeps, $1)=
++_LT_TAGVAR(postdeps, $1)=
++_LT_TAGVAR(compiler_lib_search_path, $1)=
++
++dnl we can't use the lt_simple_compile_test_code here,
++dnl because it contains code intended for an executable,
++dnl not a library. It's possible we should let each
++dnl tag define a new lt_????_link_test_code variable,
++dnl but it's only used here...
++m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF
++int a;
++void foo (void) { a = 0; }
++_LT_EOF
++], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF
++class Foo
++{
++public:
++ Foo (void) { a = 0; }
++private:
++ int a;
++};
++_LT_EOF
++], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF
++ subroutine foo
++ implicit none
++ integer*4 a
++ a=0
++ return
++ end
++_LT_EOF
++], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF
++ subroutine foo
++ implicit none
++ integer a
++ a=0
++ return
++ end
++_LT_EOF
++], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF
++public class foo {
++ private int a;
++ public void bar (void) {
++ a = 0;
++ }
++};
++_LT_EOF
++])
++dnl Parse the compiler output and extract the necessary
++dnl objects, libraries and library flags.
++if AC_TRY_EVAL(ac_compile); then
++ # Parse the compiler output and extract the necessary
++ # objects, libraries and library flags.
++
++ # Sentinel used to keep track of whether or not we are before
++ # the conftest object file.
++ pre_test_object_deps_done=no
++
++ for p in `eval "$output_verbose_link_cmd"`; do
++ case $p in
++
++ -L* | -R* | -l*)
++ # Some compilers place space between "-{L,R}" and the path.
++ # Remove the space.
++ if test $p = "-L" ||
++ test $p = "-R"; then
++ prev=$p
++ continue
++ else
++ prev=
++ fi
++
++ if test "$pre_test_object_deps_done" = no; then
++ case $p in
++ -L* | -R*)
++ # Internal compiler library paths should come after those
++ # provided the user. The postdeps already come after the
++ # user supplied libs so there is no need to process them.
++ if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then
++ _LT_TAGVAR(compiler_lib_search_path, $1)="${prev}${p}"
++ else
++ _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} ${prev}${p}"
++ fi
++ ;;
++ # The "-l" case would never come before the object being
++ # linked, so don't bother handling this case.
++ esac
++ else
++ if test -z "$_LT_TAGVAR(postdeps, $1)"; then
++ _LT_TAGVAR(postdeps, $1)="${prev}${p}"
++ else
++ _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} ${prev}${p}"
++ fi
++ fi
++ ;;
++
++ *.$objext)
++ # This assumes that the test object file only shows up
++ # once in the compiler output.
++ if test "$p" = "conftest.$objext"; then
++ pre_test_object_deps_done=yes
++ continue
++ fi
++
++ if test "$pre_test_object_deps_done" = no; then
++ if test -z "$_LT_TAGVAR(predep_objects, $1)"; then
++ _LT_TAGVAR(predep_objects, $1)="$p"
++ else
++ _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p"
++ fi
++ else
++ if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then
++ _LT_TAGVAR(postdep_objects, $1)="$p"
++ else
++ _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p"
++ fi
++ fi
++ ;;
++
++ *) ;; # Ignore the rest.
++
++ esac
++ done
++
++ # Clean up.
++ rm -f a.out a.exe
++else
++ echo "libtool.m4: error: problem compiling $1 test program"
++fi
++
++$RM -f confest.$objext
++
++# PORTME: override above test on systems where it is broken
++m4_if([$1], [CXX],
++[case $host_os in
++interix[[3-9]]*)
++ # Interix 3.5 installs completely hosed .la files for C++, so rather than
++ # hack all around it, let's just trust "g++" to DTRT.
++ _LT_TAGVAR(predep_objects,$1)=
++ _LT_TAGVAR(postdep_objects,$1)=
++ _LT_TAGVAR(postdeps,$1)=
++ ;;
++
++linux*)
++ case `$CC -V 2>&1 | sed 5q` in
++ *Sun\ C*)
++ # Sun C++ 5.9
++
++ # The more standards-conforming stlport4 library is
++ # incompatible with the Cstd library. Avoid specifying
++ # it if it's in CXXFLAGS. Ignore libCrun as
++ # -library=stlport4 depends on it.
++ case " $CXX $CXXFLAGS " in
++ *" -library=stlport4 "*)
++ solaris_use_stlport4=yes
++ ;;
++ esac
++
++ if test "$solaris_use_stlport4" != yes; then
++ _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
++ fi
++ ;;
++ esac
++ ;;
++
++solaris*)
++ case $cc_basename in
++ CC*)
++ # The more standards-conforming stlport4 library is
++ # incompatible with the Cstd library. Avoid specifying
++ # it if it's in CXXFLAGS. Ignore libCrun as
++ # -library=stlport4 depends on it.
++ case " $CXX $CXXFLAGS " in
++ *" -library=stlport4 "*)
++ solaris_use_stlport4=yes
++ ;;
++ esac
++
++ # Adding this requires a known-good setup of shared libraries for
++ # Sun compiler versions before 5.6, else PIC objects from an old
++ # archive will be linked into the output, leading to subtle bugs.
++ if test "$solaris_use_stlport4" != yes; then
++ _LT_TAGVAR(postdeps,$1)='-library=Cstd -library=Crun'
++ fi
++ ;;
++ esac
++ ;;
++esac
++])
++
++case " $_LT_TAGVAR(postdeps, $1) " in
++*" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;;
++esac
++ _LT_TAGVAR(compiler_lib_search_dirs, $1)=
++if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then
++ _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | ${SED} -e 's! -L! !g' -e 's!^ !!'`
++fi
++_LT_TAGDECL([], [compiler_lib_search_dirs], [1],
++ [The directories searched by this compiler when creating a shared library])
++_LT_TAGDECL([], [predep_objects], [1],
++ [Dependencies to place before and after the objects being linked to
++ create a shared library])
++_LT_TAGDECL([], [postdep_objects], [1])
++_LT_TAGDECL([], [predeps], [1])
++_LT_TAGDECL([], [postdeps], [1])
++_LT_TAGDECL([], [compiler_lib_search_path], [1],
++ [The library search path used internally by the compiler when linking
++ a shared library])
++])# _LT_SYS_HIDDEN_LIBDEPS
++
++
++# _LT_PROG_F77
++# ------------
++# Since AC_PROG_F77 is broken, in that it returns the empty string
++# if there is no fortran compiler, we have our own version here.
++m4_defun([_LT_PROG_F77],
++[
++pushdef([AC_MSG_ERROR], [_lt_disable_F77=yes])
++AC_PROG_F77
++if test -z "$F77" || test "X$F77" = "Xno"; then
++ _lt_disable_F77=yes
++fi
++popdef([AC_MSG_ERROR])
++])# _LT_PROG_F77
++
++dnl aclocal-1.4 backwards compatibility:
++dnl AC_DEFUN([_LT_PROG_F77], [])
++
++
++# _LT_LANG_F77_CONFIG([TAG])
++# --------------------------
++# Ensure that the configuration variables for a Fortran 77 compiler are
++# suitably defined. These variables are subsequently used by _LT_CONFIG
++# to write the compiler configuration to `libtool'.
++m4_defun([_LT_LANG_F77_CONFIG],
++[AC_REQUIRE([_LT_PROG_F77])dnl
++AC_LANG_PUSH(Fortran 77)
++
++_LT_TAGVAR(archive_cmds_need_lc, $1)=no
++_LT_TAGVAR(allow_undefined_flag, $1)=
++_LT_TAGVAR(always_export_symbols, $1)=no
++_LT_TAGVAR(archive_expsym_cmds, $1)=
++_LT_TAGVAR(export_dynamic_flag_spec, $1)=
++_LT_TAGVAR(hardcode_direct, $1)=no
++_LT_TAGVAR(hardcode_direct_absolute, $1)=no
++_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
++_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
++_LT_TAGVAR(hardcode_libdir_separator, $1)=
++_LT_TAGVAR(hardcode_minus_L, $1)=no
++_LT_TAGVAR(hardcode_automatic, $1)=no
++_LT_TAGVAR(inherit_rpath, $1)=no
++_LT_TAGVAR(module_cmds, $1)=
++_LT_TAGVAR(module_expsym_cmds, $1)=
++_LT_TAGVAR(link_all_deplibs, $1)=unknown
++_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
++_LT_TAGVAR(no_undefined_flag, $1)=
++_LT_TAGVAR(whole_archive_flag_spec, $1)=
++_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
++
++# Source file extension for f77 test sources.
++ac_ext=f
++
++# Object file extension for compiled f77 test sources.
++objext=o
++_LT_TAGVAR(objext, $1)=$objext
++
++# No sense in running all these tests if we already determined that
++# the F77 compiler isn't working. Some variables (like enable_shared)
++# are currently assumed to apply to all compilers on this platform,
++# and will be corrupted by setting them based on a non-working compiler.
++if test "$_lt_disable_F77" != yes; then
++ # Code to be used in simple compile tests
++ lt_simple_compile_test_code="\
++ subroutine t
++ return
++ end
++"
++
++ # Code to be used in simple link tests
++ lt_simple_link_test_code="\
++ program t
++ end
++"
++
++ # ltmain only uses $CC for tagged configurations so make sure $CC is set.
++ _LT_TAG_COMPILER
++
++ # save warnings/boilerplate of simple test code
++ _LT_COMPILER_BOILERPLATE
++ _LT_LINKER_BOILERPLATE
++
++ # Allow CC to be a program name with arguments.
++ lt_save_CC="$CC"
++ lt_save_GCC=$GCC
++ CC=${F77-"f77"}
++ compiler=$CC
++ _LT_TAGVAR(compiler, $1)=$CC
++ _LT_CC_BASENAME([$compiler])
++ GCC=$G77
++ if test -n "$compiler"; then
++ AC_MSG_CHECKING([if libtool supports shared libraries])
++ AC_MSG_RESULT([$can_build_shared])
++
++ AC_MSG_CHECKING([whether to build shared libraries])
++ test "$can_build_shared" = "no" && enable_shared=no
++
++ # On AIX, shared libraries and static libraries use the same namespace, and
++ # are all built from PIC.
++ case $host_os in
++ aix3*)
++ test "$enable_shared" = yes && enable_static=no
++ if test -n "$RANLIB"; then
++ archive_cmds="$archive_cmds~\$RANLIB \$lib"
++ postinstall_cmds='$RANLIB $lib'
++ fi
++ ;;
++ aix[[4-9]]*)
++ if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
++ test "$enable_shared" = yes && enable_static=no
++ fi
++ ;;
++ esac
++ AC_MSG_RESULT([$enable_shared])
++
++ AC_MSG_CHECKING([whether to build static libraries])
++ # Make sure either enable_shared or enable_static is yes.
++ test "$enable_shared" = yes || enable_static=yes
++ AC_MSG_RESULT([$enable_static])
++
++ _LT_TAGVAR(GCC, $1)="$G77"
++ _LT_TAGVAR(LD, $1)="$LD"
++
++ ## CAVEAT EMPTOR:
++ ## There is no encapsulation within the following macros, do not change
++ ## the running order or otherwise move them around unless you know exactly
++ ## what you are doing...
++ _LT_COMPILER_PIC($1)
++ _LT_COMPILER_C_O($1)
++ _LT_COMPILER_FILE_LOCKS($1)
++ _LT_LINKER_SHLIBS($1)
++ _LT_SYS_DYNAMIC_LINKER($1)
++ _LT_LINKER_HARDCODE_LIBPATH($1)
++
++ _LT_CONFIG($1)
++ fi # test -n "$compiler"
++
++ GCC=$lt_save_GCC
++ CC="$lt_save_CC"
++fi # test "$_lt_disable_F77" != yes
++
++AC_LANG_POP
++])# _LT_LANG_F77_CONFIG
++
++
++# _LT_PROG_FC
++# -----------
++# Since AC_PROG_FC is broken, in that it returns the empty string
++# if there is no fortran compiler, we have our own version here.
++m4_defun([_LT_PROG_FC],
++[
++pushdef([AC_MSG_ERROR], [_lt_disable_FC=yes])
++AC_PROG_FC
++if test -z "$FC" || test "X$FC" = "Xno"; then
++ _lt_disable_FC=yes
++fi
++popdef([AC_MSG_ERROR])
++])# _LT_PROG_FC
++
++dnl aclocal-1.4 backwards compatibility:
++dnl AC_DEFUN([_LT_PROG_FC], [])
++
++
++# _LT_LANG_FC_CONFIG([TAG])
++# -------------------------
++# Ensure that the configuration variables for a Fortran compiler are
++# suitably defined. These variables are subsequently used by _LT_CONFIG
++# to write the compiler configuration to `libtool'.
++m4_defun([_LT_LANG_FC_CONFIG],
++[AC_REQUIRE([_LT_PROG_FC])dnl
++AC_LANG_PUSH(Fortran)
++
++_LT_TAGVAR(archive_cmds_need_lc, $1)=no
++_LT_TAGVAR(allow_undefined_flag, $1)=
++_LT_TAGVAR(always_export_symbols, $1)=no
++_LT_TAGVAR(archive_expsym_cmds, $1)=
++_LT_TAGVAR(export_dynamic_flag_spec, $1)=
++_LT_TAGVAR(hardcode_direct, $1)=no
++_LT_TAGVAR(hardcode_direct_absolute, $1)=no
++_LT_TAGVAR(hardcode_libdir_flag_spec, $1)=
++_LT_TAGVAR(hardcode_libdir_flag_spec_ld, $1)=
++_LT_TAGVAR(hardcode_libdir_separator, $1)=
++_LT_TAGVAR(hardcode_minus_L, $1)=no
++_LT_TAGVAR(hardcode_automatic, $1)=no
++_LT_TAGVAR(inherit_rpath, $1)=no
++_LT_TAGVAR(module_cmds, $1)=
++_LT_TAGVAR(module_expsym_cmds, $1)=
++_LT_TAGVAR(link_all_deplibs, $1)=unknown
++_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
++_LT_TAGVAR(no_undefined_flag, $1)=
++_LT_TAGVAR(whole_archive_flag_spec, $1)=
++_LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no
++
++# Source file extension for fc test sources.
++ac_ext=${ac_fc_srcext-f}
++
++# Object file extension for compiled fc test sources.
++objext=o
++_LT_TAGVAR(objext, $1)=$objext
++
++# No sense in running all these tests if we already determined that
++# the FC compiler isn't working. Some variables (like enable_shared)
++# are currently assumed to apply to all compilers on this platform,
++# and will be corrupted by setting them based on a non-working compiler.
++if test "$_lt_disable_FC" != yes; then
++ # Code to be used in simple compile tests
++ lt_simple_compile_test_code="\
++ subroutine t
++ return
++ end
++"
++
++ # Code to be used in simple link tests
++ lt_simple_link_test_code="\
++ program t
++ end
++"
++
++ # ltmain only uses $CC for tagged configurations so make sure $CC is set.
++ _LT_TAG_COMPILER
++
++ # save warnings/boilerplate of simple test code
++ _LT_COMPILER_BOILERPLATE
++ _LT_LINKER_BOILERPLATE
++
++ # Allow CC to be a program name with arguments.
++ lt_save_CC="$CC"
++ lt_save_GCC=$GCC
++ CC=${FC-"f95"}
++ compiler=$CC
++ GCC=$ac_cv_fc_compiler_gnu
++
++ _LT_TAGVAR(compiler, $1)=$CC
++ _LT_CC_BASENAME([$compiler])
++
++ if test -n "$compiler"; then
++ AC_MSG_CHECKING([if libtool supports shared libraries])
++ AC_MSG_RESULT([$can_build_shared])
++
++ AC_MSG_CHECKING([whether to build shared libraries])
++ test "$can_build_shared" = "no" && enable_shared=no
++
++ # On AIX, shared libraries and static libraries use the same namespace, and
++ # are all built from PIC.
++ case $host_os in
++ aix3*)
++ test "$enable_shared" = yes && enable_static=no
++ if test -n "$RANLIB"; then
++ archive_cmds="$archive_cmds~\$RANLIB \$lib"
++ postinstall_cmds='$RANLIB $lib'
++ fi
++ ;;
++ aix[[4-9]]*)
++ if test "$host_cpu" != ia64 && test "$aix_use_runtimelinking" = no ; then
++ test "$enable_shared" = yes && enable_static=no
++ fi
++ ;;
++ esac
++ AC_MSG_RESULT([$enable_shared])
++
++ AC_MSG_CHECKING([whether to build static libraries])
++ # Make sure either enable_shared or enable_static is yes.
++ test "$enable_shared" = yes || enable_static=yes
++ AC_MSG_RESULT([$enable_static])
++
++ _LT_TAGVAR(GCC, $1)="$ac_cv_fc_compiler_gnu"
++ _LT_TAGVAR(LD, $1)="$LD"
++
++ ## CAVEAT EMPTOR:
++ ## There is no encapsulation within the following macros, do not change
++ ## the running order or otherwise move them around unless you know exactly
++ ## what you are doing...
++ _LT_SYS_HIDDEN_LIBDEPS($1)
++ _LT_COMPILER_PIC($1)
++ _LT_COMPILER_C_O($1)
++ _LT_COMPILER_FILE_LOCKS($1)
++ _LT_LINKER_SHLIBS($1)
++ _LT_SYS_DYNAMIC_LINKER($1)
++ _LT_LINKER_HARDCODE_LIBPATH($1)
++
++ _LT_CONFIG($1)
++ fi # test -n "$compiler"
++
++ GCC=$lt_save_GCC
++ CC="$lt_save_CC"
++fi # test "$_lt_disable_FC" != yes
++
++AC_LANG_POP
++])# _LT_LANG_FC_CONFIG
++
++
++# _LT_LANG_GCJ_CONFIG([TAG])
++# --------------------------
++# Ensure that the configuration variables for the GNU Java Compiler compiler
++# are suitably defined. These variables are subsequently used by _LT_CONFIG
++# to write the compiler configuration to `libtool'.
++m4_defun([_LT_LANG_GCJ_CONFIG],
++[AC_REQUIRE([LT_PROG_GCJ])dnl
++AC_LANG_SAVE
++
++# Source file extension for Java test sources.
++ac_ext=java
++
++# Object file extension for compiled Java test sources.
++objext=o
++_LT_TAGVAR(objext, $1)=$objext
++
++# Code to be used in simple compile tests
++lt_simple_compile_test_code="class foo {}"
++
++# Code to be used in simple link tests
++lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }'
++
++# ltmain only uses $CC for tagged configurations so make sure $CC is set.
++_LT_TAG_COMPILER
++
++# save warnings/boilerplate of simple test code
++_LT_COMPILER_BOILERPLATE
++_LT_LINKER_BOILERPLATE
++
++# Allow CC to be a program name with arguments.
++lt_save_CC="$CC"
++lt_save_GCC=$GCC
++GCC=yes
++CC=${GCJ-"gcj"}
++compiler=$CC
++_LT_TAGVAR(compiler, $1)=$CC
++_LT_TAGVAR(LD, $1)="$LD"
++_LT_CC_BASENAME([$compiler])
++
++# GCJ did not exist at the time GCC didn't implicitly link libc in.
++_LT_TAGVAR(archive_cmds_need_lc, $1)=no
++
++_LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds
++
++## CAVEAT EMPTOR:
++## There is no encapsulation within the following macros, do not change
++## the running order or otherwise move them around unless you know exactly
++## what you are doing...
++if test -n "$compiler"; then
++ _LT_COMPILER_NO_RTTI($1)
++ _LT_COMPILER_PIC($1)
++ _LT_COMPILER_C_O($1)
++ _LT_COMPILER_FILE_LOCKS($1)
++ _LT_LINKER_SHLIBS($1)
++ _LT_LINKER_HARDCODE_LIBPATH($1)
++
++ _LT_CONFIG($1)
++fi
++
++AC_LANG_RESTORE
++
++GCC=$lt_save_GCC
++CC="$lt_save_CC"
++])# _LT_LANG_GCJ_CONFIG
++
++
++# _LT_LANG_RC_CONFIG([TAG])
++# -------------------------
++# Ensure that the configuration variables for the Windows resource compiler
++# are suitably defined. These variables are subsequently used by _LT_CONFIG
++# to write the compiler configuration to `libtool'.
++m4_defun([_LT_LANG_RC_CONFIG],
++[AC_REQUIRE([LT_PROG_RC])dnl
++AC_LANG_SAVE
++
++# Source file extension for RC test sources.
++ac_ext=rc
++
++# Object file extension for compiled RC test sources.
++objext=o
++_LT_TAGVAR(objext, $1)=$objext
++
++# Code to be used in simple compile tests
++lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }'
++
++# Code to be used in simple link tests
++lt_simple_link_test_code="$lt_simple_compile_test_code"
++
++# ltmain only uses $CC for tagged configurations so make sure $CC is set.
++_LT_TAG_COMPILER
++
++# save warnings/boilerplate of simple test code
++_LT_COMPILER_BOILERPLATE
++_LT_LINKER_BOILERPLATE
++
++# Allow CC to be a program name with arguments.
++lt_save_CC="$CC"
++lt_save_GCC=$GCC
++GCC=
++CC=${RC-"windres"}
++compiler=$CC
++_LT_TAGVAR(compiler, $1)=$CC
++_LT_CC_BASENAME([$compiler])
++_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes
++
++if test -n "$compiler"; then
++ :
++ _LT_CONFIG($1)
++fi
++
++GCC=$lt_save_GCC
++AC_LANG_RESTORE
++CC="$lt_save_CC"
++])# _LT_LANG_RC_CONFIG
++
++
++# LT_PROG_GCJ
++# -----------
++AC_DEFUN([LT_PROG_GCJ],
++[m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ],
++ [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ],
++ [AC_CHECK_TOOL(GCJ, gcj,)
++ test "x${GCJFLAGS+set}" = xset || GCJFLAGS="-g -O2"
++ AC_SUBST(GCJFLAGS)])])[]dnl
++])
++
++# Old name:
++AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ])
++dnl aclocal-1.4 backwards compatibility:
++dnl AC_DEFUN([LT_AC_PROG_GCJ], [])
++
++
++# LT_PROG_RC
++# ----------
++AC_DEFUN([LT_PROG_RC],
++[AC_CHECK_TOOL(RC, windres,)
++])
++
++# Old name:
++AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC])
++dnl aclocal-1.4 backwards compatibility:
++dnl AC_DEFUN([LT_AC_PROG_RC], [])
++
++
++# _LT_DECL_EGREP
++# --------------
++# If we don't have a new enough Autoconf to choose the best grep
++# available, choose the one first in the user's PATH.
++m4_defun([_LT_DECL_EGREP],
++[AC_REQUIRE([AC_PROG_EGREP])dnl
++AC_REQUIRE([AC_PROG_FGREP])dnl
++test -z "$GREP" && GREP=grep
++_LT_DECL([], [GREP], [1], [A grep program that handles long lines])
++_LT_DECL([], [EGREP], [1], [An ERE matcher])
++_LT_DECL([], [FGREP], [1], [A literal string matcher])
++dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too
++AC_SUBST([GREP])
++])
++
++
++# _LT_DECL_OBJDUMP
++# --------------
++# If we don't have a new enough Autoconf to choose the best objdump
++# available, choose the one first in the user's PATH.
++m4_defun([_LT_DECL_OBJDUMP],
++[AC_CHECK_TOOL(OBJDUMP, objdump, false)
++test -z "$OBJDUMP" && OBJDUMP=objdump
++_LT_DECL([], [OBJDUMP], [1], [An object symbol dumper])
++AC_SUBST([OBJDUMP])
++])
++
++
++# _LT_DECL_SED
++# ------------
++# Check for a fully-functional sed program, that truncates
++# as few characters as possible. Prefer GNU sed if found.
++m4_defun([_LT_DECL_SED],
++[AC_PROG_SED
++test -z "$SED" && SED=sed
++Xsed="$SED -e 1s/^X//"
++_LT_DECL([], [SED], [1], [A sed program that does not truncate output])
++_LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"],
++ [Sed that helps us avoid accidentally triggering echo(1) options like -n])
++])# _LT_DECL_SED
++
++m4_ifndef([AC_PROG_SED], [
++############################################################
++# NOTE: This macro has been submitted for inclusion into #
++# GNU Autoconf as AC_PROG_SED. When it is available in #
++# a released version of Autoconf we should remove this #
++# macro and use it instead. #
++############################################################
++
++m4_defun([AC_PROG_SED],
++[AC_MSG_CHECKING([for a sed that does not truncate output])
++AC_CACHE_VAL(lt_cv_path_SED,
++[# Loop through the user's path and test for sed and gsed.
++# Then use that list of sed's as ones to test for truncation.
++as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for lt_ac_prog in sed gsed; do
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then
++ lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext"
++ fi
++ done
++ done
++done
++IFS=$as_save_IFS
++lt_ac_max=0
++lt_ac_count=0
++# Add /usr/xpg4/bin/sed as it is typically found on Solaris
++# along with /bin/sed that truncates output.
++for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do
++ test ! -f $lt_ac_sed && continue
++ cat /dev/null > conftest.in
++ lt_ac_count=0
++ echo $ECHO_N "0123456789$ECHO_C" >conftest.in
++ # Check for GNU sed and select it if it is found.
++ if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then
++ lt_cv_path_SED=$lt_ac_sed
++ break
++ fi
++ while true; do
++ cat conftest.in conftest.in >conftest.tmp
++ mv conftest.tmp conftest.in
++ cp conftest.in conftest.nl
++ echo >>conftest.nl
++ $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break
++ cmp -s conftest.out conftest.nl || break
++ # 10000 chars as input seems more than enough
++ test $lt_ac_count -gt 10 && break
++ lt_ac_count=`expr $lt_ac_count + 1`
++ if test $lt_ac_count -gt $lt_ac_max; then
++ lt_ac_max=$lt_ac_count
++ lt_cv_path_SED=$lt_ac_sed
++ fi
++ done
++done
++])
++SED=$lt_cv_path_SED
++AC_SUBST([SED])
++AC_MSG_RESULT([$SED])
++])#AC_PROG_SED
++])#m4_ifndef
++
++# Old name:
++AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED])
++dnl aclocal-1.4 backwards compatibility:
++dnl AC_DEFUN([LT_AC_PROG_SED], [])
++
++
++# _LT_CHECK_SHELL_FEATURES
++# ------------------------
++# Find out whether the shell is Bourne or XSI compatible,
++# or has some other useful features.
++m4_defun([_LT_CHECK_SHELL_FEATURES],
++[AC_MSG_CHECKING([whether the shell understands some XSI constructs])
++# Try some XSI features
++xsi_shell=no
++( _lt_dummy="a/b/c"
++ test "${_lt_dummy##*/},${_lt_dummy%/*},"${_lt_dummy%"$_lt_dummy"}, \
++ = c,a/b,, \
++ && eval 'test $(( 1 + 1 )) -eq 2 \
++ && test "${#_lt_dummy}" -eq 5' ) >/dev/null 2>&1 \
++ && xsi_shell=yes
++AC_MSG_RESULT([$xsi_shell])
++_LT_CONFIG_LIBTOOL_INIT([xsi_shell='$xsi_shell'])
++
++AC_MSG_CHECKING([whether the shell understands "+="])
++lt_shell_append=no
++( foo=bar; set foo baz; eval "$[1]+=\$[2]" && test "$foo" = barbaz ) \
++ >/dev/null 2>&1 \
++ && lt_shell_append=yes
++AC_MSG_RESULT([$lt_shell_append])
++_LT_CONFIG_LIBTOOL_INIT([lt_shell_append='$lt_shell_append'])
++
++if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
++ lt_unset=unset
++else
++ lt_unset=false
++fi
++_LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl
++
++# test EBCDIC or ASCII
++case `echo X|tr X '\101'` in
++ A) # ASCII based system
++ # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr
++ lt_SP2NL='tr \040 \012'
++ lt_NL2SP='tr \015\012 \040\040'
++ ;;
++ *) # EBCDIC based system
++ lt_SP2NL='tr \100 \n'
++ lt_NL2SP='tr \r\n \100\100'
++ ;;
++esac
++_LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl
++_LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl
++])# _LT_CHECK_SHELL_FEATURES
++
++
++# _LT_PROG_XSI_SHELLFNS
++# ---------------------
++# Bourne and XSI compatible variants of some useful shell functions.
++m4_defun([_LT_PROG_XSI_SHELLFNS],
++[case $xsi_shell in
++ yes)
++ cat << \_LT_EOF >> "$cfgfile"
++
++# func_dirname file append nondir_replacement
++# Compute the dirname of FILE. If nonempty, add APPEND to the result,
++# otherwise set result to NONDIR_REPLACEMENT.
++func_dirname ()
++{
++ case ${1} in
++ */*) func_dirname_result="${1%/*}${2}" ;;
++ * ) func_dirname_result="${3}" ;;
++ esac
++}
++
++# func_basename file
++func_basename ()
++{
++ func_basename_result="${1##*/}"
++}
++
++# func_dirname_and_basename file append nondir_replacement
++# perform func_basename and func_dirname in a single function
++# call:
++# dirname: Compute the dirname of FILE. If nonempty,
++# add APPEND to the result, otherwise set result
++# to NONDIR_REPLACEMENT.
++# value returned in "$func_dirname_result"
++# basename: Compute filename of FILE.
++# value retuned in "$func_basename_result"
++# Implementation must be kept synchronized with func_dirname
++# and func_basename. For efficiency, we do not delegate to
++# those functions but instead duplicate the functionality here.
++func_dirname_and_basename ()
++{
++ case ${1} in
++ */*) func_dirname_result="${1%/*}${2}" ;;
++ * ) func_dirname_result="${3}" ;;
++ esac
++ func_basename_result="${1##*/}"
++}
++
++# func_stripname prefix suffix name
++# strip PREFIX and SUFFIX off of NAME.
++# PREFIX and SUFFIX must not contain globbing or regex special
++# characters, hashes, percent signs, but SUFFIX may contain a leading
++# dot (in which case that matches only a dot).
++func_stripname ()
++{
++ # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are
++ # positional parameters, so assign one to ordinary parameter first.
++ func_stripname_result=${3}
++ func_stripname_result=${func_stripname_result#"${1}"}
++ func_stripname_result=${func_stripname_result%"${2}"}
++}
++
++# func_opt_split
++func_opt_split ()
++{
++ func_opt_split_opt=${1%%=*}
++ func_opt_split_arg=${1#*=}
++}
++
++# func_lo2o object
++func_lo2o ()
++{
++ case ${1} in
++ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;
++ *) func_lo2o_result=${1} ;;
++ esac
++}
++
++# func_xform libobj-or-source
++func_xform ()
++{
++ func_xform_result=${1%.*}.lo
++}
++
++# func_arith arithmetic-term...
++func_arith ()
++{
++ func_arith_result=$(( $[*] ))
++}
++
++# func_len string
++# STRING may not start with a hyphen.
++func_len ()
++{
++ func_len_result=${#1}
++}
++
++_LT_EOF
++ ;;
++ *) # Bourne compatible functions.
++ cat << \_LT_EOF >> "$cfgfile"
++
++# func_dirname file append nondir_replacement
++# Compute the dirname of FILE. If nonempty, add APPEND to the result,
++# otherwise set result to NONDIR_REPLACEMENT.
++func_dirname ()
++{
++ # Extract subdirectory from the argument.
++ func_dirname_result=`$ECHO "X${1}" | $Xsed -e "$dirname"`
++ if test "X$func_dirname_result" = "X${1}"; then
++ func_dirname_result="${3}"
++ else
++ func_dirname_result="$func_dirname_result${2}"
++ fi
++}
++
++# func_basename file
++func_basename ()
++{
++ func_basename_result=`$ECHO "X${1}" | $Xsed -e "$basename"`
++}
++
++dnl func_dirname_and_basename
++dnl A portable version of this function is already defined in general.m4sh
++dnl so there is no need for it here.
++
++# func_stripname prefix suffix name
++# strip PREFIX and SUFFIX off of NAME.
++# PREFIX and SUFFIX must not contain globbing or regex special
++# characters, hashes, percent signs, but SUFFIX may contain a leading
++# dot (in which case that matches only a dot).
++# func_strip_suffix prefix name
++func_stripname ()
++{
++ case ${2} in
++ .*) func_stripname_result=`$ECHO "X${3}" \
++ | $Xsed -e "s%^${1}%%" -e "s%\\\\${2}\$%%"`;;
++ *) func_stripname_result=`$ECHO "X${3}" \
++ | $Xsed -e "s%^${1}%%" -e "s%${2}\$%%"`;;
++ esac
++}
++
++# sed scripts:
++my_sed_long_opt='1s/^\(-[[^=]]*\)=.*/\1/;q'
++my_sed_long_arg='1s/^-[[^=]]*=//'
++
++# func_opt_split
++func_opt_split ()
++{
++ func_opt_split_opt=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_opt"`
++ func_opt_split_arg=`$ECHO "X${1}" | $Xsed -e "$my_sed_long_arg"`
++}
++
++# func_lo2o object
++func_lo2o ()
++{
++ func_lo2o_result=`$ECHO "X${1}" | $Xsed -e "$lo2o"`
++}
++
++# func_xform libobj-or-source
++func_xform ()
++{
++ func_xform_result=`$ECHO "X${1}" | $Xsed -e 's/\.[[^.]]*$/.lo/'`
++}
++
++# func_arith arithmetic-term...
++func_arith ()
++{
++ func_arith_result=`expr "$[@]"`
++}
++
++# func_len string
++# STRING may not start with a hyphen.
++func_len ()
++{
++ func_len_result=`expr "$[1]" : ".*" 2>/dev/null || echo $max_cmd_len`
++}
++
++_LT_EOF
++esac
++
++case $lt_shell_append in
++ yes)
++ cat << \_LT_EOF >> "$cfgfile"
++
++# func_append var value
++# Append VALUE to the end of shell variable VAR.
++func_append ()
++{
++ eval "$[1]+=\$[2]"
++}
++_LT_EOF
++ ;;
++ *)
++ cat << \_LT_EOF >> "$cfgfile"
++
++# func_append var value
++# Append VALUE to the end of shell variable VAR.
++func_append ()
++{
++ eval "$[1]=\$$[1]\$[2]"
++}
++
++_LT_EOF
++ ;;
++ esac
++])
+Index: libdessert0.86-0.86.14/m4/ltoptions.m4
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/m4/ltoptions.m4 2009-12-09 16:38:27.261422553 +0100
+@@ -0,0 +1,368 @@
++# Helper functions for option handling. -*- Autoconf -*-
++#
++# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
++# Written by Gary V. Vaughan, 2004
++#
++# This file is free software; the Free Software Foundation gives
++# unlimited permission to copy and/or distribute it, with or without
++# modifications, as long as this notice is preserved.
++
++# serial 6 ltoptions.m4
++
++# This is to help aclocal find these macros, as it can't see m4_define.
++AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])])
++
++
++# _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME)
++# ------------------------------------------
++m4_define([_LT_MANGLE_OPTION],
++[[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])])
++
++
++# _LT_SET_OPTION(MACRO-NAME, OPTION-NAME)
++# ---------------------------------------
++# Set option OPTION-NAME for macro MACRO-NAME, and if there is a
++# matching handler defined, dispatch to it. Other OPTION-NAMEs are
++# saved as a flag.
++m4_define([_LT_SET_OPTION],
++[m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl
++m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]),
++ _LT_MANGLE_DEFUN([$1], [$2]),
++ [m4_warning([Unknown $1 option `$2'])])[]dnl
++])
++
++
++# _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET])
++# ------------------------------------------------------------
++# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
++m4_define([_LT_IF_OPTION],
++[m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])])
++
++
++# _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET)
++# -------------------------------------------------------
++# Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME
++# are set.
++m4_define([_LT_UNLESS_OPTIONS],
++[m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
++ [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option),
++ [m4_define([$0_found])])])[]dnl
++m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3
++])[]dnl
++])
++
++
++# _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST)
++# ----------------------------------------
++# OPTION-LIST is a space-separated list of Libtool options associated
++# with MACRO-NAME. If any OPTION has a matching handler declared with
++# LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about
++# the unknown option and exit.
++m4_defun([_LT_SET_OPTIONS],
++[# Set options
++m4_foreach([_LT_Option], m4_split(m4_normalize([$2])),
++ [_LT_SET_OPTION([$1], _LT_Option)])
++
++m4_if([$1],[LT_INIT],[
++ dnl
++ dnl Simply set some default values (i.e off) if boolean options were not
++ dnl specified:
++ _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no
++ ])
++ _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no
++ ])
++ dnl
++ dnl If no reference was made to various pairs of opposing options, then
++ dnl we run the default mode handler for the pair. For example, if neither
++ dnl `shared' nor `disable-shared' was passed, we enable building of shared
++ dnl archives by default:
++ _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED])
++ _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC])
++ _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC])
++ _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install],
++ [_LT_ENABLE_FAST_INSTALL])
++ ])
++])# _LT_SET_OPTIONS
++
++
++## --------------------------------- ##
++## Macros to handle LT_INIT options. ##
++## --------------------------------- ##
++
++# _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME)
++# -----------------------------------------
++m4_define([_LT_MANGLE_DEFUN],
++[[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])])
++
++
++# LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE)
++# -----------------------------------------------
++m4_define([LT_OPTION_DEFINE],
++[m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl
++])# LT_OPTION_DEFINE
++
++
++# dlopen
++# ------
++LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes
++])
++
++AU_DEFUN([AC_LIBTOOL_DLOPEN],
++[_LT_SET_OPTION([LT_INIT], [dlopen])
++AC_DIAGNOSE([obsolete],
++[$0: Remove this warning and the call to _LT_SET_OPTION when you
++put the `dlopen' option into LT_INIT's first parameter.])
++])
++
++dnl aclocal-1.4 backwards compatibility:
++dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], [])
++
++
++# win32-dll
++# ---------
++# Declare package support for building win32 dll's.
++LT_OPTION_DEFINE([LT_INIT], [win32-dll],
++[enable_win32_dll=yes
++
++case $host in
++*-*-cygwin* | *-*-mingw* | *-*-pw32* | *-cegcc*)
++ AC_CHECK_TOOL(AS, as, false)
++ AC_CHECK_TOOL(DLLTOOL, dlltool, false)
++ AC_CHECK_TOOL(OBJDUMP, objdump, false)
++ ;;
++esac
++
++test -z "$AS" && AS=as
++_LT_DECL([], [AS], [0], [Assembler program])dnl
++
++test -z "$DLLTOOL" && DLLTOOL=dlltool
++_LT_DECL([], [DLLTOOL], [0], [DLL creation program])dnl
++
++test -z "$OBJDUMP" && OBJDUMP=objdump
++_LT_DECL([], [OBJDUMP], [0], [Object dumper program])dnl
++])# win32-dll
++
++AU_DEFUN([AC_LIBTOOL_WIN32_DLL],
++[AC_REQUIRE([AC_CANONICAL_HOST])dnl
++_LT_SET_OPTION([LT_INIT], [win32-dll])
++AC_DIAGNOSE([obsolete],
++[$0: Remove this warning and the call to _LT_SET_OPTION when you
++put the `win32-dll' option into LT_INIT's first parameter.])
++])
++
++dnl aclocal-1.4 backwards compatibility:
++dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], [])
++
++
++# _LT_ENABLE_SHARED([DEFAULT])
++# ----------------------------
++# implement the --enable-shared flag, and supports the `shared' and
++# `disable-shared' LT_INIT options.
++# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
++m4_define([_LT_ENABLE_SHARED],
++[m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl
++AC_ARG_ENABLE([shared],
++ [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@],
++ [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])],
++ [p=${PACKAGE-default}
++ case $enableval in
++ yes) enable_shared=yes ;;
++ no) enable_shared=no ;;
++ *)
++ enable_shared=no
++ # Look at the argument we got. We use all the common list separators.
++ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
++ for pkg in $enableval; do
++ IFS="$lt_save_ifs"
++ if test "X$pkg" = "X$p"; then
++ enable_shared=yes
++ fi
++ done
++ IFS="$lt_save_ifs"
++ ;;
++ esac],
++ [enable_shared=]_LT_ENABLE_SHARED_DEFAULT)
++
++ _LT_DECL([build_libtool_libs], [enable_shared], [0],
++ [Whether or not to build shared libraries])
++])# _LT_ENABLE_SHARED
++
++LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])])
++LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])])
++
++# Old names:
++AC_DEFUN([AC_ENABLE_SHARED],
++[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared])
++])
++
++AC_DEFUN([AC_DISABLE_SHARED],
++[_LT_SET_OPTION([LT_INIT], [disable-shared])
++])
++
++AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)])
++AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)])
++
++dnl aclocal-1.4 backwards compatibility:
++dnl AC_DEFUN([AM_ENABLE_SHARED], [])
++dnl AC_DEFUN([AM_DISABLE_SHARED], [])
++
++
++
++# _LT_ENABLE_STATIC([DEFAULT])
++# ----------------------------
++# implement the --enable-static flag, and support the `static' and
++# `disable-static' LT_INIT options.
++# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
++m4_define([_LT_ENABLE_STATIC],
++[m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl
++AC_ARG_ENABLE([static],
++ [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@],
++ [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])],
++ [p=${PACKAGE-default}
++ case $enableval in
++ yes) enable_static=yes ;;
++ no) enable_static=no ;;
++ *)
++ enable_static=no
++ # Look at the argument we got. We use all the common list separators.
++ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
++ for pkg in $enableval; do
++ IFS="$lt_save_ifs"
++ if test "X$pkg" = "X$p"; then
++ enable_static=yes
++ fi
++ done
++ IFS="$lt_save_ifs"
++ ;;
++ esac],
++ [enable_static=]_LT_ENABLE_STATIC_DEFAULT)
++
++ _LT_DECL([build_old_libs], [enable_static], [0],
++ [Whether or not to build static libraries])
++])# _LT_ENABLE_STATIC
++
++LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])])
++LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])])
++
++# Old names:
++AC_DEFUN([AC_ENABLE_STATIC],
++[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static])
++])
++
++AC_DEFUN([AC_DISABLE_STATIC],
++[_LT_SET_OPTION([LT_INIT], [disable-static])
++])
++
++AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)])
++AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)])
++
++dnl aclocal-1.4 backwards compatibility:
++dnl AC_DEFUN([AM_ENABLE_STATIC], [])
++dnl AC_DEFUN([AM_DISABLE_STATIC], [])
++
++
++
++# _LT_ENABLE_FAST_INSTALL([DEFAULT])
++# ----------------------------------
++# implement the --enable-fast-install flag, and support the `fast-install'
++# and `disable-fast-install' LT_INIT options.
++# DEFAULT is either `yes' or `no'. If omitted, it defaults to `yes'.
++m4_define([_LT_ENABLE_FAST_INSTALL],
++[m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl
++AC_ARG_ENABLE([fast-install],
++ [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@],
++ [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])],
++ [p=${PACKAGE-default}
++ case $enableval in
++ yes) enable_fast_install=yes ;;
++ no) enable_fast_install=no ;;
++ *)
++ enable_fast_install=no
++ # Look at the argument we got. We use all the common list separators.
++ lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR,"
++ for pkg in $enableval; do
++ IFS="$lt_save_ifs"
++ if test "X$pkg" = "X$p"; then
++ enable_fast_install=yes
++ fi
++ done
++ IFS="$lt_save_ifs"
++ ;;
++ esac],
++ [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT)
++
++_LT_DECL([fast_install], [enable_fast_install], [0],
++ [Whether or not to optimize for fast installation])dnl
++])# _LT_ENABLE_FAST_INSTALL
++
++LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])])
++LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])])
++
++# Old names:
++AU_DEFUN([AC_ENABLE_FAST_INSTALL],
++[_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install])
++AC_DIAGNOSE([obsolete],
++[$0: Remove this warning and the call to _LT_SET_OPTION when you put
++the `fast-install' option into LT_INIT's first parameter.])
++])
++
++AU_DEFUN([AC_DISABLE_FAST_INSTALL],
++[_LT_SET_OPTION([LT_INIT], [disable-fast-install])
++AC_DIAGNOSE([obsolete],
++[$0: Remove this warning and the call to _LT_SET_OPTION when you put
++the `disable-fast-install' option into LT_INIT's first parameter.])
++])
++
++dnl aclocal-1.4 backwards compatibility:
++dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], [])
++dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], [])
++
++
++# _LT_WITH_PIC([MODE])
++# --------------------
++# implement the --with-pic flag, and support the `pic-only' and `no-pic'
++# LT_INIT options.
++# MODE is either `yes' or `no'. If omitted, it defaults to `both'.
++m4_define([_LT_WITH_PIC],
++[AC_ARG_WITH([pic],
++ [AS_HELP_STRING([--with-pic],
++ [try to use only PIC/non-PIC objects @<:@default=use both@:>@])],
++ [pic_mode="$withval"],
++ [pic_mode=default])
++
++test -z "$pic_mode" && pic_mode=m4_default([$1], [default])
++
++_LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl
++])# _LT_WITH_PIC
++
++LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])])
++LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])])
++
++# Old name:
++AU_DEFUN([AC_LIBTOOL_PICMODE],
++[_LT_SET_OPTION([LT_INIT], [pic-only])
++AC_DIAGNOSE([obsolete],
++[$0: Remove this warning and the call to _LT_SET_OPTION when you
++put the `pic-only' option into LT_INIT's first parameter.])
++])
++
++dnl aclocal-1.4 backwards compatibility:
++dnl AC_DEFUN([AC_LIBTOOL_PICMODE], [])
++
++## ----------------- ##
++## LTDL_INIT Options ##
++## ----------------- ##
++
++m4_define([_LTDL_MODE], [])
++LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive],
++ [m4_define([_LTDL_MODE], [nonrecursive])])
++LT_OPTION_DEFINE([LTDL_INIT], [recursive],
++ [m4_define([_LTDL_MODE], [recursive])])
++LT_OPTION_DEFINE([LTDL_INIT], [subproject],
++ [m4_define([_LTDL_MODE], [subproject])])
++
++m4_define([_LTDL_TYPE], [])
++LT_OPTION_DEFINE([LTDL_INIT], [installable],
++ [m4_define([_LTDL_TYPE], [installable])])
++LT_OPTION_DEFINE([LTDL_INIT], [convenience],
++ [m4_define([_LTDL_TYPE], [convenience])])
+Index: libdessert0.86-0.86.14/m4/ltsugar.m4
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/m4/ltsugar.m4 2009-12-09 16:38:27.261422553 +0100
+@@ -0,0 +1,123 @@
++# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*-
++#
++# Copyright (C) 2004, 2005, 2007, 2008 Free Software Foundation, Inc.
++# Written by Gary V. Vaughan, 2004
++#
++# This file is free software; the Free Software Foundation gives
++# unlimited permission to copy and/or distribute it, with or without
++# modifications, as long as this notice is preserved.
++
++# serial 6 ltsugar.m4
++
++# This is to help aclocal find these macros, as it can't see m4_define.
++AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])])
++
++
++# lt_join(SEP, ARG1, [ARG2...])
++# -----------------------------
++# Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their
++# associated separator.
++# Needed until we can rely on m4_join from Autoconf 2.62, since all earlier
++# versions in m4sugar had bugs.
++m4_define([lt_join],
++[m4_if([$#], [1], [],
++ [$#], [2], [[$2]],
++ [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])])
++m4_define([_lt_join],
++[m4_if([$#$2], [2], [],
++ [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])])
++
++
++# lt_car(LIST)
++# lt_cdr(LIST)
++# ------------
++# Manipulate m4 lists.
++# These macros are necessary as long as will still need to support
++# Autoconf-2.59 which quotes differently.
++m4_define([lt_car], [[$1]])
++m4_define([lt_cdr],
++[m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])],
++ [$#], 1, [],
++ [m4_dquote(m4_shift($@))])])
++m4_define([lt_unquote], $1)
++
++
++# lt_append(MACRO-NAME, STRING, [SEPARATOR])
++# ------------------------------------------
++# Redefine MACRO-NAME to hold its former content plus `SEPARATOR'`STRING'.
++# Note that neither SEPARATOR nor STRING are expanded; they are appended
++# to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked).
++# No SEPARATOR is output if MACRO-NAME was previously undefined (different
++# than defined and empty).
++#
++# This macro is needed until we can rely on Autoconf 2.62, since earlier
++# versions of m4sugar mistakenly expanded SEPARATOR but not STRING.
++m4_define([lt_append],
++[m4_define([$1],
++ m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])])
++
++
++
++# lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...])
++# ----------------------------------------------------------
++# Produce a SEP delimited list of all paired combinations of elements of
++# PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list
++# has the form PREFIXmINFIXSUFFIXn.
++# Needed until we can rely on m4_combine added in Autoconf 2.62.
++m4_define([lt_combine],
++[m4_if(m4_eval([$# > 3]), [1],
++ [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl
++[[m4_foreach([_Lt_prefix], [$2],
++ [m4_foreach([_Lt_suffix],
++ ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[,
++ [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])])
++
++
++# lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ])
++# -----------------------------------------------------------------------
++# Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited
++# by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ.
++m4_define([lt_if_append_uniq],
++[m4_ifdef([$1],
++ [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1],
++ [lt_append([$1], [$2], [$3])$4],
++ [$5])],
++ [lt_append([$1], [$2], [$3])$4])])
++
++
++# lt_dict_add(DICT, KEY, VALUE)
++# -----------------------------
++m4_define([lt_dict_add],
++[m4_define([$1($2)], [$3])])
++
++
++# lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE)
++# --------------------------------------------
++m4_define([lt_dict_add_subkey],
++[m4_define([$1($2:$3)], [$4])])
++
++
++# lt_dict_fetch(DICT, KEY, [SUBKEY])
++# ----------------------------------
++m4_define([lt_dict_fetch],
++[m4_ifval([$3],
++ m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]),
++ m4_ifdef([$1($2)], [m4_defn([$1($2)])]))])
++
++
++# lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE])
++# -----------------------------------------------------------------
++m4_define([lt_if_dict_fetch],
++[m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4],
++ [$5],
++ [$6])])
++
++
++# lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...])
++# --------------------------------------------------------------
++m4_define([lt_dict_filter],
++[m4_if([$5], [], [],
++ [lt_join(m4_quote(m4_default([$4], [[, ]])),
++ lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]),
++ [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl
++])
+Index: libdessert0.86-0.86.14/m4/ltversion.m4
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/m4/ltversion.m4 2009-12-09 16:38:27.261422553 +0100
+@@ -0,0 +1,23 @@
++# ltversion.m4 -- version numbers -*- Autoconf -*-
++#
++# Copyright (C) 2004 Free Software Foundation, Inc.
++# Written by Scott James Remnant, 2004
++#
++# This file is free software; the Free Software Foundation gives
++# unlimited permission to copy and/or distribute it, with or without
++# modifications, as long as this notice is preserved.
++
++# Generated from ltversion.in.
++
++# serial 3012 ltversion.m4
++# This file is part of GNU Libtool
++
++m4_define([LT_PACKAGE_VERSION], [2.2.6])
++m4_define([LT_PACKAGE_REVISION], [1.3012])
++
++AC_DEFUN([LTVERSION_VERSION],
++[macro_version='2.2.6'
++macro_revision='1.3012'
++_LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?])
++_LT_DECL(, macro_revision, 0)
++])
+Index: libdessert0.86-0.86.14/m4/lt~obsolete.m4
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/m4/lt~obsolete.m4 2009-12-09 16:38:27.261422553 +0100
+@@ -0,0 +1,92 @@
++# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*-
++#
++# Copyright (C) 2004, 2005, 2007 Free Software Foundation, Inc.
++# Written by Scott James Remnant, 2004.
++#
++# This file is free software; the Free Software Foundation gives
++# unlimited permission to copy and/or distribute it, with or without
++# modifications, as long as this notice is preserved.
++
++# serial 4 lt~obsolete.m4
++
++# These exist entirely to fool aclocal when bootstrapping libtool.
++#
++# In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN)
++# which have later been changed to m4_define as they aren't part of the
++# exported API, or moved to Autoconf or Automake where they belong.
++#
++# The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN
++# in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us
++# using a macro with the same name in our local m4/libtool.m4 it'll
++# pull the old libtool.m4 in (it doesn't see our shiny new m4_define
++# and doesn't know about Autoconf macros at all.)
++#
++# So we provide this file, which has a silly filename so it's always
++# included after everything else. This provides aclocal with the
++# AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything
++# because those macros already exist, or will be overwritten later.
++# We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6.
++#
++# Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here.
++# Yes, that means every name once taken will need to remain here until
++# we give up compatibility with versions before 1.7, at which point
++# we need to keep only those names which we still refer to.
++
++# This is to help aclocal find these macros, as it can't see m4_define.
++AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])])
++
++m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])])
++m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])])
++m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])])
++m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])])
++m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])])
++m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])])
++m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])])
++m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])])
++m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])])
++m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])])
++m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])])
++m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])])
++m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])])
++m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])])
++m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])])
++m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])])
++m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])])
++m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])])
++m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])])
++m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])])
++m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])])
++m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])])
++m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])])
++m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])])
++m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])])
++m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])])
++m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])])
++m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])])
++m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])])
++m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])])
++m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])])
++m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])])
++m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])])
++m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])])
++m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])])
++m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])])
++m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])])
++m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])])
++m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])])
++m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])])
++m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])])
++m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])])
++m4_ifndef([AC_LIBTOOL_RC], [AC_DEFUN([AC_LIBTOOL_RC])])
++m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])])
++m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])])
++m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])])
++m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])])
++m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])])
++m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])])
++m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])])
++m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])])
++m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])])
++m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])])
++m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])])
++m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])])
+Index: libdessert0.86-0.86.14/m4/net-snmp.m4
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/m4/net-snmp.m4 2009-12-09 16:38:27.261422553 +0100
+@@ -0,0 +1,10 @@
++AC_DEFUN([AC_CHECK_NET_SNMP],[
++AC_MSG_CHECKING([Searching for net-snmp lib])
++AC_CHECK_PROG([SNMP_LIBS],[net-snmp-config],[`net-snmp-config --agent-libs`],[none])
++AC_CHECK_PROG([SNMP_CFLGAS],[net-snmp-config],[`net-snmp-config --cflags`],[none])
++if test x"${SNMP_LIBS}" = "xnone"; then
++AC_MSG_ERROR([net-snmp-config not found, please install the development package of net-snmp])
++else
++AC_MSG_RESULT([found net-snmp-config])
++fi
++])
+Index: libdessert0.86-0.86.14/m4/pcap.m4
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/m4/pcap.m4 2009-12-09 16:38:27.261422553 +0100
+@@ -0,0 +1,10 @@
++AC_DEFUN([AC_CHECK_PCAP],[
++AC_MSG_CHECKING([Searching for pcap lib])
++AC_CHECK_PROG([PCAP_LIBS],[pcap-config],[`pcap-config --libs`],[none])
++AC_CHECK_PROG([PCAP_CFLGAS],[pcap-config],[`pcap-config --cflags`],[none])
++if test x"${PCAP_LIBS}" = "xnone"; then
++AC_MSG_ERROR([pcap-config not found, please install the development package of libpcap])
++else
++AC_MSG_RESULT([found pcap])
++fi
++])
+Index: libdessert0.86-0.86.14/missing
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/missing 2009-12-09 16:38:27.264756682 +0100
+@@ -0,0 +1,376 @@
++#! /bin/sh
++# Common stub for a few missing GNU programs while installing.
++
++scriptversion=2009-04-28.21; # UTC
++
++# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006,
++# 2008, 2009 Free Software Foundation, Inc.
++# Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
++
++# This program is free software; you can redistribute it and/or modify
++# it under the terms of the GNU General Public License as published by
++# the Free Software Foundation; either version 2, or (at your option)
++# any later version.
++
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++
++# You should have received a copy of the GNU General Public License
++# along with this program. If not, see <http://www.gnu.org/licenses/>.
++
++# As a special exception to the GNU General Public License, if you
++# distribute this file as part of a program that contains a
++# configuration script generated by Autoconf, you may include it under
++# the same distribution terms that you use for the rest of that program.
++
++if test $# -eq 0; then
++ echo 1>&2 "Try \`$0 --help' for more information"
++ exit 1
++fi
++
++run=:
++sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p'
++sed_minuso='s/.* -o \([^ ]*\).*/\1/p'
++
++# In the cases where this matters, `missing' is being run in the
++# srcdir already.
++if test -f configure.ac; then
++ configure_ac=configure.ac
++else
++ configure_ac=configure.in
++fi
++
++msg="missing on your system"
++
++case $1 in
++--run)
++ # Try to run requested program, and just exit if it succeeds.
++ run=
++ shift
++ "$@" && exit 0
++ # Exit code 63 means version mismatch. This often happens
++ # when the user try to use an ancient version of a tool on
++ # a file that requires a minimum version. In this case we
++ # we should proceed has if the program had been absent, or
++ # if --run hadn't been passed.
++ if test $? = 63; then
++ run=:
++ msg="probably too old"
++ fi
++ ;;
++
++ -h|--h|--he|--hel|--help)
++ echo "\
++$0 [OPTION]... PROGRAM [ARGUMENT]...
++
++Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
++error status if there is no known handling for PROGRAM.
++
++Options:
++ -h, --help display this help and exit
++ -v, --version output version information and exit
++ --run try to run the given command, and emulate it if it fails
++
++Supported PROGRAM values:
++ aclocal touch file \`aclocal.m4'
++ autoconf touch file \`configure'
++ autoheader touch file \`config.h.in'
++ autom4te touch the output file, or create a stub one
++ automake touch all \`Makefile.in' files
++ bison create \`y.tab.[ch]', if possible, from existing .[ch]
++ flex create \`lex.yy.c', if possible, from existing .c
++ help2man touch the output file
++ lex create \`lex.yy.c', if possible, from existing .c
++ makeinfo touch the output file
++ tar try tar, gnutar, gtar, then tar without non-portable flags
++ yacc create \`y.tab.[ch]', if possible, from existing .[ch]
++
++Version suffixes to PROGRAM as well as the prefixes \`gnu-', \`gnu', and
++\`g' are ignored when checking the name.
++
++Send bug reports to <bug-automake@gnu.org>."
++ exit $?
++ ;;
++
++ -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
++ echo "missing $scriptversion (GNU Automake)"
++ exit $?
++ ;;
++
++ -*)
++ echo 1>&2 "$0: Unknown \`$1' option"
++ echo 1>&2 "Try \`$0 --help' for more information"
++ exit 1
++ ;;
++
++esac
++
++# normalize program name to check for.
++program=`echo "$1" | sed '
++ s/^gnu-//; t
++ s/^gnu//; t
++ s/^g//; t'`
++
++# Now exit if we have it, but it failed. Also exit now if we
++# don't have it and --version was passed (most likely to detect
++# the program). This is about non-GNU programs, so use $1 not
++# $program.
++case $1 in
++ lex*|yacc*)
++ # Not GNU programs, they don't have --version.
++ ;;
++
++ tar*)
++ if test -n "$run"; then
++ echo 1>&2 "ERROR: \`tar' requires --run"
++ exit 1
++ elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
++ exit 1
++ fi
++ ;;
++
++ *)
++ if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
++ # We have it, but it failed.
++ exit 1
++ elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
++ # Could not run --version or --help. This is probably someone
++ # running `$TOOL --version' or `$TOOL --help' to check whether
++ # $TOOL exists and not knowing $TOOL uses missing.
++ exit 1
++ fi
++ ;;
++esac
++
++# If it does not exist, or fails to run (possibly an outdated version),
++# try to emulate it.
++case $program in
++ aclocal*)
++ echo 1>&2 "\
++WARNING: \`$1' is $msg. You should only need it if
++ you modified \`acinclude.m4' or \`${configure_ac}'. You might want
++ to install the \`Automake' and \`Perl' packages. Grab them from
++ any GNU archive site."
++ touch aclocal.m4
++ ;;
++
++ autoconf*)
++ echo 1>&2 "\
++WARNING: \`$1' is $msg. You should only need it if
++ you modified \`${configure_ac}'. You might want to install the
++ \`Autoconf' and \`GNU m4' packages. Grab them from any GNU
++ archive site."
++ touch configure
++ ;;
++
++ autoheader*)
++ echo 1>&2 "\
++WARNING: \`$1' is $msg. You should only need it if
++ you modified \`acconfig.h' or \`${configure_ac}'. You might want
++ to install the \`Autoconf' and \`GNU m4' packages. Grab them
++ from any GNU archive site."
++ files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
++ test -z "$files" && files="config.h"
++ touch_files=
++ for f in $files; do
++ case $f in
++ *:*) touch_files="$touch_files "`echo "$f" |
++ sed -e 's/^[^:]*://' -e 's/:.*//'`;;
++ *) touch_files="$touch_files $f.in";;
++ esac
++ done
++ touch $touch_files
++ ;;
++
++ automake*)
++ echo 1>&2 "\
++WARNING: \`$1' is $msg. You should only need it if
++ you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'.
++ You might want to install the \`Automake' and \`Perl' packages.
++ Grab them from any GNU archive site."
++ find . -type f -name Makefile.am -print |
++ sed 's/\.am$/.in/' |
++ while read f; do touch "$f"; done
++ ;;
++
++ autom4te*)
++ echo 1>&2 "\
++WARNING: \`$1' is needed, but is $msg.
++ You might have modified some files without having the
++ proper tools for further handling them.
++ You can get \`$1' as part of \`Autoconf' from any GNU
++ archive site."
++
++ file=`echo "$*" | sed -n "$sed_output"`
++ test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
++ if test -f "$file"; then
++ touch $file
++ else
++ test -z "$file" || exec >$file
++ echo "#! /bin/sh"
++ echo "# Created by GNU Automake missing as a replacement of"
++ echo "# $ $@"
++ echo "exit 0"
++ chmod +x $file
++ exit 1
++ fi
++ ;;
++
++ bison*|yacc*)
++ echo 1>&2 "\
++WARNING: \`$1' $msg. You should only need it if
++ you modified a \`.y' file. You may need the \`Bison' package
++ in order for those modifications to take effect. You can get
++ \`Bison' from any GNU archive site."
++ rm -f y.tab.c y.tab.h
++ if test $# -ne 1; then
++ eval LASTARG="\${$#}"
++ case $LASTARG in
++ *.y)
++ SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
++ if test -f "$SRCFILE"; then
++ cp "$SRCFILE" y.tab.c
++ fi
++ SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
++ if test -f "$SRCFILE"; then
++ cp "$SRCFILE" y.tab.h
++ fi
++ ;;
++ esac
++ fi
++ if test ! -f y.tab.h; then
++ echo >y.tab.h
++ fi
++ if test ! -f y.tab.c; then
++ echo 'main() { return 0; }' >y.tab.c
++ fi
++ ;;
++
++ lex*|flex*)
++ echo 1>&2 "\
++WARNING: \`$1' is $msg. You should only need it if
++ you modified a \`.l' file. You may need the \`Flex' package
++ in order for those modifications to take effect. You can get
++ \`Flex' from any GNU archive site."
++ rm -f lex.yy.c
++ if test $# -ne 1; then
++ eval LASTARG="\${$#}"
++ case $LASTARG in
++ *.l)
++ SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
++ if test -f "$SRCFILE"; then
++ cp "$SRCFILE" lex.yy.c
++ fi
++ ;;
++ esac
++ fi
++ if test ! -f lex.yy.c; then
++ echo 'main() { return 0; }' >lex.yy.c
++ fi
++ ;;
++
++ help2man*)
++ echo 1>&2 "\
++WARNING: \`$1' is $msg. You should only need it if
++ you modified a dependency of a manual page. You may need the
++ \`Help2man' package in order for those modifications to take
++ effect. You can get \`Help2man' from any GNU archive site."
++
++ file=`echo "$*" | sed -n "$sed_output"`
++ test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
++ if test -f "$file"; then
++ touch $file
++ else
++ test -z "$file" || exec >$file
++ echo ".ab help2man is required to generate this page"
++ exit $?
++ fi
++ ;;
++
++ makeinfo*)
++ echo 1>&2 "\
++WARNING: \`$1' is $msg. You should only need it if
++ you modified a \`.texi' or \`.texinfo' file, or any other file
++ indirectly affecting the aspect of the manual. The spurious
++ call might also be the consequence of using a buggy \`make' (AIX,
++ DU, IRIX). You might want to install the \`Texinfo' package or
++ the \`GNU make' package. Grab either from any GNU archive site."
++ # The file to touch is that specified with -o ...
++ file=`echo "$*" | sed -n "$sed_output"`
++ test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
++ if test -z "$file"; then
++ # ... or it is the one specified with @setfilename ...
++ infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
++ file=`sed -n '
++ /^@setfilename/{
++ s/.* \([^ ]*\) *$/\1/
++ p
++ q
++ }' $infile`
++ # ... or it is derived from the source name (dir/f.texi becomes f.info)
++ test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
++ fi
++ # If the file does not exist, the user really needs makeinfo;
++ # let's fail without touching anything.
++ test -f $file || exit 1
++ touch $file
++ ;;
++
++ tar*)
++ shift
++
++ # We have already tried tar in the generic part.
++ # Look for gnutar/gtar before invocation to avoid ugly error
++ # messages.
++ if (gnutar --version > /dev/null 2>&1); then
++ gnutar "$@" && exit 0
++ fi
++ if (gtar --version > /dev/null 2>&1); then
++ gtar "$@" && exit 0
++ fi
++ firstarg="$1"
++ if shift; then
++ case $firstarg in
++ *o*)
++ firstarg=`echo "$firstarg" | sed s/o//`
++ tar "$firstarg" "$@" && exit 0
++ ;;
++ esac
++ case $firstarg in
++ *h*)
++ firstarg=`echo "$firstarg" | sed s/h//`
++ tar "$firstarg" "$@" && exit 0
++ ;;
++ esac
++ fi
++
++ echo 1>&2 "\
++WARNING: I can't seem to be able to run \`tar' with the given arguments.
++ You may want to install GNU tar or Free paxutils, or check the
++ command line arguments."
++ exit 1
++ ;;
++
++ *)
++ echo 1>&2 "\
++WARNING: \`$1' is needed, and is $msg.
++ You might have modified some files without having the
++ proper tools for further handling them. Check the \`README' file,
++ it often tells you about the needed prerequisites for installing
++ this package. You may also peek at any GNU archive site, in case
++ some other package would contain this missing \`$1' program."
++ exit 1
++ ;;
++esac
++
++exit 0
++
++# Local variables:
++# eval: (add-hook 'write-file-hooks 'time-stamp)
++# time-stamp-start: "scriptversion="
++# time-stamp-format: "%:y-%02m-%02d.%02H"
++# time-stamp-time-zone: "UTC"
++# time-stamp-end: "; # UTC"
++# End:
+Index: libdessert0.86-0.86.14/snmp/dessertAppParamsTable.c
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertAppParamsTable.c 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,231 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * version : 14170 $ of $
+- *
+- * $Id:$
+- */
+-/** \page MFD helper for dessertAppParamsTable
+- *
+- * \section intro Introduction
+- * Introductory text.
+- *
+- */
+-/*
+- * standard Net-SNMP includes
+- */
+-#include <net-snmp/net-snmp-config.h>
+-#include <net-snmp/net-snmp-includes.h>
+-#include <net-snmp/agent/net-snmp-agent-includes.h>
+-
+-/*
+- * include our parent header
+- */
+-#include "dessertAppParamsTable.h"
+-
+-#include <net-snmp/agent/mib_modules.h>
+-
+-#include "dessertAppParamsTable_interface.h"
+-
+-oid dessertAppParamsTable_oid[] =
+- { DESSERTAPPPARAMSTABLE_OID };
+-int dessertAppParamsTable_oid_size =
+-OID_LENGTH(dessertAppParamsTable_oid);
+-
+-dessertAppParamsTable_registration dessertAppParamsTable_user_context;
+-
+-void initialize_table_dessertAppParamsTable(void);
+-void shutdown_table_dessertAppParamsTable(void);
+-
+-
+-/**
+- * Initializes the dessertAppParamsTable module
+- */
+-void
+-init_dessertAppParamsTable(void)
+-{
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:init_dessertAppParamsTable",
+- "called\n"));
+-
+- /*
+- * TODO:300:o: Perform dessertAppParamsTable one-time module initialization.
+- */
+-
+- /*
+- * here we initialize all the tables we're planning on supporting
+- */
+- if (should_init("dessertAppParamsTable"))
+- initialize_table_dessertAppParamsTable();
+-
+-} /* init_dessertAppParamsTable */
+-
+-/**
+- * Shut-down the dessertAppParamsTable module (agent is exiting)
+- */
+-void
+-shutdown_dessertAppParamsTable(void)
+-{
+- if (should_init("dessertAppParamsTable"))
+- shutdown_table_dessertAppParamsTable();
+-
+-}
+-
+-/**
+- * Initialize the table dessertAppParamsTable
+- * (Define its contents and how it's structured)
+- */
+-void
+-initialize_table_dessertAppParamsTable(void)
+-{
+- dessertAppParamsTable_registration *user_context;
+- u_long flags;
+-
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:initialize_table_dessertAppParamsTable", "called\n"));
+-
+- /*
+- * TODO:301:o: Perform dessertAppParamsTable one-time table initialization.
+- */
+-
+- /*
+- * TODO:302:o: |->Initialize dessertAppParamsTable user context
+- * if you'd like to pass in a pointer to some data for this
+- * table, allocate or set it up here.
+- */
+- /*
+- * a netsnmp_data_list is a simple way to store void pointers. A simple
+- * string token is used to add, find or remove pointers.
+- */
+- user_context =
+- netsnmp_create_data_list("dessertAppParamsTable", NULL, NULL);
+-
+- /*
+- * No support for any flags yet, but in the future you would
+- * set any flags here.
+- */
+- flags = 0;
+-
+- /*
+- * call interface initialization code
+- */
+- _dessertAppParamsTable_initialize_interface(user_context, flags);
+-} /* initialize_table_dessertAppParamsTable */
+-
+-/**
+- * Shutdown the table dessertAppParamsTable
+- */
+-void
+-shutdown_table_dessertAppParamsTable(void)
+-{
+- /*
+- * call interface shutdown code
+- */
+- _dessertAppParamsTable_shutdown_interface
+- (&dessertAppParamsTable_user_context);
+-}
+-
+-/**
+- * extra context initialization (eg default values)
+- *
+- * @param rowreq_ctx : row request context
+- * @param user_init_ctx : void pointer for user (parameter to rowreq_ctx_allocate)
+- *
+- * @retval MFD_SUCCESS : no errors
+- * @retval MFD_ERROR : error (context allocate will fail)
+- */
+-int
+-dessertAppParamsTable_rowreq_ctx_init(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx, void *user_init_ctx)
+-{
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:dessertAppParamsTable_rowreq_ctx_init", "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:210:o: |-> Perform extra dessertAppParamsTable rowreq initialization. (eg DEFVALS)
+- */
+-
+- return MFD_SUCCESS;
+-} /* dessertAppParamsTable_rowreq_ctx_init */
+-
+-/**
+- * extra context cleanup
+- *
+- */
+-void
+-dessertAppParamsTable_rowreq_ctx_cleanup(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx)
+-{
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:dessertAppParamsTable_rowreq_ctx_cleanup", "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:211:o: |-> Perform extra dessertAppParamsTable rowreq cleanup.
+- */
+-} /* dessertAppParamsTable_rowreq_ctx_cleanup */
+-
+-/**
+- * pre-request callback
+- *
+- *
+- * @retval MFD_SUCCESS : success.
+- * @retval MFD_ERROR : other error
+- */
+-int
+-dessertAppParamsTable_pre_request(dessertAppParamsTable_registration *
+- user_context)
+-{
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:dessertAppParamsTable_pre_request", "called\n"));
+-
+- /*
+- * TODO:510:o: Perform dessertAppParamsTable pre-request actions.
+- */
+-
+- return MFD_SUCCESS;
+-} /* dessertAppParamsTable_pre_request */
+-
+-/**
+- * post-request callback
+- *
+- * Note:
+- * New rows have been inserted into the container, and
+- * deleted rows have been removed from the container and
+- * released.
+- *
+- * @param user_context
+- * @param rc : MFD_SUCCESS if all requests succeeded
+- *
+- * @retval MFD_SUCCESS : success.
+- * @retval MFD_ERROR : other error (ignored)
+- */
+-int
+-dessertAppParamsTable_post_request(dessertAppParamsTable_registration *
+- user_context, int rc)
+-{
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:dessertAppParamsTable_post_request", "called\n"));
+-
+- /*
+- * TODO:511:o: Perform dessertAppParamsTable post-request actions.
+- */
+-
+- /*
+- * check to set if any rows were changed.
+- */
+- if (dessertAppParamsTable_dirty_get()) {
+- /*
+- * check if request was successful. If so, this would be
+- * a good place to save data to its persistent store.
+- */
+- if (MFD_SUCCESS == rc) {
+- /*
+- * save changed rows, if you haven't already
+- */
+- }
+-
+- dessertAppParamsTable_dirty_set(0); /* clear table dirty flag */
+- }
+-
+- return MFD_SUCCESS;
+-} /* dessertAppParamsTable_post_request */
+-
+-
+-/** @{ */
+Index: libdessert0.86-0.86.14/snmp/dessertAppParamsTable.h
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertAppParamsTable.h 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,252 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * version : 14170 $ of $
+- *
+- * $Id:$
+- */
+-#ifndef DESSERTAPPPARAMSTABLE_H
+-#define DESSERTAPPPARAMSTABLE_H
+-
+-#ifdef __cplusplus
+-extern "C" {
+-#endif
+-
+-
+-/** @addtogroup misc misc: Miscellaneous routines
+- *
+- * @{
+- */
+-#include <net-snmp/library/asn1.h>
+-
+- /*
+- * other required module components
+- */
+- /* *INDENT-OFF* */
+-config_add_mib(DESSERT-MIB)
+-config_require(DESSERT-MIB/dessertAppParamsTable/dessertAppParamsTable_interface)
+-config_require(DESSERT-MIB/dessertAppParamsTable/dessertAppParamsTable_data_access)
+-config_require(DESSERT-MIB/dessertAppParamsTable/dessertAppParamsTable_data_get)
+-config_require(DESSERT-MIB/dessertAppParamsTable/dessertAppParamsTable_data_set)
+- /* *INDENT-ON* */
+-
+- /*
+- * OID and column number definitions for dessertAppParamsTable
+- */
+-#include "dessertAppParamsTable_oids.h"
+-
+- /*
+- * enum definions
+- */
+-#include "dessertAppParamsTable_enums.h"
+-
+- /*
+- *********************************************************************
+- * function declarations
+- */
+- void init_dessertAppParamsTable(void);
+- void shutdown_dessertAppParamsTable(void);
+-
+- /*
+- *********************************************************************
+- * Table declarations
+- */
+-/**********************************************************************
+- **********************************************************************
+- ***
+- *** Table dessertAppParamsTable
+- ***
+- **********************************************************************
+- **********************************************************************/
+- /*
+- * DESSERT-MIB::dessertAppParamsTable is subid 11 of dessertObjects.
+- * Its status is Current.
+- * OID: .1.3.6.1.4.1.18898.0.19.10.1.1.11, length: 13
+- */
+- /*
+- *********************************************************************
+- * When you register your mib, you get to provide a generic
+- * pointer that will be passed back to you for most of the
+- * functions calls.
+- *
+- * TODO:100:r: Review all context structures
+- */
+- /*
+- * TODO:101:o: |-> Review dessertAppParamsTable registration context.
+- */
+- typedef netsnmp_data_list dessertAppParamsTable_registration;
+-
+-/**********************************************************************/
+- /*
+- * TODO:110:r: |-> Review dessertAppParamsTable data context structure.
+- * This structure is used to represent the data for dessertAppParamsTable.
+- */
+- /*
+- * This structure contains storage for all the columns defined in the
+- * dessertAppParamsTable.
+- */
+- typedef struct dessertAppParamsTable_data_s {
+-
+- /*
+- * appParamsName(2)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
+- */
+- char appParamsName[255];
+- size_t appParamsName_len; /* # of char elements, not bytes */
+-
+- /*
+- * appParamsDesc(3)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
+- */
+- char appParamsDesc[255];
+- size_t appParamsDesc_len; /* # of char elements, not bytes */
+-
+- /*
+- * appParamsValueType(4)/DessertAppValueType/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h
+- */
+- u_long appParamsValueType;
+-
+- /*
+- * appParamsTruthValue(5)/TruthValue/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+- */
+- u_long appParamsTruthValue;
+-
+- /*
+- * appParamsInteger32(6)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/r/d/h
+- */
+- long appParamsInteger32;
+-
+- /*
+- * appParamsUnsigned32(7)/UNSIGNED32/ASN_UNSIGNED/u_long(u_long)//l/A/W/e/r/d/h
+- */
+- u_long appParamsUnsigned32;
+-
+- /*
+- * appParamsOctetString(9)/DessertApplicationOctetString/ASN_OCTET_STR/char(char)//L/A/W/e/R/d/H
+- */
+- char appParamsOctetString[1024];
+- size_t appParamsOctetString_len; /* # of char elements, not bytes */
+-
+- } dessertAppParamsTable_data;
+-
+-
+- /*
+- *********************************************************************
+- * TODO:115:o: |-> Review dessertAppParamsTable undo context.
+- * We're just going to use the same data structure for our
+- * undo_context. If you want to do something more efficent,
+- * define your typedef here.
+- */
+- typedef dessertAppParamsTable_data dessertAppParamsTable_undo_data;
+-
+- /*
+- * TODO:120:r: |-> Review dessertAppParamsTable mib index.
+- * This structure is used to represent the index for dessertAppParamsTable.
+- */
+- typedef struct dessertAppParamsTable_mib_index_s {
+-
+- /*
+- * appParamsIndex(1)/DessertAppParamsIndex/ASN_INTEGER/long(long)//l/a/w/e/R/d/H
+- */
+- long appParamsIndex;
+-
+-
+- } dessertAppParamsTable_mib_index;
+-
+- /*
+- * TODO:121:r: | |-> Review dessertAppParamsTable max index length.
+- * If you KNOW that your indexes will never exceed a certain
+- * length, update this macro to that length.
+- */
+-#define MAX_dessertAppParamsTable_IDX_LEN 1
+-
+-
+- /*
+- *********************************************************************
+- * TODO:130:o: |-> Review dessertAppParamsTable Row request (rowreq) context.
+- * When your functions are called, you will be passed a
+- * dessertAppParamsTable_rowreq_ctx pointer.
+- */
+- typedef struct dessertAppParamsTable_rowreq_ctx_s {
+-
+- /** this must be first for container compare to work */
+- netsnmp_index oid_idx;
+- oid oid_tmp[MAX_dessertAppParamsTable_IDX_LEN];
+-
+- dessertAppParamsTable_mib_index tbl_idx;
+-
+- dessertAppParamsTable_data data;
+- unsigned int column_exists_flags; /* flags for existence */
+- dessertAppParamsTable_undo_data *undo;
+- unsigned int column_set_flags; /* flags for set columns */
+-
+-
+- /*
+- * flags per row. Currently, the first (lower) 8 bits are reserved
+- * for the user. See mfd.h for other flags.
+- */
+- u_int rowreq_flags;
+-
+- /*
+- * TODO:131:o: | |-> Add useful data to dessertAppParamsTable rowreq context.
+- */
+-
+- /*
+- * storage for future expansion
+- */
+- netsnmp_data_list *dessertAppParamsTable_data_list;
+-
+- } dessertAppParamsTable_rowreq_ctx;
+-
+- typedef struct dessertAppParamsTable_ref_rowreq_ctx_s {
+- dessertAppParamsTable_rowreq_ctx *rowreq_ctx;
+- } dessertAppParamsTable_ref_rowreq_ctx;
+-
+- /*
+- *********************************************************************
+- * function prototypes
+- */
+- int
+- dessertAppParamsTable_pre_request
+- (dessertAppParamsTable_registration * user_context);
+- int
+- dessertAppParamsTable_post_request
+- (dessertAppParamsTable_registration * user_context, int rc);
+-
+- int
+- dessertAppParamsTable_rowreq_ctx_init
+- (dessertAppParamsTable_rowreq_ctx * rowreq_ctx,
+- void *user_init_ctx);
+- void
+- dessertAppParamsTable_rowreq_ctx_cleanup
+- (dessertAppParamsTable_rowreq_ctx * rowreq_ctx);
+-
+- int
+- dessertAppParamsTable_commit(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx);
+-
+- dessertAppParamsTable_rowreq_ctx
+- *dessertAppParamsTable_row_find_by_mib_index
+- (dessertAppParamsTable_mib_index * mib_idx);
+-
+- extern oid dessertAppParamsTable_oid[];
+- extern int dessertAppParamsTable_oid_size;
+-
+-
+-#include "dessertAppParamsTable_interface.h"
+-#include "dessertAppParamsTable_data_access.h"
+-#include "dessertAppParamsTable_data_get.h"
+-#include "dessertAppParamsTable_data_set.h"
+-
+- /*
+- * DUMMY markers, ignore
+- *
+- * TODO:099:x: *************************************************************
+- * TODO:199:x: *************************************************************
+- * TODO:299:x: *************************************************************
+- * TODO:399:x: *************************************************************
+- * TODO:499:x: *************************************************************
+- */
+-
+-#ifdef __cplusplus
+-}
+-#endif
+-#endif /* DESSERTAPPPARAMSTABLE_H */
+-/** @} */
+Index: libdessert0.86-0.86.14/snmp/dessertAppParamsTable_data_access.c
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertAppParamsTable_data_access.c 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,352 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * version : 14170 $ of $
+- *
+- * $Id:$
+- */
+-/*
+- * standard Net-SNMP includes
+- */
+-#include <net-snmp/net-snmp-config.h>
+-#include <net-snmp/net-snmp-includes.h>
+-#include <net-snmp/agent/net-snmp-agent-includes.h>
+-
+-/*
+- * include our parent header
+- */
+-#include "dessertAppParamsTable.h"
+-#include "dessertAppParamsTable_data_access.h"
+-#include "../dessert.h"
+-#include "../dessert_internal.h"
+-
+-
+-/** @ingroup interface
+- * @addtogroup data_access data_access: Routines to access data
+- *
+- * These routines are used to locate the data used to satisfy
+- * requests.
+- *
+- * @{
+- */
+-/**********************************************************************
+- **********************************************************************
+- ***
+- *** Table dessertAppParamsTable
+- ***
+- **********************************************************************
+- **********************************************************************/
+-/*
+- * DESSERT-MIB::dessertAppParamsTable is subid 11 of dessertObjects.
+- * Its status is Current.
+- * OID: .1.3.6.1.4.1.18898.0.19.10.1.1.11, length: 13
+- */
+-
+-/**
+- * initialization for dessertAppParamsTable data access
+- *
+- * This function is called during startup to allow you to
+- * allocate any resources you need for the data table.
+- *
+- * @param dessertAppParamsTable_reg
+- * Pointer to dessertAppParamsTable_registration
+- *
+- * @retval MFD_SUCCESS : success.
+- * @retval MFD_ERROR : unrecoverable error.
+- */
+-int
+-dessertAppParamsTable_init_data(dessertAppParamsTable_registration *
+- dessertAppParamsTable_reg)
+-{
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:dessertAppParamsTable_init_data", "called\n"));
+-
+- /*
+- * TODO:303:o: Initialize dessertAppParamsTable data.
+- */
+-
+-
+- return MFD_SUCCESS;
+-} /* dessertAppParamsTable_init_data */
+-
+-/**
+- * container overview
+- *
+- */
+-
+-/**
+- * container initialization
+- *
+- * @param container_ptr_ptr A pointer to a container pointer. If you
+- * create a custom container, use this parameter to return it
+- * to the MFD helper. If set to NULL, the MFD helper will
+- * allocate a container for you.
+- *
+- * This function is called at startup to allow you to customize certain
+- * aspects of the access method. For the most part, it is for advanced
+- * users. The default code should suffice for most cases. If no custom
+- * container is allocated, the MFD code will create one for your.
+- *
+- * @remark
+- * This would also be a good place to do any initialization needed
+- * for you data source. For example, opening a connection to another
+- * process that will supply the data, opening a database, etc.
+- */
+-void
+-dessertAppParamsTable_container_init(netsnmp_container **
+- container_ptr_ptr, netsnmp_cache * cache)
+-{
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:dessertAppParamsTable_container_init", "called\n"));
+-
+- if (NULL == container_ptr_ptr) {
+- snmp_log(LOG_ERR,
+- "bad container param to dessertAppParamsTable_container_init\n");
+- return;
+- }
+-
+- /*
+- * For advanced users, you can use a custom container. If you
+- * do not create one, one will be created for you.
+- */
+- *container_ptr_ptr = NULL;
+- if (NULL == cache) {
+- snmp_log(LOG_ERR,
+- "bad cache param to dessertAppParamsTable_container_init\n");
+- return;
+- }
+-
+- /*
+- * TODO:345:A: Set up dessertAppStatsTable cache properties.
+- *
+- * Also for advanced users, you can set parameters for the
+- * cache. Do not change the magic pointer, as it is used
+- * by the MFD helper. To completely disable caching, set
+- * cache->enabled to 0.
+- */
+- cache->timeout = DESSERTAPPPARAMSTABLE_CACHE_TIMEOUT; /* seconds */
+-} /* dessertAppParamsTable_container_init */
+-
+-/**
+- * container shutdown
+- *
+- * @param container_ptr A pointer to the container.
+- *
+- * This function is called at shutdown to allow you to customize certain
+- * aspects of the access method. For the most part, it is for advanced
+- * users. The default code should suffice for most cases.
+- *
+- * This function is called before dessertAppParamsTable_container_free().
+- *
+- * @remark
+- * This would also be a good place to do any cleanup needed
+- * for you data source. For example, closing a connection to another
+- * process that supplied the data, closing a database, etc.
+- */
+-void
+-dessertAppParamsTable_container_shutdown(netsnmp_container * container_ptr)
+-{
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:dessertAppParamsTable_container_shutdown", "called\n"));
+-
+- if (NULL == container_ptr) {
+- snmp_log(LOG_ERR,
+- "bad params to dessertAppParamsTable_container_shutdown\n");
+- return;
+- }
+-
+-} /* dessertAppParamsTable_container_shutdown */
+-
+-/**
+- * load initial data
+- *
+- * TODO:350:M: Implement dessertAppParamsTable data load
+- *
+- * @param container container to which items should be inserted
+- *
+- * @retval MFD_SUCCESS : success.
+- * @retval MFD_RESOURCE_UNAVAILABLE : Can't access data source
+- * @retval MFD_ERROR : other error.
+- *
+- * This function is called to load the index(es) (and data, optionally)
+- * for the every row in the data set.
+- *
+- * @remark
+- * While loading the data, the only important thing is the indexes.
+- * If access to your data is cheap/fast (e.g. you have a pointer to a
+- * structure in memory), it would make sense to update the data here.
+- * If, however, the accessing the data invovles more work (e.g. parsing
+- * some other existing data, or peforming calculations to derive the data),
+- * then you can limit yourself to setting the indexes and saving any
+- * information you will need later. Then use the saved information in
+- * dessertAppParamsTable_row_prep() for populating data.
+- *
+- * @note
+- * If you need consistency between rows (like you want statistics
+- * for each row to be from the same time frame), you should set all
+- * data here.
+- *
+- */
+-int
+-dessertAppParamsTable_container_load(netsnmp_container * container)
+-{
+- dessertAppParamsTable_rowreq_ctx *rowreq_ctx;
+- size_t count = 0;
+-
+- dessert_agentx_appparams_t *appparams_list = NULL;
+- dessert_agentx_appparams_t *appparam;
+-
+- /*
+- * temporary storage for index values
+- */
+- long appParamsIndex;
+-
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:dessertAppParamsTable_container_load", "called\n"));
+- dessert_debug("dessertAppParamsTable_container_load called");
+-
+- /* harvest the appparams from the getter callbacks registered via *dessert_agentx_appparams_add* */
+- if (_dessert_agentx_appparams_harvest_callbacks(&appparams_list)
+- == DESSERT_ERR) {
+- return MFD_RESOURCE_UNAVAILABLE;
+- }
+-
+- /*
+- * TODO:351:M: |-> Load/update data in the dessertAppParamsTable container.
+- * loop over your dessertAppParamsTable data, allocate a rowreq context,
+- * set the index(es) [and data, optionally] and insert into
+- * the container.
+- */
+- DL_FOREACH(appparams_list, appparam) {
+-
+- appParamsIndex = appparam->index;
+-
+- /*
+- * TODO:352:M: | |-> set indexes in new dessertAppParamsTable rowreq context.
+- * data context will be set from the param (unless NULL,
+- * in which case a new data context will be allocated)
+- */
+- rowreq_ctx = dessertAppParamsTable_allocate_rowreq_ctx();
+- if (NULL == rowreq_ctx) {
+- snmp_log(LOG_ERR, "memory allocation failed\n");
+- return MFD_RESOURCE_UNAVAILABLE;
+- }
+- if (MFD_SUCCESS !=
+- dessertAppParamsTable_indexes_set(rowreq_ctx,
+- appParamsIndex)) {
+- snmp_log(LOG_ERR,
+- "error setting index while loading "
+- "dessertAppParamsTable data.\n");
+- dessertAppParamsTable_release_rowreq_ctx(rowreq_ctx);
+- continue;
+- }
+-
+- /* clear all column flags */
+- rowreq_ctx->column_exists_flags = 0;
+-
+- /* these columns are always present*/
+- rowreq_ctx->column_exists_flags |= COLUMN_APPPARAMSNAME_FLAG
+- | COLUMN_APPPARAMSDESC_FLAG | COLUMN_APPPARAMSVALUETYPE_FLAG;
+-
+- rowreq_ctx->data.appParamsName_len = strlen(appparam->name);
+- strcpy(rowreq_ctx->data.appParamsName, appparam->name);
+-
+- rowreq_ctx->data.appParamsDesc_len = strlen(appparam->desc);
+- strcpy(rowreq_ctx->data.appParamsDesc, appparam->desc);
+-
+- appParamsValueType_map(&(rowreq_ctx->data.appParamsValueType), appparam->value_type);
+-
+- /* which of the 'value'-columns is actually present? */
+- switch (appparam->value_type) {
+-
+- case DESSERT_APPPARAMS_VALUETYPE_BOOL:
+- rowreq_ctx->column_exists_flags |= COLUMN_APPPARAMSTRUTHVALUE_FLAG;
+- appParamsTruthValue_map(&(rowreq_ctx->data.appParamsTruthValue) , appparam->bool);
+-
+- break;
+-
+- case DESSERT_APPPARAMS_VALUETYPE_INT32:
+- rowreq_ctx->column_exists_flags |= COLUMN_APPPARAMSINTEGER32_FLAG;
+- rowreq_ctx->data.appParamsInteger32 = appparam->int32;
+-
+- break;
+-
+- case DESSERT_APPPARAMS_VALUETYPE_UINT32:
+- rowreq_ctx->column_exists_flags |= COLUMN_APPPARAMSUNSIGNED32_FLAG;
+- rowreq_ctx->data.appParamsUnsigned32 = appparam->uint32;
+-
+- break;
+-
+- case DESSERT_APPPARAMS_VALUETYPE_OCTETSTRING:
+- rowreq_ctx->column_exists_flags |= COLUMN_APPPARAMSOCTETSTRING_FLAG;
+- rowreq_ctx->data.appParamsOctetString_len = appparam->octetstring_len;
+- memcpy(&(rowreq_ctx->data.appParamsOctetString), appparam->octetstring, appparam->octetstring_len);
+-
+- break;
+-
+- default:
+- dessert_err("appparam->value_type not valid!");
+- }
+-
+- /*
+- * insert into table container
+- */
+- CONTAINER_INSERT(container, rowreq_ctx);
+- }
+-
+- _dessert_agentx_appparams_free_list(&appparams_list);
+-
+- DEBUGMSGT(("verbose:dessertAppParamsTable:dessertAppParamsTable_container_load", "inserted %d records\n", count));
+-
+- return MFD_SUCCESS;
+-} /* dessertAppParamsTable_container_load */
+-
+-/**
+- * container clean up
+- *
+- * @param container container with all current items
+- *
+- * This optional callback is called prior to all
+- * item's being removed from the container. If you
+- * need to do any processing before that, do it here.
+- *
+- * @note
+- * The MFD helper will take care of releasing all the row contexts.
+- *
+- */
+-void
+-dessertAppParamsTable_container_free(netsnmp_container * container)
+-{
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:dessertAppParamsTable_container_free", "called\n"));
+-
+- /*
+- * TODO:380:M: Free dessertAppParamsTable container data.
+- */
+-} /* dessertAppParamsTable_container_free */
+-
+-/**
+- * prepare row for processing.
+- *
+- * When the agent has located the row for a request, this function is
+- * called to prepare the row for processing. If you fully populated
+- * the data context during the index setup phase, you may not need to
+- * do anything.
+- *
+- * @param rowreq_ctx pointer to a context.
+- *
+- * @retval MFD_SUCCESS : success.
+- * @retval MFD_ERROR : other error.
+- */
+-int
+-dessertAppParamsTable_row_prep(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx)
+-{
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:dessertAppParamsTable_row_prep", "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:390:o: Prepare row for request.
+- * If populating row data was delayed, this is the place to
+- * fill in the row for this request.
+- */
+-
+- return MFD_SUCCESS;
+-} /* dessertAppParamsTable_row_prep */
+-
+-/** @} */
+Index: libdessert0.86-0.86.14/snmp/dessertAppParamsTable_data_access.h
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertAppParamsTable_data_access.h 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,93 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * version : 14170 $ of $
+- *
+- * $Id:$
+- */
+-#ifndef DESSERTAPPPARAMSTABLE_DATA_ACCESS_H
+-#define DESSERTAPPPARAMSTABLE_DATA_ACCESS_H
+-
+-#include "../dessert_internal.h"
+-
+-#ifdef __cplusplus
+-extern "C" {
+-#endif
+-
+-
+- /*
+- *********************************************************************
+- * function declarations
+- */
+-
+- /*
+- *********************************************************************
+- * Table declarations
+- */
+-/**********************************************************************
+- **********************************************************************
+- ***
+- *** Table dessertAppParamsTable
+- ***
+- **********************************************************************
+- **********************************************************************/
+- /*
+- * DESSERT-MIB::dessertAppParamsTable is subid 11 of dessertObjects.
+- * Its status is Current.
+- * OID: .1.3.6.1.4.1.18898.0.19.10.1.1.11, length: 13
+- */
+-
+-
+- int
+- dessertAppParamsTable_init_data(dessertAppParamsTable_registration
+- * dessertAppParamsTable_reg);
+-
+-
+- /*
+- * TODO:180:o: Review dessertAppParamsTable cache timeout.
+- * The number of seconds before the cache times out
+- */
+-#define DESSERTAPPPARAMSTABLE_CACHE_TIMEOUT DESSERT_AGENTX_APPPARAMTABLE_CACHE_TIMEOUT
+-
+- void dessertAppParamsTable_container_init(netsnmp_container
+- **
+- container_ptr_ptr,
+- netsnmp_cache *
+- cache);
+- void
+- dessertAppParamsTable_container_shutdown(netsnmp_container *
+- container_ptr);
+-
+- int dessertAppParamsTable_container_load(netsnmp_container
+- * container);
+- void dessertAppParamsTable_container_free(netsnmp_container
+- * container);
+-
+- int dessertAppParamsTable_cache_load(netsnmp_container *
+- container);
+- void dessertAppParamsTable_cache_free(netsnmp_container *
+- container);
+-
+- /*
+- ***************************************************
+- *** START EXAMPLE CODE ***
+- ***---------------------------------------------***/
+- /*
+- *********************************************************************
+- * Since we have no idea how you really access your data, we'll go with
+- * a worst case example: a flat text file.
+- */
+-#define MAX_LINE_SIZE 256
+- /*
+- ***---------------------------------------------***
+- *** END EXAMPLE CODE ***
+- ***************************************************/
+- int
+- dessertAppParamsTable_row_prep(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx);
+-
+-
+-
+-#ifdef __cplusplus
+-}
+-#endif
+-#endif /* DESSERTAPPPARAMSTABLE_DATA_ACCESS_H */
+Index: libdessert0.86-0.86.14/snmp/dessertAppParamsTable_data_get.c
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertAppParamsTable_data_get.c 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,731 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * version : 12088 $ of $
+- *
+- * $Id:$
+- */
+-/*
+- * standard Net-SNMP includes
+- */
+-#include <net-snmp/net-snmp-config.h>
+-#include <net-snmp/net-snmp-includes.h>
+-#include <net-snmp/agent/net-snmp-agent-includes.h>
+-
+-/*
+- * include our parent header
+- */
+-#include "dessertAppParamsTable.h"
+-
+-
+-/** @defgroup data_get data_get: Routines to get data
+- *
+- * TODO:230:M: Implement dessertAppParamsTable get routines.
+- * TODO:240:M: Implement dessertAppParamsTable mapping routines (if any).
+- *
+- * These routine are used to get the value for individual objects. The
+- * row context is passed, along with a pointer to the memory where the
+- * value should be copied.
+- *
+- * @{
+- */
+-/**********************************************************************
+- **********************************************************************
+- ***
+- *** Table dessertAppParamsTable
+- ***
+- **********************************************************************
+- **********************************************************************/
+-/*
+- * DESSERT-MIB::dessertAppParamsTable is subid 11 of dessertObjects.
+- * Its status is Current.
+- * OID: .1.3.6.1.4.1.18898.0.19.10.1.1.11, length: 13
+- */
+-
+-/*
+- * ---------------------------------------------------------------------
+- * * TODO:200:r: Implement dessertAppParamsTable data context functions.
+- */
+-
+-
+-/**
+- * set mib index(es)
+- *
+- * @param tbl_idx mib index structure
+- * @param appParamsIndex_val
+- *
+- * @retval MFD_SUCCESS : success.
+- * @retval MFD_ERROR : other error.
+- *
+- * @remark
+- * This convenience function is useful for setting all the MIB index
+- * components with a single function call. It is assume that the C values
+- * have already been mapped from their native/rawformat to the MIB format.
+- */
+-int
+-dessertAppParamsTable_indexes_set_tbl_idx(dessertAppParamsTable_mib_index *
+- tbl_idx, long appParamsIndex_val)
+-{
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:dessertAppParamsTable_indexes_set_tbl_idx", "called\n"));
+-
+- /*
+- * appParamsIndex(1)/DessertAppParamsIndex/ASN_INTEGER/long(long)//l/a/w/e/R/d/H
+- */
+- tbl_idx->appParamsIndex = appParamsIndex_val;
+-
+-
+- return MFD_SUCCESS;
+-} /* dessertAppParamsTable_indexes_set_tbl_idx */
+-
+-/**
+- * @internal
+- * set row context indexes
+- *
+- * @param reqreq_ctx the row context that needs updated indexes
+- *
+- * @retval MFD_SUCCESS : success.
+- * @retval MFD_ERROR : other error.
+- *
+- * @remark
+- * This function sets the mib indexs, then updates the oid indexs
+- * from the mib index.
+- */
+-int
+-dessertAppParamsTable_indexes_set(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx, long appParamsIndex_val)
+-{
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:dessertAppParamsTable_indexes_set", "called\n"));
+-
+- if (MFD_SUCCESS !=
+- dessertAppParamsTable_indexes_set_tbl_idx(&rowreq_ctx->tbl_idx,
+- appParamsIndex_val))
+- return MFD_ERROR;
+-
+- /*
+- * convert mib index to oid index
+- */
+- rowreq_ctx->oid_idx.len = sizeof(rowreq_ctx->oid_tmp) / sizeof(oid);
+- if (0 != dessertAppParamsTable_index_to_oid(&rowreq_ctx->oid_idx,
+- &rowreq_ctx->tbl_idx)) {
+- return MFD_ERROR;
+- }
+-
+- return MFD_SUCCESS;
+-} /* dessertAppParamsTable_indexes_set */
+-
+-
+-/*---------------------------------------------------------------------
+- * DESSERT-MIB::dessertAppParamsEntry.appParamsName
+- * appParamsName is subid 2 of dessertAppParamsEntry.
+- * Its status is Current, and its access level is ReadOnly.
+- * OID: .1.3.6.1.4.1.18898.0.19.10.1.1.11.1.2
+- * Description:
+-The name of the parameter.
+- *
+- * Attributes:
+- * accessible 1 isscalar 0 enums 0 hasdefval 0
+- * readable 1 iscolumn 1 ranges 1 hashint 1
+- * settable 0
+- * hint: 255a
+- *
+- * Ranges: 0 - 255;
+- *
+- * Its syntax is DisplayString (based on perltype OCTETSTR)
+- * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+- * This data type requires a length. (Max 255)
+- */
+-/**
+- * Extract the current value of the appParamsName data.
+- *
+- * Set a value using the data context for the row.
+- *
+- * @param rowreq_ctx
+- * Pointer to the row request context.
+- * @param appParamsName_val_ptr_ptr
+- * Pointer to storage for a char variable
+- * @param appParamsName_val_ptr_len_ptr
+- * Pointer to a size_t. On entry, it will contain the size (in bytes)
+- * pointed to by appParamsName.
+- * On exit, this value should contain the data size (in bytes).
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_SKIP : skip this node (no value for now)
+- * @retval MFD_ERROR : Any other error
+-*
+- * @note If you need more than (*appParamsName_val_ptr_len_ptr) bytes of memory,
+- * allocate it using malloc() and update appParamsName_val_ptr_ptr.
+- * <b>DO NOT</b> free the previous pointer.
+- * The MFD helper will release the memory you allocate.
+- *
+- * @remark If you call this function yourself, you are responsible
+- * for checking if the pointer changed, and freeing any
+- * previously allocated memory. (Not necessary if you pass
+- * in a pointer to static memory, obviously.)
+- */
+-int
+-appParamsName_get(dessertAppParamsTable_rowreq_ctx * rowreq_ctx,
+- char **appParamsName_val_ptr_ptr,
+- size_t *appParamsName_val_ptr_len_ptr)
+-{
+- /** we should have a non-NULL pointer and enough storage */
+- netsnmp_assert((NULL != appParamsName_val_ptr_ptr)
+- && (NULL != *appParamsName_val_ptr_ptr));
+- netsnmp_assert(NULL != appParamsName_val_ptr_len_ptr);
+-
+-
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsName_get",
+- "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:231:o: |-> Extract the current value of the appParamsName data.
+- * copy (* appParamsName_val_ptr_ptr ) data and (* appParamsName_val_ptr_len_ptr ) from rowreq_ctx->data
+- */
+- /*
+- * make sure there is enough space for appParamsName data
+- */
+- if ((NULL == (*appParamsName_val_ptr_ptr)) ||
+- ((*appParamsName_val_ptr_len_ptr) <
+- (rowreq_ctx->data.appParamsName_len *
+- sizeof(rowreq_ctx->data.appParamsName[0])))) {
+- /*
+- * allocate space for appParamsName data
+- */
+- (*appParamsName_val_ptr_ptr) =
+- malloc(rowreq_ctx->data.appParamsName_len *
+- sizeof(rowreq_ctx->data.appParamsName[0]));
+- if (NULL == (*appParamsName_val_ptr_ptr)) {
+- snmp_log(LOG_ERR, "could not allocate memory\n");
+- return MFD_ERROR;
+- }
+- }
+- (*appParamsName_val_ptr_len_ptr) =
+- rowreq_ctx->data.appParamsName_len *
+- sizeof(rowreq_ctx->data.appParamsName[0]);
+- memcpy((*appParamsName_val_ptr_ptr), rowreq_ctx->data.appParamsName,
+- rowreq_ctx->data.appParamsName_len *
+- sizeof(rowreq_ctx->data.appParamsName[0]));
+-
+- return MFD_SUCCESS;
+-} /* appParamsName_get */
+-
+-/*---------------------------------------------------------------------
+- * DESSERT-MIB::dessertAppParamsEntry.appParamsDesc
+- * appParamsDesc is subid 3 of dessertAppParamsEntry.
+- * Its status is Current, and its access level is ReadOnly.
+- * OID: .1.3.6.1.4.1.18898.0.19.10.1.1.11.1.3
+- * Description:
+-A short description of the parameter
+- *
+- * Attributes:
+- * accessible 1 isscalar 0 enums 0 hasdefval 0
+- * readable 1 iscolumn 1 ranges 1 hashint 1
+- * settable 0
+- * hint: 255a
+- *
+- * Ranges: 0 - 255;
+- *
+- * Its syntax is DisplayString (based on perltype OCTETSTR)
+- * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+- * This data type requires a length. (Max 255)
+- */
+-/**
+- * Extract the current value of the appParamsDesc data.
+- *
+- * Set a value using the data context for the row.
+- *
+- * @param rowreq_ctx
+- * Pointer to the row request context.
+- * @param appParamsDesc_val_ptr_ptr
+- * Pointer to storage for a char variable
+- * @param appParamsDesc_val_ptr_len_ptr
+- * Pointer to a size_t. On entry, it will contain the size (in bytes)
+- * pointed to by appParamsDesc.
+- * On exit, this value should contain the data size (in bytes).
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_SKIP : skip this node (no value for now)
+- * @retval MFD_ERROR : Any other error
+-*
+- * @note If you need more than (*appParamsDesc_val_ptr_len_ptr) bytes of memory,
+- * allocate it using malloc() and update appParamsDesc_val_ptr_ptr.
+- * <b>DO NOT</b> free the previous pointer.
+- * The MFD helper will release the memory you allocate.
+- *
+- * @remark If you call this function yourself, you are responsible
+- * for checking if the pointer changed, and freeing any
+- * previously allocated memory. (Not necessary if you pass
+- * in a pointer to static memory, obviously.)
+- */
+-int
+-appParamsDesc_get(dessertAppParamsTable_rowreq_ctx * rowreq_ctx,
+- char **appParamsDesc_val_ptr_ptr,
+- size_t *appParamsDesc_val_ptr_len_ptr)
+-{
+- /** we should have a non-NULL pointer and enough storage */
+- netsnmp_assert((NULL != appParamsDesc_val_ptr_ptr)
+- && (NULL != *appParamsDesc_val_ptr_ptr));
+- netsnmp_assert(NULL != appParamsDesc_val_ptr_len_ptr);
+-
+-
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsDesc_get",
+- "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:231:o: |-> Extract the current value of the appParamsDesc data.
+- * copy (* appParamsDesc_val_ptr_ptr ) data and (* appParamsDesc_val_ptr_len_ptr ) from rowreq_ctx->data
+- */
+- /*
+- * make sure there is enough space for appParamsDesc data
+- */
+- if ((NULL == (*appParamsDesc_val_ptr_ptr)) ||
+- ((*appParamsDesc_val_ptr_len_ptr) <
+- (rowreq_ctx->data.appParamsDesc_len *
+- sizeof(rowreq_ctx->data.appParamsDesc[0])))) {
+- /*
+- * allocate space for appParamsDesc data
+- */
+- (*appParamsDesc_val_ptr_ptr) =
+- malloc(rowreq_ctx->data.appParamsDesc_len *
+- sizeof(rowreq_ctx->data.appParamsDesc[0]));
+- if (NULL == (*appParamsDesc_val_ptr_ptr)) {
+- snmp_log(LOG_ERR, "could not allocate memory\n");
+- return MFD_ERROR;
+- }
+- }
+- (*appParamsDesc_val_ptr_len_ptr) =
+- rowreq_ctx->data.appParamsDesc_len *
+- sizeof(rowreq_ctx->data.appParamsDesc[0]);
+- memcpy((*appParamsDesc_val_ptr_ptr), rowreq_ctx->data.appParamsDesc,
+- rowreq_ctx->data.appParamsDesc_len *
+- sizeof(rowreq_ctx->data.appParamsDesc[0]));
+-
+- return MFD_SUCCESS;
+-} /* appParamsDesc_get */
+-
+-/*---------------------------------------------------------------------
+- * DESSERT-MIB::dessertAppParamsEntry.appParamsValueType
+- * appParamsValueType is subid 4 of dessertAppParamsEntry.
+- * Its status is Current, and its access level is ReadOnly.
+- * OID: .1.3.6.1.4.1.18898.0.19.10.1.1.11.1.4
+- * Description:
+-Indicates which of the columns (appParamsTruthValue,
+- appParamsInterger32, appParamsUInteger32, appParamsOctetString) in the
+- dessertAppParamsTable is actually valid.
+- *
+- * Attributes:
+- * accessible 1 isscalar 0 enums 1 hasdefval 0
+- * readable 1 iscolumn 1 ranges 0 hashint 0
+- * settable 0
+- *
+- * Enum range: 3/8. Values: bool(0), int32(1), uint32(2), counter64(3), octetstring(4)
+- *
+- * Its syntax is DessertAppValueType (based on perltype INTEGER)
+- * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+- */
+-/**
+- * map a value from its original native format to the MIB format.
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_ERROR : Any other error
+- *
+- * @note parameters follow the memset convention (dest, src).
+- *
+- * @note generation and use of this function can be turned off by re-running
+- * mib2c after adding the following line to the file
+- * defaults/node-appParamsValueType.m2d :
+- * @eval $m2c_node_skip_mapping = 1@
+- *
+- * @remark
+- * If the values for your data type don't exactly match the
+- * possible values defined by the mib, you should map them here.
+- * Otherwise, just do a direct copy.
+- */
+-int
+-appParamsValueType_map(u_long * mib_appParamsValueType_val_ptr,
+- u_long raw_appParamsValueType_val)
+-{
+- netsnmp_assert(NULL != mib_appParamsValueType_val_ptr);
+-
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsValueType_map",
+- "called\n"));
+-
+- /*
+- * TODO:241:o: |-> Implement appParamsValueType enum mapping.
+- * uses INTERNAL_* macros defined in the header files
+- */
+- switch (raw_appParamsValueType_val) {
+- case INTERNAL_DESSERTAPPPARAMSTABLE_APPPARAMSVALUETYPE_BOOL:
+- *mib_appParamsValueType_val_ptr = DESSERTAPPVALUETYPE_BOOL;
+- break;
+-
+- case INTERNAL_DESSERTAPPPARAMSTABLE_APPPARAMSVALUETYPE_INT32:
+- *mib_appParamsValueType_val_ptr = DESSERTAPPVALUETYPE_INT32;
+- break;
+-
+- case INTERNAL_DESSERTAPPPARAMSTABLE_APPPARAMSVALUETYPE_UINT32:
+- *mib_appParamsValueType_val_ptr = DESSERTAPPVALUETYPE_UINT32;
+- break;
+-
+- case INTERNAL_DESSERTAPPPARAMSTABLE_APPPARAMSVALUETYPE_OCTETSTRING:
+- *mib_appParamsValueType_val_ptr = DESSERTAPPVALUETYPE_OCTETSTRING;
+- break;
+-
+- default:
+- snmp_log(LOG_ERR,
+- "couldn't map value %ld for appParamsValueType\n",
+- raw_appParamsValueType_val);
+- return MFD_ERROR;
+- }
+-
+- return MFD_SUCCESS;
+-} /* appParamsValueType_map */
+-
+-/**
+- * Extract the current value of the appParamsValueType data.
+- *
+- * Set a value using the data context for the row.
+- *
+- * @param rowreq_ctx
+- * Pointer to the row request context.
+- * @param appParamsValueType_val_ptr
+- * Pointer to storage for a long variable
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_SKIP : skip this node (no value for now)
+- * @retval MFD_ERROR : Any other error
+- */
+-int
+-appParamsValueType_get(dessertAppParamsTable_rowreq_ctx * rowreq_ctx,
+- u_long * appParamsValueType_val_ptr)
+-{
+- /** we should have a non-NULL pointer */
+- netsnmp_assert(NULL != appParamsValueType_val_ptr);
+-
+-
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsValueType_get",
+- "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:231:o: |-> Extract the current value of the appParamsValueType data.
+- * copy (* appParamsValueType_val_ptr ) from rowreq_ctx->data
+- */
+- (*appParamsValueType_val_ptr) = rowreq_ctx->data.appParamsValueType;
+-
+- return MFD_SUCCESS;
+-} /* appParamsValueType_get */
+-
+-/*---------------------------------------------------------------------
+- * DESSERT-MIB::dessertAppParamsEntry.appParamsTruthValue
+- * appParamsTruthValue is subid 5 of dessertAppParamsEntry.
+- * Its status is Current, and its access level is ReadWrite.
+- * OID: .1.3.6.1.4.1.18898.0.19.10.1.1.11.1.5
+- * Description:
+-A parameter with TruthValue semantics.
+- *
+- * Attributes:
+- * accessible 1 isscalar 0 enums 1 hasdefval 0
+- * readable 1 iscolumn 1 ranges 0 hashint 0
+- * settable 1
+- *
+- * Enum range: 2/8. Values: true(1), false(2)
+- *
+- * Its syntax is TruthValue (based on perltype INTEGER)
+- * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+- */
+-/**
+- * map a value from its original native format to the MIB format.
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_ERROR : Any other error
+- *
+- * @note parameters follow the memset convention (dest, src).
+- *
+- * @note generation and use of this function can be turned off by re-running
+- * mib2c after adding the following line to the file
+- * defaults/node-appParamsTruthValue.m2d :
+- * @eval $m2c_node_skip_mapping = 1@
+- *
+- * @remark
+- * If the values for your data type don't exactly match the
+- * possible values defined by the mib, you should map them here.
+- * Otherwise, just do a direct copy.
+- */
+-int
+-appParamsTruthValue_map(u_long * mib_appParamsTruthValue_val_ptr,
+- u_long raw_appParamsTruthValue_val)
+-{
+- netsnmp_assert(NULL != mib_appParamsTruthValue_val_ptr);
+-
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsTruthValue_map",
+- "called\n"));
+-
+- /*
+- * TODO:241:o: |-> Implement appParamsTruthValue enum mapping.
+- * uses INTERNAL_* macros defined in the header files
+- */
+- switch (raw_appParamsTruthValue_val) {
+- case INTERNAL_DESSERTAPPPARAMSTABLE_APPPARAMSTRUTHVALUE_TRUE:
+- *mib_appParamsTruthValue_val_ptr = TRUTHVALUE_TRUE;
+- break;
+-
+- case INTERNAL_DESSERTAPPPARAMSTABLE_APPPARAMSTRUTHVALUE_FALSE:
+- *mib_appParamsTruthValue_val_ptr = TRUTHVALUE_FALSE;
+- break;
+-
+- default:
+- snmp_log(LOG_ERR,
+- "couldn't map value %ld for appParamsTruthValue\n",
+- raw_appParamsTruthValue_val);
+- return MFD_ERROR;
+- }
+-
+- return MFD_SUCCESS;
+-} /* appParamsTruthValue_map */
+-
+-/**
+- * Extract the current value of the appParamsTruthValue data.
+- *
+- * Set a value using the data context for the row.
+- *
+- * @param rowreq_ctx
+- * Pointer to the row request context.
+- * @param appParamsTruthValue_val_ptr
+- * Pointer to storage for a long variable
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_SKIP : skip this node (no value for now)
+- * @retval MFD_ERROR : Any other error
+- */
+-int
+-appParamsTruthValue_get(dessertAppParamsTable_rowreq_ctx * rowreq_ctx,
+- u_long * appParamsTruthValue_val_ptr)
+-{
+- /** we should have a non-NULL pointer */
+- netsnmp_assert(NULL != appParamsTruthValue_val_ptr);
+-
+-
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsTruthValue_get",
+- "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:231:o: |-> Extract the current value of the appParamsTruthValue data.
+- * copy (* appParamsTruthValue_val_ptr ) from rowreq_ctx->data
+- */
+- (*appParamsTruthValue_val_ptr) = rowreq_ctx->data.appParamsTruthValue;
+-
+- return MFD_SUCCESS;
+-} /* appParamsTruthValue_get */
+-
+-/*---------------------------------------------------------------------
+- * DESSERT-MIB::dessertAppParamsEntry.appParamsInteger32
+- * appParamsInteger32 is subid 6 of dessertAppParamsEntry.
+- * Its status is Current, and its access level is ReadWrite.
+- * OID: .1.3.6.1.4.1.18898.0.19.10.1.1.11.1.6
+- * Description:
+-A parameter with Integer32 semantics.
+- *
+- * Attributes:
+- * accessible 1 isscalar 0 enums 0 hasdefval 0
+- * readable 1 iscolumn 1 ranges 0 hashint 0
+- * settable 1
+- *
+- *
+- * Its syntax is INTEGER32 (based on perltype INTEGER32)
+- * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+- */
+-/**
+- * Extract the current value of the appParamsInteger32 data.
+- *
+- * Set a value using the data context for the row.
+- *
+- * @param rowreq_ctx
+- * Pointer to the row request context.
+- * @param appParamsInteger32_val_ptr
+- * Pointer to storage for a long variable
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_SKIP : skip this node (no value for now)
+- * @retval MFD_ERROR : Any other error
+- */
+-int
+-appParamsInteger32_get(dessertAppParamsTable_rowreq_ctx * rowreq_ctx,
+- long *appParamsInteger32_val_ptr)
+-{
+- /** we should have a non-NULL pointer */
+- netsnmp_assert(NULL != appParamsInteger32_val_ptr);
+-
+-
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsInteger32_get",
+- "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:231:o: |-> Extract the current value of the appParamsInteger32 data.
+- * copy (* appParamsInteger32_val_ptr ) from rowreq_ctx->data
+- */
+- (*appParamsInteger32_val_ptr) = rowreq_ctx->data.appParamsInteger32;
+-
+- return MFD_SUCCESS;
+-} /* appParamsInteger32_get */
+-
+-/*---------------------------------------------------------------------
+- * DESSERT-MIB::dessertAppParamsEntry.appParamsUnsigned32
+- * appParamsUnsigned32 is subid 7 of dessertAppParamsEntry.
+- * Its status is Current, and its access level is ReadWrite.
+- * OID: .1.3.6.1.4.1.18898.0.19.10.1.1.11.1.7
+- * Description:
+-A parameter with Unsigned32 semantics.
+- *
+- * Attributes:
+- * accessible 1 isscalar 0 enums 0 hasdefval 0
+- * readable 1 iscolumn 1 ranges 0 hashint 0
+- * settable 1
+- *
+- *
+- * Its syntax is UNSIGNED32 (based on perltype UNSIGNED32)
+- * The net-snmp type is ASN_UNSIGNED. The C type decl is u_long (u_long)
+- */
+-/**
+- * Extract the current value of the appParamsUnsigned32 data.
+- *
+- * Set a value using the data context for the row.
+- *
+- * @param rowreq_ctx
+- * Pointer to the row request context.
+- * @param appParamsUnsigned32_val_ptr
+- * Pointer to storage for a u_long variable
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_SKIP : skip this node (no value for now)
+- * @retval MFD_ERROR : Any other error
+- */
+-int
+-appParamsUnsigned32_get(dessertAppParamsTable_rowreq_ctx * rowreq_ctx,
+- u_long * appParamsUnsigned32_val_ptr)
+-{
+- /** we should have a non-NULL pointer */
+- netsnmp_assert(NULL != appParamsUnsigned32_val_ptr);
+-
+-
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsUnsigned32_get",
+- "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:231:o: |-> Extract the current value of the appParamsUnsigned32 data.
+- * copy (* appParamsUnsigned32_val_ptr ) from rowreq_ctx->data
+- */
+- (*appParamsUnsigned32_val_ptr) = rowreq_ctx->data.appParamsUnsigned32;
+-
+- return MFD_SUCCESS;
+-} /* appParamsUnsigned32_get */
+-
+-/*---------------------------------------------------------------------
+- * DESSERT-MIB::dessertAppParamsEntry.appParamsOctetString
+- * appParamsOctetString is subid 9 of dessertAppParamsEntry.
+- * Its status is Current, and its access level is ReadWrite.
+- * OID: .1.3.6.1.4.1.18898.0.19.10.1.1.11.1.9
+- * Description:
+-A parameter containing of up to 1024 octets.
+- *
+- * Attributes:
+- * accessible 1 isscalar 0 enums 0 hasdefval 0
+- * readable 1 iscolumn 1 ranges 1 hashint 1
+- * settable 1
+- * hint: 1024a
+- *
+- * Ranges: 0 - 1024;
+- *
+- * Its syntax is DessertApplicationOctetString (based on perltype OCTETSTR)
+- * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+- * This data type requires a length. (Max 1024)
+- */
+-/**
+- * Extract the current value of the appParamsOctetString data.
+- *
+- * Set a value using the data context for the row.
+- *
+- * @param rowreq_ctx
+- * Pointer to the row request context.
+- * @param appParamsOctetString_val_ptr_ptr
+- * Pointer to storage for a char variable
+- * @param appParamsOctetString_val_ptr_len_ptr
+- * Pointer to a size_t. On entry, it will contain the size (in bytes)
+- * pointed to by appParamsOctetString.
+- * On exit, this value should contain the data size (in bytes).
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_SKIP : skip this node (no value for now)
+- * @retval MFD_ERROR : Any other error
+-*
+- * @note If you need more than (*appParamsOctetString_val_ptr_len_ptr) bytes of memory,
+- * allocate it using malloc() and update appParamsOctetString_val_ptr_ptr.
+- * <b>DO NOT</b> free the previous pointer.
+- * The MFD helper will release the memory you allocate.
+- *
+- * @remark If you call this function yourself, you are responsible
+- * for checking if the pointer changed, and freeing any
+- * previously allocated memory. (Not necessary if you pass
+- * in a pointer to static memory, obviously.)
+- */
+-int
+-appParamsOctetString_get(dessertAppParamsTable_rowreq_ctx * rowreq_ctx,
+- char **appParamsOctetString_val_ptr_ptr,
+- size_t *appParamsOctetString_val_ptr_len_ptr)
+-{
+- /** we should have a non-NULL pointer and enough storage */
+- netsnmp_assert((NULL != appParamsOctetString_val_ptr_ptr)
+- && (NULL != *appParamsOctetString_val_ptr_ptr));
+- netsnmp_assert(NULL != appParamsOctetString_val_ptr_len_ptr);
+-
+-
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsOctetString_get",
+- "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:231:o: |-> Extract the current value of the appParamsOctetString data.
+- * copy (* appParamsOctetString_val_ptr_ptr ) data and (* appParamsOctetString_val_ptr_len_ptr ) from rowreq_ctx->data
+- */
+- /*
+- * make sure there is enough space for appParamsOctetString data
+- */
+- if ((NULL == (*appParamsOctetString_val_ptr_ptr)) ||
+- ((*appParamsOctetString_val_ptr_len_ptr) <
+- (rowreq_ctx->data.appParamsOctetString_len *
+- sizeof(rowreq_ctx->data.appParamsOctetString[0])))) {
+- /*
+- * allocate space for appParamsOctetString data
+- */
+- (*appParamsOctetString_val_ptr_ptr) =
+- malloc(rowreq_ctx->data.appParamsOctetString_len *
+- sizeof(rowreq_ctx->data.appParamsOctetString[0]));
+- if (NULL == (*appParamsOctetString_val_ptr_ptr)) {
+- snmp_log(LOG_ERR, "could not allocate memory\n");
+- return MFD_ERROR;
+- }
+- }
+- (*appParamsOctetString_val_ptr_len_ptr) =
+- rowreq_ctx->data.appParamsOctetString_len *
+- sizeof(rowreq_ctx->data.appParamsOctetString[0]);
+- memcpy((*appParamsOctetString_val_ptr_ptr),
+- rowreq_ctx->data.appParamsOctetString,
+- rowreq_ctx->data.appParamsOctetString_len *
+- sizeof(rowreq_ctx->data.appParamsOctetString[0]));
+-
+- return MFD_SUCCESS;
+-} /* appParamsOctetString_get */
+-
+-
+-
+-/** @} */
+Index: libdessert0.86-0.86.14/snmp/dessertAppParamsTable_data_get.h
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertAppParamsTable_data_get.h 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,136 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * version : 12088 $ of $
+- *
+- * $Id:$
+- *
+- * @file dessertAppParamsTable_data_get.h
+- *
+- * @addtogroup get
+- *
+- * Prototypes for get functions
+- *
+- * @{
+- */
+-#ifndef DESSERTAPPPARAMSTABLE_DATA_GET_H
+-#define DESSERTAPPPARAMSTABLE_DATA_GET_H
+-
+-#ifdef __cplusplus
+-extern "C" {
+-#endif
+-
+- /*
+- *********************************************************************
+- * GET function declarations
+- */
+-
+- /*
+- *********************************************************************
+- * GET Table declarations
+- */
+-/**********************************************************************
+- **********************************************************************
+- ***
+- *** Table dessertAppParamsTable
+- ***
+- **********************************************************************
+- **********************************************************************/
+- /*
+- * DESSERT-MIB::dessertAppParamsTable is subid 11 of dessertObjects.
+- * Its status is Current.
+- * OID: .1.3.6.1.4.1.18898.0.19.10.1.1.11, length: 13
+- */
+- /*
+- * indexes
+- */
+- int appParamsIndex_map(long *mib_appParamsIndex_val_ptr,
+- long raw_appParamsIndex_val);
+-
+- int appParamsName_map(char **mib_appParamsName_val_ptr_ptr,
+- size_t
+- *mib_appParamsName_val_ptr_len_ptr,
+- char *raw_appParamsName_val_ptr,
+- size_t raw_appParamsName_val_ptr_len,
+- int allow_realloc);
+- int appParamsName_get(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx,
+- char **appParamsName_val_ptr_ptr,
+- size_t
+- *appParamsName_val_ptr_len_ptr);
+- int appParamsDesc_map(char **mib_appParamsDesc_val_ptr_ptr,
+- size_t
+- *mib_appParamsDesc_val_ptr_len_ptr,
+- char *raw_appParamsDesc_val_ptr,
+- size_t raw_appParamsDesc_val_ptr_len,
+- int allow_realloc);
+- int appParamsDesc_get(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx,
+- char **appParamsDesc_val_ptr_ptr,
+- size_t
+- *appParamsDesc_val_ptr_len_ptr);
+- int appParamsValueType_map(u_long *
+- mib_appParamsValueType_val_ptr,
+- u_long
+- raw_appParamsValueType_val);
+- int appParamsValueType_get(dessertAppParamsTable_rowreq_ctx
+- * rowreq_ctx,
+- u_long *
+- appParamsValueType_val_ptr);
+- int appParamsTruthValue_map(u_long *
+- mib_appParamsTruthValue_val_ptr,
+- u_long
+- raw_appParamsTruthValue_val);
+- int
+- appParamsTruthValue_get(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx,
+- u_long * appParamsTruthValue_val_ptr);
+- int appParamsInteger32_map(long
+- *mib_appParamsInteger32_val_ptr,
+- long
+- raw_appParamsInteger32_val);
+- int appParamsInteger32_get(dessertAppParamsTable_rowreq_ctx
+- * rowreq_ctx,
+- long
+- *appParamsInteger32_val_ptr);
+- int appParamsUnsigned32_map(u_long *
+- mib_appParamsUnsigned32_val_ptr,
+- u_long
+- raw_appParamsUnsigned32_val);
+- int
+- appParamsUnsigned32_get(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx,
+- u_long * appParamsUnsigned32_val_ptr);
+- int appParamsOctetString_map(char
+- **mib_appParamsOctetString_val_ptr_ptr,
+- size_t
+- *mib_appParamsOctetString_val_ptr_len_ptr,
+- char
+- *raw_appParamsOctetString_val_ptr,
+- size_t
+- raw_appParamsOctetString_val_ptr_len,
+- int allow_realloc);
+- int
+- appParamsOctetString_get(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx,
+- char **appParamsOctetString_val_ptr_ptr,
+- size_t
+- *appParamsOctetString_val_ptr_len_ptr);
+-
+-
+- int
+- dessertAppParamsTable_indexes_set_tbl_idx
+- (dessertAppParamsTable_mib_index * tbl_idx,
+- long appParamsIndex_val);
+- int
+- dessertAppParamsTable_indexes_set(dessertAppParamsTable_rowreq_ctx
+- * rowreq_ctx,
+- long appParamsIndex_val);
+-
+-
+-
+-
+-#ifdef __cplusplus
+-}
+-#endif
+-#endif /* DESSERTAPPPARAMSTABLE_DATA_GET_H */
+-/** @} */
+Index: libdessert0.86-0.86.14/snmp/dessertAppParamsTable_data_set.c
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertAppParamsTable_data_set.c 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,1241 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * version : 12077 $ of $
+- *
+- * $Id:$
+- *
+- */
+-/*
+- * standard Net-SNMP includes
+- */
+-#include <net-snmp/net-snmp-config.h>
+-#include <net-snmp/net-snmp-includes.h>
+-#include <net-snmp/agent/net-snmp-agent-includes.h>
+-
+-/*
+- * include our parent header
+- */
+-#include "dessertAppParamsTable.h"
+-#include "dessertAppParamsTable_enums.h"
+-#include "../dessert_internal.h"
+-
+-
+-/** @defgroup data_set data_set: Routines to set data
+- *
+- * These routines are used to set the value for individual objects. The
+- * row context is passed, along with the new value.
+- *
+- * @{
+- */
+-/**********************************************************************
+- **********************************************************************
+- ***
+- *** Table dessertAppParamsTable
+- ***
+- **********************************************************************
+- **********************************************************************/
+-/*
+- * DESSERT-MIB::dessertAppParamsTable is subid 11 of dessertObjects.
+- * Its status is Current.
+- * OID: .1.3.6.1.4.1.18898.0.19.10.1.1.11, length: 13
+- */
+- /*
+- * NOTE: if you update this chart, please update the versions in
+- * local/mib2c-conf.d/parent-set.m2i
+- * agent/mibgroup/helpers/baby_steps.c
+- * while you're at it.
+- */
+- /*
+- ***********************************************************************
+- * Baby Steps Flow Chart (2004.06.05) *
+- * *
+- * +--------------+ +================+ U = unconditional path *
+- * |optional state| ||required state|| S = path for success *
+- * +--------------+ +================+ E = path for error *
+- ***********************************************************************
+- *
+- * +--------------+
+- * | pre |
+- * | request |
+- * +--------------+
+- * | U
+- * +==============+
+- * +----------------|| object ||
+- * | E || lookup ||
+- * | +==============+
+- * | | S
+- * | +==============+
+- * | E || check ||
+- * |<---------------|| values ||
+- * | +==============+
+- * | | S
+- * | +==============+
+- * | +<-------|| undo ||
+- * | | E || setup ||
+- * | | +==============+
+- * | | | S
+- * | | +==============+
+- * | | || set ||-------------------------->+
+- * | | || value || E |
+- * | | +==============+ |
+- * | | | S |
+- * | | +--------------+ |
+- * | | | check |-------------------------->|
+- * | | | consistency | E |
+- * | | +--------------+ |
+- * | | | S |
+- * | | +==============+ +==============+ |
+- * | | || commit ||-------->|| undo || |
+- * | | || || E || commit || |
+- * | | +==============+ +==============+ |
+- * | | | S U |<--------+
+- * | | +--------------+ +==============+
+- * | | | irreversible | || undo ||
+- * | | | commit | || set ||
+- * | | +--------------+ +==============+
+- * | | | U U |
+- * | +-------------->|<------------------------+
+- * | +==============+
+- * | || undo ||
+- * | || cleanup ||
+- * | +==============+
+- * +---------------------->| U
+- * +--------------+
+- * | post |
+- * | request |
+- * +--------------+
+- *
+- */
+-
+-/**
+- * Setup up context with information needed to undo a set request.
+- *
+- * This function will be called before the individual node undo setup
+- * functions are called. If you need to do any undo setup that is not
+- * related to a specific column, you can do it here.
+- *
+- * Note that the undo context has been allocated with
+- * dessertAppParamsTable_allocate_data(), but may need extra
+- * initialization similar to what you may have done in
+- * dessertAppParamsTable_rowreq_ctx_init().
+- * Note that an individual node's undo_setup function will only be called
+- * if that node is being set to a new value.
+- *
+- * If there is any setup specific to a particular column (e.g. allocating
+- * memory for a string), you should do that setup in the node's undo_setup
+- * function, so it won't be done unless it is necessary.
+- *
+- * @param rowreq_ctx
+- * Pointer to the table context (dessertAppParamsTable_rowreq_ctx)
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_ERROR : error. set will fail.
+- */
+-int
+-dessertAppParamsTable_undo_setup(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx)
+-{
+- int rc = MFD_SUCCESS;
+-
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:dessertAppParamsTable_undo_setup", "called\n"));
+-
+- /** we should have a non-NULL pointer */
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:451:M: |-> Setup dessertAppParamsTable undo.
+- * set up dessertAppParamsTable undo information, in preparation for a set.
+- * Undo storage is in (* appParamsOctetString_val_ptr_ptr )*
+- */
+-
+- return rc;
+-} /* dessertAppParamsTable_undo_setup */
+-
+-/**
+- * Undo a set request.
+- *
+- * This function will be called before the individual node undo
+- * functions are called. If you need to do any undo that is not
+- * related to a specific column, you can do it here.
+- *
+- * Note that an individual node's undo function will only be called
+- * if that node is being set to a new value.
+- *
+- * If there is anything specific to a particular column (e.g. releasing
+- * memory for a string), you should do that setup in the node's undo
+- * function, so it won't be done unless it is necessary.
+- *
+- * @param rowreq_ctx
+- * Pointer to the table context (dessertAppParamsTable_rowreq_ctx)
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_ERROR : error. set will fail.
+- */
+-int
+-dessertAppParamsTable_undo(dessertAppParamsTable_rowreq_ctx * rowreq_ctx)
+-{
+- int rc = MFD_SUCCESS;
+-
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:dessertAppParamsTable_undo",
+- "called\n"));
+-
+- /** we should have a non-NULL pointer */
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:451:M: |-> dessertAppParamsTable undo.
+- * dessertAppParamsTable undo information, in response to a failed set.
+- * Undo storage is in (* appParamsOctetString_val_ptr_ptr )*
+- */
+-
+- return rc;
+-} /* dessertAppParamsTable_undo_setup */
+-
+-/**
+- * Cleanup up context undo information.
+- *
+- * This function will be called after set/commit processing. If you
+- * allocated any resources in undo_setup, this is the place to release
+- * those resources.
+- *
+- * This function is called regardless of the success or failure of the set
+- * request. If you need to perform different steps for cleanup depending
+- * on success or failure, you can add a flag to the rowreq_ctx.
+- *
+- * @param rowreq_ctx
+- * Pointer to the table context (dessertAppParamsTable_rowreq_ctx)
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_ERROR : error
+- */
+-int
+-dessertAppParamsTable_undo_cleanup(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx)
+-{
+- int rc = MFD_SUCCESS;
+-
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:dessertAppParamsTable_undo_cleanup", "called\n"));
+-
+- /** we should have a non-NULL pointer */
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:452:M: |-> Cleanup dessertAppParamsTable undo.
+- * Undo storage is in (* appParamsOctetString_val_ptr_ptr )*
+- */
+-
+- return rc;
+-} /* dessertAppParamsTable_undo_cleanup */
+-
+-/**
+- * commit new values.
+- *
+- * At this point, you should have done everything you can to ensure that
+- * this commit will not fail.
+- *
+- * Should you need different behavior depending on which columns were
+- * set, rowreq_ctx->column_set_flags will indicate which writeable columns were
+- * set. The definitions for the COLUMN_*_FLAG bits can be found in
+- * dessertAppParamsTable_oids.h.
+- * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags.
+- *
+- * @param dessertAppParamsTable_rowreq_ctx
+- * Pointer to the users context.
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_ERROR : error
+- */
+-int
+-dessertAppParamsTable_commit(dessertAppParamsTable_rowreq_ctx * rowreq_ctx)
+-{
+- int rc = MFD_SUCCESS;
+- int save_flags;
+- dessert_agentx_appparams_t *appparam;
+- dessert_agentx_appparamscb_set_t *set;
+-
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:dessertAppParamsTable_commit", "called\n"));
+-
+- /** we should have a non-NULL pointer */
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- set = _dessert_agentx_appparams_getsettercbforindex(rowreq_ctx->tbl_idx.appParamsIndex);
+-
+- if (set == NULL) {
+- snmp_log(
+- LOG_ERR,
+- "dessertAppParamsTable commit failed, no setter for index %ld!\n",
+- rowreq_ctx->tbl_idx.appParamsIndex);
+- return MFD_ERROR;
+- }
+-
+- /*
+- * save flags, then clear until we actually do something
+- */
+- save_flags = rowreq_ctx->column_set_flags;
+- rowreq_ctx->column_set_flags = 0;
+-
+- appparam = malloc(sizeof(dessert_agentx_appparams_t));
+-
+- appparam->index = rowreq_ctx->tbl_idx.appParamsIndex;
+- appparam->value_type = rowreq_ctx->data.appParamsValueType;
+-
+- dessert_debug("commit\n"
+- "\n\t\trowreq_ctx->tbl_idx \t[%u]"
+- "\n\t\trowreq_ctx->data.appParamsValueType \t[%u]"
+- "\n\t\trowreq_ctx->data.appParamsTruthValue \t[%u]"
+- "\n\t\trowreq_ctx->data.appParamsInteger32 \t[%d]"
+- "\n\t\trowreq_ctx->data.appParamsUnsigned32 \t[%u]"
+- "\n\t\trowreq_ctx->data.appParamsOctetString_len \t[%u]"
+-
+- "\n",rowreq_ctx->tbl_idx,
+- rowreq_ctx->data.appParamsValueType,
+- rowreq_ctx->data.appParamsTruthValue,
+- rowreq_ctx->data.appParamsInteger32,
+- rowreq_ctx->data.appParamsUnsigned32,
+- rowreq_ctx->data.appParamsOctetString_len
+- );
+-
+- /*
+- * commit dessertAppParamsTable data
+- * 1) check the column's flag in save_flags to see if it was set.
+- * 2) clear the flag when you handle that column
+- * 3) set the column's flag in column_set_flags if it needs undo
+- * processing in case of a failure.
+- */
+- if (save_flags & COLUMN_APPPARAMSTRUTHVALUE_FLAG) {
+- /* clear appParamsTruthValue */
+- save_flags &= ~COLUMN_APPPARAMSTRUTHVALUE_FLAG;
+- /*
+- * commit column appParamsTruthValue.
+- */
+-
+- appparam->bool = rowreq_ctx->data.appParamsTruthValue;
+-
+- rc = set(appparam);
+- if (DESSERT_ERR == rc) {
+- snmp_log(LOG_ERR,
+- "dessertAppParamsTable column appParamsTruthValue commit failed\n");
+- } else {
+- /*
+- * set flag, in case we need to undo appParamsTruthValue
+- */
+- rowreq_ctx->column_set_flags |=
+- COLUMN_APPPARAMSTRUTHVALUE_FLAG;
+- }
+- }
+-
+- if (save_flags & COLUMN_APPPARAMSINTEGER32_FLAG) {
+- /* clear appParamsInteger32 */
+- save_flags &= ~COLUMN_APPPARAMSINTEGER32_FLAG;
+- /*
+- * commit column appParamsInteger32.
+- */
+-
+- appparam->int32 = rowreq_ctx->data.appParamsInteger32;
+-
+- rc = set(appparam);
+- if (DESSERT_ERR == rc) {
+- snmp_log(LOG_ERR,
+- "dessertAppParamsTable column appParamsInteger32 commit failed\n");
+- } else {
+- /*
+- * set flag, in case we need to undo appParamsInteger32
+- */
+- rowreq_ctx->column_set_flags |= COLUMN_APPPARAMSINTEGER32_FLAG;
+- }
+- }
+-
+- if (save_flags & COLUMN_APPPARAMSUNSIGNED32_FLAG) {
+- /* clear appParamsUnsigned32 */
+- save_flags &= ~COLUMN_APPPARAMSUNSIGNED32_FLAG;
+- /*
+- * commit column appParamsUnsigned32.
+- */
+-
+- appparam->uint32 = rowreq_ctx->data.appParamsUnsigned32;
+-
+- rc = set(appparam);
+- if (DESSERT_ERR == rc) {
+- snmp_log(LOG_ERR,
+- "dessertAppParamsTable column appParamsUnsigned32 commit failed\n");
+- } else {
+- /*
+- * set flag, in case we need to undo appParamsUnsigned32
+- */
+- rowreq_ctx->column_set_flags |=
+- COLUMN_APPPARAMSUNSIGNED32_FLAG;
+- }
+- }
+-
+- if (save_flags & COLUMN_APPPARAMSOCTETSTRING_FLAG) {
+- /* clear appParamsOctetString */
+- save_flags &= ~COLUMN_APPPARAMSOCTETSTRING_FLAG;
+- /*
+- * TODO:482:o: |-> commit column appParamsOctetString.
+- */
+-
+- appparam->octetstring_len = rowreq_ctx->data.appParamsOctetString_len;
+- appparam->octetstring = malloc(sizeof(char) * appparam->octetstring_len);
+- memcpy(appparam->octetstring, rowreq_ctx->data.appParamsOctetString, rowreq_ctx->data.appParamsOctetString_len * sizeof(rowreq_ctx->data.appParamsOctetString[0]));
+-
+- rc = set(appparam);
+- if (DESSERT_ERR == rc) {
+- snmp_log(LOG_ERR,
+- "dessertAppParamsTable column appParamsOctetString commit failed\n");
+- } else {
+- /*
+- * set flag, in case we need to undo appParamsOctetString
+- */
+- dessert_debug("dessertAppParamsTable column appParamsOctetString commited");
+- rowreq_ctx->column_set_flags |=
+- COLUMN_APPPARAMSOCTETSTRING_FLAG;
+- }
+- }
+-
+- if (rc == DESSERT_ERR) rc = -1; else {rc = MFD_SUCCESS;}
+-
+- /*
+- * if we successfully committed this row, set the dirty flag.
+- */
+- if (MFD_SUCCESS == rc) {
+- rowreq_ctx->rowreq_flags |= MFD_ROW_DIRTY;
+- }
+-
+- if (save_flags) {
+- snmp_log(LOG_ERR, "unhandled columns (0x%x) in commit\n",
+- save_flags);
+- return MFD_ERROR;
+- }
+-
+- _dessert_agentx_appparams_free(appparam);
+-
+- return rc;
+-} /* dessertAppParamsTable_commit */
+-
+-/**
+- * undo commit new values.
+- *
+- * Should you need different behavior depending on which columns were
+- * set, rowreq_ctx->column_set_flags will indicate which writeable columns were
+- * set. The definitions for the COLUMN_*_FLAG bits can be found in
+- * dessertAppParamsTable_oids.h.
+- * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags.
+- *
+- * @param dessertAppParamsTable_rowreq_ctx
+- * Pointer to the users context.
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_ERROR : error
+- */
+-int
+-dessertAppParamsTable_undo_commit(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx)
+-{
+- int rc = MFD_SUCCESS;
+-
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:dessertAppParamsTable_undo_commit", "called\n"));
+-
+- /** we should have a non-NULL pointer */
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:485:M: |-> Undo dessertAppParamsTable commit.
+- * check the column's flag in rowreq_ctx->column_set_flags to see
+- * if it was set during commit, then undo it.
+- *
+- * eg: if (rowreq_ctx->column_set_flags & COLUMN__FLAG) {}
+- */
+-
+-
+- /*
+- * if we successfully un-commited this row, clear the dirty flag.
+- */
+- if (MFD_SUCCESS == rc) {
+- rowreq_ctx->rowreq_flags &= ~MFD_ROW_DIRTY;
+- }
+-
+- return rc;
+-} /* dessertAppParamsTable_undo_commit */
+-
+-/*
+- * TODO:440:M: Implement dessertAppParamsTable node value checks.
+- * TODO:450:M: Implement dessertAppParamsTable undo functions.
+- * TODO:460:M: Implement dessertAppParamsTable set functions.
+- * TODO:480:M: Implement dessertAppParamsTable commit functions.
+- */
+-/*---------------------------------------------------------------------
+- * DESSERT-MIB::dessertAppParamsEntry.appParamsTruthValue
+- * appParamsTruthValue is subid 5 of dessertAppParamsEntry.
+- * Its status is Current, and its access level is ReadWrite.
+- * OID: .1.3.6.1.4.1.18898.0.19.10.1.1.11.1.5
+- * Description:
+-A parameter with TruthValue semantics.
+- *
+- * Attributes:
+- * accessible 1 isscalar 0 enums 1 hasdefval 0
+- * readable 1 iscolumn 1 ranges 0 hashint 0
+- * settable 1
+- *
+- * Enum range: 2/8. Values: true(1), false(2)
+- *
+- * Its syntax is TruthValue (based on perltype INTEGER)
+- * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+- */
+-/**
+- * Check that the proposed new value is potentially valid.
+- *
+- * @param rowreq_ctx
+- * Pointer to the row request context.
+- * @param appParamsTruthValue_val
+- * A long containing the new value.
+- *
+- * @retval MFD_SUCCESS : incoming value is legal
+- * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+- * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+- *
+- * This is the place to check for requirements that are not
+- * expressed in the mib syntax (for example, a requirement that
+- * is detailed in the description for an object).
+- *
+- * You should check that the requested change between the undo value and the
+- * new value is legal (ie, the transistion from one value to another
+- * is legal).
+- *
+- *@note
+- * This check is only to determine if the new value
+- * is \b potentially valid. This is the first check of many, and
+- * is one of the simplest ones.
+- *
+- *@note
+- * this is not the place to do any checks for values
+- * which depend on some other value in the mib. Those
+- * types of checks should be done in the
+- * dessertAppParamsTable_check_dependencies() function.
+- *
+- * The following checks have already been done for you:
+- * The syntax is ASN_INTEGER
+- * The value is one of true(1), false(2)
+- *
+- * If there a no other checks you need to do, simply return MFD_SUCCESS.
+- *
+- */
+-int
+-appParamsTruthValue_check_value(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx, u_long appParamsTruthValue_val)
+-{
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsTruthValue_check_value", "called\n"));
+-
+- /** should never get a NULL pointer */
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * Check for valid appParamsTruthValue value.
+- */
+-
+- if (rowreq_ctx->data.appParamsValueType != DESSERT_APPPARAMS_VALUETYPE_BOOL) {
+-
+- return MFD_NOT_VALID_EVER;
+- } else {
+-
+- return MFD_SUCCESS; /* appParamsTruthValue value not illegal */
+- }
+-} /* appParamsTruthValue_check_value */
+-
+-/**
+- * Save old value information
+- *
+- * @param rowreq_ctx
+- * Pointer to the table context (dessertAppParamsTable_rowreq_ctx)
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_ERROR : error. set will fail.
+- *
+- * This function will be called after the table level undo setup function
+- * dessertAppParamsTable_undo_setup has been called.
+- *
+- *@note
+- * this function will only be called if a new value is set for this column.
+- *
+- * If there is any setup specific to a particular column (e.g. allocating
+- * memory for a string), you should do that setup in this function, so it
+- * won't be done unless it is necessary.
+- */
+-int
+-appParamsTruthValue_undo_setup(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx)
+-{
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsTruthValue_undo_setup", "called\n"));
+-
+- /** should never get a NULL pointer */
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:455:o: |-> Setup appParamsTruthValue undo.
+- */
+- /*
+- * copy appParamsTruthValue data
+- * set rowreq_ctx->undo->appParamsTruthValue from rowreq_ctx->data.appParamsTruthValue
+- */
+- rowreq_ctx->undo->appParamsTruthValue =
+- rowreq_ctx->data.appParamsTruthValue;
+-
+-
+- return MFD_SUCCESS;
+-} /* appParamsTruthValue_undo_setup */
+-
+-/**
+- * Set the new value.
+- *
+- * @param rowreq_ctx
+- * Pointer to the users context. You should know how to
+- * manipulate the value from this object.
+- * @param appParamsTruthValue_val
+- * A long containing the new value.
+- */
+-int
+-appParamsTruthValue_set(dessertAppParamsTable_rowreq_ctx * rowreq_ctx,
+- u_long appParamsTruthValue_val)
+-{
+-
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsTruthValue_set",
+- "called\n"));
+-
+- /** should never get a NULL pointer */
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:245:o: |-> Implement appParamsTruthValue reverse mapping.
+- * If the values for your data type don't exactly match the
+- * possible values defined by the mib, you should map them here.
+- */
+- /*
+- ***************************************************
+- *** START EXAMPLE CODE ***
+- ***---------------------------------------------***/
+- switch (appParamsTruthValue_val) {
+- case TRUTHVALUE_TRUE:
+- rowreq_ctx->data.appParamsTruthValue =
+- INTERNAL_DESSERTAPPPARAMSTABLE_APPPARAMSTRUTHVALUE_TRUE;
+- break;
+-
+- case TRUTHVALUE_FALSE:
+- rowreq_ctx->data.appParamsTruthValue =
+- INTERNAL_DESSERTAPPPARAMSTABLE_APPPARAMSTRUTHVALUE_FALSE;
+- break;
+-
+- default:
+- snmp_log(LOG_ERR,
+- "couldn't reverse map value %ld for appParamsTruthValue\n",
+- appParamsTruthValue_val);
+- return SNMP_ERR_GENERR;
+- }
+- /*
+- ***---------------------------------------------***
+- *** END EXAMPLE CODE ***
+- ***************************************************/
+-
+- return MFD_SUCCESS;
+-} /* appParamsTruthValue_set */
+-
+-/**
+- * undo the previous set.
+- *
+- * @param rowreq_ctx
+- * Pointer to the users context.
+- */
+-int
+-appParamsTruthValue_undo(dessertAppParamsTable_rowreq_ctx * rowreq_ctx)
+-{
+-
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsTruthValue_undo",
+- "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:456:o: |-> Clean up appParamsTruthValue undo.
+- */
+- /*
+- * copy appParamsTruthValue data
+- * set rowreq_ctx->data.appParamsTruthValue from rowreq_ctx->undo->appParamsTruthValue
+- */
+- rowreq_ctx->data.appParamsTruthValue =
+- rowreq_ctx->undo->appParamsTruthValue;
+-
+-
+- return MFD_SUCCESS;
+-} /* appParamsTruthValue_undo */
+-
+-/*---------------------------------------------------------------------
+- * DESSERT-MIB::dessertAppParamsEntry.appParamsInteger32
+- * appParamsInteger32 is subid 6 of dessertAppParamsEntry.
+- * Its status is Current, and its access level is ReadWrite.
+- * OID: .1.3.6.1.4.1.18898.0.19.10.1.1.11.1.6
+- * Description:
+-A parameter with Integer32 semantics.
+- *
+- * Attributes:
+- * accessible 1 isscalar 0 enums 0 hasdefval 0
+- * readable 1 iscolumn 1 ranges 0 hashint 0
+- * settable 1
+- *
+- *
+- * Its syntax is INTEGER32 (based on perltype INTEGER32)
+- * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+- */
+-/**
+- * Check that the proposed new value is potentially valid.
+- *
+- * @param rowreq_ctx
+- * Pointer to the row request context.
+- * @param appParamsInteger32_val
+- * A long containing the new value.
+- *
+- * @retval MFD_SUCCESS : incoming value is legal
+- * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+- * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+- *
+- * This is the place to check for requirements that are not
+- * expressed in the mib syntax (for example, a requirement that
+- * is detailed in the description for an object).
+- *
+- * You should check that the requested change between the undo value and the
+- * new value is legal (ie, the transistion from one value to another
+- * is legal).
+- *
+- *@note
+- * This check is only to determine if the new value
+- * is \b potentially valid. This is the first check of many, and
+- * is one of the simplest ones.
+- *
+- *@note
+- * this is not the place to do any checks for values
+- * which depend on some other value in the mib. Those
+- * types of checks should be done in the
+- * dessertAppParamsTable_check_dependencies() function.
+- *
+- * The following checks have already been done for you:
+- * The syntax is ASN_INTEGER
+- *
+- * If there a no other checks you need to do, simply return MFD_SUCCESS.
+- *
+- */
+-int
+-appParamsInteger32_check_value(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx, long appParamsInteger32_val)
+-{
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsInteger32_check_value", "called\n"));
+-
+- /** should never get a NULL pointer */
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * Check for valid appParamsInteger32 value.
+- */
+-
+- dessert_debug("check_value\n\t\trowreq_ctx->data.appParamsValueType [%d]",rowreq_ctx->data.appParamsValueType);
+- if (rowreq_ctx->data.appParamsValueType != DESSERT_APPPARAMS_VALUETYPE_INT32) {
+-
+- return MFD_NOT_VALID_EVER;
+- } else {
+-
+- return MFD_SUCCESS; /* appParamsInteger32 value not illegal */
+- }
+-} /* appParamsInteger32_check_value */
+-
+-/**
+- * Save old value information
+- *
+- * @param rowreq_ctx
+- * Pointer to the table context (dessertAppParamsTable_rowreq_ctx)
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_ERROR : error. set will fail.
+- *
+- * This function will be called after the table level undo setup function
+- * dessertAppParamsTable_undo_setup has been called.
+- *
+- *@note
+- * this function will only be called if a new value is set for this column.
+- *
+- * If there is any setup specific to a particular column (e.g. allocating
+- * memory for a string), you should do that setup in this function, so it
+- * won't be done unless it is necessary.
+- */
+-int
+-appParamsInteger32_undo_setup(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx)
+-{
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsInteger32_undo_setup", "called\n"));
+-
+- /** should never get a NULL pointer */
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:455:o: |-> Setup appParamsInteger32 undo.
+- */
+- /*
+- * copy appParamsInteger32 data
+- * set rowreq_ctx->undo->appParamsInteger32 from rowreq_ctx->data.appParamsInteger32
+- */
+- rowreq_ctx->undo->appParamsInteger32 =
+- rowreq_ctx->data.appParamsInteger32;
+-
+-
+- return MFD_SUCCESS;
+-} /* appParamsInteger32_undo_setup */
+-
+-/**
+- * Set the new value.
+- *
+- * @param rowreq_ctx
+- * Pointer to the users context. You should know how to
+- * manipulate the value from this object.
+- * @param appParamsInteger32_val
+- * A long containing the new value.
+- */
+-int
+-appParamsInteger32_set(dessertAppParamsTable_rowreq_ctx * rowreq_ctx,
+- long appParamsInteger32_val)
+-{
+-
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsInteger32_set",
+- "called\n"));
+-
+- /** should never get a NULL pointer */
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:245:o: |-> Implement appParamsInteger32 reverse mapping.
+- * If the values for your data type don't exactly match the
+- * possible values defined by the mib, you should map them here.
+- */
+- /*
+- * TODO:461:M: |-> Set appParamsInteger32 value.
+- * set appParamsInteger32 value in rowreq_ctx->data
+- */
+- rowreq_ctx->data.appParamsInteger32 = appParamsInteger32_val;
+-
+-
+- return MFD_SUCCESS;
+-} /* appParamsInteger32_set */
+-
+-/**
+- * undo the previous set.
+- *
+- * @param rowreq_ctx
+- * Pointer to the users context.
+- */
+-int
+-appParamsInteger32_undo(dessertAppParamsTable_rowreq_ctx * rowreq_ctx)
+-{
+-
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsInteger32_undo",
+- "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:456:o: |-> Clean up appParamsInteger32 undo.
+- */
+- /*
+- * copy appParamsInteger32 data
+- * set rowreq_ctx->data.appParamsInteger32 from rowreq_ctx->undo->appParamsInteger32
+- */
+- rowreq_ctx->data.appParamsInteger32 =
+- rowreq_ctx->undo->appParamsInteger32;
+-
+-
+- return MFD_SUCCESS;
+-} /* appParamsInteger32_undo */
+-
+-/*---------------------------------------------------------------------
+- * DESSERT-MIB::dessertAppParamsEntry.appParamsUnsigned32
+- * appParamsUnsigned32 is subid 7 of dessertAppParamsEntry.
+- * Its status is Current, and its access level is ReadWrite.
+- * OID: .1.3.6.1.4.1.18898.0.19.10.1.1.11.1.7
+- * Description:
+-A parameter with Unsigned32 semantics.
+- *
+- * Attributes:
+- * accessible 1 isscalar 0 enums 0 hasdefval 0
+- * readable 1 iscolumn 1 ranges 0 hashint 0
+- * settable 1
+- *
+- *
+- * Its syntax is UNSIGNED32 (based on perltype UNSIGNED32)
+- * The net-snmp type is ASN_UNSIGNED. The C type decl is u_long (u_long)
+- */
+-/**
+- * Check that the proposed new value is potentially valid.
+- *
+- * @param rowreq_ctx
+- * Pointer to the row request context.
+- * @param appParamsUnsigned32_val
+- * A u_long containing the new value.
+- *
+- * @retval MFD_SUCCESS : incoming value is legal
+- * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+- * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+- *
+- * This is the place to check for requirements that are not
+- * expressed in the mib syntax (for example, a requirement that
+- * is detailed in the description for an object).
+- *
+- * You should check that the requested change between the undo value and the
+- * new value is legal (ie, the transistion from one value to another
+- * is legal).
+- *
+- *@note
+- * This check is only to determine if the new value
+- * is \b potentially valid. This is the first check of many, and
+- * is one of the simplest ones.
+- *
+- *@note
+- * this is not the place to do any checks for values
+- * which depend on some other value in the mib. Those
+- * types of checks should be done in the
+- * dessertAppParamsTable_check_dependencies() function.
+- *
+- * The following checks have already been done for you:
+- * The syntax is ASN_UNSIGNED
+- *
+- * If there a no other checks you need to do, simply return MFD_SUCCESS.
+- *
+- */
+-int
+-appParamsUnsigned32_check_value(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx, u_long appParamsUnsigned32_val)
+-{
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsUnsigned32_check_value", "called\n"));
+-
+- /** should never get a NULL pointer */
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:441:o: |-> Check for valid appParamsUnsigned32 value.
+- */
+- if (rowreq_ctx->data.appParamsValueType != DESSERT_APPPARAMS_VALUETYPE_UINT32) {
+-
+- return MFD_NOT_VALID_EVER;
+- } else {
+-
+- return MFD_SUCCESS; /* appParamsUnsigned32 value not illegal */
+- }
+-} /* appParamsUnsigned32_check_value */
+-
+-/**
+- * Save old value information
+- *
+- * @param rowreq_ctx
+- * Pointer to the table context (dessertAppParamsTable_rowreq_ctx)
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_ERROR : error. set will fail.
+- *
+- * This function will be called after the table level undo setup function
+- * dessertAppParamsTable_undo_setup has been called.
+- *
+- *@note
+- * this function will only be called if a new value is set for this column.
+- *
+- * If there is any setup specific to a particular column (e.g. allocating
+- * memory for a string), you should do that setup in this function, so it
+- * won't be done unless it is necessary.
+- */
+-int
+-appParamsUnsigned32_undo_setup(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx)
+-{
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsUnsigned32_undo_setup", "called\n"));
+-
+- /** should never get a NULL pointer */
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:455:o: |-> Setup appParamsUnsigned32 undo.
+- */
+- /*
+- * copy appParamsUnsigned32 data
+- * set rowreq_ctx->undo->appParamsUnsigned32 from rowreq_ctx->data.appParamsUnsigned32
+- */
+- rowreq_ctx->undo->appParamsUnsigned32 =
+- rowreq_ctx->data.appParamsUnsigned32;
+-
+-
+- return MFD_SUCCESS;
+-} /* appParamsUnsigned32_undo_setup */
+-
+-/**
+- * Set the new value.
+- *
+- * @param rowreq_ctx
+- * Pointer to the users context. You should know how to
+- * manipulate the value from this object.
+- * @param appParamsUnsigned32_val
+- * A u_long containing the new value.
+- */
+-int
+-appParamsUnsigned32_set(dessertAppParamsTable_rowreq_ctx * rowreq_ctx,
+- u_long appParamsUnsigned32_val)
+-{
+-
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsUnsigned32_set",
+- "called\n"));
+-
+- /** should never get a NULL pointer */
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:245:o: |-> Implement appParamsUnsigned32 reverse mapping.
+- * If the values for your data type don't exactly match the
+- * possible values defined by the mib, you should map them here.
+- */
+- /*
+- * TODO:461:M: |-> Set appParamsUnsigned32 value.
+- * set appParamsUnsigned32 value in rowreq_ctx->data
+- */
+- rowreq_ctx->data.appParamsUnsigned32 = appParamsUnsigned32_val;
+-
+-
+- return MFD_SUCCESS;
+-} /* appParamsUnsigned32_set */
+-
+-/**
+- * undo the previous set.
+- *
+- * @param rowreq_ctx
+- * Pointer to the users context.
+- */
+-int
+-appParamsUnsigned32_undo(dessertAppParamsTable_rowreq_ctx * rowreq_ctx)
+-{
+-
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsUnsigned32_undo",
+- "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:456:o: |-> Clean up appParamsUnsigned32 undo.
+- */
+- /*
+- * copy appParamsUnsigned32 data
+- * set rowreq_ctx->data.appParamsUnsigned32 from rowreq_ctx->undo->appParamsUnsigned32
+- */
+- rowreq_ctx->data.appParamsUnsigned32 =
+- rowreq_ctx->undo->appParamsUnsigned32;
+-
+-
+- return MFD_SUCCESS;
+-} /* appParamsUnsigned32_undo */
+-
+-/*---------------------------------------------------------------------
+- * DESSERT-MIB::dessertAppParamsEntry.appParamsOctetString
+- * appParamsOctetString is subid 9 of dessertAppParamsEntry.
+- * Its status is Current, and its access level is ReadWrite.
+- * OID: .1.3.6.1.4.1.18898.0.19.10.1.1.11.1.9
+- * Description:
+-A parameter containing of up to 1024 octets.
+- *
+- * Attributes:
+- * accessible 1 isscalar 0 enums 0 hasdefval 0
+- * readable 1 iscolumn 1 ranges 1 hashint 1
+- * settable 1
+- * hint: 1024a
+- *
+- * Ranges: 0 - 1024;
+- *
+- * Its syntax is DessertApplicationOctetString (based on perltype OCTETSTR)
+- * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+- * This data type requires a length. (Max 1024)
+- */
+-/**
+- * Check that the proposed new value is potentially valid.
+- *
+- * @param rowreq_ctx
+- * Pointer to the row request context.
+- * @param appParamsOctetString_val_ptr
+- * A char containing the new value.
+- * @param appParamsOctetString_val_ptr_len
+- * The size (in bytes) of the data pointed to by appParamsOctetString_val_ptr
+- *
+- * @retval MFD_SUCCESS : incoming value is legal
+- * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
+- * @retval MFD_NOT_VALID_EVER : incoming value is never valid
+- *
+- * This is the place to check for requirements that are not
+- * expressed in the mib syntax (for example, a requirement that
+- * is detailed in the description for an object).
+- *
+- * You should check that the requested change between the undo value and the
+- * new value is legal (ie, the transistion from one value to another
+- * is legal).
+- *
+- *@note
+- * This check is only to determine if the new value
+- * is \b potentially valid. This is the first check of many, and
+- * is one of the simplest ones.
+- *
+- *@note
+- * this is not the place to do any checks for values
+- * which depend on some other value in the mib. Those
+- * types of checks should be done in the
+- * dessertAppParamsTable_check_dependencies() function.
+- *
+- * The following checks have already been done for you:
+- * The syntax is ASN_OCTET_STR
+- * The length is < sizeof(rowreq_ctx->data.appParamsOctetString).
+- * The length is in (one of) the range set(s): 0 - 1024
+- *
+- * If there a no other checks you need to do, simply return MFD_SUCCESS.
+- *
+- */
+-int
+-appParamsOctetString_check_value(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx,
+- char *appParamsOctetString_val_ptr,
+- size_t appParamsOctetString_val_ptr_len)
+-{
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsOctetString_check_value", "called\n"));
+-
+- /** should never get a NULL pointer */
+- netsnmp_assert(NULL != rowreq_ctx);
+- netsnmp_assert(NULL != appParamsOctetString_val_ptr);
+-
+- /*
+- * TODO:441:o: |-> Check for valid appParamsOctetString value.
+- */
+- if (rowreq_ctx->data.appParamsValueType != DESSERT_APPPARAMS_VALUETYPE_OCTETSTRING) {
+-
+- return MFD_NOT_VALID_EVER;
+- } else {
+-
+- return MFD_SUCCESS; /* appParamsOctetString value not illegal */
+- }
+-} /* appParamsOctetString_check_value */
+-
+-/**
+- * Save old value information
+- *
+- * @param rowreq_ctx
+- * Pointer to the table context (dessertAppParamsTable_rowreq_ctx)
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_ERROR : error. set will fail.
+- *
+- * This function will be called after the table level undo setup function
+- * dessertAppParamsTable_undo_setup has been called.
+- *
+- *@note
+- * this function will only be called if a new value is set for this column.
+- *
+- * If there is any setup specific to a particular column (e.g. allocating
+- * memory for a string), you should do that setup in this function, so it
+- * won't be done unless it is necessary.
+- */
+-int
+-appParamsOctetString_undo_setup(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx)
+-{
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsOctetString_undo_setup", "called\n"));
+-
+- /** should never get a NULL pointer */
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:455:o: |-> Setup appParamsOctetString undo.
+- */
+- /*
+- * copy appParamsOctetString and appParamsOctetString_len data
+- * set rowreq_ctx->undo->appParamsOctetString from rowreq_ctx->data.appParamsOctetString
+- */
+- memcpy(rowreq_ctx->undo->appParamsOctetString,
+- rowreq_ctx->data.appParamsOctetString,
+- (rowreq_ctx->data.appParamsOctetString_len *
+- sizeof(rowreq_ctx->undo->appParamsOctetString[0])));
+- rowreq_ctx->undo->appParamsOctetString_len =
+- rowreq_ctx->data.appParamsOctetString_len;
+-
+-
+- return MFD_SUCCESS;
+-} /* appParamsOctetString_undo_setup */
+-
+-/**
+- * Set the new value.
+- *
+- * @param rowreq_ctx
+- * Pointer to the users context. You should know how to
+- * manipulate the value from this object.
+- * @param appParamsOctetString_val_ptr
+- * A char containing the new value.
+- * @param appParamsOctetString_val_ptr_len
+- * The size (in bytes) of the data pointed to by appParamsOctetString_val_ptr
+- */
+-int
+-appParamsOctetString_set(dessertAppParamsTable_rowreq_ctx * rowreq_ctx,
+- char *appParamsOctetString_val_ptr,
+- size_t appParamsOctetString_val_ptr_len)
+-{
+-
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsOctetString_set",
+- "called\n"));
+-
+- /** should never get a NULL pointer */
+- netsnmp_assert(NULL != rowreq_ctx);
+- netsnmp_assert(NULL != appParamsOctetString_val_ptr);
+-
+- /*
+- * TODO:245:o: |-> Implement appParamsOctetString reverse mapping.
+- * If the values for your data type don't exactly match the
+- * possible values defined by the mib, you should map them here.
+- */
+- /*
+- * TODO:461:M: |-> Set appParamsOctetString value.
+- * set appParamsOctetString value in rowreq_ctx->data
+- */
+- memcpy(rowreq_ctx->data.appParamsOctetString,
+- appParamsOctetString_val_ptr, appParamsOctetString_val_ptr_len);
+- /** convert bytes to number of char */
+- rowreq_ctx->data.appParamsOctetString_len =
+- appParamsOctetString_val_ptr_len /
+- sizeof(appParamsOctetString_val_ptr[0]);
+-
+-
+- return MFD_SUCCESS;
+-} /* appParamsOctetString_set */
+-
+-/**
+- * undo the previous set.
+- *
+- * @param rowreq_ctx
+- * Pointer to the users context.
+- */
+-int
+-appParamsOctetString_undo(dessertAppParamsTable_rowreq_ctx * rowreq_ctx)
+-{
+-
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsOctetString_undo",
+- "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:456:o: |-> Clean up appParamsOctetString undo.
+- */
+- /*
+- * copy appParamsOctetString and appParamsOctetString_len data
+- * set rowreq_ctx->data.appParamsOctetString from rowreq_ctx->undo->appParamsOctetString
+- */
+- memcpy(rowreq_ctx->data.appParamsOctetString,
+- rowreq_ctx->undo->appParamsOctetString,
+- (rowreq_ctx->undo->appParamsOctetString_len *
+- sizeof(rowreq_ctx->data.appParamsOctetString[0])));
+- rowreq_ctx->data.appParamsOctetString_len =
+- rowreq_ctx->undo->appParamsOctetString_len;
+-
+-
+- return MFD_SUCCESS;
+-} /* appParamsOctetString_undo */
+-
+-/** @} */
+Index: libdessert0.86-0.86.14/snmp/dessertAppParamsTable_data_set.h
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertAppParamsTable_data_set.h 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,168 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * version : 12077 $ of $
+- *
+- * $Id:$
+- */
+-#ifndef DESSERTAPPPARAMSTABLE_DATA_SET_H
+-#define DESSERTAPPPARAMSTABLE_DATA_SET_H
+-
+-#ifdef __cplusplus
+-extern "C" {
+-#endif
+-
+- /*
+- *********************************************************************
+- * SET function declarations
+- */
+-
+- /*
+- *********************************************************************
+- * SET Table declarations
+- */
+-/**********************************************************************
+- **********************************************************************
+- ***
+- *** Table dessertAppParamsTable
+- ***
+- **********************************************************************
+- **********************************************************************/
+- /*
+- * DESSERT-MIB::dessertAppParamsTable is subid 11 of dessertObjects.
+- * Its status is Current.
+- * OID: .1.3.6.1.4.1.18898.0.19.10.1.1.11, length: 13
+- */
+-
+-
+- int
+- dessertAppParamsTable_undo_setup(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx);
+- int
+- dessertAppParamsTable_undo_cleanup(dessertAppParamsTable_rowreq_ctx
+- * rowreq_ctx);
+- int
+- dessertAppParamsTable_undo(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx);
+- int
+- dessertAppParamsTable_commit(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx);
+- int
+- dessertAppParamsTable_undo_commit(dessertAppParamsTable_rowreq_ctx
+- * rowreq_ctx);
+-
+-
+- int
+- appParamsName_check_value(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx, char *appParamsName_val_ptr,
+- size_t appParamsName_val_ptr_len);
+- int
+- appParamsName_undo_setup(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx);
+- int appParamsName_set(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx,
+- char *appParamsName_val_ptr,
+- size_t appParamsName_val_ptr_len);
+- int appParamsName_undo(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx);
+-
+- int
+- appParamsDesc_check_value(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx, char *appParamsDesc_val_ptr,
+- size_t appParamsDesc_val_ptr_len);
+- int
+- appParamsDesc_undo_setup(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx);
+- int appParamsDesc_set(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx,
+- char *appParamsDesc_val_ptr,
+- size_t appParamsDesc_val_ptr_len);
+- int appParamsDesc_undo(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx);
+-
+- int
+- appParamsValueType_check_value(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx,
+- u_long appParamsValueType_val);
+- int
+- appParamsValueType_undo_setup(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx);
+- int appParamsValueType_set(dessertAppParamsTable_rowreq_ctx
+- * rowreq_ctx,
+- u_long appParamsValueType_val);
+- int
+- appParamsValueType_undo(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx);
+-
+- int
+- appParamsTruthValue_check_value(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx,
+- u_long appParamsTruthValue_val);
+- int
+- appParamsTruthValue_undo_setup(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx);
+- int
+- appParamsTruthValue_set(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx,
+- u_long appParamsTruthValue_val);
+- int
+- appParamsTruthValue_undo(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx);
+-
+- int
+- appParamsInteger32_check_value(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx,
+- long appParamsInteger32_val);
+- int
+- appParamsInteger32_undo_setup(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx);
+- int appParamsInteger32_set(dessertAppParamsTable_rowreq_ctx
+- * rowreq_ctx,
+- long appParamsInteger32_val);
+- int
+- appParamsInteger32_undo(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx);
+-
+- int
+- appParamsUnsigned32_check_value(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx,
+- u_long appParamsUnsigned32_val);
+- int
+- appParamsUnsigned32_undo_setup(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx);
+- int
+- appParamsUnsigned32_set(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx,
+- u_long appParamsUnsigned32_val);
+- int
+- appParamsUnsigned32_undo(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx);
+-
+- int
+- appParamsOctetString_check_value(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx,
+- char
+- *appParamsOctetString_val_ptr,
+- size_t
+- appParamsOctetString_val_ptr_len);
+- int
+- appParamsOctetString_undo_setup(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx);
+- int
+- appParamsOctetString_set(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx,
+- char *appParamsOctetString_val_ptr,
+- size_t appParamsOctetString_val_ptr_len);
+- int
+- appParamsOctetString_undo(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx);
+-
+-
+- int
+- dessertAppParamsTable_check_dependencies
+- (dessertAppParamsTable_rowreq_ctx * ctx);
+-
+-
+-#ifdef __cplusplus
+-}
+-#endif
+-#endif /* DESSERTAPPPARAMSTABLE_DATA_SET_H */
+Index: libdessert0.86-0.86.14/snmp/dessertAppParamsTable_enums.h
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertAppParamsTable_enums.h 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,93 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * : generic-table-enums.m2c 12526 2005-07-15 22:41:16Z rstory $
+- *
+- * $Id:$
+- */
+-#ifndef DESSERTAPPPARAMSTABLE_ENUMS_H
+-#define DESSERTAPPPARAMSTABLE_ENUMS_H
+-
+-#include "../dessert.h"
+-
+-#ifdef __cplusplus
+-extern "C" {
+-#endif
+-
+- /*
+- * NOTES on enums
+- * ==============
+- *
+- * Value Mapping
+- * -------------
+- * If the values for your data type don't exactly match the
+- * possible values defined by the mib, you should map them
+- * below. For example, a boolean flag (1/0) is usually represented
+- * as a TruthValue in a MIB, which maps to the values (1/2).
+- *
+- */
+-/*************************************************************************
+- *************************************************************************
+- *
+- * enum definitions for table dessertAppParamsTable
+- *
+- *************************************************************************
+- *************************************************************************/
+-
+-/*************************************************************
+- * constants for enums for the MIB node
+- * appParamsValueType (DessertAppValueType / ASN_INTEGER)
+- *
+- * since a Textual Convention may be referenced more than once in a
+- * MIB, protect againt redefinitions of the enum values.
+- */
+-#ifndef DESSERTAPPVALUETYPE_ENUMS
+-#define DESSERTAPPVALUETYPE_ENUMS
+-
+-#define DESSERTAPPVALUETYPE_BOOL 0
+-#define DESSERTAPPVALUETYPE_INT32 1
+-#define DESSERTAPPVALUETYPE_UINT32 2
+-#define DESSERTAPPVALUETYPE_COUNTER64 3
+-#define DESSERTAPPVALUETYPE_OCTETSTRING 4
+-
+-#endif /* DESSERTAPPVALUETYPE_ENUMS */
+-
+- /*
+- * TODO:140:o: Define your interal representation of appParamsValueType enums.
+- * (used for value mapping; see notes at top of file)
+- */
+-#define INTERNAL_DESSERTAPPPARAMSTABLE_APPPARAMSVALUETYPE_BOOL DESSERT_APPPARAMS_VALUETYPE_BOOL
+-#define INTERNAL_DESSERTAPPPARAMSTABLE_APPPARAMSVALUETYPE_INT32 DESSERT_APPPARAMS_VALUETYPE_INT32
+-#define INTERNAL_DESSERTAPPPARAMSTABLE_APPPARAMSVALUETYPE_UINT32 DESSERT_APPPARAMS_VALUETYPE_UINT32
+-#define INTERNAL_DESSERTAPPPARAMSTABLE_APPPARAMSVALUETYPE_COUNTER64 DESSERT_APPPARAMS_VALUETYPE_COUNTER64
+-#define INTERNAL_DESSERTAPPPARAMSTABLE_APPPARAMSVALUETYPE_OCTETSTRING DESSERT_APPPARAMS_VALUETYPE_OCTETSTRING
+-
+-
+-/*************************************************************
+- * constants for enums for the MIB node
+- * appParamsTruthValue (TruthValue / ASN_INTEGER)
+- *
+- * since a Textual Convention may be referenced more than once in a
+- * MIB, protect againt redefinitions of the enum values.
+- */
+-#ifndef TRUTHVALUE_ENUMS
+-#define TRUTHVALUE_ENUMS
+-
+-#define TRUTHVALUE_TRUE 1
+-#define TRUTHVALUE_FALSE 2
+-
+-#endif /* TRUTHVALUE_ENUMS */
+-
+- /*
+- * TODO:140:o: Define your interal representation of appParamsTruthValue enums.
+- * (used for value mapping; see notes at top of file)
+- */
+-#define INTERNAL_DESSERTAPPPARAMSTABLE_APPPARAMSTRUTHVALUE_TRUE DESSERT_APPPARAMS_BOOL_TRUE
+-#define INTERNAL_DESSERTAPPPARAMSTABLE_APPPARAMSTRUTHVALUE_FALSE DESSERT_APPPARAMS_BOOL_FALSE
+-
+-
+-
+-
+-#ifdef __cplusplus
+-}
+-#endif
+-#endif /* DESSERTAPPPARAMSTABLE_ENUMS_H */
+Index: libdessert0.86-0.86.14/snmp/dessertAppParamsTable_interface.c
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertAppParamsTable_interface.c 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,1843 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * version : 15899 $ of $
+- *
+- * $Id:$
+- */
+-/*
+- * *********************************************************************
+- * *********************************************************************
+- * *********************************************************************
+- * *** ***
+- * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
+- * *** ***
+- * *** ***
+- * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
+- * *** ***
+- * *** ***
+- * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
+- * *** ***
+- * *** ***
+- * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
+- * *** ***
+- * *** ***
+- * *********************************************************************
+- * *********************************************************************
+- * *********************************************************************
+- */
+-
+-/*
+- * standard Net-SNMP includes
+- */
+-#include <net-snmp/net-snmp-config.h>
+-#include <net-snmp/net-snmp-includes.h>
+-#include <net-snmp/agent/net-snmp-agent-includes.h>
+-
+-/*
+- * include our parent header
+- */
+-#include "dessertAppParamsTable.h"
+-
+-
+-#include <net-snmp/agent/table_container.h>
+-#include <net-snmp/library/container.h>
+-
+-#include "dessertAppParamsTable_interface.h"
+-
+-#include <ctype.h>
+-
+-/**********************************************************************
+- **********************************************************************
+- ***
+- *** Table dessertAppParamsTable
+- ***
+- **********************************************************************
+- **********************************************************************/
+-/*
+- * DESSERT-MIB::dessertAppParamsTable is subid 11 of dessertObjects.
+- * Its status is Current.
+- * OID: .1.3.6.1.4.1.18898.0.19.10.1.1.11, length: 13
+- */
+-typedef struct dessertAppParamsTable_interface_ctx_s {
+-
+- netsnmp_container *container;
+- netsnmp_cache *cache;
+-
+- dessertAppParamsTable_registration *user_ctx;
+-
+- netsnmp_table_registration_info tbl_info;
+-
+- netsnmp_baby_steps_access_methods access_multiplexer;
+-
+- u_int table_dirty;
+-
+-} dessertAppParamsTable_interface_ctx;
+-
+-static dessertAppParamsTable_interface_ctx dessertAppParamsTable_if_ctx;
+-
+-static void
+-_dessertAppParamsTable_container_init(dessertAppParamsTable_interface_ctx *
+- if_ctx);
+-static void
+-_dessertAppParamsTable_container_shutdown
+-(dessertAppParamsTable_interface_ctx * if_ctx);
+-
+-
+-netsnmp_container *
+-dessertAppParamsTable_container_get(void)
+-{
+- return dessertAppParamsTable_if_ctx.container;
+-}
+-
+-dessertAppParamsTable_registration *
+-dessertAppParamsTable_registration_get(void)
+-{
+- return dessertAppParamsTable_if_ctx.user_ctx;
+-}
+-
+-dessertAppParamsTable_registration *
+-dessertAppParamsTable_registration_set(dessertAppParamsTable_registration *
+- newreg)
+-{
+- dessertAppParamsTable_registration *old =
+- dessertAppParamsTable_if_ctx.user_ctx;
+- dessertAppParamsTable_if_ctx.user_ctx = newreg;
+- return old;
+-}
+-
+-int
+-dessertAppParamsTable_container_size(void)
+-{
+- return CONTAINER_SIZE(dessertAppParamsTable_if_ctx.container);
+-}
+-
+-u_int
+-dessertAppParamsTable_dirty_get(void)
+-{
+- return dessertAppParamsTable_if_ctx.table_dirty;
+-}
+-
+-void
+-dessertAppParamsTable_dirty_set(u_int status)
+-{
+- DEBUGMSGTL(("dessertAppParamsTable:dessertAppParamsTable_dirty_set",
+- "called. was %d, now %d\n",
+- dessertAppParamsTable_if_ctx.table_dirty, status));
+- dessertAppParamsTable_if_ctx.table_dirty = status;
+-}
+-
+-/*
+- * mfd multiplexer modes
+- */
+-static Netsnmp_Node_Handler _mfd_dessertAppParamsTable_pre_request;
+-static Netsnmp_Node_Handler _mfd_dessertAppParamsTable_post_request;
+-static Netsnmp_Node_Handler _mfd_dessertAppParamsTable_object_lookup;
+-static Netsnmp_Node_Handler _mfd_dessertAppParamsTable_get_values;
+-static Netsnmp_Node_Handler _mfd_dessertAppParamsTable_check_objects;
+-static Netsnmp_Node_Handler _mfd_dessertAppParamsTable_undo_setup;
+-static Netsnmp_Node_Handler _mfd_dessertAppParamsTable_set_values;
+-static Netsnmp_Node_Handler _mfd_dessertAppParamsTable_undo_cleanup;
+-static Netsnmp_Node_Handler _mfd_dessertAppParamsTable_undo_values;
+-static Netsnmp_Node_Handler _mfd_dessertAppParamsTable_commit;
+-static Netsnmp_Node_Handler _mfd_dessertAppParamsTable_undo_commit;
+-static Netsnmp_Node_Handler _mfd_dessertAppParamsTable_irreversible_commit;
+-
+-NETSNMP_STATIC_INLINE int
+-_dessertAppParamsTable_undo_column(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx, netsnmp_variable_list * var,
+- int column);
+-
+-dessertAppParamsTable_data *dessertAppParamsTable_allocate_data(void);
+-
+-/**
+- * @internal
+- * Initialize the table dessertAppParamsTable
+- * (Define its contents and how it's structured)
+- */
+-void
+-_dessertAppParamsTable_initialize_interface
+- (dessertAppParamsTable_registration * reg_ptr, u_long flags)
+-{
+- netsnmp_baby_steps_access_methods *access_multiplexer =
+- &dessertAppParamsTable_if_ctx.access_multiplexer;
+- netsnmp_table_registration_info *tbl_info =
+- &dessertAppParamsTable_if_ctx.tbl_info;
+- netsnmp_handler_registration *reginfo;
+- netsnmp_mib_handler *handler;
+- int mfd_modes = 0;
+-
+- DEBUGMSGTL(("internal:dessertAppParamsTable:_dessertAppParamsTable_initialize_interface", "called\n"));
+-
+-
+- /*************************************************
+- *
+- * save interface context for dessertAppParamsTable
+- */
+- /*
+- * Setting up the table's definition
+- */
+- netsnmp_table_helper_add_indexes(tbl_info, ASN_INTEGER,
+- /** index: appParamsIndex */
+- 0);
+-
+- /*
+- * Define the minimum and maximum accessible columns. This
+- * optimizes retrival.
+- */
+- tbl_info->min_column = DESSERTAPPPARAMSTABLE_MIN_COL;
+- tbl_info->max_column = DESSERTAPPPARAMSTABLE_MAX_COL;
+-
+- /*
+- * save users context
+- */
+- dessertAppParamsTable_if_ctx.user_ctx = reg_ptr;
+-
+- /*
+- * call data access initialization code
+- */
+- dessertAppParamsTable_init_data(reg_ptr);
+-
+- /*
+- * set up the container
+- */
+- _dessertAppParamsTable_container_init(&dessertAppParamsTable_if_ctx);
+- if (NULL == dessertAppParamsTable_if_ctx.container) {
+- snmp_log(LOG_ERR,
+- "could not initialize container for dessertAppParamsTable\n");
+- return;
+- }
+-
+- /*
+- * access_multiplexer: REQUIRED wrapper for get request handling
+- */
+- access_multiplexer->object_lookup =
+- _mfd_dessertAppParamsTable_object_lookup;
+- access_multiplexer->get_values = _mfd_dessertAppParamsTable_get_values;
+-
+- /*
+- * no wrappers yet
+- */
+- access_multiplexer->pre_request =
+- _mfd_dessertAppParamsTable_pre_request;
+- access_multiplexer->post_request =
+- _mfd_dessertAppParamsTable_post_request;
+-
+-
+- /*
+- * REQUIRED wrappers for set request handling
+- */
+- access_multiplexer->object_syntax_checks =
+- _mfd_dessertAppParamsTable_check_objects;
+- access_multiplexer->undo_setup = _mfd_dessertAppParamsTable_undo_setup;
+- access_multiplexer->undo_cleanup =
+- _mfd_dessertAppParamsTable_undo_cleanup;
+- access_multiplexer->set_values = _mfd_dessertAppParamsTable_set_values;
+- access_multiplexer->undo_sets = _mfd_dessertAppParamsTable_undo_values;
+-
+- /*
+- * no wrappers yet
+- */
+- access_multiplexer->commit = _mfd_dessertAppParamsTable_commit;
+- access_multiplexer->undo_commit =
+- _mfd_dessertAppParamsTable_undo_commit;
+- access_multiplexer->irreversible_commit =
+- _mfd_dessertAppParamsTable_irreversible_commit;
+-
+- /*************************************************
+- *
+- * Create a registration, save our reg data, register table.
+- */
+- DEBUGMSGTL(("dessertAppParamsTable:init_dessertAppParamsTable",
+- "Registering dessertAppParamsTable as a mibs-for-dummies table.\n"));
+- handler =
+- netsnmp_baby_steps_access_multiplexer_get(access_multiplexer);
+- reginfo =
+- netsnmp_handler_registration_create("dessertAppParamsTable",
+- handler,
+- dessertAppParamsTable_oid,
+- dessertAppParamsTable_oid_size,
+- HANDLER_CAN_BABY_STEP |
+- HANDLER_CAN_RWRITE);
+- if (NULL == reginfo) {
+- snmp_log(LOG_ERR,
+- "error registering table dessertAppParamsTable\n");
+- return;
+- }
+- reginfo->my_reg_void = &dessertAppParamsTable_if_ctx;
+-
+- /*************************************************
+- *
+- * set up baby steps handler, create it and inject it
+- */
+- if (access_multiplexer->object_lookup)
+- mfd_modes |= BABY_STEP_OBJECT_LOOKUP;
+- if (access_multiplexer->set_values)
+- mfd_modes |= BABY_STEP_SET_VALUES;
+- if (access_multiplexer->irreversible_commit)
+- mfd_modes |= BABY_STEP_IRREVERSIBLE_COMMIT;
+- if (access_multiplexer->object_syntax_checks)
+- mfd_modes |= BABY_STEP_CHECK_OBJECT;
+-
+- if (access_multiplexer->pre_request)
+- mfd_modes |= BABY_STEP_PRE_REQUEST;
+- if (access_multiplexer->post_request)
+- mfd_modes |= BABY_STEP_POST_REQUEST;
+-
+- if (access_multiplexer->undo_setup)
+- mfd_modes |= BABY_STEP_UNDO_SETUP;
+- if (access_multiplexer->undo_cleanup)
+- mfd_modes |= BABY_STEP_UNDO_CLEANUP;
+- if (access_multiplexer->undo_sets)
+- mfd_modes |= BABY_STEP_UNDO_SETS;
+-
+- if (access_multiplexer->row_creation)
+- mfd_modes |= BABY_STEP_ROW_CREATE;
+- if (access_multiplexer->consistency_checks)
+- mfd_modes |= BABY_STEP_CHECK_CONSISTENCY;
+- if (access_multiplexer->commit)
+- mfd_modes |= BABY_STEP_COMMIT;
+- if (access_multiplexer->undo_commit)
+- mfd_modes |= BABY_STEP_UNDO_COMMIT;
+-
+- handler = netsnmp_baby_steps_handler_get(mfd_modes);
+- netsnmp_inject_handler(reginfo, handler);
+-
+- /*************************************************
+- *
+- * inject row_merge helper with prefix rootoid_len + 2 (entry.col)
+- */
+- handler = netsnmp_get_row_merge_handler(reginfo->rootoid_len + 2);
+- netsnmp_inject_handler(reginfo, handler);
+-
+- /*************************************************
+- *
+- * inject container_table helper
+- */
+- handler =
+- netsnmp_container_table_handler_get(tbl_info,
+- dessertAppParamsTable_if_ctx.
+- container,
+- TABLE_CONTAINER_KEY_NETSNMP_INDEX);
+- netsnmp_inject_handler(reginfo, handler);
+-
+- /*************************************************
+- *
+- * inject cache helper
+- */
+- if (NULL != dessertAppParamsTable_if_ctx.cache) {
+- handler =
+- netsnmp_cache_handler_get(dessertAppParamsTable_if_ctx.cache);
+- netsnmp_inject_handler(reginfo, handler);
+- }
+-
+- /*
+- * register table
+- */
+- netsnmp_register_table(reginfo, tbl_info);
+-
+-} /* _dessertAppParamsTable_initialize_interface */
+-
+-/**
+- * @internal
+- * Shutdown the table dessertAppParamsTable
+- */
+-void
+-_dessertAppParamsTable_shutdown_interface
+- (dessertAppParamsTable_registration * reg_ptr)
+-{
+- /*
+- * shutdown the container
+- */
+- _dessertAppParamsTable_container_shutdown
+- (&dessertAppParamsTable_if_ctx);
+-}
+-
+-void
+-dessertAppParamsTable_valid_columns_set(netsnmp_column_info *vc)
+-{
+- dessertAppParamsTable_if_ctx.tbl_info.valid_columns = vc;
+-} /* dessertAppParamsTable_valid_columns_set */
+-
+-/**
+- * @internal
+- * convert the index component stored in the context to an oid
+- */
+-int
+-dessertAppParamsTable_index_to_oid(netsnmp_index * oid_idx,
+- dessertAppParamsTable_mib_index *
+- mib_idx)
+-{
+- int err = SNMP_ERR_NOERROR;
+-
+- /*
+- * temp storage for parsing indexes
+- */
+- /*
+- * appParamsIndex(1)/DessertAppParamsIndex/ASN_INTEGER/long(long)//l/a/w/e/R/d/H
+- */
+- netsnmp_variable_list var_appParamsIndex;
+-
+- /*
+- * set up varbinds
+- */
+- memset(&var_appParamsIndex, 0x00, sizeof(var_appParamsIndex));
+- var_appParamsIndex.type = ASN_INTEGER;
+-
+- /*
+- * chain temp index varbinds together
+- */
+- var_appParamsIndex.next_variable = NULL;
+-
+-
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:dessertAppParamsTable_index_to_oid", "called\n"));
+-
+- /*
+- * appParamsIndex(1)/DessertAppParamsIndex/ASN_INTEGER/long(long)//l/a/w/e/R/d/H
+- */
+- snmp_set_var_value(&var_appParamsIndex,
+- (u_char *) & mib_idx->appParamsIndex,
+- sizeof(mib_idx->appParamsIndex));
+-
+-
+- err = build_oid_noalloc(oid_idx->oids, oid_idx->len, &oid_idx->len,
+- NULL, 0, &var_appParamsIndex);
+- if (err)
+- snmp_log(LOG_ERR, "error %d converting index to oid\n", err);
+-
+- /*
+- * parsing may have allocated memory. free it.
+- */
+- snmp_reset_var_buffers(&var_appParamsIndex);
+-
+- return err;
+-} /* dessertAppParamsTable_index_to_oid */
+-
+-/**
+- * extract dessertAppParamsTable indexes from a netsnmp_index
+- *
+- * @retval SNMP_ERR_NOERROR : no error
+- * @retval SNMP_ERR_GENERR : error
+- */
+-int
+-dessertAppParamsTable_index_from_oid(netsnmp_index * oid_idx,
+- dessertAppParamsTable_mib_index *
+- mib_idx)
+-{
+- int err = SNMP_ERR_NOERROR;
+-
+- /*
+- * temp storage for parsing indexes
+- */
+- /*
+- * appParamsIndex(1)/DessertAppParamsIndex/ASN_INTEGER/long(long)//l/a/w/e/R/d/H
+- */
+- netsnmp_variable_list var_appParamsIndex;
+-
+- /*
+- * set up varbinds
+- */
+- memset(&var_appParamsIndex, 0x00, sizeof(var_appParamsIndex));
+- var_appParamsIndex.type = ASN_INTEGER;
+-
+- /*
+- * chain temp index varbinds together
+- */
+- var_appParamsIndex.next_variable = NULL;
+-
+-
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:dessertAppParamsTable_index_from_oid", "called\n"));
+-
+- /*
+- * parse the oid into the individual index components
+- */
+- err = parse_oid_indexes(oid_idx->oids, oid_idx->len,
+- &var_appParamsIndex);
+- if (err == SNMP_ERR_NOERROR) {
+- /*
+- * copy out values
+- */
+- mib_idx->appParamsIndex =
+- *((long *) var_appParamsIndex.val.string);
+-
+-
+- }
+-
+- /*
+- * parsing may have allocated memory. free it.
+- */
+- snmp_reset_var_buffers(&var_appParamsIndex);
+-
+- return err;
+-} /* dessertAppParamsTable_index_from_oid */
+-
+-
+-/*
+- * dessertAppParamsTable_allocate_data
+- *
+- * Purpose: create new dessertAppParamsTable_data.
+- */
+-dessertAppParamsTable_data *
+-dessertAppParamsTable_allocate_data(void)
+-{
+- dessertAppParamsTable_data *rtn =
+- SNMP_MALLOC_TYPEDEF(dessertAppParamsTable_data);
+-
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:dessertAppParamsTable_allocate_data", "called\n"));
+-
+- if (NULL == rtn) {
+- snmp_log(LOG_ERR, "unable to malloc memory for new "
+- "dessertAppParamsTable_data.\n");
+- }
+-
+- return rtn;
+-} /* dessertAppParamsTable_allocate_data */
+-
+-/*
+- * dessertAppParamsTable_release_data
+- *
+- * Purpose: release dessertAppParamsTable data.
+- */
+-void
+-dessertAppParamsTable_release_data(dessertAppParamsTable_data * data)
+-{
+- DEBUGMSGTL(("verbose:dessertAppParamsTable:dessertAppParamsTable_release_data", "called\n"));
+-
+- free(data);
+-} /* dessertAppParamsTable_release_data */
+-
+-/*
+- *********************************************************************
+- * @internal
+- * allocate resources for a dessertAppParamsTable_rowreq_ctx
+- */
+-dessertAppParamsTable_rowreq_ctx *
+-dessertAppParamsTable_allocate_rowreq_ctx(void)
+-{
+- dessertAppParamsTable_rowreq_ctx *rowreq_ctx =
+- SNMP_MALLOC_TYPEDEF(dessertAppParamsTable_rowreq_ctx);
+-
+- DEBUGMSGTL(("internal:dessertAppParamsTable:dessertAppParamsTable_allocate_rowreq_ctx", "called\n"));
+-
+- if (NULL == rowreq_ctx) {
+- snmp_log(LOG_ERR, "Couldn't allocate memory for a "
+- "dessertAppParamsTable_rowreq_ctx.\n");
+- return NULL;
+- }
+-
+- rowreq_ctx->oid_idx.oids = rowreq_ctx->oid_tmp;
+-
+- rowreq_ctx->dessertAppParamsTable_data_list = NULL;
+-
+-
+- return rowreq_ctx;
+-} /* dessertAppParamsTable_allocate_rowreq_ctx */
+-
+-/*
+- * @internal
+- * release resources for a dessertAppParamsTable_rowreq_ctx
+- */
+-void
+-dessertAppParamsTable_release_rowreq_ctx(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx)
+-{
+- DEBUGMSGTL(("internal:dessertAppParamsTable:dessertAppParamsTable_release_rowreq_ctx", "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+-
+- if (rowreq_ctx->undo)
+- dessertAppParamsTable_release_data(rowreq_ctx->undo);
+-
+- /*
+- * free index oid pointer
+- */
+- if (rowreq_ctx->oid_idx.oids != rowreq_ctx->oid_tmp)
+- free(rowreq_ctx->oid_idx.oids);
+-
+- SNMP_FREE(rowreq_ctx);
+-} /* dessertAppParamsTable_release_rowreq_ctx */
+-
+-/**
+- * @internal
+- * wrapper
+- */
+-static int
+-_mfd_dessertAppParamsTable_pre_request(netsnmp_mib_handler *handler,
+- netsnmp_handler_registration
+- *reginfo,
+- netsnmp_agent_request_info
+- *agtreq_info,
+- netsnmp_request_info *requests)
+-{
+- int rc;
+-
+- DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_dessertAppParamsTable_pre_request", "called\n"));
+-
+- if (1 != netsnmp_row_merge_status_first(reginfo, agtreq_info)) {
+- DEBUGMSGTL(("internal:dessertAppParamsTable",
+- "skipping additional pre_request\n"));
+- return SNMP_ERR_NOERROR;
+- }
+-
+- rc = dessertAppParamsTable_pre_request(dessertAppParamsTable_if_ctx.
+- user_ctx);
+- if (MFD_SUCCESS != rc) {
+- /*
+- * nothing we can do about it but log it
+- */
+- DEBUGMSGTL(("dessertAppParamsTable", "error %d from "
+- "dessertAppParamsTable_pre_request\n", rc));
+- netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+- }
+-
+- return SNMP_ERR_NOERROR;
+-} /* _mfd_dessertAppParamsTable_pre_request */
+-
+-/**
+- * @internal
+- * wrapper
+- */
+-static int
+-_mfd_dessertAppParamsTable_post_request(netsnmp_mib_handler *handler,
+- netsnmp_handler_registration
+- *reginfo,
+- netsnmp_agent_request_info
+- *agtreq_info,
+- netsnmp_request_info *requests)
+-{
+- dessertAppParamsTable_rowreq_ctx *rowreq_ctx =
+- netsnmp_container_table_row_extract(requests);
+- int rc, packet_rc;
+-
+- DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_dessertAppParamsTable_post_request", "called\n"));
+-
+- /*
+- * release row context, if deleted
+- */
+- if (rowreq_ctx && (rowreq_ctx->rowreq_flags & MFD_ROW_DELETED))
+- dessertAppParamsTable_release_rowreq_ctx(rowreq_ctx);
+-
+- /*
+- * wait for last call before calling user
+- */
+- if (1 != netsnmp_row_merge_status_last(reginfo, agtreq_info)) {
+- DEBUGMSGTL(("internal:dessertAppParamsTable",
+- "waiting for last post_request\n"));
+- return SNMP_ERR_NOERROR;
+- }
+-
+- packet_rc = netsnmp_check_all_requests_error(agtreq_info->asp, 0);
+- if ((MFD_SUCCESS != packet_rc) && dessertAppParamsTable_dirty_get()) {
+- /*
+- * we shouldn't get here. the undo steps should also clear
+- * the dirty flags.
+- */
+- snmp_log(LOG_WARNING,
+- "dessertAppParamsTable dirty flag set in post_request "
+- "but status != SUCCESS.\n");
+- }
+-
+- rc = dessertAppParamsTable_post_request(dessertAppParamsTable_if_ctx.
+- user_ctx, packet_rc);
+- if (MFD_SUCCESS != rc) {
+- /*
+- * nothing we can do about it but log it
+- */
+- DEBUGMSGTL(("dessertAppParamsTable", "error %d from "
+- "dessertAppParamsTable_post_request\n", rc));
+- }
+-
+- return SNMP_ERR_NOERROR;
+-} /* _mfd_dessertAppParamsTable_post_request */
+-
+-/**
+- * @internal
+- * wrapper
+- */
+-static int
+-_mfd_dessertAppParamsTable_object_lookup(netsnmp_mib_handler *handler,
+- netsnmp_handler_registration
+- *reginfo,
+- netsnmp_agent_request_info
+- *agtreq_info,
+- netsnmp_request_info *requests)
+-{
+- int rc = SNMP_ERR_NOERROR;
+- dessertAppParamsTable_rowreq_ctx *rowreq_ctx =
+- netsnmp_container_table_row_extract(requests);
+-
+- DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_dessertAppParamsTable_object_lookup", "called\n"));
+-
+- /*
+- * get our context from mfd
+- * dessertAppParamsTable_interface_ctx *if_ctx =
+- * (dessertAppParamsTable_interface_ctx *)reginfo->my_reg_void;
+- */
+-
+- if (NULL == rowreq_ctx) {
+- rc = SNMP_ERR_NOCREATION;
+- }
+-
+- if (MFD_SUCCESS != rc)
+- netsnmp_request_set_error_all(requests, rc);
+- else
+- dessertAppParamsTable_row_prep(rowreq_ctx);
+-
+- return SNMP_VALIDATE_ERR(rc);
+-} /* _mfd_dessertAppParamsTable_object_lookup */
+-
+-/***********************************************************************
+- *
+- * GET processing
+- *
+- ***********************************************************************/
+-/*
+- * @internal
+- * Retrieve the value for a particular column
+- */
+-NETSNMP_STATIC_INLINE int
+-_dessertAppParamsTable_get_column(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx, netsnmp_variable_list * var,
+- int column)
+-{
+- int rc = SNMPERR_SUCCESS;
+-
+- DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_dessertAppParamsTable_get_column", "called for %d\n", column));
+-
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- switch (column) {
+-
+- /*
+- * appParamsName(2)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
+- */
+- case COLUMN_APPPARAMSNAME:
+- if (!(COLUMN_APPPARAMSNAME_FLAG & rowreq_ctx->column_exists_flags)) {
+- DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_dessertAppParamsTable_get_column", "column %d (appParamsName) doesn't exist\n", column));
+- return MFD_SKIP;
+- }
+-
+- var->type = ASN_OCTET_STR;
+- rc = appParamsName_get(rowreq_ctx, (char **) &var->val.string,
+- &var->val_len);
+- break;
+-
+- /*
+- * appParamsDesc(3)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
+- */
+- case COLUMN_APPPARAMSDESC:
+- if (!(COLUMN_APPPARAMSDESC_FLAG & rowreq_ctx->column_exists_flags)) {
+- DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_dessertAppParamsTable_get_column", "column %d (appParamsDesc) doesn't exist\n", column));
+- return MFD_SKIP;
+- }
+-
+- var->type = ASN_OCTET_STR;
+- rc = appParamsDesc_get(rowreq_ctx, (char **) &var->val.string,
+- &var->val_len);
+- break;
+-
+- /*
+- * appParamsValueType(4)/DessertAppValueType/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h
+- */
+- case COLUMN_APPPARAMSVALUETYPE:
+- if (!
+- (COLUMN_APPPARAMSVALUETYPE_FLAG & rowreq_ctx->
+- column_exists_flags)) {
+- DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_dessertAppParamsTable_get_column", "column %d (appParamsValueType) doesn't exist\n", column));
+- return MFD_SKIP;
+- }
+-
+- var->val_len = sizeof(u_long);
+- var->type = ASN_INTEGER;
+- rc = appParamsValueType_get(rowreq_ctx,
+- (u_long *) var->val.string);
+- break;
+-
+- /*
+- * appParamsTruthValue(5)/TruthValue/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+- */
+- case COLUMN_APPPARAMSTRUTHVALUE:
+- if (!
+- (COLUMN_APPPARAMSTRUTHVALUE_FLAG & rowreq_ctx->
+- column_exists_flags)) {
+- DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_dessertAppParamsTable_get_column", "column %d (appParamsTruthValue) doesn't exist\n", column));
+- return MFD_SKIP;
+- }
+-
+- var->val_len = sizeof(u_long);
+- var->type = ASN_INTEGER;
+- rc = appParamsTruthValue_get(rowreq_ctx,
+- (u_long *) var->val.string);
+- break;
+-
+- /*
+- * appParamsInteger32(6)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/r/d/h
+- */
+- case COLUMN_APPPARAMSINTEGER32:
+- if (!
+- (COLUMN_APPPARAMSINTEGER32_FLAG & rowreq_ctx->
+- column_exists_flags)) {
+- DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_dessertAppParamsTable_get_column", "column %d (appParamsInteger32) doesn't exist\n", column));
+- return MFD_SKIP;
+- }
+-
+- var->val_len = sizeof(long);
+- var->type = ASN_INTEGER;
+- rc = appParamsInteger32_get(rowreq_ctx, (long *) var->val.string);
+- break;
+-
+- /*
+- * appParamsUnsigned32(7)/UNSIGNED32/ASN_UNSIGNED/u_long(u_long)//l/A/W/e/r/d/h
+- */
+- case COLUMN_APPPARAMSUNSIGNED32:
+- if (!
+- (COLUMN_APPPARAMSUNSIGNED32_FLAG & rowreq_ctx->
+- column_exists_flags)) {
+- DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_dessertAppParamsTable_get_column", "column %d (appParamsUnsigned32) doesn't exist\n", column));
+- return MFD_SKIP;
+- }
+-
+- var->val_len = sizeof(u_long);
+- var->type = ASN_UNSIGNED;
+- rc = appParamsUnsigned32_get(rowreq_ctx,
+- (u_long *) var->val.string);
+- break;
+-
+- /*
+- * appParamsOctetString(9)/DessertApplicationOctetString/ASN_OCTET_STR/char(char)//L/A/W/e/R/d/H
+- */
+- case COLUMN_APPPARAMSOCTETSTRING:
+- if (!
+- (COLUMN_APPPARAMSOCTETSTRING_FLAG & rowreq_ctx->
+- column_exists_flags)) {
+- DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_dessertAppParamsTable_get_column", "column %d (appParamsOctetString) doesn't exist\n", column));
+- return MFD_SKIP;
+- }
+-
+- var->type = ASN_OCTET_STR;
+- rc = appParamsOctetString_get(rowreq_ctx,
+- (char **) &var->val.string,
+- &var->val_len);
+- break;
+-
+- default:
+- if (DESSERTAPPPARAMSTABLE_MIN_COL <= column
+- && column <= DESSERTAPPPARAMSTABLE_MAX_COL) {
+- DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_dessertAppParamsTable_get_column", "assume column %d is reserved\n", column));
+- rc = MFD_SKIP;
+- } else {
+- snmp_log(LOG_ERR,
+- "unknown column %d in _dessertAppParamsTable_get_column\n",
+- column);
+- }
+- break;
+- }
+-
+- return rc;
+-} /* _dessertAppParamsTable_get_column */
+-
+-int
+-_mfd_dessertAppParamsTable_get_values(netsnmp_mib_handler *handler,
+- netsnmp_handler_registration
+- *reginfo,
+- netsnmp_agent_request_info
+- *agtreq_info,
+- netsnmp_request_info *requests)
+-{
+- dessertAppParamsTable_rowreq_ctx *rowreq_ctx =
+- netsnmp_container_table_row_extract(requests);
+- netsnmp_table_request_info *tri;
+- u_char *old_string;
+- void (*dataFreeHook) (void *);
+- int rc;
+-
+- DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_dessertAppParamsTable_get_values", "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- DEBUGMSGTL(("9:dessertAppParamsTable:_mfd_dessertAppParamsTable_get_values", "exists %p\n", rowreq_ctx->column_exists_flags));
+-
+- for (; requests; requests = requests->next) {
+- /*
+- * save old pointer, so we can free it if replaced
+- */
+- old_string = requests->requestvb->val.string;
+- dataFreeHook = requests->requestvb->dataFreeHook;
+- if (NULL == requests->requestvb->val.string) {
+- requests->requestvb->val.string = requests->requestvb->buf;
+- requests->requestvb->val_len =
+- sizeof(requests->requestvb->buf);
+- } else if (requests->requestvb->buf ==
+- requests->requestvb->val.string) {
+- if (requests->requestvb->val_len !=
+- sizeof(requests->requestvb->buf))
+- requests->requestvb->val_len =
+- sizeof(requests->requestvb->buf);
+- }
+-
+- /*
+- * get column data
+- */
+- tri = netsnmp_extract_table_info(requests);
+- if (NULL == tri)
+- continue;
+-
+- rc = _dessertAppParamsTable_get_column(rowreq_ctx,
+- requests->requestvb,
+- tri->colnum);
+- if (rc) {
+- if (MFD_SKIP == rc) {
+- requests->requestvb->type = SNMP_NOSUCHINSTANCE;
+- rc = SNMP_ERR_NOERROR;
+- }
+- } else if (NULL == requests->requestvb->val.string) {
+- snmp_log(LOG_ERR, "NULL varbind data pointer!\n");
+- rc = SNMP_ERR_GENERR;
+- }
+- if (rc)
+- netsnmp_request_set_error(requests, SNMP_VALIDATE_ERR(rc));
+-
+- /*
+- * if the buffer wasn't used previously for the old data (i.e. it
+- * was allcoated memory) and the get routine replaced the pointer,
+- * we need to free the previous pointer.
+- */
+- if (old_string && (old_string != requests->requestvb->buf) &&
+- (requests->requestvb->val.string != old_string)) {
+- if (dataFreeHook)
+- (*dataFreeHook) (old_string);
+- else
+- free(old_string);
+- }
+- } /* for results */
+-
+- return SNMP_ERR_NOERROR;
+-} /* _mfd_dessertAppParamsTable_get_values */
+-
+-
+-/***********************************************************************
+- *
+- * SET processing
+- *
+- ***********************************************************************/
+-
+-/*----------------------------------------------------------------------
+- *
+- * SET: Syntax checks
+- *
+- *---------------------------------------------------------------------*/
+-/*
+- * @internal
+- * Check the syntax for a particular column
+- */
+-NETSNMP_STATIC_INLINE int
+-_dessertAppParamsTable_check_column(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx,
+- netsnmp_variable_list * var,
+- int column)
+-{
+- int rc = SNMPERR_SUCCESS;
+-
+- DEBUGMSGTL(("internal:dessertAppParamsTable:_dessertAppParamsTable_check_column", "called for %d\n", column));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- switch (column) {
+- /*
+- * (INDEX) appParamsIndex(1)/DessertAppParamsIndex/ASN_INTEGER/long(long)//l/a/w/e/R/d/H
+- */
+- case COLUMN_APPPARAMSINDEX:
+- rc = SNMP_ERR_NOTWRITABLE; /* can not change index of active row */
+- break;
+-
+- /*
+- * appParamsName(2)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
+- */
+- case COLUMN_APPPARAMSNAME:
+- rc = SNMP_ERR_NOTWRITABLE;
+- break;
+-
+- /*
+- * appParamsDesc(3)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
+- */
+- case COLUMN_APPPARAMSDESC:
+- rc = SNMP_ERR_NOTWRITABLE;
+- break;
+-
+- /*
+- * appParamsValueType(4)/DessertAppValueType/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h
+- */
+- case COLUMN_APPPARAMSVALUETYPE:
+- rc = SNMP_ERR_NOTWRITABLE;
+- break;
+-
+- /*
+- * appParamsTruthValue(5)/TruthValue/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+- */
+- case COLUMN_APPPARAMSTRUTHVALUE:
+- rc = netsnmp_check_vb_type_and_size(var, ASN_INTEGER,
+- sizeof(rowreq_ctx->data.
+- appParamsTruthValue));
+- /*
+- * check that the value is one of defined enums
+- */
+- if ((SNMPERR_SUCCESS == rc)
+- && (*var->val.integer != TRUTHVALUE_TRUE)
+- && (*var->val.integer != TRUTHVALUE_FALSE)
+- ) {
+- rc = SNMP_ERR_WRONGVALUE;
+- }
+- if (SNMPERR_SUCCESS != rc) {
+- DEBUGMSGTL(("dessertAppParamsTable:_dessertAppParamsTable_check_column:appParamsTruthValue", "varbind validation failed (eg bad type or size)\n"));
+- } else {
+- rc = appParamsTruthValue_check_value(rowreq_ctx,
+- *((u_long *) var->val.
+- string));
+- if ((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc)
+- && (MFD_NOT_VALID_NOW != rc)) {
+- snmp_log(LOG_ERR,
+- "bad rc %d from appParamsTruthValue_check_value\n",
+- rc);
+- rc = SNMP_ERR_GENERR;
+- }
+- }
+- break;
+-
+- /*
+- * appParamsInteger32(6)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/r/d/h
+- */
+- case COLUMN_APPPARAMSINTEGER32:
+- rc = netsnmp_check_vb_type_and_size(var, ASN_INTEGER,
+- sizeof(rowreq_ctx->data.
+- appParamsInteger32));
+- if (SNMPERR_SUCCESS != rc) {
+- DEBUGMSGTL(("dessertAppParamsTable:_dessertAppParamsTable_check_column:appParamsInteger32", "varbind validation failed (eg bad type or size)\n"));
+- } else {
+- rc = appParamsInteger32_check_value(rowreq_ctx,
+- *((long *) var->val.
+- string));
+- if ((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc)
+- && (MFD_NOT_VALID_NOW != rc)) {
+- snmp_log(LOG_ERR,
+- "bad rc %d from appParamsInteger32_check_value\n",
+- rc);
+- rc = SNMP_ERR_GENERR;
+- }
+- }
+- break;
+-
+- /*
+- * appParamsUnsigned32(7)/UNSIGNED32/ASN_UNSIGNED/u_long(u_long)//l/A/W/e/r/d/h
+- */
+- case COLUMN_APPPARAMSUNSIGNED32:
+- rc = netsnmp_check_vb_type_and_size(var, ASN_UNSIGNED,
+- sizeof(rowreq_ctx->data.
+- appParamsUnsigned32));
+- if (SNMPERR_SUCCESS != rc) {
+- DEBUGMSGTL(("dessertAppParamsTable:_dessertAppParamsTable_check_column:appParamsUnsigned32", "varbind validation failed (eg bad type or size)\n"));
+- } else {
+- rc = appParamsUnsigned32_check_value(rowreq_ctx,
+- *((u_long *) var->val.
+- string));
+- if ((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc)
+- && (MFD_NOT_VALID_NOW != rc)) {
+- snmp_log(LOG_ERR,
+- "bad rc %d from appParamsUnsigned32_check_value\n",
+- rc);
+- rc = SNMP_ERR_GENERR;
+- }
+- }
+- break;
+-
+- /*
+- * appParamsOctetString(9)/DessertApplicationOctetString/ASN_OCTET_STR/char(char)//L/A/W/e/R/d/H
+- */
+- case COLUMN_APPPARAMSOCTETSTRING:
+- rc = netsnmp_check_vb_type_and_max_size(var, ASN_OCTET_STR,
+- sizeof(rowreq_ctx->data.
+- appParamsOctetString));
+- /*
+- * check defined range(s).
+- */
+- if ((SNMPERR_SUCCESS == rc)
+- && ((var->val_len < 0) || (var->val_len > 1024))
+- ) {
+- rc = SNMP_ERR_WRONGLENGTH;
+- }
+- if (SNMPERR_SUCCESS != rc) {
+- DEBUGMSGTL(("dessertAppParamsTable:_dessertAppParamsTable_check_column:appParamsOctetString", "varbind validation failed (eg bad type or size)\n"));
+- } else {
+- rc = appParamsOctetString_check_value(rowreq_ctx,
+- (char *) var->val.string,
+- var->val_len);
+- if ((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc)
+- && (MFD_NOT_VALID_NOW != rc)) {
+- snmp_log(LOG_ERR,
+- "bad rc %d from appParamsOctetString_check_value\n",
+- rc);
+- rc = SNMP_ERR_GENERR;
+- }
+- }
+- break;
+-
+- default: /** We shouldn't get here */
+- rc = SNMP_ERR_GENERR;
+- snmp_log(LOG_ERR,
+- "unknown column %d in _dessertAppParamsTable_check_column\n",
+- column);
+- }
+-
+- return rc;
+-} /* _dessertAppParamsTable_check_column */
+-
+-int
+-_mfd_dessertAppParamsTable_check_objects(netsnmp_mib_handler *handler,
+- netsnmp_handler_registration
+- *reginfo,
+- netsnmp_agent_request_info
+- *agtreq_info,
+- netsnmp_request_info *requests)
+-{
+- dessertAppParamsTable_rowreq_ctx *rowreq_ctx =
+- netsnmp_container_table_row_extract(requests);
+- netsnmp_table_request_info *tri;
+- int rc;
+-
+- DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_dessertAppParamsTable_check_objects", "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- for (; requests; requests = requests->next) {
+-
+- /*
+- * get column number from table request info, and check that column
+- */
+- tri = netsnmp_extract_table_info(requests);
+- if (NULL == tri)
+- continue;
+-
+- rc = _dessertAppParamsTable_check_column(rowreq_ctx,
+- requests->requestvb,
+- tri->colnum);
+- if (rc) {
+- netsnmp_request_set_error(requests, SNMP_VALIDATE_ERR(rc));
+- break;
+- }
+-
+- } /* for results */
+-
+- return SNMP_ERR_NOERROR;
+-} /* _mfd_dessertAppParamsTable_check_objects */
+-
+-
+-/*----------------------------------------------------------------------
+- *
+- * SET: Undo setup
+- *
+- *---------------------------------------------------------------------*/
+-/*
+- * @internal
+- * Set the value for a particular column
+- */
+-NETSNMP_STATIC_INLINE int
+-_dessertAppParamsTable_undo_setup_column(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx, int column)
+-{
+- int rc = SNMPERR_SUCCESS;
+-
+- DEBUGMSGTL(("internal:dessertAppParamsTable:_dessertAppParamsTable_undo_setup_column", "called for %d\n", column));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- switch (column) {
+-
+- /*
+- * appParamsTruthValue(5)/TruthValue/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+- */
+- case COLUMN_APPPARAMSTRUTHVALUE:
+- rowreq_ctx->column_set_flags |= COLUMN_APPPARAMSTRUTHVALUE_FLAG;
+- rc = appParamsTruthValue_undo_setup(rowreq_ctx);
+- break;
+-
+- /*
+- * appParamsInteger32(6)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/r/d/h
+- */
+- case COLUMN_APPPARAMSINTEGER32:
+- rowreq_ctx->column_set_flags |= COLUMN_APPPARAMSINTEGER32_FLAG;
+- rc = appParamsInteger32_undo_setup(rowreq_ctx);
+- break;
+-
+- /*
+- * appParamsUnsigned32(7)/UNSIGNED32/ASN_UNSIGNED/u_long(u_long)//l/A/W/e/r/d/h
+- */
+- case COLUMN_APPPARAMSUNSIGNED32:
+- rowreq_ctx->column_set_flags |= COLUMN_APPPARAMSUNSIGNED32_FLAG;
+- rc = appParamsUnsigned32_undo_setup(rowreq_ctx);
+- break;
+-
+- /*
+- * appParamsOctetString(9)/DessertApplicationOctetString/ASN_OCTET_STR/char(char)//L/A/W/e/R/d/H
+- */
+- case COLUMN_APPPARAMSOCTETSTRING:
+- rowreq_ctx->column_set_flags |= COLUMN_APPPARAMSOCTETSTRING_FLAG;
+- rc = appParamsOctetString_undo_setup(rowreq_ctx);
+- break;
+-
+- default:
+- snmp_log(LOG_ERR,
+- "unknown column %d in _dessertAppParamsTable_undo_setup_column\n",
+- column);
+- break;
+- }
+-
+- return rc;
+-} /* _dessertAppParamsTable_undo_setup_column */
+-
+-
+-/**
+- * @internal
+- * undo setup
+- */
+-int
+-_mfd_dessertAppParamsTable_undo_setup(netsnmp_mib_handler *handler,
+- netsnmp_handler_registration
+- *reginfo,
+- netsnmp_agent_request_info
+- *agtreq_info,
+- netsnmp_request_info *requests)
+-{
+- int rc;
+- dessertAppParamsTable_rowreq_ctx *rowreq_ctx =
+- netsnmp_container_table_row_extract(requests);
+-
+- DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_dessertAppParamsTable_undo_setup", "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * allocate undo context
+- */
+- rowreq_ctx->undo = dessertAppParamsTable_allocate_data();
+- if (NULL == rowreq_ctx->undo) {
+- /** msg already logged */
+- netsnmp_request_set_error_all(requests,
+- SNMP_ERR_RESOURCEUNAVAILABLE);
+- return SNMP_ERR_NOERROR;
+- }
+-
+- /*
+- * row undo setup
+- */
+- rowreq_ctx->column_set_flags = 0;
+- rc = dessertAppParamsTable_undo_setup(rowreq_ctx);
+- if (MFD_SUCCESS != rc) {
+- DEBUGMSGTL(("dessertAppParamsTable:mfd", "error %d from "
+- "dessertAppParamsTable_undo_setup\n", rc));
+- netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+- } else {
+- /*
+- * column undo setup
+- */
+- netsnmp_table_request_info *tri;
+- for (; requests; requests = requests->next) {
+- /*
+- * set column data
+- */
+- tri = netsnmp_extract_table_info(requests);
+- if (NULL == tri)
+- continue;
+-
+- rc = _dessertAppParamsTable_undo_setup_column(rowreq_ctx,
+- tri->colnum);
+- if (MFD_SUCCESS != rc) {
+- DEBUGMSGTL(("dessertAppParamsTable:mfd", "error %d from "
+- "dessertAppParamsTable_undo_setup_column\n",
+- rc));
+- netsnmp_set_request_error(agtreq_info, requests,
+- SNMP_VALIDATE_ERR(rc));
+- }
+- } /* for results */
+- }
+-
+- return SNMP_ERR_NOERROR;
+-} /* _mfd_dessertAppParamsTable_undo_setup */
+-
+-/**
+- * @internal
+- * undo setup
+- */
+-int
+-_mfd_dessertAppParamsTable_undo_cleanup(netsnmp_mib_handler *handler,
+- netsnmp_handler_registration
+- *reginfo,
+- netsnmp_agent_request_info
+- *agtreq_info,
+- netsnmp_request_info *requests)
+-{
+- dessertAppParamsTable_rowreq_ctx *rowreq_ctx =
+- netsnmp_container_table_row_extract(requests);
+- int rc;
+-
+- DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_dessertAppParamsTable_undo_cleanup", "called\n"));
+-
+- /*
+- * failed row create in early stages has no rowreq_ctx
+- */
+- if (NULL == rowreq_ctx)
+- return MFD_SUCCESS;
+-
+- /*
+- * call user cleanup
+- */
+- rc = dessertAppParamsTable_undo_cleanup(rowreq_ctx);
+- if (MFD_SUCCESS != rc) {
+- /*
+- * nothing we can do about it but log it
+- */
+- DEBUGMSGTL(("dessertAppParamsTable:mfd", "error %d from "
+- "dessertAppParamsTable_undo_cleanup\n", rc));
+- }
+-
+- /*
+- * release undo context, if needed
+- */
+- if (rowreq_ctx->undo) {
+- dessertAppParamsTable_release_data(rowreq_ctx->undo);
+- rowreq_ctx->undo = NULL;
+- }
+-
+-
+- return SNMP_ERR_NOERROR;
+-} /* _mfd_dessertAppParamsTable_undo_cleanup */
+-
+-/*----------------------------------------------------------------------
+- *
+- * SET: Set values
+- *
+- *---------------------------------------------------------------------*/
+-/*
+- * @internal
+- * Set the value for a particular column
+- */
+-NETSNMP_STATIC_INLINE int
+-_dessertAppParamsTable_set_column(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx, netsnmp_variable_list * var,
+- int column)
+-{
+- int rc = SNMPERR_SUCCESS;
+-
+- DEBUGMSGTL(("internal:dessertAppParamsTable:_dessertAppParamsTable_set_column", "called for %d\n", column));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- switch (column) {
+-
+- /*
+- * appParamsTruthValue(5)/TruthValue/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+- */
+- case COLUMN_APPPARAMSTRUTHVALUE:
+- rowreq_ctx->column_set_flags |= COLUMN_APPPARAMSTRUTHVALUE_FLAG;
+- rc = appParamsTruthValue_set(rowreq_ctx,
+- *((u_long *) var->val.string));
+- break;
+-
+- /*
+- * appParamsInteger32(6)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/r/d/h
+- */
+- case COLUMN_APPPARAMSINTEGER32:
+- rowreq_ctx->column_set_flags |= COLUMN_APPPARAMSINTEGER32_FLAG;
+- rc = appParamsInteger32_set(rowreq_ctx,
+- *((long *) var->val.string));
+- break;
+-
+- /*
+- * appParamsUnsigned32(7)/UNSIGNED32/ASN_UNSIGNED/u_long(u_long)//l/A/W/e/r/d/h
+- */
+- case COLUMN_APPPARAMSUNSIGNED32:
+- rowreq_ctx->column_set_flags |= COLUMN_APPPARAMSUNSIGNED32_FLAG;
+- rc = appParamsUnsigned32_set(rowreq_ctx,
+- *((u_long *) var->val.string));
+- break;
+-
+- /*
+- * appParamsOctetString(9)/DessertApplicationOctetString/ASN_OCTET_STR/char(char)//L/A/W/e/R/d/H
+- */
+- case COLUMN_APPPARAMSOCTETSTRING:
+- rowreq_ctx->column_set_flags |= COLUMN_APPPARAMSOCTETSTRING_FLAG;
+- rc = appParamsOctetString_set(rowreq_ctx, (char *) var->val.string,
+- var->val_len);
+- break;
+-
+- default:
+- snmp_log(LOG_ERR,
+- "unknown column %d in _dessertAppParamsTable_set_column\n",
+- column);
+- rc = SNMP_ERR_GENERR;
+- break;
+- }
+-
+- return rc;
+-} /* _dessertAppParamsTable_set_column */
+-
+-int
+-_mfd_dessertAppParamsTable_set_values(netsnmp_mib_handler *handler,
+- netsnmp_handler_registration
+- *reginfo,
+- netsnmp_agent_request_info
+- *agtreq_info,
+- netsnmp_request_info *requests)
+-{
+- dessertAppParamsTable_rowreq_ctx *rowreq_ctx =
+- netsnmp_container_table_row_extract(requests);
+- netsnmp_table_request_info *tri;
+- int rc = SNMP_ERR_NOERROR;
+-
+- DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_dessertAppParamsTable_set_values", "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- rowreq_ctx->column_set_flags = 0;
+- for (; requests; requests = requests->next) {
+- /*
+- * set column data
+- */
+- tri = netsnmp_extract_table_info(requests);
+- if (NULL == tri)
+- continue;
+-
+- rc = _dessertAppParamsTable_set_column(rowreq_ctx,
+- requests->requestvb,
+- tri->colnum);
+- if (MFD_SUCCESS != rc) {
+- DEBUGMSGTL(("dessertAppParamsTable:mfd", "error %d from "
+- "dessertAppParamsTable_set_column\n", rc));
+- netsnmp_set_request_error(agtreq_info, requests,
+- SNMP_VALIDATE_ERR(rc));
+- }
+- } /* for results */
+-
+- return SNMP_ERR_NOERROR;
+-} /* _mfd_dessertAppParamsTable_set_values */
+-
+-/*----------------------------------------------------------------------
+- *
+- * SET: commit
+- *
+- *---------------------------------------------------------------------*/
+-/**
+- * @internal
+- * commit the values
+- */
+-int
+-_mfd_dessertAppParamsTable_commit(netsnmp_mib_handler *handler,
+- netsnmp_handler_registration *reginfo,
+- netsnmp_agent_request_info *agtreq_info,
+- netsnmp_request_info *requests)
+-{
+- int rc;
+- dessertAppParamsTable_rowreq_ctx *rowreq_ctx =
+- netsnmp_container_table_row_extract(requests);
+-
+- DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_dessertAppParamsTable_commit", "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- rc = dessertAppParamsTable_commit(rowreq_ctx);
+- if (MFD_SUCCESS != rc) {
+- DEBUGMSGTL(("dessertAppParamsTable:mfd", "error %d from "
+- "dessertAppParamsTable_commit\n", rc));
+- netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+- }
+-
+- if (rowreq_ctx->rowreq_flags & MFD_ROW_DIRTY) {
+- /*
+- * if we successfully commited this row, set the dirty flag. Use the
+- * current value + 1 (i.e. dirty = # rows changed).
+- * this is checked in post_request...
+- */
+- dessertAppParamsTable_dirty_set(dessertAppParamsTable_dirty_get() + 1); /* set table dirty flag */
+- }
+-
+- return SNMP_ERR_NOERROR;
+-}
+-
+-int
+-_mfd_dessertAppParamsTable_undo_commit(netsnmp_mib_handler *handler,
+- netsnmp_handler_registration
+- *reginfo,
+- netsnmp_agent_request_info
+- *agtreq_info,
+- netsnmp_request_info *requests)
+-{
+- int rc;
+- dessertAppParamsTable_rowreq_ctx *rowreq_ctx =
+- netsnmp_container_table_row_extract(requests);
+-
+- DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_dessertAppParamsTable_undo_commit", "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- if (rowreq_ctx->rowreq_flags & MFD_ROW_DIRTY) {
+- u_int d = dessertAppParamsTable_dirty_get();
+-
+- netsnmp_assert(d != 0);
+- if (d)
+- dessertAppParamsTable_dirty_set(d - 1);
+- }
+-
+- rc = dessertAppParamsTable_undo_commit(rowreq_ctx);
+- if (MFD_SUCCESS != rc) {
+- /*
+- * nothing we can do about it but log it
+- */
+- DEBUGMSGTL(("dessertAppParamsTable:mfd", "error %d from "
+- "dessertAppParamsTable_undo_commit\n", rc));
+- }
+-
+- if (rowreq_ctx->rowreq_flags & MFD_ROW_DIRTY) {
+- snmp_log(LOG_WARNING,
+- "dessertAppParamsTable row dirty flag still set after undo_commit\n");
+- rowreq_ctx->rowreq_flags &= ~MFD_ROW_DIRTY;
+- }
+-
+- return SNMP_ERR_NOERROR;
+-} /* _mfd_dessertAppParamsTable_commit */
+-
+-/*----------------------------------------------------------------------
+- *
+- * SET: Undo
+- *
+- *---------------------------------------------------------------------*/
+-/**
+- * @internal
+- * undo the value for a particular column
+- */
+-NETSNMP_STATIC_INLINE int
+-_dessertAppParamsTable_undo_column(dessertAppParamsTable_rowreq_ctx *
+- rowreq_ctx, netsnmp_variable_list * var,
+- int column)
+-{
+- int rc = SNMPERR_SUCCESS;
+-
+- DEBUGMSGTL(("internal:dessertAppParamsTable:_dessertAppParamsTable_undo_column", "called for %d\n", column));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- switch (column) {
+-
+- /*
+- * appParamsTruthValue(5)/TruthValue/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
+- */
+- case COLUMN_APPPARAMSTRUTHVALUE:
+- rc = appParamsTruthValue_undo(rowreq_ctx);
+- break;
+-
+- /*
+- * appParamsInteger32(6)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/r/d/h
+- */
+- case COLUMN_APPPARAMSINTEGER32:
+- rc = appParamsInteger32_undo(rowreq_ctx);
+- break;
+-
+- /*
+- * appParamsUnsigned32(7)/UNSIGNED32/ASN_UNSIGNED/u_long(u_long)//l/A/W/e/r/d/h
+- */
+- case COLUMN_APPPARAMSUNSIGNED32:
+- rc = appParamsUnsigned32_undo(rowreq_ctx);
+- break;
+-
+- /*
+- * appParamsOctetString(9)/DessertApplicationOctetString/ASN_OCTET_STR/char(char)//L/A/W/e/R/d/H
+- */
+- case COLUMN_APPPARAMSOCTETSTRING:
+- rc = appParamsOctetString_undo(rowreq_ctx);
+- break;
+-
+- default:
+- snmp_log(LOG_ERR,
+- "unknown column %d in _dessertAppParamsTable_undo_column\n",
+- column);
+- break;
+- }
+-
+- return rc;
+-} /* _dessertAppParamsTable_undo_column */
+-
+-int
+-_mfd_dessertAppParamsTable_undo_values(netsnmp_mib_handler *handler,
+- netsnmp_handler_registration
+- *reginfo,
+- netsnmp_agent_request_info
+- *agtreq_info,
+- netsnmp_request_info *requests)
+-{
+- int rc;
+- dessertAppParamsTable_rowreq_ctx *rowreq_ctx =
+- netsnmp_container_table_row_extract(requests);
+- netsnmp_table_request_info *tri;
+-
+- DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_dessertAppParamsTable_undo_values", "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- rc = dessertAppParamsTable_undo(rowreq_ctx);
+- if (MFD_SUCCESS != rc) {
+- /*
+- * nothing we can do about it but log it
+- */
+- DEBUGMSGTL(("dessertAppParamsTable:mfd", "error %d from "
+- "dessertAppParamsTable_undo\n", rc));
+- }
+-
+- for (; requests; requests = requests->next) {
+- /*
+- * set column data
+- */
+- tri = netsnmp_extract_table_info(requests);
+- if (NULL == tri)
+- continue;
+-
+- rc = _dessertAppParamsTable_undo_column(rowreq_ctx,
+- requests->requestvb,
+- tri->colnum);
+- if (MFD_SUCCESS != rc) {
+- /*
+- * nothing we can do about it but log it
+- */
+- DEBUGMSGTL(("dessertAppParamsTable:mfd", "error %d from "
+- "dessertAppParamsTable_undo_column\n", rc));
+- }
+- } /* for results */
+-
+- return SNMP_ERR_NOERROR;
+-} /* _mfd_dessertAppParamsTable_undo_values */
+-
+-/*----------------------------------------------------------------------
+- *
+- * SET: irreversible commit
+- *
+- *---------------------------------------------------------------------*/
+-/**
+- * @internal
+- * commit irreversible actions
+- */
+-int
+-_mfd_dessertAppParamsTable_irreversible_commit(netsnmp_mib_handler
+- *handler,
+- netsnmp_handler_registration
+- *reginfo,
+- netsnmp_agent_request_info
+- *agtreq_info,
+- netsnmp_request_info
+- *requests)
+-{
+- dessertAppParamsTable_rowreq_ctx *rowreq_ctx =
+- netsnmp_container_table_row_extract(requests);
+-
+- DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_dessertAppParamsTable_irreversible:commit", "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * check for and handle row creation/deletion
+- * and update column exist flags...
+- */
+- if (rowreq_ctx->rowreq_flags & MFD_ROW_DELETED) {
+- if (!(rowreq_ctx->rowreq_flags & MFD_ROW_CREATED))
+- CONTAINER_REMOVE(dessertAppParamsTable_if_ctx.container,
+- rowreq_ctx);
+- } else {
+- if (rowreq_ctx->column_set_flags) {
+- DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_irreversible_commit", "updating exists (%p) w/set (%p) = %p\n", rowreq_ctx->column_exists_flags, rowreq_ctx->column_set_flags, (rowreq_ctx->column_exists_flags | rowreq_ctx->column_set_flags)));
+- rowreq_ctx->column_exists_flags |=
+- rowreq_ctx->column_set_flags;
+- rowreq_ctx->column_set_flags = 0;
+- }
+- }
+-
+- return SNMP_ERR_NOERROR;
+-} /* _mfd_dessertAppParamsTable_irreversible_commit */
+-
+-/***********************************************************************
+- *
+- * DATA ACCESS
+- *
+- ***********************************************************************/
+-static void _container_free(netsnmp_container * container);
+-
+-/**
+- * @internal
+- */
+-static int
+-_cache_load(netsnmp_cache * cache, void *vmagic)
+-{
+- DEBUGMSGTL(("internal:dessertAppParamsTable:_cache_load", "called\n"));
+-
+- if ((NULL == cache) || (NULL == cache->magic)) {
+- snmp_log(LOG_ERR,
+- "invalid cache for dessertAppParamsTable_cache_load\n");
+- return -1;
+- }
+-
+- /** should only be called for an invalid or expired cache */
+- netsnmp_assert((0 == cache->valid) || (1 == cache->expired));
+-
+- /*
+- * call user code
+- */
+- return dessertAppParamsTable_container_load((netsnmp_container *)
+- cache->magic);
+-} /* _cache_load */
+-
+-/**
+- * @internal
+- */
+-static void
+-_cache_free(netsnmp_cache * cache, void *magic)
+-{
+- netsnmp_container *container;
+-
+- DEBUGMSGTL(("internal:dessertAppParamsTable:_cache_free", "called\n"));
+-
+- if ((NULL == cache) || (NULL == cache->magic)) {
+- snmp_log(LOG_ERR,
+- "invalid cache in dessertAppParamsTable_cache_free\n");
+- return;
+- }
+-
+- container = (netsnmp_container *) cache->magic;
+-
+- _container_free(container);
+-} /* _cache_free */
+-
+-/**
+- * @internal
+- */
+-static void
+-_container_item_free(dessertAppParamsTable_rowreq_ctx * rowreq_ctx,
+- void *context)
+-{
+- DEBUGMSGTL(("internal:dessertAppParamsTable:_container_item_free",
+- "called\n"));
+-
+- if (NULL == rowreq_ctx)
+- return;
+-
+- dessertAppParamsTable_release_rowreq_ctx(rowreq_ctx);
+-} /* _container_item_free */
+-
+-/**
+- * @internal
+- */
+-static void
+-_container_free(netsnmp_container * container)
+-{
+- DEBUGMSGTL(("internal:dessertAppParamsTable:_container_free",
+- "called\n"));
+-
+- if (NULL == container) {
+- snmp_log(LOG_ERR,
+- "invalid container in dessertAppParamsTable_container_free\n");
+- return;
+- }
+-
+- /*
+- * call user code
+- */
+- dessertAppParamsTable_container_free(container);
+-
+- /*
+- * free all items. inefficient, but easy.
+- */
+- CONTAINER_CLEAR(container,
+- (netsnmp_container_obj_func *) _container_item_free,
+- NULL);
+-} /* _container_free */
+-
+-/**
+- * @internal
+- * initialize the container with functions or wrappers
+- */
+-void
+-_dessertAppParamsTable_container_init(dessertAppParamsTable_interface_ctx *
+- if_ctx)
+-{
+- DEBUGMSGTL(("internal:dessertAppParamsTable:_dessertAppParamsTable_container_init", "called\n"));
+-
+- /*
+- * cache init
+- */
+- if_ctx->cache = netsnmp_cache_create(30, /* timeout in seconds */
+- _cache_load, _cache_free,
+- dessertAppParamsTable_oid,
+- dessertAppParamsTable_oid_size);
+-
+- if (NULL == if_ctx->cache) {
+- snmp_log(LOG_ERR,
+- "error creating cache for dessertAppParamsTable\n");
+- return;
+- }
+-
+- if_ctx->cache->flags = NETSNMP_CACHE_DONT_INVALIDATE_ON_SET;
+-
+- dessertAppParamsTable_container_init(&if_ctx->container,
+- if_ctx->cache);
+- if (NULL == if_ctx->container)
+- if_ctx->container =
+- netsnmp_container_find
+- ("dessertAppParamsTable:table_container");
+- if (NULL == if_ctx->container) {
+- snmp_log(LOG_ERR, "error creating container in "
+- "dessertAppParamsTable_container_init\n");
+- return;
+- }
+-
+- if (NULL != if_ctx->cache)
+- if_ctx->cache->magic = (void *) if_ctx->container;
+-} /* _dessertAppParamsTable_container_init */
+-
+-/**
+- * @internal
+- * shutdown the container with functions or wrappers
+- */
+-void
+-_dessertAppParamsTable_container_shutdown
+- (dessertAppParamsTable_interface_ctx * if_ctx)
+-{
+- DEBUGMSGTL(("internal:dessertAppParamsTable:_dessertAppParamsTable_container_shutdown", "called\n"));
+-
+- dessertAppParamsTable_container_shutdown(if_ctx->container);
+-
+- _container_free(if_ctx->container);
+-
+-} /* _dessertAppParamsTable_container_shutdown */
+-
+-
+-dessertAppParamsTable_rowreq_ctx *
+-dessertAppParamsTable_row_find_by_mib_index(dessertAppParamsTable_mib_index
+- * mib_idx)
+-{
+- dessertAppParamsTable_rowreq_ctx *rowreq_ctx;
+- oid oid_tmp[MAX_OID_LEN];
+- netsnmp_index oid_idx;
+- int rc;
+-
+- /*
+- * set up storage for OID
+- */
+- oid_idx.oids = oid_tmp;
+- oid_idx.len = sizeof(oid_tmp) / sizeof(oid);
+-
+- /*
+- * convert
+- */
+- rc = dessertAppParamsTable_index_to_oid(&oid_idx, mib_idx);
+- if (MFD_SUCCESS != rc)
+- return NULL;
+-
+- rowreq_ctx =
+- CONTAINER_FIND(dessertAppParamsTable_if_ctx.container, &oid_idx);
+-
+- return rowreq_ctx;
+-}
+Index: libdessert0.86-0.86.14/snmp/dessertAppParamsTable_interface.h
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertAppParamsTable_interface.h 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,101 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * version : 15899 $ of $
+- *
+- * $Id:$
+- */
+-/** @ingroup interface: Routines to interface to Net-SNMP
+- *
+- * \warning This code should not be modified, called directly,
+- * or used to interpret functionality. It is subject to
+- * change at any time.
+- *
+- * @{
+- */
+-/*
+- * *********************************************************************
+- * *********************************************************************
+- * *********************************************************************
+- * *** ***
+- * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
+- * *** ***
+- * *** ***
+- * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
+- * *** ***
+- * *** ***
+- * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
+- * *** ***
+- * *** ***
+- * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
+- * *** ***
+- * *** ***
+- * *********************************************************************
+- * *********************************************************************
+- * *********************************************************************
+- */
+-#ifndef DESSERTAPPPARAMSTABLE_INTERFACE_H
+-#define DESSERTAPPPARAMSTABLE_INTERFACE_H
+-
+-#ifdef __cplusplus
+-extern "C" {
+-#endif
+-
+-
+-#include "dessertAppParamsTable.h"
+-
+-
+- /*
+- ********************************************************************
+- * Table declarations
+- */
+-
+- /*
+- * PUBLIC interface initialization routine
+- */
+- void
+- _dessertAppParamsTable_initialize_interface
+- (dessertAppParamsTable_registration * user_ctx, u_long flags);
+- void
+- _dessertAppParamsTable_shutdown_interface
+- (dessertAppParamsTable_registration * user_ctx);
+-
+- dessertAppParamsTable_registration
+- *dessertAppParamsTable_registration_get(void);
+-
+- dessertAppParamsTable_registration
+- *dessertAppParamsTable_registration_set
+- (dessertAppParamsTable_registration * newreg);
+-
+- netsnmp_container *dessertAppParamsTable_container_get(void);
+- int dessertAppParamsTable_container_size(void);
+-
+- u_int dessertAppParamsTable_dirty_get(void);
+- void dessertAppParamsTable_dirty_set(u_int status);
+-
+- dessertAppParamsTable_rowreq_ctx
+- *dessertAppParamsTable_allocate_rowreq_ctx(void);
+- void
+- dessertAppParamsTable_release_rowreq_ctx
+- (dessertAppParamsTable_rowreq_ctx * rowreq_ctx);
+-
+- int dessertAppParamsTable_index_to_oid(netsnmp_index *
+- oid_idx,
+- dessertAppParamsTable_mib_index
+- * mib_idx);
+- int dessertAppParamsTable_index_from_oid(netsnmp_index *
+- oid_idx,
+- dessertAppParamsTable_mib_index
+- * mib_idx);
+-
+- /*
+- * access to certain internals. use with caution!
+- */
+- void
+- dessertAppParamsTable_valid_columns_set(netsnmp_column_info *vc);
+-
+-
+-#ifdef __cplusplus
+-}
+-#endif
+-#endif /* DESSERTAPPPARAMSTABLE_INTERFACE_H */
+-/** @} */
+Index: libdessert0.86-0.86.14/snmp/dessertAppParamsTable_oids.h
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertAppParamsTable_oids.h 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,56 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * : generic-table-oids.m2c 12855 2005-09-27 15:56:08Z rstory $
+- *
+- * $Id:$
+- */
+-#ifndef DESSERTAPPPARAMSTABLE_OIDS_H
+-#define DESSERTAPPPARAMSTABLE_OIDS_H
+-
+-#ifdef __cplusplus
+-extern "C" {
+-#endif
+-
+-
+- /*
+- * column number definitions for table dessertAppParamsTable
+- */
+-#define DESSERTAPPPARAMSTABLE_OID 1,3,6,1,4,1,18898,0,19,10,1,1,9
+-
+-#define COLUMN_APPPARAMSINDEX 1
+-
+-#define COLUMN_APPPARAMSNAME 2
+-#define COLUMN_APPPARAMSNAME_FLAG (0x1 << 1)
+-
+-#define COLUMN_APPPARAMSDESC 3
+-#define COLUMN_APPPARAMSDESC_FLAG (0x1 << 2)
+-
+-#define COLUMN_APPPARAMSVALUETYPE 4
+-#define COLUMN_APPPARAMSVALUETYPE_FLAG (0x1 << 3)
+-
+-#define COLUMN_APPPARAMSTRUTHVALUE 5
+-#define COLUMN_APPPARAMSTRUTHVALUE_FLAG (0x1 << 4)
+-
+-#define COLUMN_APPPARAMSINTEGER32 6
+-#define COLUMN_APPPARAMSINTEGER32_FLAG (0x1 << 5)
+-
+-#define COLUMN_APPPARAMSUNSIGNED32 7
+-#define COLUMN_APPPARAMSUNSIGNED32_FLAG (0x1 << 6)
+-
+-#define COLUMN_APPPARAMSOCTETSTRING 9
+-#define COLUMN_APPPARAMSOCTETSTRING_FLAG (0x1 << 8)
+-
+-
+-#define DESSERTAPPPARAMSTABLE_MIN_COL COLUMN_APPPARAMSNAME
+-#define DESSERTAPPPARAMSTABLE_MAX_COL COLUMN_APPPARAMSOCTETSTRING
+-
+-
+- /*
+- * OR together all the writable cols.
+- */
+-#define DESSERTAPPPARAMSTABLE_SETTABLE_COLS (COLUMN_APPPARAMSTRUTHVALUE_FLAG | COLUMN_APPPARAMSINTEGER32_FLAG | COLUMN_APPPARAMSUNSIGNED32_FLAG | COLUMN_APPPARAMSOCTETSTRING_FLAG)
+-
+-#ifdef __cplusplus
+-}
+-#endif
+-#endif /* DESSERTAPPPARAMSTABLE_OIDS_H */
+Index: libdessert0.86-0.86.14/snmp/dessertAppStatsTable.c
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertAppStatsTable.c 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,173 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * version : 14170 $ of $
+- *
+- * $Id:$
+- */
+-/** \page MFD helper for dessertAppStatsTable
+- *
+- * \section intro Introduction
+- * Introductory text.
+- *
+- */
+-/*
+- * standard Net-SNMP includes
+- */
+-#include <net-snmp/net-snmp-config.h>
+-#include <net-snmp/net-snmp-includes.h>
+-#include <net-snmp/agent/net-snmp-agent-includes.h>
+-
+-/*
+- * include our parent header
+- */
+-#include "dessertAppStatsTable.h"
+-
+-#include <net-snmp/agent/mib_modules.h>
+-
+-#include "dessertAppStatsTable_interface.h"
+-
+-oid dessertAppStatsTable_oid[] = { DESSERTAPPSTATSTABLE_OID };
+-
+-int dessertAppStatsTable_oid_size =
+-OID_LENGTH(dessertAppStatsTable_oid);
+-
+-dessertAppStatsTable_registration dessertAppStatsTable_user_context;
+-
+-void initialize_table_dessertAppStatsTable(void);
+-void shutdown_table_dessertAppStatsTable(void);
+-
+-
+-/**
+- * Initializes the dessertAppStatsTable module
+- */
+-void
+-init_dessertAppStatsTable(void)
+-{
+- DEBUGMSGTL(("verbose:dessertAppStatsTable:init_dessertAppStatsTable",
+- "called\n"));
+-
+- /*
+- * TODO:300:o: Perform dessertAppStatsTable one-time module initialization.
+- */
+-
+- /*
+- * here we initialize all the tables we're planning on supporting
+- */
+- if (should_init("dessertAppStatsTable"))
+- initialize_table_dessertAppStatsTable();
+-
+-} /* init_dessertAppStatsTable */
+-
+-/**
+- * Shut-down the dessertAppStatsTable module (agent is exiting)
+- */
+-void
+-shutdown_dessertAppStatsTable(void)
+-{
+- if (should_init("dessertAppStatsTable"))
+- shutdown_table_dessertAppStatsTable();
+-
+-}
+-
+-/**
+- * Initialize the table dessertAppStatsTable
+- * (Define its contents and how it's structured)
+- */
+-void
+-initialize_table_dessertAppStatsTable(void)
+-{
+- dessertAppStatsTable_registration *user_context;
+- u_long flags;
+-
+- DEBUGMSGTL(("verbose:dessertAppStatsTable:initialize_table_dessertAppStatsTable", "called\n"));
+-
+- /*
+- * TODO:301:o: Perform dessertAppStatsTable one-time table initialization.
+- */
+-
+- /*
+- * TODO:302:o: |->Initialize dessertAppStatsTable user context
+- * if you'd like to pass in a pointer to some data for this
+- * table, allocate or set it up here.
+- */
+- /*
+- * a netsnmp_data_list is a simple way to store void pointers. A simple
+- * string token is used to add, find or remove pointers.
+- */
+- user_context =
+- netsnmp_create_data_list("dessertAppStatsTable", NULL, NULL);
+-
+- /*
+- * No support for any flags yet, but in the future you would
+- * set any flags here.
+- */
+- flags = 0;
+-
+- /*
+- * call interface initialization code
+- */
+- _dessertAppStatsTable_initialize_interface(user_context, flags);
+-} /* initialize_table_dessertAppStatsTable */
+-
+-/**
+- * Shutdown the table dessertAppStatsTable
+- */
+-void
+-shutdown_table_dessertAppStatsTable(void)
+-{
+- /*
+- * call interface shutdown code
+- */
+- _dessertAppStatsTable_shutdown_interface
+- (&dessertAppStatsTable_user_context);
+-}
+-
+-/**
+- * pre-request callback
+- *
+- *
+- * @retval MFD_SUCCESS : success.
+- * @retval MFD_ERROR : other error
+- */
+-int
+-dessertAppStatsTable_pre_request(dessertAppStatsTable_registration *
+- user_context)
+-{
+- DEBUGMSGTL(("verbose:dessertAppStatsTable:dessertAppStatsTable_pre_request", "called\n"));
+-
+- /*
+- * TODO:510:o: Perform dessertAppStatsTable pre-request actions.
+- */
+-
+- return MFD_SUCCESS;
+-} /* dessertAppStatsTable_pre_request */
+-
+-/**
+- * post-request callback
+- *
+- * Note:
+- * New rows have been inserted into the container, and
+- * deleted rows have been removed from the container and
+- * released.
+- *
+- * @param user_context
+- * @param rc : MFD_SUCCESS if all requests succeeded
+- *
+- * @retval MFD_SUCCESS : success.
+- * @retval MFD_ERROR : other error (ignored)
+- */
+-int
+-dessertAppStatsTable_post_request(dessertAppStatsTable_registration *
+- user_context, int rc)
+-{
+- DEBUGMSGTL(("verbose:dessertAppStatsTable:dessertAppStatsTable_post_request", "called\n"));
+-
+- /*
+- * TODO:511:o: Perform dessertAppStatsTable post-request actions.
+- */
+-
+- return MFD_SUCCESS;
+-} /* dessertAppStatsTable_post_request */
+-
+-
+-/** @{ */
+Index: libdessert0.86-0.86.14/snmp/dessertAppStatsTable.h
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertAppStatsTable.h 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,251 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * version : 14170 $ of $
+- *
+- * $Id:$
+- */
+-#ifndef DESSERTAPPSTATSTABLE_H
+-#define DESSERTAPPSTATSTABLE_H
+-
+-#ifdef __cplusplus
+-extern "C" {
+-#endif
+-
+-
+-/** @addtogroup misc misc: Miscellaneous routines
+- *
+- * @{
+- */
+-#include <net-snmp/library/asn1.h>
+-
+- /*
+- * other required module components
+- */
+- /* *INDENT-OFF* */
+-config_add_mib(DESSERT-MIB)
+-config_require(DESSERT-MIB/dessertAppStatsTable/dessertAppStatsTable_interface)
+-config_require(DESSERT-MIB/dessertAppStatsTable/dessertAppStatsTable_data_access)
+-config_require(DESSERT-MIB/dessertAppStatsTable/dessertAppStatsTable_data_get)
+-config_require(DESSERT-MIB/dessertAppStatsTable/dessertAppStatsTable_data_set)
+- /* *INDENT-ON* */
+-
+- /*
+- * OID and column number definitions for dessertAppStatsTable
+- */
+-#include "dessertAppStatsTable_oids.h"
+-
+- /*
+- * enum definions
+- */
+-#include "dessertAppStatsTable_enums.h"
+-
+- /*
+- *********************************************************************
+- * function declarations
+- */
+- void init_dessertAppStatsTable(void);
+- void shutdown_dessertAppStatsTable(void);
+-
+- /*
+- *********************************************************************
+- * Table declarations
+- */
+-/**********************************************************************
+- **********************************************************************
+- ***
+- *** Table dessertAppStatsTable
+- ***
+- **********************************************************************
+- **********************************************************************/
+- /*
+- * DESSERT-MIB::dessertAppStatsTable is subid 9 of dessertObjects.
+- * Its status is Current.
+- * OID: .1.3.6.1.4.1.18898.0.19.42.1.9, length: 12
+- */
+- /*
+- *********************************************************************
+- * When you register your mib, you get to provide a generic
+- * pointer that will be passed back to you for most of the
+- * functions calls.
+- *
+- * TODO:100:r: Review all context structures
+- */
+- /*
+- * TODO:101:o: |-> Review dessertAppStatsTable registration context.
+- */
+- typedef netsnmp_data_list dessertAppStatsTable_registration;
+-
+-/**********************************************************************/
+- /*
+- * TODO:110:r: |-> Review dessertAppStatsTable data context structure.
+- * This structure is used to represent the data for dessertAppStatsTable.
+- */
+- /*
+- * This structure contains storage for all the columns defined in the
+- * dessertAppStatsTable.
+- */
+- typedef struct dessertAppStatsTable_data_s {
+-
+- /*
+- * appStatsName(2)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
+- */
+- char appStatsName[255];
+- size_t appStatsName_len; /* # of char elements, not bytes */
+-
+- /*
+- * appStatsDesc(3)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
+- */
+- char appStatsDesc[255];
+- size_t appStatsDesc_len; /* # of char elements, not bytes */
+-
+- /*
+- * appStatsNodeOrLink(4)/INTEGER/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h
+- */
+- u_long appStatsNodeOrLink;
+-
+- /*
+- * appStatsValueType(5)/INTEGER/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h
+- */
+- u_long appStatsValueType;
+-
+- /*
+- * appStatsMacAddress1(6)/MacAddress/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
+- */
+- char appStatsMacAddress1[6];
+- size_t appStatsMacAddress1_len; /* # of char elements, not bytes */
+-
+- /*
+- * appStatsMacAddress2(7)/MacAddress/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
+- */
+- char appStatsMacAddress2[6];
+- size_t appStatsMacAddress2_len; /* # of char elements, not bytes */
+-
+- /*
+- * appStatsTruthValue(8)/TruthValue/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h
+- */
+- u_long appStatsTruthValue;
+-
+- /*
+- * appStatsInteger32(9)/INTEGER32/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+- */
+- long appStatsInteger32;
+-
+- /*
+- * appStatsUnsigned32(10)/UNSIGNED32/ASN_UNSIGNED/u_long(u_long)//l/A/w/e/r/d/h
+- */
+- u_long appStatsUnsigned32;
+-
+- /*
+- * appStatsCounter64(11)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+- */
+- U64 appStatsCounter64;
+-
+- /*
+- * appStatsOctetString(12)/OCTETSTR/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/h
+- */
+- char appStatsOctetString[1024];
+- size_t appStatsOctetString_len; /* # of char elements, not bytes */
+-
+- } dessertAppStatsTable_data;
+-
+-
+- /*
+- * TODO:120:r: |-> Review dessertAppStatsTable mib index.
+- * This structure is used to represent the index for dessertAppStatsTable.
+- */
+- typedef struct dessertAppStatsTable_mib_index_s {
+-
+- /*
+- * appStatsIndex(1)///()//L/a/w/e/r/d/h
+- */
+- long appStatsIndex;
+-
+-
+- } dessertAppStatsTable_mib_index;
+-
+- /*
+- * TODO:121:r: | |-> Review dessertAppStatsTable max index length.
+- * If you KNOW that your indexes will never exceed a certain
+- * length, update this macro to that length.
+- */
+-#define MAX_dessertAppStatsTable_IDX_LEN 1
+-
+-
+- /*
+- *********************************************************************
+- * TODO:130:o: |-> Review dessertAppStatsTable Row request (rowreq) context.
+- * When your functions are called, you will be passed a
+- * dessertAppStatsTable_rowreq_ctx pointer.
+- */
+- typedef struct dessertAppStatsTable_rowreq_ctx_s {
+-
+- /** this must be first for container compare to work */
+- netsnmp_index oid_idx;
+- oid oid_tmp[MAX_dessertAppStatsTable_IDX_LEN];
+-
+- dessertAppStatsTable_mib_index tbl_idx;
+-
+- dessertAppStatsTable_data data;
+- unsigned int column_exists_flags; /* flags for existence */
+-
+- /*
+- * flags per row. Currently, the first (lower) 8 bits are reserved
+- * for the user. See mfd.h for other flags.
+- */
+- u_int rowreq_flags;
+-
+- /*
+- * TODO:131:o: | |-> Add useful data to dessertAppStatsTable rowreq context.
+- */
+-
+- /*
+- * storage for future expansion
+- */
+- netsnmp_data_list *dessertAppStatsTable_data_list;
+-
+- } dessertAppStatsTable_rowreq_ctx;
+-
+- typedef struct dessertAppStatsTable_ref_rowreq_ctx_s {
+- dessertAppStatsTable_rowreq_ctx *rowreq_ctx;
+- } dessertAppStatsTable_ref_rowreq_ctx;
+-
+- /*
+- *********************************************************************
+- * function prototypes
+- */
+- int
+- dessertAppStatsTable_pre_request(dessertAppStatsTable_registration
+- * user_context);
+- int
+- dessertAppStatsTable_post_request(dessertAppStatsTable_registration
+- * user_context, int rc);
+-
+-
+- dessertAppStatsTable_rowreq_ctx
+- *dessertAppStatsTable_row_find_by_mib_index
+- (dessertAppStatsTable_mib_index * mib_idx);
+-
+- extern oid dessertAppStatsTable_oid[];
+- extern int dessertAppStatsTable_oid_size;
+-
+-
+-#include "dessertAppStatsTable_interface.h"
+-#include "dessertAppStatsTable_data_access.h"
+-#include "dessertAppStatsTable_data_get.h"
+-#include "dessertAppStatsTable_data_set.h"
+-
+- /*
+- * DUMMY markers, ignore
+- *
+- * TODO:099:x: *************************************************************
+- * TODO:199:x: *************************************************************
+- * TODO:299:x: *************************************************************
+- * TODO:399:x: *************************************************************
+- * TODO:499:x: *************************************************************
+- */
+-
+-#ifdef __cplusplus
+-}
+-#endif
+-#endif /* DESSERTAPPSTATSTABLE_H */
+-/** @} */
+Index: libdessert0.86-0.86.14/snmp/dessertAppStatsTable_data_access.c
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertAppStatsTable_data_access.c 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,407 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * version : 14170 $ of $
+- *
+- * $Id:$
+- */
+-/*
+- * standard Net-SNMP includes
+- */
+-#include <net-snmp/net-snmp-config.h>
+-#include <net-snmp/net-snmp-includes.h>
+-#include <net-snmp/agent/net-snmp-agent-includes.h>
+-
+-/*
+- * include our parent header
+- */
+-#include "dessertAppStatsTable.h"
+-#include "dessertAppStatsTable_data_access.h"
+-#include "../dessert.h"
+-#include "../dessert_internal.h"
+-
+-/** @ingroup interface
+- * @addtogroup data_access data_access: Routines to access data
+- *
+- * These routines are used to locate the data used to satisfy
+- * requests.
+- *
+- * @{
+- */
+-/**********************************************************************
+- **********************************************************************
+- ***
+- *** Table dessertAppStatsTable
+- ***
+- **********************************************************************
+- **********************************************************************/
+-/*
+- * DESSERT-MIB::dessertAppStatsTable is subid 9 of dessertObjects.
+- * Its status is Current.
+- * OID: .1.3.6.1.4.1.18898.0.19.42.1.9, length: 12
+- */
+-
+-/**
+- * initialization for dessertAppStatsTable data access
+- *
+- * This function is called during startup to allow you to
+- * allocate any resources you need for the data table.
+- *
+- * @param dessertAppStatsTable_reg
+- * Pointer to dessertAppStatsTable_registration
+- *
+- * @retval MFD_SUCCESS : success.
+- * @retval MFD_ERROR : unrecoverable error.
+- */
+-int
+-dessertAppStatsTable_init_data(dessertAppStatsTable_registration *
+- dessertAppStatsTable_reg)
+-{
+- DEBUGMSGTL(("verbose:dessertAppStatsTable:dessertAppStatsTable_init_data", "called\n"));
+-
+- /*
+- * TODO:303:o: Initialize dessertAppStatsTable data.
+- */
+- /*
+- ***************************************************
+- *** START EXAMPLE CODE ***
+- ***---------------------------------------------***/
+- /*
+- * if you are the sole writer for the file, you could
+- * open it here. However, as stated earlier, we are assuming
+- * the worst case, which in this case means that the file is
+- * written to by someone else, and might not even exist when
+- * we start up. So we can't do anything here.
+- */
+- /*
+- ***---------------------------------------------***
+- *** END EXAMPLE CODE ***
+- ***************************************************/
+-
+- return MFD_SUCCESS;
+-} /* dessertAppStatsTable_init_data */
+-
+-/**
+- * container overview
+- *
+- */
+-
+-/**
+- * container initialization
+- *
+- * @param container_ptr_ptr A pointer to a container pointer. If you
+- * create a custom container, use this parameter to return it
+- * to the MFD helper. If set to NULL, the MFD helper will
+- * allocate a container for you.
+- * @param cache A pointer to a cache structure. You can set the timeout
+- * and other cache flags using this pointer.
+- *
+- * This function is called at startup to allow you to customize certain
+- * aspects of the access method. For the most part, it is for advanced
+- * users. The default code should suffice for most cases. If no custom
+- * container is allocated, the MFD code will create one for your.
+- *
+- * This is also the place to set up cache behavior. The default, to
+- * simply set the cache timeout, will work well with the default
+- * container. If you are using a custom container, you may want to
+- * look at the cache helper documentation to see if there are any
+- * flags you want to set.
+- *
+- * @remark
+- * This would also be a good place to do any initialization needed
+- * for you data source. For example, opening a connection to another
+- * process that will supply the data, opening a database, etc.
+- */
+-void
+-dessertAppStatsTable_container_init(netsnmp_container ** container_ptr_ptr,
+- netsnmp_cache * cache)
+-{
+- DEBUGMSGTL(("verbose:dessertAppStatsTable:dessertAppStatsTable_container_init", "called\n"));
+-
+- if (NULL == container_ptr_ptr) {
+- snmp_log(LOG_ERR,
+- "bad container param to dessertAppStatsTable_container_init\n");
+- return;
+- }
+-
+- /*
+- * For advanced users, you can use a custom container. If you
+- * do not create one, one will be created for you.
+- */
+- *container_ptr_ptr = NULL;
+-
+- if (NULL == cache) {
+- snmp_log(LOG_ERR,
+- "bad cache param to dessertAppStatsTable_container_init\n");
+- return;
+- }
+-
+- /*
+- * TODO:345:A: Set up dessertAppStatsTable cache properties.
+- *
+- * Also for advanced users, you can set parameters for the
+- * cache. Do not change the magic pointer, as it is used
+- * by the MFD helper. To completely disable caching, set
+- * cache->enabled to 0.
+- */
+- cache->timeout = DESSERTAPPSTATSTABLE_CACHE_TIMEOUT; /* seconds */
+-} /* dessertAppStatsTable_container_init */
+-
+-/**
+- * container shutdown
+- *
+- * @param container_ptr A pointer to the container.
+- *
+- * This function is called at shutdown to allow you to customize certain
+- * aspects of the access method. For the most part, it is for advanced
+- * users. The default code should suffice for most cases.
+- *
+- * This function is called before dessertAppStatsTable_container_free().
+- *
+- * @remark
+- * This would also be a good place to do any cleanup needed
+- * for you data source. For example, closing a connection to another
+- * process that supplied the data, closing a database, etc.
+- */
+-void
+-dessertAppStatsTable_container_shutdown(netsnmp_container * container_ptr)
+-{
+- DEBUGMSGTL(("verbose:dessertAppStatsTable:dessertAppStatsTable_container_shutdown", "called\n"));
+-
+- if (NULL == container_ptr) {
+- snmp_log(LOG_ERR,
+- "bad params to dessertAppStatsTable_container_shutdown\n");
+- return;
+- }
+-
+-} /* dessertAppStatsTable_container_shutdown */
+-
+-/**
+- * load initial data
+- *
+- * This function will also be called by the cache helper to load
+- * the container again (after the container free function has been
+- * called to free the previous contents).
+- *
+- * @param container container to which items should be inserted
+- *
+- * @retval MFD_SUCCESS : success.
+- * @retval MFD_RESOURCE_UNAVAILABLE : Can't access data source
+- * @retval MFD_ERROR : other error.
+- *
+- * This function is called to load the index(es) (and data, optionally)
+- * for the every row in the data set.
+- *
+- * @remark
+- * While loading the data, the only important thing is the indexes.
+- * If access to your data is cheap/fast (e.g. you have a pointer to a
+- * structure in memory), it would make sense to update the data here.
+- * If, however, the accessing the data invovles more work (e.g. parsing
+- * some other existing data, or peforming calculations to derive the data),
+- * then you can limit yourself to setting the indexes and saving any
+- * information you will need later. Then use the saved information in
+- * dessertAppStatsTable_row_prep() for populating data.
+- *
+- * @note
+- * If you need consistency between rows (like you want statistics
+- * for each row to be from the same time frame), you should set all
+- * data here.
+- *
+- */
+-int dessertAppStatsTable_container_load(netsnmp_container * container) {
+- dessertAppStatsTable_rowreq_ctx *rowreq_ctx;
+- size_t count = 0;
+-
+- dessert_agentx_appstats_t *appstats_list = NULL;
+- dessert_agentx_appstats_t *appstat;
+-
+- /*
+- * temporary storage for index values
+- */
+- long appStatsIndex;
+-
+- DEBUGMSGTL(("verbose:dessertAppStatsTable:dessertAppStatsTable_container_load", "called\n"));
+- dessert_debug("dessertAppStatsTable_container_load called");
+-
+- /* harvest the appstats from the callbacks registered via *dessert_agentx_appstats_add* */
+- if (_dessert_agentx_appstats_harvest_callbacks(&appstats_list)
+- == DESSERT_ERR)
+- return MFD_RESOURCE_UNAVAILABLE;
+-
+- /*
+- * Load/update data in the dessertAppStatsTable container.
+- * loop over your dessertAppStatsTable data, allocate a rowreq context,
+- * set the index(es) [and data, optionally] and insert into
+- * the container.
+- */
+- DL_FOREACH(appstats_list, appstat) {
+-
+- appStatsIndex = count++;
+-
+- /*
+- * set indexes in new dessertAppStatsTable rowreq context.
+- */
+- rowreq_ctx = dessertAppStatsTable_allocate_rowreq_ctx();
+- if (NULL == rowreq_ctx) {
+- snmp_log(LOG_ERR, "memory allocation failed\n");
+- return MFD_RESOURCE_UNAVAILABLE;
+- }
+- if (MFD_SUCCESS != dessertAppStatsTable_indexes_set(rowreq_ctx,
+- appStatsIndex)) {
+- snmp_log(LOG_ERR, "error setting index while loading "
+- "dessertAppStatsTable data.\n");
+- dessertAppStatsTable_release_rowreq_ctx(rowreq_ctx);
+- continue;
+- }
+-
+- /* clear all column flags */
+- rowreq_ctx->column_exists_flags = 0;
+-
+- /* these columns are always present*/
+- rowreq_ctx->column_exists_flags |= COLUMN_APPSTATSNAME_FLAG
+- | COLUMN_APPSTATSDESC_FLAG | COLUMN_APPSTATSNODEORLINK_FLAG
+- | COLUMN_APPSTATSVALUETYPE_FLAG;
+-
+- rowreq_ctx->data.appStatsName_len = strlen(appstat->name);
+- strcpy(rowreq_ctx->data.appStatsName, appstat->name);
+-
+- rowreq_ctx->data.appStatsDesc_len = strlen(appstat->desc);
+- strcpy(rowreq_ctx->data.appStatsDesc, appstat->desc);
+-
+- appStatsNodeOrLink_map(&(rowreq_ctx->data.appStatsNodeOrLink),appstat->node_or_link);
+- appStatsValueType_map(&(rowreq_ctx->data.appStatsValueType),appstat->value_type);
+-
+- /* are the macaddress? columns present?*/
+- switch (appstat->node_or_link) {
+-
+- case DESSERT_APPSTATS_NODEORLINK_NONE:
+- break;
+- case DESSERT_APPSTATS_NODEORLINK_NODE:
+- rowreq_ctx->column_exists_flags |= COLUMN_APPSTATSMACADDRESS1_FLAG;
+-
+- rowreq_ctx->data.appStatsMacAddress1_len = ETHER_ADDR_LEN;
+- memcpy(rowreq_ctx->data.appStatsMacAddress1, appstat->macaddress1,
+- ETHER_ADDR_LEN);
+-
+- break;
+- case DESSERT_APPSTATS_NODEORLINK_LINK:
+- rowreq_ctx->column_exists_flags |= COLUMN_APPSTATSMACADDRESS1_FLAG
+- | COLUMN_APPSTATSMACADDRESS2_FLAG;
+-
+- rowreq_ctx->data.appStatsMacAddress1_len = ETHER_ADDR_LEN;
+- memcpy(rowreq_ctx->data.appStatsMacAddress1, appstat->macaddress1,
+- ETHER_ADDR_LEN);
+-
+- rowreq_ctx->data.appStatsMacAddress2_len = ETHER_ADDR_LEN;
+- memcpy(rowreq_ctx->data.appStatsMacAddress2, appstat->macaddress2,
+- ETHER_ADDR_LEN);
+-
+- break;
+- default:
+- dessert_err("appstats->node_or_link not valid!");
+- }
+-
+- /* which of the 'value'-columns is actually present? */
+- switch (appstat->value_type) {
+-
+- case DESSERT_APPSTATS_VALUETYPE_BOOL:
+- rowreq_ctx->column_exists_flags |= COLUMN_APPSTATSTRUTHVALUE_FLAG;
+- appStatsTruthValue_map(&(rowreq_ctx->data.appStatsTruthValue),appstat->bool);
+- break;
+-
+- case DESSERT_APPSTATS_VALUETYPE_INT32:
+- rowreq_ctx->column_exists_flags |= COLUMN_APPSTATSINTEGER32_FLAG;
+- rowreq_ctx->data.appStatsInteger32 = appstat->int32;
+-
+- break;
+-
+- case DESSERT_APPSTATS_VALUETYPE_UINT32:
+- rowreq_ctx->column_exists_flags |= COLUMN_APPSTATSUNSIGNED32_FLAG;
+- rowreq_ctx->data.appStatsUnsigned32 = appstat->uint32;
+-
+- break;
+-
+- case DESSERT_APPSTATS_VALUETYPE_COUNTER64:
+- rowreq_ctx->column_exists_flags |= COLUMN_APPSTATSCOUNTER64_FLAG;
+- rowreq_ctx->data.appStatsCounter64.low = appstat->counter64
+- & 0xffffffff;
+- rowreq_ctx->data.appStatsCounter64.high = appstat->counter64 >> 32;
+-
+- break;
+-
+- case DESSERT_APPSTATS_VALUETYPE_OCTETSTRING:
+- rowreq_ctx->column_exists_flags |= COLUMN_APPSTATSOCTETSTRING_FLAG;
+- rowreq_ctx->data.appStatsOctetString_len = appstat->octetstring_len;
+- memcpy(&(rowreq_ctx->data.appStatsOctetString), appstat->octetstring, appstat->octetstring_len);
+-
+- break;
+-
+- default:
+- dessert_err("appstats->value_type not valid! [%s]", appstat->name);
+- }
+-
+- /*
+- * insert into table container
+- */
+- CONTAINER_INSERT(container, rowreq_ctx);
+- }
+-
+- _dessert_agentx_appstats_free_list(&appstats_list);
+-
+- DEBUGMSGT(("verbose:dessertAppStatsTable:dessertAppStatsTable_container_load", "inserted %d records\n", count));
+-
+- return MFD_SUCCESS;
+-} /* dessertAppStatsTable_container_load */
+-
+-/**
+- * container clean up
+- *
+- * @param container container with all current items
+- *
+- * This optional callback is called prior to all
+- * item's being removed from the container. If you
+- * need to do any processing before that, do it here.
+- *
+- * @note
+- * The MFD helper will take care of releasing all the row contexts.
+- *
+- */
+-void
+-dessertAppStatsTable_container_free(netsnmp_container * container)
+-{
+- DEBUGMSGTL(("verbose:dessertAppStatsTable:dessertAppStatsTable_container_free", "called\n"));
+-
+- /*
+- * TODO:380:M: Free dessertAppStatsTable container data.
+- */
+-} /* dessertAppStatsTable_container_free */
+-
+-/**
+- * prepare row for processing.
+- *
+- * When the agent has located the row for a request, this function is
+- * called to prepare the row for processing. If you fully populated
+- * the data context during the index setup phase, you may not need to
+- * do anything.
+- *
+- * @param rowreq_ctx pointer to a context.
+- *
+- * @retval MFD_SUCCESS : success.
+- * @retval MFD_ERROR : other error.
+- */
+-int
+-dessertAppStatsTable_row_prep(dessertAppStatsTable_rowreq_ctx * rowreq_ctx)
+-{
+- DEBUGMSGTL(("verbose:dessertAppStatsTable:dessertAppStatsTable_row_prep", "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:390:o: Prepare row for request.
+- * If populating row data was delayed, this is the place to
+- * fill in the row for this request.
+- */
+-
+- return MFD_SUCCESS;
+-} /* dessertAppStatsTable_row_prep */
+-
+-/** @} */
+Index: libdessert0.86-0.86.14/snmp/dessertAppStatsTable_data_access.h
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertAppStatsTable_data_access.h 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,93 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * version : 14170 $ of $
+- *
+- * $Id:$
+- */
+-#ifndef DESSERTAPPSTATSTABLE_DATA_ACCESS_H
+-#define DESSERTAPPSTATSTABLE_DATA_ACCESS_H
+-
+-#include "../dessert_internal.h"
+-
+-#ifdef __cplusplus
+-extern "C" {
+-#endif
+-
+-
+- /*
+- *********************************************************************
+- * function declarations
+- */
+-
+- /*
+- *********************************************************************
+- * Table declarations
+- */
+-/**********************************************************************
+- **********************************************************************
+- ***
+- *** Table dessertAppStatsTable
+- ***
+- **********************************************************************
+- **********************************************************************/
+- /*
+- * DESSERT-MIB::dessertAppStatsTable is subid 9 of dessertObjects.
+- * Its status is Current.
+- * OID: .1.3.6.1.4.1.18898.0.19.42.1.9, length: 12
+- */
+-
+-
+- int
+- dessertAppStatsTable_init_data(dessertAppStatsTable_registration *
+- dessertAppStatsTable_reg);
+-
+-
+- /*
+- * TODO:180:o: Review dessertAppStatsTable cache timeout.
+- * The number of seconds before the cache times out
+- */
+-#define DESSERTAPPSTATSTABLE_CACHE_TIMEOUT DESSERT_AGENTX_APPSTATSTABLE_CACHE_TIMEOUT
+-
+- void dessertAppStatsTable_container_init(netsnmp_container
+- **
+- container_ptr_ptr,
+- netsnmp_cache *
+- cache);
+- void
+- dessertAppStatsTable_container_shutdown(netsnmp_container *
+- container_ptr);
+-
+- int dessertAppStatsTable_container_load(netsnmp_container *
+- container);
+- void dessertAppStatsTable_container_free(netsnmp_container *
+- container);
+-
+- int dessertAppStatsTable_cache_load(netsnmp_container *
+- container);
+- void dessertAppStatsTable_cache_free(netsnmp_container *
+- container);
+-
+- /*
+- ***************************************************
+- *** START EXAMPLE CODE ***
+- ***---------------------------------------------***/
+- /*
+- *********************************************************************
+- * Since we have no idea how you really access your data, we'll go with
+- * a worst case example: a flat text file.
+- */
+-#define MAX_LINE_SIZE 256
+- /*
+- ***---------------------------------------------***
+- *** END EXAMPLE CODE ***
+- ***************************************************/
+- int
+- dessertAppStatsTable_row_prep(dessertAppStatsTable_rowreq_ctx *
+- rowreq_ctx);
+-
+-
+-
+-#ifdef __cplusplus
+-}
+-#endif
+-#endif /* DESSERTAPPSTATSTABLE_DATA_ACCESS_H */
+Index: libdessert0.86-0.86.14/snmp/dessertAppStatsTable_data_get.c
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertAppStatsTable_data_get.c 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,1088 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * version : 12088 $ of $
+- *
+- * $Id:$
+- */
+-/*
+- * standard Net-SNMP includes
+- */
+-#include <net-snmp/net-snmp-config.h>
+-#include <net-snmp/net-snmp-includes.h>
+-#include <net-snmp/agent/net-snmp-agent-includes.h>
+-
+-/*
+- * include our parent header
+- */
+-#include "dessertAppStatsTable.h"
+-
+-
+-/** @defgroup data_get data_get: Routines to get data
+- *
+- * TODO:230:M: Implement dessertAppStatsTable get routines.
+- * TODO:240:M: Implement dessertAppStatsTable mapping routines (if any).
+- *
+- * These routine are used to get the value for individual objects. The
+- * row context is passed, along with a pointer to the memory where the
+- * value should be copied.
+- *
+- * @{
+- */
+-/**********************************************************************
+- **********************************************************************
+- ***
+- *** Table dessertAppStatsTable
+- ***
+- **********************************************************************
+- **********************************************************************/
+-/*
+- * DESSERT-MIB::dessertAppStatsTable is subid 9 of dessertObjects.
+- * Its status is Current.
+- * OID: .1.3.6.1.4.1.18898.0.19.42.1.9, length: 12
+- */
+-
+-/*
+- * ---------------------------------------------------------------------
+- * * TODO:200:r: Implement dessertAppStatsTable data context functions.
+- */
+-
+-
+-/**
+- * set mib index(es)
+- *
+- * @param tbl_idx mib index structure
+- * @param appStatsIndex_val
+- *
+- * @retval MFD_SUCCESS : success.
+- * @retval MFD_ERROR : other error.
+- *
+- * @remark
+- * This convenience function is useful for setting all the MIB index
+- * components with a single function call. It is assume that the C values
+- * have already been mapped from their native/rawformat to the MIB format.
+- */
+-int
+-dessertAppStatsTable_indexes_set_tbl_idx(dessertAppStatsTable_mib_index *
+- tbl_idx, long appStatsIndex_val)
+-{
+- DEBUGMSGTL(("verbose:dessertAppStatsTable:dessertAppStatsTable_indexes_set_tbl_idx", "called\n"));
+-
+- /*
+- * appStatsIndex(1)///()//L/a/w/e/r/d/h
+- */
+- tbl_idx->appStatsIndex = appStatsIndex_val;
+-
+-
+- return MFD_SUCCESS;
+-} /* dessertAppStatsTable_indexes_set_tbl_idx */
+-
+-/**
+- * @internal
+- * set row context indexes
+- *
+- * @param reqreq_ctx the row context that needs updated indexes
+- *
+- * @retval MFD_SUCCESS : success.
+- * @retval MFD_ERROR : other error.
+- *
+- * @remark
+- * This function sets the mib indexs, then updates the oid indexs
+- * from the mib index.
+- */
+-int
+-dessertAppStatsTable_indexes_set(dessertAppStatsTable_rowreq_ctx *
+- rowreq_ctx, long appStatsIndex_val)
+-{
+- DEBUGMSGTL(("verbose:dessertAppStatsTable:dessertAppStatsTable_indexes_set", "called\n"));
+-
+- if (MFD_SUCCESS !=
+- dessertAppStatsTable_indexes_set_tbl_idx(&rowreq_ctx->tbl_idx,
+- appStatsIndex_val))
+- return MFD_ERROR;
+-
+- /*
+- * convert mib index to oid index
+- */
+- rowreq_ctx->oid_idx.len = sizeof(rowreq_ctx->oid_tmp) / sizeof(oid);
+- if (0 != dessertAppStatsTable_index_to_oid(&rowreq_ctx->oid_idx,
+- &rowreq_ctx->tbl_idx)) {
+- return MFD_ERROR;
+- }
+-
+- return MFD_SUCCESS;
+-} /* dessertAppStatsTable_indexes_set */
+-
+-
+-/*---------------------------------------------------------------------
+- * DESSERT-MIB::dessertAppStatsEntry.appStatsName
+- * appStatsName is subid 2 of dessertAppStatsEntry.
+- * Its status is Current, and its access level is ReadOnly.
+- * OID: .1.3.6.1.4.1.18898.0.19.42.1.9.1.2
+- * Description:
+-The name of the statistical datum
+- *
+- * Attributes:
+- * accessible 1 isscalar 0 enums 0 hasdefval 0
+- * readable 1 iscolumn 1 ranges 1 hashint 1
+- * settable 0
+- * hint: 255a
+- *
+- * Ranges: 0 - 255;
+- *
+- * Its syntax is DisplayString (based on perltype OCTETSTR)
+- * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+- * This data type requires a length. (Max 255)
+- */
+-/**
+- * Extract the current value of the appStatsName data.
+- *
+- * Set a value using the data context for the row.
+- *
+- * @param rowreq_ctx
+- * Pointer to the row request context.
+- * @param appStatsName_val_ptr_ptr
+- * Pointer to storage for a char variable
+- * @param appStatsName_val_ptr_len_ptr
+- * Pointer to a size_t. On entry, it will contain the size (in bytes)
+- * pointed to by appStatsName.
+- * On exit, this value should contain the data size (in bytes).
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_SKIP : skip this node (no value for now)
+- * @retval MFD_ERROR : Any other error
+-*
+- * @note If you need more than (*appStatsName_val_ptr_len_ptr) bytes of memory,
+- * allocate it using malloc() and update appStatsName_val_ptr_ptr.
+- * <b>DO NOT</b> free the previous pointer.
+- * The MFD helper will release the memory you allocate.
+- *
+- * @remark If you call this function yourself, you are responsible
+- * for checking if the pointer changed, and freeing any
+- * previously allocated memory. (Not necessary if you pass
+- * in a pointer to static memory, obviously.)
+- */
+-int
+-appStatsName_get(dessertAppStatsTable_rowreq_ctx * rowreq_ctx,
+- char **appStatsName_val_ptr_ptr,
+- size_t *appStatsName_val_ptr_len_ptr)
+-{
+- /** we should have a non-NULL pointer and enough storage */
+- netsnmp_assert((NULL != appStatsName_val_ptr_ptr)
+- && (NULL != *appStatsName_val_ptr_ptr));
+- netsnmp_assert(NULL != appStatsName_val_ptr_len_ptr);
+-
+-
+- DEBUGMSGTL(("verbose:dessertAppStatsTable:appStatsName_get",
+- "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:231:o: |-> Extract the current value of the appStatsName data.
+- * copy (* appStatsName_val_ptr_ptr ) data and (* appStatsName_val_ptr_len_ptr ) from rowreq_ctx->data
+- */
+- /*
+- * make sure there is enough space for appStatsName data
+- */
+- if ((NULL == (*appStatsName_val_ptr_ptr)) ||
+- ((*appStatsName_val_ptr_len_ptr) <
+- (rowreq_ctx->data.appStatsName_len *
+- sizeof(rowreq_ctx->data.appStatsName[0])))) {
+- /*
+- * allocate space for appStatsName data
+- */
+- (*appStatsName_val_ptr_ptr) =
+- malloc(rowreq_ctx->data.appStatsName_len *
+- sizeof(rowreq_ctx->data.appStatsName[0]));
+- if (NULL == (*appStatsName_val_ptr_ptr)) {
+- snmp_log(LOG_ERR, "could not allocate memory\n");
+- return MFD_ERROR;
+- }
+- }
+- (*appStatsName_val_ptr_len_ptr) =
+- rowreq_ctx->data.appStatsName_len *
+- sizeof(rowreq_ctx->data.appStatsName[0]);
+- memcpy((*appStatsName_val_ptr_ptr), rowreq_ctx->data.appStatsName,
+- rowreq_ctx->data.appStatsName_len *
+- sizeof(rowreq_ctx->data.appStatsName[0]));
+-
+- return MFD_SUCCESS;
+-} /* appStatsName_get */
+-
+-/*---------------------------------------------------------------------
+- * DESSERT-MIB::dessertAppStatsEntry.appStatsDesc
+- * appStatsDesc is subid 3 of dessertAppStatsEntry.
+- * Its status is Current, and its access level is ReadOnly.
+- * OID: .1.3.6.1.4.1.18898.0.19.42.1.9.1.3
+- * Description:
+-A short description of the statistical datum
+- *
+- * Attributes:
+- * accessible 1 isscalar 0 enums 0 hasdefval 0
+- * readable 1 iscolumn 1 ranges 1 hashint 1
+- * settable 0
+- * hint: 255a
+- *
+- * Ranges: 0 - 255;
+- *
+- * Its syntax is DisplayString (based on perltype OCTETSTR)
+- * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+- * This data type requires a length. (Max 255)
+- */
+-/**
+- * Extract the current value of the appStatsDesc data.
+- *
+- * Set a value using the data context for the row.
+- *
+- * @param rowreq_ctx
+- * Pointer to the row request context.
+- * @param appStatsDesc_val_ptr_ptr
+- * Pointer to storage for a char variable
+- * @param appStatsDesc_val_ptr_len_ptr
+- * Pointer to a size_t. On entry, it will contain the size (in bytes)
+- * pointed to by appStatsDesc.
+- * On exit, this value should contain the data size (in bytes).
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_SKIP : skip this node (no value for now)
+- * @retval MFD_ERROR : Any other error
+-*
+- * @note If you need more than (*appStatsDesc_val_ptr_len_ptr) bytes of memory,
+- * allocate it using malloc() and update appStatsDesc_val_ptr_ptr.
+- * <b>DO NOT</b> free the previous pointer.
+- * The MFD helper will release the memory you allocate.
+- *
+- * @remark If you call this function yourself, you are responsible
+- * for checking if the pointer changed, and freeing any
+- * previously allocated memory. (Not necessary if you pass
+- * in a pointer to static memory, obviously.)
+- */
+-int
+-appStatsDesc_get(dessertAppStatsTable_rowreq_ctx * rowreq_ctx,
+- char **appStatsDesc_val_ptr_ptr,
+- size_t *appStatsDesc_val_ptr_len_ptr)
+-{
+- /** we should have a non-NULL pointer and enough storage */
+- netsnmp_assert((NULL != appStatsDesc_val_ptr_ptr)
+- && (NULL != *appStatsDesc_val_ptr_ptr));
+- netsnmp_assert(NULL != appStatsDesc_val_ptr_len_ptr);
+-
+-
+- DEBUGMSGTL(("verbose:dessertAppStatsTable:appStatsDesc_get",
+- "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:231:o: |-> Extract the current value of the appStatsDesc data.
+- * copy (* appStatsDesc_val_ptr_ptr ) data and (* appStatsDesc_val_ptr_len_ptr ) from rowreq_ctx->data
+- */
+- /*
+- * make sure there is enough space for appStatsDesc data
+- */
+- if ((NULL == (*appStatsDesc_val_ptr_ptr)) ||
+- ((*appStatsDesc_val_ptr_len_ptr) <
+- (rowreq_ctx->data.appStatsDesc_len *
+- sizeof(rowreq_ctx->data.appStatsDesc[0])))) {
+- /*
+- * allocate space for appStatsDesc data
+- */
+- (*appStatsDesc_val_ptr_ptr) =
+- malloc(rowreq_ctx->data.appStatsDesc_len *
+- sizeof(rowreq_ctx->data.appStatsDesc[0]));
+- if (NULL == (*appStatsDesc_val_ptr_ptr)) {
+- snmp_log(LOG_ERR, "could not allocate memory\n");
+- return MFD_ERROR;
+- }
+- }
+- (*appStatsDesc_val_ptr_len_ptr) =
+- rowreq_ctx->data.appStatsDesc_len *
+- sizeof(rowreq_ctx->data.appStatsDesc[0]);
+- memcpy((*appStatsDesc_val_ptr_ptr), rowreq_ctx->data.appStatsDesc,
+- rowreq_ctx->data.appStatsDesc_len *
+- sizeof(rowreq_ctx->data.appStatsDesc[0]));
+-
+- return MFD_SUCCESS;
+-} /* appStatsDesc_get */
+-
+-/*---------------------------------------------------------------------
+- * DESSERT-MIB::dessertAppStatsEntry.appStatsNodeOrLink
+- * appStatsNodeOrLink is subid 4 of dessertAppStatsEntry.
+- * Its status is Current, and its access level is ReadOnly.
+- * OID: .1.3.6.1.4.1.18898.0.19.42.1.9.1.4
+- * Description:
+-Determines which of the appStatsMacAddress{1,2} coloumns
+- is valid and therefore indicates whether the information provided
+- by this row relates to a node or a link.
+- *
+- * Attributes:
+- * accessible 1 isscalar 0 enums 1 hasdefval 0
+- * readable 1 iscolumn 1 ranges 0 hashint 0
+- * settable 0
+- *
+- * Enum range: 3/8. Values: none(0), node(1), link(2)
+- *
+- * Its syntax is INTEGER (based on perltype INTEGER)
+- * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+- */
+-/**
+- * map a value from its original native format to the MIB format.
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_ERROR : Any other error
+- *
+- * @note parameters follow the memset convention (dest, src).
+- *
+- * @note generation and use of this function can be turned off by re-running
+- * mib2c after adding the following line to the file
+- * defaults/node-appStatsNodeOrLink.m2d :
+- * @eval $m2c_node_skip_mapping = 1@
+- *
+- * @remark
+- * If the values for your data type don't exactly match the
+- * possible values defined by the mib, you should map them here.
+- * Otherwise, just do a direct copy.
+- */
+-int
+-appStatsNodeOrLink_map(u_long * mib_appStatsNodeOrLink_val_ptr,
+- u_long raw_appStatsNodeOrLink_val)
+-{
+- netsnmp_assert(NULL != mib_appStatsNodeOrLink_val_ptr);
+-
+- DEBUGMSGTL(("verbose:dessertAppStatsTable:appStatsNodeOrLink_map",
+- "called\n"));
+-
+- /*
+- * TODO:241:o: |-> Implement appStatsNodeOrLink enum mapping.
+- * uses INTERNAL_* macros defined in the header files
+- */
+- switch (raw_appStatsNodeOrLink_val) {
+- case INTERNAL_DESSERTAPPSTATSTABLE_APPSTATSNODEORLINK_NONE:
+- *mib_appStatsNodeOrLink_val_ptr = APPSTATSNODEORLINK_NONE;
+- break;
+-
+- case INTERNAL_DESSERTAPPSTATSTABLE_APPSTATSNODEORLINK_NODE:
+- *mib_appStatsNodeOrLink_val_ptr = APPSTATSNODEORLINK_NODE;
+- break;
+-
+- case INTERNAL_DESSERTAPPSTATSTABLE_APPSTATSNODEORLINK_LINK:
+- *mib_appStatsNodeOrLink_val_ptr = APPSTATSNODEORLINK_LINK;
+- break;
+-
+- default:
+- snmp_log(LOG_ERR,
+- "couldn't map value %ld for appStatsNodeOrLink\n",
+- raw_appStatsNodeOrLink_val);
+- return MFD_ERROR;
+- }
+-
+- return MFD_SUCCESS;
+-} /* appStatsNodeOrLink_map */
+-
+-/**
+- * Extract the current value of the appStatsNodeOrLink data.
+- *
+- * Set a value using the data context for the row.
+- *
+- * @param rowreq_ctx
+- * Pointer to the row request context.
+- * @param appStatsNodeOrLink_val_ptr
+- * Pointer to storage for a long variable
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_SKIP : skip this node (no value for now)
+- * @retval MFD_ERROR : Any other error
+- */
+-int
+-appStatsNodeOrLink_get(dessertAppStatsTable_rowreq_ctx * rowreq_ctx,
+- u_long * appStatsNodeOrLink_val_ptr)
+-{
+- /** we should have a non-NULL pointer */
+- netsnmp_assert(NULL != appStatsNodeOrLink_val_ptr);
+-
+-
+- DEBUGMSGTL(("verbose:dessertAppStatsTable:appStatsNodeOrLink_get",
+- "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:231:o: |-> Extract the current value of the appStatsNodeOrLink data.
+- * copy (* appStatsNodeOrLink_val_ptr ) from rowreq_ctx->data
+- */
+- (*appStatsNodeOrLink_val_ptr) = rowreq_ctx->data.appStatsNodeOrLink;
+-
+- return MFD_SUCCESS;
+-} /* appStatsNodeOrLink_get */
+-
+-/*---------------------------------------------------------------------
+- * DESSERT-MIB::dessertAppStatsEntry.appStatsValueType
+- * appStatsValueType is subid 5 of dessertAppStatsEntry.
+- * Its status is Current, and its access level is ReadOnly.
+- * OID: .1.3.6.1.4.1.18898.0.19.42.1.9.1.5
+- * Description:
+-Indicates which of the coloumns (appStatsTruthValue,
+- appStatsInterger32, appStatsUInteger32, appStatsCounter64,
+- appStatsOctetString) in the dessertAppStatsTable is actually valid.
+- *
+- * Attributes:
+- * accessible 1 isscalar 0 enums 1 hasdefval 0
+- * readable 1 iscolumn 1 ranges 0 hashint 0
+- * settable 0
+- *
+- * Enum range: 3/8. Values: bool(0), int32(1), uint32(2), counter64(3), octetstring(4)
+- *
+- * Its syntax is INTEGER (based on perltype INTEGER)
+- * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+- */
+-/**
+- * map a value from its original native format to the MIB format.
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_ERROR : Any other error
+- *
+- * @note parameters follow the memset convention (dest, src).
+- *
+- * @note generation and use of this function can be turned off by re-running
+- * mib2c after adding the following line to the file
+- * defaults/node-appStatsValueType.m2d :
+- * @eval $m2c_node_skip_mapping = 1@
+- *
+- * @remark
+- * If the values for your data type don't exactly match the
+- * possible values defined by the mib, you should map them here.
+- * Otherwise, just do a direct copy.
+- */
+-int
+-appStatsValueType_map(u_long * mib_appStatsValueType_val_ptr,
+- u_long raw_appStatsValueType_val)
+-{
+- netsnmp_assert(NULL != mib_appStatsValueType_val_ptr);
+-
+- DEBUGMSGTL(("verbose:dessertAppStatsTable:appStatsValueType_map",
+- "called\n"));
+-
+- /*
+- * TODO:241:o: |-> Implement appStatsValueType enum mapping.
+- * uses INTERNAL_* macros defined in the header files
+- */
+- switch (raw_appStatsValueType_val) {
+- case INTERNAL_DESSERTAPPSTATSTABLE_APPSTATSVALUETYPE_BOOL:
+- *mib_appStatsValueType_val_ptr = APPSTATSVALUETYPE_BOOL;
+- break;
+-
+- case INTERNAL_DESSERTAPPSTATSTABLE_APPSTATSVALUETYPE_INT32:
+- *mib_appStatsValueType_val_ptr = APPSTATSVALUETYPE_INT32;
+- break;
+-
+- case INTERNAL_DESSERTAPPSTATSTABLE_APPSTATSVALUETYPE_UINT32:
+- *mib_appStatsValueType_val_ptr = APPSTATSVALUETYPE_UINT32;
+- break;
+-
+- case INTERNAL_DESSERTAPPSTATSTABLE_APPSTATSVALUETYPE_COUNTER64:
+- *mib_appStatsValueType_val_ptr = APPSTATSVALUETYPE_COUNTER64;
+- break;
+-
+- case INTERNAL_DESSERTAPPSTATSTABLE_APPSTATSVALUETYPE_OCTETSTRING:
+- *mib_appStatsValueType_val_ptr = APPSTATSVALUETYPE_OCTETSTRING;
+- break;
+-
+- default:
+- snmp_log(LOG_ERR, "couldn't map value %ld for appStatsValueType\n",
+- raw_appStatsValueType_val);
+- return MFD_ERROR;
+- }
+-
+- return MFD_SUCCESS;
+-} /* appStatsValueType_map */
+-
+-/**
+- * Extract the current value of the appStatsValueType data.
+- *
+- * Set a value using the data context for the row.
+- *
+- * @param rowreq_ctx
+- * Pointer to the row request context.
+- * @param appStatsValueType_val_ptr
+- * Pointer to storage for a long variable
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_SKIP : skip this node (no value for now)
+- * @retval MFD_ERROR : Any other error
+- */
+-int
+-appStatsValueType_get(dessertAppStatsTable_rowreq_ctx * rowreq_ctx,
+- u_long * appStatsValueType_val_ptr)
+-{
+- /** we should have a non-NULL pointer */
+- netsnmp_assert(NULL != appStatsValueType_val_ptr);
+-
+-
+- DEBUGMSGTL(("verbose:dessertAppStatsTable:appStatsValueType_get",
+- "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:231:o: |-> Extract the current value of the appStatsValueType data.
+- * copy (* appStatsValueType_val_ptr ) from rowreq_ctx->data
+- */
+- (*appStatsValueType_val_ptr) = rowreq_ctx->data.appStatsValueType;
+-
+- return MFD_SUCCESS;
+-} /* appStatsValueType_get */
+-
+-/*---------------------------------------------------------------------
+- * DESSERT-MIB::dessertAppStatsEntry.appStatsMacAddress1
+- * appStatsMacAddress1 is subid 6 of dessertAppStatsEntry.
+- * Its status is Current, and its access level is ReadOnly.
+- * OID: .1.3.6.1.4.1.18898.0.19.42.1.9.1.6
+- * Description:
+-The hardware address of a node.
+- *
+- * Attributes:
+- * accessible 1 isscalar 0 enums 0 hasdefval 0
+- * readable 1 iscolumn 1 ranges 1 hashint 1
+- * settable 0
+- * hint: 1x:
+- *
+- * Ranges: 6;
+- *
+- * Its syntax is MacAddress (based on perltype OCTETSTR)
+- * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+- * This data type requires a length. (Max 6)
+- */
+-/**
+- * Extract the current value of the appStatsMacAddress1 data.
+- *
+- * Set a value using the data context for the row.
+- *
+- * @param rowreq_ctx
+- * Pointer to the row request context.
+- * @param appStatsMacAddress1_val_ptr_ptr
+- * Pointer to storage for a char variable
+- * @param appStatsMacAddress1_val_ptr_len_ptr
+- * Pointer to a size_t. On entry, it will contain the size (in bytes)
+- * pointed to by appStatsMacAddress1.
+- * On exit, this value should contain the data size (in bytes).
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_SKIP : skip this node (no value for now)
+- * @retval MFD_ERROR : Any other error
+-*
+- * @note If you need more than (*appStatsMacAddress1_val_ptr_len_ptr) bytes of memory,
+- * allocate it using malloc() and update appStatsMacAddress1_val_ptr_ptr.
+- * <b>DO NOT</b> free the previous pointer.
+- * The MFD helper will release the memory you allocate.
+- *
+- * @remark If you call this function yourself, you are responsible
+- * for checking if the pointer changed, and freeing any
+- * previously allocated memory. (Not necessary if you pass
+- * in a pointer to static memory, obviously.)
+- */
+-int
+-appStatsMacAddress1_get(dessertAppStatsTable_rowreq_ctx * rowreq_ctx,
+- char **appStatsMacAddress1_val_ptr_ptr,
+- size_t *appStatsMacAddress1_val_ptr_len_ptr)
+-{
+- /** we should have a non-NULL pointer and enough storage */
+- netsnmp_assert((NULL != appStatsMacAddress1_val_ptr_ptr)
+- && (NULL != *appStatsMacAddress1_val_ptr_ptr));
+- netsnmp_assert(NULL != appStatsMacAddress1_val_ptr_len_ptr);
+-
+-
+- DEBUGMSGTL(("verbose:dessertAppStatsTable:appStatsMacAddress1_get",
+- "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:231:o: |-> Extract the current value of the appStatsMacAddress1 data.
+- * copy (* appStatsMacAddress1_val_ptr_ptr ) data and (* appStatsMacAddress1_val_ptr_len_ptr ) from rowreq_ctx->data
+- */
+- /*
+- * make sure there is enough space for appStatsMacAddress1 data
+- */
+- if ((NULL == (*appStatsMacAddress1_val_ptr_ptr)) ||
+- ((*appStatsMacAddress1_val_ptr_len_ptr) <
+- (rowreq_ctx->data.appStatsMacAddress1_len *
+- sizeof(rowreq_ctx->data.appStatsMacAddress1[0])))) {
+- /*
+- * allocate space for appStatsMacAddress1 data
+- */
+- (*appStatsMacAddress1_val_ptr_ptr) =
+- malloc(rowreq_ctx->data.appStatsMacAddress1_len *
+- sizeof(rowreq_ctx->data.appStatsMacAddress1[0]));
+- if (NULL == (*appStatsMacAddress1_val_ptr_ptr)) {
+- snmp_log(LOG_ERR, "could not allocate memory\n");
+- return MFD_ERROR;
+- }
+- }
+- (*appStatsMacAddress1_val_ptr_len_ptr) =
+- rowreq_ctx->data.appStatsMacAddress1_len *
+- sizeof(rowreq_ctx->data.appStatsMacAddress1[0]);
+- memcpy((*appStatsMacAddress1_val_ptr_ptr),
+- rowreq_ctx->data.appStatsMacAddress1,
+- rowreq_ctx->data.appStatsMacAddress1_len *
+- sizeof(rowreq_ctx->data.appStatsMacAddress1[0]));
+-
+- return MFD_SUCCESS;
+-} /* appStatsMacAddress1_get */
+-
+-/*---------------------------------------------------------------------
+- * DESSERT-MIB::dessertAppStatsEntry.appStatsMacAddress2
+- * appStatsMacAddress2 is subid 7 of dessertAppStatsEntry.
+- * Its status is Current, and its access level is ReadOnly.
+- * OID: .1.3.6.1.4.1.18898.0.19.42.1.9.1.7
+- * Description:
+-The hardware address of a second node.
+- *
+- * Attributes:
+- * accessible 1 isscalar 0 enums 0 hasdefval 0
+- * readable 1 iscolumn 1 ranges 1 hashint 1
+- * settable 0
+- * hint: 1x:
+- *
+- * Ranges: 6;
+- *
+- * Its syntax is MacAddress (based on perltype OCTETSTR)
+- * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+- * This data type requires a length. (Max 6)
+- */
+-/**
+- * Extract the current value of the appStatsMacAddress2 data.
+- *
+- * Set a value using the data context for the row.
+- *
+- * @param rowreq_ctx
+- * Pointer to the row request context.
+- * @param appStatsMacAddress2_val_ptr_ptr
+- * Pointer to storage for a char variable
+- * @param appStatsMacAddress2_val_ptr_len_ptr
+- * Pointer to a size_t. On entry, it will contain the size (in bytes)
+- * pointed to by appStatsMacAddress2.
+- * On exit, this value should contain the data size (in bytes).
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_SKIP : skip this node (no value for now)
+- * @retval MFD_ERROR : Any other error
+-*
+- * @note If you need more than (*appStatsMacAddress2_val_ptr_len_ptr) bytes of memory,
+- * allocate it using malloc() and update appStatsMacAddress2_val_ptr_ptr.
+- * <b>DO NOT</b> free the previous pointer.
+- * The MFD helper will release the memory you allocate.
+- *
+- * @remark If you call this function yourself, you are responsible
+- * for checking if the pointer changed, and freeing any
+- * previously allocated memory. (Not necessary if you pass
+- * in a pointer to static memory, obviously.)
+- */
+-int
+-appStatsMacAddress2_get(dessertAppStatsTable_rowreq_ctx * rowreq_ctx,
+- char **appStatsMacAddress2_val_ptr_ptr,
+- size_t *appStatsMacAddress2_val_ptr_len_ptr)
+-{
+- /** we should have a non-NULL pointer and enough storage */
+- netsnmp_assert((NULL != appStatsMacAddress2_val_ptr_ptr)
+- && (NULL != *appStatsMacAddress2_val_ptr_ptr));
+- netsnmp_assert(NULL != appStatsMacAddress2_val_ptr_len_ptr);
+-
+-
+- DEBUGMSGTL(("verbose:dessertAppStatsTable:appStatsMacAddress2_get",
+- "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:231:o: |-> Extract the current value of the appStatsMacAddress2 data.
+- * copy (* appStatsMacAddress2_val_ptr_ptr ) data and (* appStatsMacAddress2_val_ptr_len_ptr ) from rowreq_ctx->data
+- */
+- /*
+- * make sure there is enough space for appStatsMacAddress2 data
+- */
+- if ((NULL == (*appStatsMacAddress2_val_ptr_ptr)) ||
+- ((*appStatsMacAddress2_val_ptr_len_ptr) <
+- (rowreq_ctx->data.appStatsMacAddress2_len *
+- sizeof(rowreq_ctx->data.appStatsMacAddress2[0])))) {
+- /*
+- * allocate space for appStatsMacAddress2 data
+- */
+- (*appStatsMacAddress2_val_ptr_ptr) =
+- malloc(rowreq_ctx->data.appStatsMacAddress2_len *
+- sizeof(rowreq_ctx->data.appStatsMacAddress2[0]));
+- if (NULL == (*appStatsMacAddress2_val_ptr_ptr)) {
+- snmp_log(LOG_ERR, "could not allocate memory\n");
+- return MFD_ERROR;
+- }
+- }
+- (*appStatsMacAddress2_val_ptr_len_ptr) =
+- rowreq_ctx->data.appStatsMacAddress2_len *
+- sizeof(rowreq_ctx->data.appStatsMacAddress2[0]);
+- memcpy((*appStatsMacAddress2_val_ptr_ptr),
+- rowreq_ctx->data.appStatsMacAddress2,
+- rowreq_ctx->data.appStatsMacAddress2_len *
+- sizeof(rowreq_ctx->data.appStatsMacAddress2[0]));
+-
+- return MFD_SUCCESS;
+-} /* appStatsMacAddress2_get */
+-
+-/*---------------------------------------------------------------------
+- * DESSERT-MIB::dessertAppStatsEntry.appStatsTruthValue
+- * appStatsTruthValue is subid 8 of dessertAppStatsEntry.
+- * Its status is Current, and its access level is ReadOnly.
+- * OID: .1.3.6.1.4.1.18898.0.19.42.1.9.1.8
+- * Description:
+-A statistical datum with TruthValue semantics.
+- *
+- * Attributes:
+- * accessible 1 isscalar 0 enums 1 hasdefval 0
+- * readable 1 iscolumn 1 ranges 0 hashint 0
+- * settable 0
+- *
+- * Enum range: 2/8. Values: true(1), false(2)
+- *
+- * Its syntax is TruthValue (based on perltype INTEGER)
+- * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
+- */
+-/**
+- * map a value from its original native format to the MIB format.
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_ERROR : Any other error
+- *
+- * @note parameters follow the memset convention (dest, src).
+- *
+- * @note generation and use of this function can be turned off by re-running
+- * mib2c after adding the following line to the file
+- * defaults/node-appStatsTruthValue.m2d :
+- * @eval $m2c_node_skip_mapping = 1@
+- *
+- * @remark
+- * If the values for your data type don't exactly match the
+- * possible values defined by the mib, you should map them here.
+- * Otherwise, just do a direct copy.
+- */
+-int
+-appStatsTruthValue_map(u_long * mib_appStatsTruthValue_val_ptr,
+- u_long raw_appStatsTruthValue_val)
+-{
+- netsnmp_assert(NULL != mib_appStatsTruthValue_val_ptr);
+-
+- DEBUGMSGTL(("verbose:dessertAppStatsTable:appStatsTruthValue_map",
+- "called\n"));
+-
+- /*
+- * TODO:241:o: |-> Implement appStatsTruthValue enum mapping.
+- * uses INTERNAL_* macros defined in the header files
+- */
+- switch (raw_appStatsTruthValue_val) {
+- case INTERNAL_DESSERTAPPSTATSTABLE_APPSTATSTRUTHVALUE_TRUE:
+- *mib_appStatsTruthValue_val_ptr = TRUTHVALUE_TRUE;
+- break;
+-
+- case INTERNAL_DESSERTAPPSTATSTABLE_APPSTATSTRUTHVALUE_FALSE:
+- *mib_appStatsTruthValue_val_ptr = TRUTHVALUE_FALSE;
+- break;
+-
+- default:
+- snmp_log(LOG_ERR,
+- "couldn't map value %ld for appStatsTruthValue\n",
+- raw_appStatsTruthValue_val);
+- return MFD_ERROR;
+- }
+-
+- return MFD_SUCCESS;
+-} /* appStatsTruthValue_map */
+-
+-/**
+- * Extract the current value of the appStatsTruthValue data.
+- *
+- * Set a value using the data context for the row.
+- *
+- * @param rowreq_ctx
+- * Pointer to the row request context.
+- * @param appStatsTruthValue_val_ptr
+- * Pointer to storage for a long variable
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_SKIP : skip this node (no value for now)
+- * @retval MFD_ERROR : Any other error
+- */
+-int
+-appStatsTruthValue_get(dessertAppStatsTable_rowreq_ctx * rowreq_ctx,
+- u_long * appStatsTruthValue_val_ptr)
+-{
+- /** we should have a non-NULL pointer */
+- netsnmp_assert(NULL != appStatsTruthValue_val_ptr);
+-
+-
+- DEBUGMSGTL(("verbose:dessertAppStatsTable:appStatsTruthValue_get",
+- "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:231:o: |-> Extract the current value of the appStatsTruthValue data.
+- * copy (* appStatsTruthValue_val_ptr ) from rowreq_ctx->data
+- */
+- (*appStatsTruthValue_val_ptr) = rowreq_ctx->data.appStatsTruthValue;
+-
+- return MFD_SUCCESS;
+-} /* appStatsTruthValue_get */
+-
+-/*---------------------------------------------------------------------
+- * DESSERT-MIB::dessertAppStatsEntry.appStatsInteger32
+- * appStatsInteger32 is subid 9 of dessertAppStatsEntry.
+- * Its status is Current, and its access level is ReadOnly.
+- * OID: .1.3.6.1.4.1.18898.0.19.42.1.9.1.9
+- * Description:
+-A statistical datum with Integer32 semantics.
+- *
+- * Attributes:
+- * accessible 1 isscalar 0 enums 0 hasdefval 0
+- * readable 1 iscolumn 1 ranges 0 hashint 0
+- * settable 0
+- *
+- *
+- * Its syntax is INTEGER32 (based on perltype INTEGER32)
+- * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
+- */
+-/**
+- * Extract the current value of the appStatsInteger32 data.
+- *
+- * Set a value using the data context for the row.
+- *
+- * @param rowreq_ctx
+- * Pointer to the row request context.
+- * @param appStatsInteger32_val_ptr
+- * Pointer to storage for a long variable
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_SKIP : skip this node (no value for now)
+- * @retval MFD_ERROR : Any other error
+- */
+-int
+-appStatsInteger32_get(dessertAppStatsTable_rowreq_ctx * rowreq_ctx,
+- long *appStatsInteger32_val_ptr)
+-{
+- /** we should have a non-NULL pointer */
+- netsnmp_assert(NULL != appStatsInteger32_val_ptr);
+-
+-
+- DEBUGMSGTL(("verbose:dessertAppStatsTable:appStatsInteger32_get",
+- "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:231:o: |-> Extract the current value of the appStatsInteger32 data.
+- * copy (* appStatsInteger32_val_ptr ) from rowreq_ctx->data
+- */
+- (*appStatsInteger32_val_ptr) = rowreq_ctx->data.appStatsInteger32;
+-
+- return MFD_SUCCESS;
+-} /* appStatsInteger32_get */
+-
+-/*---------------------------------------------------------------------
+- * DESSERT-MIB::dessertAppStatsEntry.appStatsUnsigned32
+- * appStatsUnsigned32 is subid 10 of dessertAppStatsEntry.
+- * Its status is Current, and its access level is ReadOnly.
+- * OID: .1.3.6.1.4.1.18898.0.19.42.1.9.1.10
+- * Description:
+-A statistical datum with Unsigned32 semantics.
+- *
+- * Attributes:
+- * accessible 1 isscalar 0 enums 0 hasdefval 0
+- * readable 1 iscolumn 1 ranges 0 hashint 0
+- * settable 0
+- *
+- *
+- * Its syntax is UNSIGNED32 (based on perltype UNSIGNED32)
+- * The net-snmp type is ASN_UNSIGNED. The C type decl is u_long (u_long)
+- */
+-/**
+- * Extract the current value of the appStatsUnsigned32 data.
+- *
+- * Set a value using the data context for the row.
+- *
+- * @param rowreq_ctx
+- * Pointer to the row request context.
+- * @param appStatsUnsigned32_val_ptr
+- * Pointer to storage for a u_long variable
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_SKIP : skip this node (no value for now)
+- * @retval MFD_ERROR : Any other error
+- */
+-int
+-appStatsUnsigned32_get(dessertAppStatsTable_rowreq_ctx * rowreq_ctx,
+- u_long * appStatsUnsigned32_val_ptr)
+-{
+- /** we should have a non-NULL pointer */
+- netsnmp_assert(NULL != appStatsUnsigned32_val_ptr);
+-
+-
+- DEBUGMSGTL(("verbose:dessertAppStatsTable:appStatsUnsigned32_get",
+- "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:231:o: |-> Extract the current value of the appStatsUnsigned32 data.
+- * copy (* appStatsUnsigned32_val_ptr ) from rowreq_ctx->data
+- */
+- (*appStatsUnsigned32_val_ptr) = rowreq_ctx->data.appStatsUnsigned32;
+-
+- return MFD_SUCCESS;
+-} /* appStatsUnsigned32_get */
+-
+-/*---------------------------------------------------------------------
+- * DESSERT-MIB::dessertAppStatsEntry.appStatsCounter64
+- * appStatsCounter64 is subid 11 of dessertAppStatsEntry.
+- * Its status is Current, and its access level is ReadOnly.
+- * OID: .1.3.6.1.4.1.18898.0.19.42.1.9.1.11
+- * Description:
+-A statistical datum with Counter64 semantics.
+- *
+- * Attributes:
+- * accessible 1 isscalar 0 enums 0 hasdefval 0
+- * readable 1 iscolumn 1 ranges 0 hashint 0
+- * settable 0
+- *
+- *
+- * Its syntax is COUNTER64 (based on perltype COUNTER64)
+- * The net-snmp type is ASN_COUNTER64. The C type decl is U64 (U64)
+- */
+-/**
+- * Extract the current value of the appStatsCounter64 data.
+- *
+- * Set a value using the data context for the row.
+- *
+- * @param rowreq_ctx
+- * Pointer to the row request context.
+- * @param appStatsCounter64_val_ptr
+- * Pointer to storage for a U64 variable
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_SKIP : skip this node (no value for now)
+- * @retval MFD_ERROR : Any other error
+- */
+-int
+-appStatsCounter64_get(dessertAppStatsTable_rowreq_ctx * rowreq_ctx,
+- U64 * appStatsCounter64_val_ptr)
+-{
+- /** we should have a non-NULL pointer */
+- netsnmp_assert(NULL != appStatsCounter64_val_ptr);
+-
+- /*
+- * TODO:231:o: |-> copy appStatsCounter64 data.
+- * get (* appStatsCounter64_val_ptr ).low and (* appStatsCounter64_val_ptr ).high from rowreq_ctx->data
+- */
+- (*appStatsCounter64_val_ptr).high =
+- rowreq_ctx->data.appStatsCounter64.high;
+- (*appStatsCounter64_val_ptr).low =
+- rowreq_ctx->data.appStatsCounter64.low;
+-
+-
+- return MFD_SUCCESS;
+-} /* appStatsCounter64_get */
+-
+-/*---------------------------------------------------------------------
+- * DESSERT-MIB::dessertAppStatsEntry.appStatsOctetString
+- * appStatsOctetString is subid 12 of dessertAppStatsEntry.
+- * Its status is Current, and its access level is ReadOnly.
+- * OID: .1.3.6.1.4.1.18898.0.19.42.1.9.1.12
+- * Description:
+-A statistical datum containing of up to 1024 octets.
+- *
+- * Attributes:
+- * accessible 1 isscalar 0 enums 0 hasdefval 0
+- * readable 1 iscolumn 1 ranges 1 hashint 0
+- * settable 0
+- *
+- * Ranges: 0 - 1024;
+- *
+- * Its syntax is OCTETSTR (based on perltype OCTETSTR)
+- * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+- * This data type requires a length. (Max 1024)
+- */
+-/**
+- * Extract the current value of the appStatsOctetString data.
+- *
+- * Set a value using the data context for the row.
+- *
+- * @param rowreq_ctx
+- * Pointer to the row request context.
+- * @param appStatsOctetString_val_ptr_ptr
+- * Pointer to storage for a char variable
+- * @param appStatsOctetString_val_ptr_len_ptr
+- * Pointer to a size_t. On entry, it will contain the size (in bytes)
+- * pointed to by appStatsOctetString.
+- * On exit, this value should contain the data size (in bytes).
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_SKIP : skip this node (no value for now)
+- * @retval MFD_ERROR : Any other error
+-*
+- * @note If you need more than (*appStatsOctetString_val_ptr_len_ptr) bytes of memory,
+- * allocate it using malloc() and update appStatsOctetString_val_ptr_ptr.
+- * <b>DO NOT</b> free the previous pointer.
+- * The MFD helper will release the memory you allocate.
+- *
+- * @remark If you call this function yourself, you are responsible
+- * for checking if the pointer changed, and freeing any
+- * previously allocated memory. (Not necessary if you pass
+- * in a pointer to static memory, obviously.)
+- */
+-int
+-appStatsOctetString_get(dessertAppStatsTable_rowreq_ctx * rowreq_ctx,
+- char **appStatsOctetString_val_ptr_ptr,
+- size_t *appStatsOctetString_val_ptr_len_ptr)
+-{
+- /** we should have a non-NULL pointer and enough storage */
+- netsnmp_assert((NULL != appStatsOctetString_val_ptr_ptr)
+- && (NULL != *appStatsOctetString_val_ptr_ptr));
+- netsnmp_assert(NULL != appStatsOctetString_val_ptr_len_ptr);
+-
+-
+- DEBUGMSGTL(("verbose:dessertAppStatsTable:appStatsOctetString_get",
+- "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:231:o: |-> Extract the current value of the appStatsOctetString data.
+- * copy (* appStatsOctetString_val_ptr_ptr ) data and (* appStatsOctetString_val_ptr_len_ptr ) from rowreq_ctx->data
+- */
+- /*
+- * make sure there is enough space for appStatsOctetString data
+- */
+- if ((NULL == (*appStatsOctetString_val_ptr_ptr)) ||
+- ((*appStatsOctetString_val_ptr_len_ptr) <
+- (rowreq_ctx->data.appStatsOctetString_len *
+- sizeof(rowreq_ctx->data.appStatsOctetString[0])))) {
+- /*
+- * allocate space for appStatsOctetString data
+- */
+- (*appStatsOctetString_val_ptr_ptr) =
+- malloc(rowreq_ctx->data.appStatsOctetString_len *
+- sizeof(rowreq_ctx->data.appStatsOctetString[0]));
+- if (NULL == (*appStatsOctetString_val_ptr_ptr)) {
+- snmp_log(LOG_ERR, "could not allocate memory\n");
+- return MFD_ERROR;
+- }
+- }
+- (*appStatsOctetString_val_ptr_len_ptr) =
+- rowreq_ctx->data.appStatsOctetString_len *
+- sizeof(rowreq_ctx->data.appStatsOctetString[0]);
+- memcpy((*appStatsOctetString_val_ptr_ptr),
+- rowreq_ctx->data.appStatsOctetString,
+- rowreq_ctx->data.appStatsOctetString_len *
+- sizeof(rowreq_ctx->data.appStatsOctetString[0]));
+-
+- return MFD_SUCCESS;
+-} /* appStatsOctetString_get */
+-
+-
+-
+-/** @} */
+Index: libdessert0.86-0.86.14/snmp/dessertAppStatsTable_data_get.h
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertAppStatsTable_data_get.h 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,174 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * version : 12088 $ of $
+- *
+- * $Id:$
+- *
+- * @file dessertAppStatsTable_data_get.h
+- *
+- * @addtogroup get
+- *
+- * Prototypes for get functions
+- *
+- * @{
+- */
+-#ifndef DESSERTAPPSTATSTABLE_DATA_GET_H
+-#define DESSERTAPPSTATSTABLE_DATA_GET_H
+-
+-#ifdef __cplusplus
+-extern "C" {
+-#endif
+-
+- /*
+- *********************************************************************
+- * GET function declarations
+- */
+-
+- /*
+- *********************************************************************
+- * GET Table declarations
+- */
+-/**********************************************************************
+- **********************************************************************
+- ***
+- *** Table dessertAppStatsTable
+- ***
+- **********************************************************************
+- **********************************************************************/
+- /*
+- * DESSERT-MIB::dessertAppStatsTable is subid 9 of dessertObjects.
+- * Its status is Current.
+- * OID: .1.3.6.1.4.1.18898.0.19.42.1.9, length: 12
+- */
+- /*
+- * indexes
+- */
+- int appStatsIndex_map(uint *mib_appStatsIndex_val_ptr, uint
+- raw_appStatsIndex_val);
+-
+- int appStatsName_map(char **mib_appStatsName_val_ptr_ptr,
+- size_t
+- *mib_appStatsName_val_ptr_len_ptr,
+- char *raw_appStatsName_val_ptr,
+- size_t raw_appStatsName_val_ptr_len,
+- int allow_realloc);
+- int appStatsName_get(dessertAppStatsTable_rowreq_ctx *
+- rowreq_ctx,
+- char **appStatsName_val_ptr_ptr,
+- size_t *appStatsName_val_ptr_len_ptr);
+- int appStatsDesc_map(char **mib_appStatsDesc_val_ptr_ptr,
+- size_t
+- *mib_appStatsDesc_val_ptr_len_ptr,
+- char *raw_appStatsDesc_val_ptr,
+- size_t raw_appStatsDesc_val_ptr_len,
+- int allow_realloc);
+- int appStatsDesc_get(dessertAppStatsTable_rowreq_ctx *
+- rowreq_ctx,
+- char **appStatsDesc_val_ptr_ptr,
+- size_t *appStatsDesc_val_ptr_len_ptr);
+- int appStatsNodeOrLink_map(u_long *
+- mib_appStatsNodeOrLink_val_ptr,
+- u_long
+- raw_appStatsNodeOrLink_val);
+- int appStatsNodeOrLink_get(dessertAppStatsTable_rowreq_ctx
+- * rowreq_ctx,
+- u_long *
+- appStatsNodeOrLink_val_ptr);
+- int appStatsValueType_map(u_long *
+- mib_appStatsValueType_val_ptr,
+- u_long
+- raw_appStatsValueType_val);
+- int appStatsValueType_get(dessertAppStatsTable_rowreq_ctx *
+- rowreq_ctx,
+- u_long *
+- appStatsValueType_val_ptr);
+- int appStatsMacAddress1_map(char
+- **mib_appStatsMacAddress1_val_ptr_ptr,
+- size_t
+- *mib_appStatsMacAddress1_val_ptr_len_ptr,
+- char
+- *raw_appStatsMacAddress1_val_ptr,
+- size_t
+- raw_appStatsMacAddress1_val_ptr_len,
+- int allow_realloc);
+- int appStatsMacAddress1_get(dessertAppStatsTable_rowreq_ctx
+- * rowreq_ctx,
+- char
+- **appStatsMacAddress1_val_ptr_ptr,
+- size_t
+- *appStatsMacAddress1_val_ptr_len_ptr);
+- int appStatsMacAddress2_map(char
+- **mib_appStatsMacAddress2_val_ptr_ptr,
+- size_t
+- *mib_appStatsMacAddress2_val_ptr_len_ptr,
+- char
+- *raw_appStatsMacAddress2_val_ptr,
+- size_t
+- raw_appStatsMacAddress2_val_ptr_len,
+- int allow_realloc);
+- int appStatsMacAddress2_get(dessertAppStatsTable_rowreq_ctx
+- * rowreq_ctx,
+- char
+- **appStatsMacAddress2_val_ptr_ptr,
+- size_t
+- *appStatsMacAddress2_val_ptr_len_ptr);
+- int appStatsTruthValue_map(u_long *
+- mib_appStatsTruthValue_val_ptr,
+- u_long
+- raw_appStatsTruthValue_val);
+- int appStatsTruthValue_get(dessertAppStatsTable_rowreq_ctx
+- * rowreq_ctx,
+- u_long *
+- appStatsTruthValue_val_ptr);
+- int appStatsInteger32_map(long
+- *mib_appStatsInteger32_val_ptr,
+- long raw_appStatsInteger32_val);
+- int appStatsInteger32_get(dessertAppStatsTable_rowreq_ctx *
+- rowreq_ctx,
+- long *appStatsInteger32_val_ptr);
+- int appStatsUnsigned32_map(u_long *
+- mib_appStatsUnsigned32_val_ptr,
+- u_long
+- raw_appStatsUnsigned32_val);
+- int appStatsUnsigned32_get(dessertAppStatsTable_rowreq_ctx
+- * rowreq_ctx,
+- u_long *
+- appStatsUnsigned32_val_ptr);
+- int appStatsCounter64_map(U64 *
+- mib_appStatsCounter64_val_ptr,
+- U64 raw_appStatsCounter64_val);
+- int appStatsCounter64_get(dessertAppStatsTable_rowreq_ctx *
+- rowreq_ctx,
+- U64 * appStatsCounter64_val_ptr);
+- int appStatsOctetString_map(char
+- **mib_appStatsOctetString_val_ptr_ptr,
+- size_t
+- *mib_appStatsOctetString_val_ptr_len_ptr,
+- char
+- *raw_appStatsOctetString_val_ptr,
+- size_t
+- raw_appStatsOctetString_val_ptr_len,
+- int allow_realloc);
+- int appStatsOctetString_get(dessertAppStatsTable_rowreq_ctx
+- * rowreq_ctx,
+- char
+- **appStatsOctetString_val_ptr_ptr,
+- size_t
+- *appStatsOctetString_val_ptr_len_ptr);
+-
+-
+- int
+- dessertAppStatsTable_indexes_set_tbl_idx
+- (dessertAppStatsTable_mib_index * tbl_idx, long appStatsIndex_val);
+- int
+- dessertAppStatsTable_indexes_set(dessertAppStatsTable_rowreq_ctx *
+- rowreq_ctx, long appStatsIndex_val);
+-
+-
+-
+-
+-#ifdef __cplusplus
+-}
+-#endif
+-#endif /* DESSERTAPPSTATSTABLE_DATA_GET_H */
+-/** @} */
+Index: libdessert0.86-0.86.14/snmp/dessertAppStatsTable_data_set.c
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertAppStatsTable_data_set.c 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,28 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * version : 12077 $ of $
+- *
+- * $Id:$
+- *
+- */
+-/*
+- * standard Net-SNMP includes
+- */
+-#include <net-snmp/net-snmp-config.h>
+-#include <net-snmp/net-snmp-includes.h>
+-#include <net-snmp/agent/net-snmp-agent-includes.h>
+-
+-/*
+- * include our parent header
+- */
+-#include "dessertAppStatsTable.h"
+-
+-
+-/** @defgroup data_set data_set: Routines to set data
+- *
+- * These routines are used to set the value for individual objects. The
+- * row context is passed, along with the new value.
+- *
+- * @{
+- */
+-/** @} */
+Index: libdessert0.86-0.86.14/snmp/dessertAppStatsTable_data_set.h
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertAppStatsTable_data_set.h 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,28 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * version : 12077 $ of $
+- *
+- * $Id:$
+- */
+-#ifndef DESSERTAPPSTATSTABLE_DATA_SET_H
+-#define DESSERTAPPSTATSTABLE_DATA_SET_H
+-
+-#ifdef __cplusplus
+-extern "C" {
+-#endif
+-
+- /*
+- *********************************************************************
+- * SET function declarations
+- */
+-
+- /*
+- *********************************************************************
+- * SET Table declarations
+- */
+-
+-
+-#ifdef __cplusplus
+-}
+-#endif
+-#endif /* DESSERTAPPSTATSTABLE_DATA_SET_H */
+Index: libdessert0.86-0.86.14/snmp/dessertAppStatsTable_enums.h
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertAppStatsTable_enums.h 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,118 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * : generic-table-enums.m2c 12526 2005-07-15 22:41:16Z rstory $
+- *
+- * $Id:$
+- */
+-#ifndef DESSERTAPPSTATSTABLE_ENUMS_H
+-#define DESSERTAPPSTATSTABLE_ENUMS_H
+-
+-#include "../dessert.h"
+-
+-#ifdef __cplusplus
+-extern "C" {
+-#endif
+-
+- /*
+- * NOTES on enums
+- * ==============
+- *
+- * Value Mapping
+- * -------------
+- * If the values for your data type don't exactly match the
+- * possible values defined by the mib, you should map them
+- * below. For example, a boolean flag (1/0) is usually represented
+- * as a TruthValue in a MIB, which maps to the values (1/2).
+- *
+- */
+-/*************************************************************************
+- *************************************************************************
+- *
+- * enum definitions for table dessertAppStatsTable
+- *
+- *************************************************************************
+- *************************************************************************/
+-
+-/*************************************************************
+- * constants for enums for the MIB node
+- * appStatsNodeOrLink (INTEGER / ASN_INTEGER)
+- *
+- * since a Textual Convention may be referenced more than once in a
+- * MIB, protect againt redefinitions of the enum values.
+- */
+-#ifndef APPSTATSNODEORLINK_ENUMS
+-#define APPSTATSNODEORLINK_ENUMS
+-
+-#define APPSTATSNODEORLINK_NONE 0
+-#define APPSTATSNODEORLINK_NODE 1
+-#define APPSTATSNODEORLINK_LINK 2
+-
+-#endif /* APPSTATSNODEORLINK_ENUMS */
+-
+- /*
+- * TODO:140:o: Define your interal representation of appStatsNodeOrLink enums.
+- * (used for value mapping; see notes at top of file)
+- */
+-#define INTERNAL_DESSERTAPPSTATSTABLE_APPSTATSNODEORLINK_NONE DESSERT_APPSTATS_NODEORLINK_NONE
+-#define INTERNAL_DESSERTAPPSTATSTABLE_APPSTATSNODEORLINK_NODE DESSERT_APPSTATS_NODEORLINK_NODE
+-#define INTERNAL_DESSERTAPPSTATSTABLE_APPSTATSNODEORLINK_LINK DESSERT_APPSTATS_NODEORLINK_LINK
+-
+-
+-/*************************************************************
+- * constants for enums for the MIB node
+- * appStatsValueType (INTEGER / ASN_INTEGER)
+- *
+- * since a Textual Convention may be referenced more than once in a
+- * MIB, protect againt redefinitions of the enum values.
+- */
+-#ifndef APPSTATSVALUETYPE_ENUMS
+-#define APPSTATSVALUETYPE_ENUMS
+-
+-#define APPSTATSVALUETYPE_BOOL 0
+-#define APPSTATSVALUETYPE_INT32 1
+-#define APPSTATSVALUETYPE_UINT32 2
+-#define APPSTATSVALUETYPE_COUNTER64 3
+-#define APPSTATSVALUETYPE_OCTETSTRING 4
+-
+-#endif /* APPSTATSVALUETYPE_ENUMS */
+-
+- /*
+- * TODO:140:o: Define your interal representation of appStatsValueType enums.
+- * (used for value mapping; see notes at top of file)
+- */
+-#define INTERNAL_DESSERTAPPSTATSTABLE_APPSTATSVALUETYPE_BOOL DESSERT_APPSTATS_VALUETYPE_BOOL
+-#define INTERNAL_DESSERTAPPSTATSTABLE_APPSTATSVALUETYPE_INT32 DESSERT_APPSTATS_VALUETYPE_INT32
+-#define INTERNAL_DESSERTAPPSTATSTABLE_APPSTATSVALUETYPE_UINT32 DESSERT_APPSTATS_VALUETYPE_UINT32
+-#define INTERNAL_DESSERTAPPSTATSTABLE_APPSTATSVALUETYPE_COUNTER64 DESSERT_APPSTATS_VALUETYPE_COUNTER64
+-#define INTERNAL_DESSERTAPPSTATSTABLE_APPSTATSVALUETYPE_OCTETSTRING DESSERT_APPSTATS_VALUETYPE_OCTETSTRING
+-
+-
+-/*************************************************************
+- * constants for enums for the MIB node
+- * appStatsTruthValue (TruthValue / ASN_INTEGER)
+- *
+- * since a Textual Convention may be referenced more than once in a
+- * MIB, protect againt redefinitions of the enum values.
+- */
+-#ifndef TRUTHVALUE_ENUMS
+-#define TRUTHVALUE_ENUMS
+-
+-#define TRUTHVALUE_TRUE 1
+-#define TRUTHVALUE_FALSE 2
+-
+-#endif /* TRUTHVALUE_ENUMS */
+-
+- /*
+- * TODO:140:o: Define your interal representation of appStatsTruthValue enums.
+- * (used for value mapping; see notes at top of file)
+- */
+-#define INTERNAL_DESSERTAPPSTATSTABLE_APPSTATSTRUTHVALUE_TRUE DESSERT_APPSTATS_BOOL_TRUE
+-#define INTERNAL_DESSERTAPPSTATSTABLE_APPSTATSTRUTHVALUE_FALSE DESSERT_APPSTATS_BOOL_FALSE
+-
+-
+-
+-
+-#ifdef __cplusplus
+-}
+-#endif
+-#endif /* DESSERTAPPSTATSTABLE_ENUMS_H */
+Index: libdessert0.86-0.86.14/snmp/dessertAppStatsTable_interface.c
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertAppStatsTable_interface.c 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,1069 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * version : 15899 $ of $
+- *
+- * $Id:$
+- */
+-/*
+- * *********************************************************************
+- * *********************************************************************
+- * *********************************************************************
+- * *** ***
+- * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
+- * *** ***
+- * *** ***
+- * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
+- * *** ***
+- * *** ***
+- * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
+- * *** ***
+- * *** ***
+- * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
+- * *** ***
+- * *** ***
+- * *********************************************************************
+- * *********************************************************************
+- * *********************************************************************
+- */
+-
+-/*
+- * standard Net-SNMP includes
+- */
+-#include <net-snmp/net-snmp-config.h>
+-#include <net-snmp/net-snmp-includes.h>
+-#include <net-snmp/agent/net-snmp-agent-includes.h>
+-
+-/*
+- * include our parent header
+- */
+-#include "dessertAppStatsTable.h"
+-
+-
+-#include <net-snmp/agent/table_container.h>
+-#include <net-snmp/library/container.h>
+-
+-#include "dessertAppStatsTable_interface.h"
+-
+-#include <ctype.h>
+-
+-/**********************************************************************
+- **********************************************************************
+- ***
+- *** Table dessertAppStatsTable
+- ***
+- **********************************************************************
+- **********************************************************************/
+-/*
+- * DESSERT-MIB::dessertAppStatsTable is subid 9 of dessertObjects.
+- * Its status is Current.
+- * OID: .1.3.6.1.4.1.18898.0.19.42.1.9, length: 12
+- */
+-typedef struct dessertAppStatsTable_interface_ctx_s {
+-
+- netsnmp_container *container;
+- netsnmp_cache *cache;
+-
+- dessertAppStatsTable_registration *user_ctx;
+-
+- netsnmp_table_registration_info tbl_info;
+-
+- netsnmp_baby_steps_access_methods access_multiplexer;
+-
+-} dessertAppStatsTable_interface_ctx;
+-
+-static dessertAppStatsTable_interface_ctx dessertAppStatsTable_if_ctx;
+-
+-static void
+-_dessertAppStatsTable_container_init(dessertAppStatsTable_interface_ctx *
+- if_ctx);
+-static void
+-_dessertAppStatsTable_container_shutdown(dessertAppStatsTable_interface_ctx
+- * if_ctx);
+-
+-
+-netsnmp_container *
+-dessertAppStatsTable_container_get(void)
+-{
+- return dessertAppStatsTable_if_ctx.container;
+-}
+-
+-dessertAppStatsTable_registration *
+-dessertAppStatsTable_registration_get(void)
+-{
+- return dessertAppStatsTable_if_ctx.user_ctx;
+-}
+-
+-dessertAppStatsTable_registration *
+-dessertAppStatsTable_registration_set(dessertAppStatsTable_registration *
+- newreg)
+-{
+- dessertAppStatsTable_registration *old =
+- dessertAppStatsTable_if_ctx.user_ctx;
+- dessertAppStatsTable_if_ctx.user_ctx = newreg;
+- return old;
+-}
+-
+-int
+-dessertAppStatsTable_container_size(void)
+-{
+- return CONTAINER_SIZE(dessertAppStatsTable_if_ctx.container);
+-}
+-
+-/*
+- * mfd multiplexer modes
+- */
+-static Netsnmp_Node_Handler _mfd_dessertAppStatsTable_pre_request;
+-static Netsnmp_Node_Handler _mfd_dessertAppStatsTable_post_request;
+-static Netsnmp_Node_Handler _mfd_dessertAppStatsTable_object_lookup;
+-static Netsnmp_Node_Handler _mfd_dessertAppStatsTable_get_values;
+-/**
+- * @internal
+- * Initialize the table dessertAppStatsTable
+- * (Define its contents and how it's structured)
+- */
+-void
+-_dessertAppStatsTable_initialize_interface
+- (dessertAppStatsTable_registration * reg_ptr, u_long flags)
+-{
+- netsnmp_baby_steps_access_methods *access_multiplexer =
+- &dessertAppStatsTable_if_ctx.access_multiplexer;
+- netsnmp_table_registration_info *tbl_info =
+- &dessertAppStatsTable_if_ctx.tbl_info;
+- netsnmp_handler_registration *reginfo;
+- netsnmp_mib_handler *handler;
+- int mfd_modes = 0;
+-
+- DEBUGMSGTL(("internal:dessertAppStatsTable:_dessertAppStatsTable_initialize_interface", "called\n"));
+-
+-
+- /*************************************************
+- *
+- * save interface context for dessertAppStatsTable
+- */
+- /*
+- * Setting up the table's definition
+- */
+- netsnmp_table_helper_add_indexes(tbl_info,ASN_INTEGER,
+- /** index: appStatsIndex */
+- 0);
+-
+- /*
+- * Define the minimum and maximum accessible columns. This
+- * optimizes retrival.
+- */
+- tbl_info->min_column = DESSERTAPPSTATSTABLE_MIN_COL;
+- tbl_info->max_column = DESSERTAPPSTATSTABLE_MAX_COL;
+-
+- /*
+- * save users context
+- */
+- dessertAppStatsTable_if_ctx.user_ctx = reg_ptr;
+-
+- /*
+- * call data access initialization code
+- */
+- dessertAppStatsTable_init_data(reg_ptr);
+-
+- /*
+- * set up the container
+- */
+- _dessertAppStatsTable_container_init(&dessertAppStatsTable_if_ctx);
+- if (NULL == dessertAppStatsTable_if_ctx.container) {
+- snmp_log(LOG_ERR,
+- "could not initialize container for dessertAppStatsTable\n");
+- return;
+- }
+-
+- /*
+- * access_multiplexer: REQUIRED wrapper for get request handling
+- */
+- access_multiplexer->object_lookup =
+- _mfd_dessertAppStatsTable_object_lookup;
+- access_multiplexer->get_values = _mfd_dessertAppStatsTable_get_values;
+-
+- /*
+- * no wrappers yet
+- */
+- access_multiplexer->pre_request =
+- _mfd_dessertAppStatsTable_pre_request;
+- access_multiplexer->post_request =
+- _mfd_dessertAppStatsTable_post_request;
+-
+-
+- /*************************************************
+- *
+- * Create a registration, save our reg data, register table.
+- */
+- DEBUGMSGTL(("dessertAppStatsTable:init_dessertAppStatsTable",
+- "Registering dessertAppStatsTable as a mibs-for-dummies table.\n"));
+- handler =
+- netsnmp_baby_steps_access_multiplexer_get(access_multiplexer);
+- reginfo =
+- netsnmp_handler_registration_create("dessertAppStatsTable",
+- handler,
+- dessertAppStatsTable_oid,
+- dessertAppStatsTable_oid_size,
+- HANDLER_CAN_BABY_STEP |
+- HANDLER_CAN_RONLY);
+- if (NULL == reginfo) {
+- snmp_log(LOG_ERR,
+- "error registering table dessertAppStatsTable\n");
+- return;
+- }
+- reginfo->my_reg_void = &dessertAppStatsTable_if_ctx;
+-
+- /*************************************************
+- *
+- * set up baby steps handler, create it and inject it
+- */
+- if (access_multiplexer->object_lookup)
+- mfd_modes |= BABY_STEP_OBJECT_LOOKUP;
+- if (access_multiplexer->set_values)
+- mfd_modes |= BABY_STEP_SET_VALUES;
+- if (access_multiplexer->irreversible_commit)
+- mfd_modes |= BABY_STEP_IRREVERSIBLE_COMMIT;
+- if (access_multiplexer->object_syntax_checks)
+- mfd_modes |= BABY_STEP_CHECK_OBJECT;
+-
+- if (access_multiplexer->pre_request)
+- mfd_modes |= BABY_STEP_PRE_REQUEST;
+- if (access_multiplexer->post_request)
+- mfd_modes |= BABY_STEP_POST_REQUEST;
+-
+- if (access_multiplexer->undo_setup)
+- mfd_modes |= BABY_STEP_UNDO_SETUP;
+- if (access_multiplexer->undo_cleanup)
+- mfd_modes |= BABY_STEP_UNDO_CLEANUP;
+- if (access_multiplexer->undo_sets)
+- mfd_modes |= BABY_STEP_UNDO_SETS;
+-
+- if (access_multiplexer->row_creation)
+- mfd_modes |= BABY_STEP_ROW_CREATE;
+- if (access_multiplexer->consistency_checks)
+- mfd_modes |= BABY_STEP_CHECK_CONSISTENCY;
+- if (access_multiplexer->commit)
+- mfd_modes |= BABY_STEP_COMMIT;
+- if (access_multiplexer->undo_commit)
+- mfd_modes |= BABY_STEP_UNDO_COMMIT;
+-
+- handler = netsnmp_baby_steps_handler_get(mfd_modes);
+- netsnmp_inject_handler(reginfo, handler);
+-
+- /*************************************************
+- *
+- * inject row_merge helper with prefix rootoid_len + 2 (entry.col)
+- */
+- handler = netsnmp_get_row_merge_handler(reginfo->rootoid_len + 2);
+- netsnmp_inject_handler(reginfo, handler);
+-
+- /*************************************************
+- *
+- * inject container_table helper
+- */
+- handler =
+- netsnmp_container_table_handler_get(tbl_info,
+- dessertAppStatsTable_if_ctx.
+- container,
+- TABLE_CONTAINER_KEY_NETSNMP_INDEX);
+- netsnmp_inject_handler(reginfo, handler);
+-
+- /*************************************************
+- *
+- * inject cache helper
+- */
+- if (NULL != dessertAppStatsTable_if_ctx.cache) {
+- handler =
+- netsnmp_cache_handler_get(dessertAppStatsTable_if_ctx.cache);
+- netsnmp_inject_handler(reginfo, handler);
+- }
+-
+- /*
+- * register table
+- */
+- netsnmp_register_table(reginfo, tbl_info);
+-
+-} /* _dessertAppStatsTable_initialize_interface */
+-
+-/**
+- * @internal
+- * Shutdown the table dessertAppStatsTable
+- */
+-void
+-_dessertAppStatsTable_shutdown_interface(dessertAppStatsTable_registration
+- * reg_ptr)
+-{
+- /*
+- * shutdown the container
+- */
+- _dessertAppStatsTable_container_shutdown(&dessertAppStatsTable_if_ctx);
+-}
+-
+-void
+-dessertAppStatsTable_valid_columns_set(netsnmp_column_info *vc)
+-{
+- dessertAppStatsTable_if_ctx.tbl_info.valid_columns = vc;
+-} /* dessertAppStatsTable_valid_columns_set */
+-
+-/**
+- * @internal
+- * convert the index component stored in the context to an oid
+- */
+-int
+-dessertAppStatsTable_index_to_oid(netsnmp_index * oid_idx,
+- dessertAppStatsTable_mib_index * mib_idx)
+-{
+- int err = SNMP_ERR_NOERROR;
+-
+- /*
+- * temp storage for parsing indexes
+- */
+- /*
+- * appStatsIndex(1)///()//L/a/w/e/r/d/h
+- */
+- netsnmp_variable_list var_appStatsIndex;
+-
+- /*
+- * set up varbinds
+- */
+- memset(&var_appStatsIndex, 0x00, sizeof(var_appStatsIndex));
+- var_appStatsIndex.type = ASN_INTEGER;
+-
+- /*
+- * chain temp index varbinds together
+- */
+- var_appStatsIndex.next_variable = NULL;
+-
+-
+- DEBUGMSGTL(("verbose:dessertAppStatsTable:dessertAppStatsTable_index_to_oid", "called\n"));
+-
+- /*
+- * appStatsIndex(1)///()//L/a/w/e/r/d/h
+- */
+- snmp_set_var_value(&var_appStatsIndex,
+- (u_char *) & mib_idx->appStatsIndex,
+- sizeof(mib_idx->appStatsIndex));
+-
+-
+- err = build_oid_noalloc(oid_idx->oids, oid_idx->len, &oid_idx->len,
+- NULL, 0, &var_appStatsIndex);
+- if (err)
+- snmp_log(LOG_ERR, "error %d converting index to oid\n", err);
+-
+- /*
+- * parsing may have allocated memory. free it.
+- */
+- snmp_reset_var_buffers(&var_appStatsIndex);
+-
+- return err;
+-} /* dessertAppStatsTable_index_to_oid */
+-
+-/**
+- * extract dessertAppStatsTable indexes from a netsnmp_index
+- *
+- * @retval SNMP_ERR_NOERROR : no error
+- * @retval SNMP_ERR_GENERR : error
+- */
+-int
+-dessertAppStatsTable_index_from_oid(netsnmp_index * oid_idx,
+- dessertAppStatsTable_mib_index *
+- mib_idx)
+-{
+- int err = SNMP_ERR_NOERROR;
+-
+- /*
+- * temp storage for parsing indexes
+- */
+- /*
+- * appStatsIndex(1)///()//L/a/w/e/r/d/h
+- */
+- netsnmp_variable_list var_appStatsIndex;
+-
+- /*
+- * set up varbinds
+- */
+- memset(&var_appStatsIndex, 0x00, sizeof(var_appStatsIndex));
+- var_appStatsIndex.type = ASN_INTEGER;
+-
+- /*
+- * chain temp index varbinds together
+- */
+- var_appStatsIndex.next_variable = NULL;
+-
+-
+- DEBUGMSGTL(("verbose:dessertAppStatsTable:dessertAppStatsTable_index_from_oid", "called\n"));
+-
+- /*
+- * parse the oid into the individual index components
+- */
+- err = parse_oid_indexes(oid_idx->oids, oid_idx->len,
+- &var_appStatsIndex);
+- if (err == SNMP_ERR_NOERROR) {
+- /*
+- * copy out values
+- */
+- mib_idx->appStatsIndex = *((long *)var_appStatsIndex.val.string);
+-
+-
+- }
+-
+- /*
+- * parsing may have allocated memory. free it.
+- */
+- snmp_reset_var_buffers(&var_appStatsIndex);
+-
+- return err;
+-} /* dessertAppStatsTable_index_from_oid */
+-
+-
+-/*
+- *********************************************************************
+- * @internal
+- * allocate resources for a dessertAppStatsTable_rowreq_ctx
+- */
+-dessertAppStatsTable_rowreq_ctx *
+-dessertAppStatsTable_allocate_rowreq_ctx(void)
+-{
+- dessertAppStatsTable_rowreq_ctx *rowreq_ctx =
+- SNMP_MALLOC_TYPEDEF(dessertAppStatsTable_rowreq_ctx);
+-
+- DEBUGMSGTL(("internal:dessertAppStatsTable:dessertAppStatsTable_allocate_rowreq_ctx", "called\n"));
+-
+- if (NULL == rowreq_ctx) {
+- snmp_log(LOG_ERR, "Couldn't allocate memory for a "
+- "dessertAppStatsTable_rowreq_ctx.\n");
+- return NULL;
+- }
+-
+- rowreq_ctx->oid_idx.oids = rowreq_ctx->oid_tmp;
+-
+- rowreq_ctx->dessertAppStatsTable_data_list = NULL;
+-
+-
+- return rowreq_ctx;
+-} /* dessertAppStatsTable_allocate_rowreq_ctx */
+-
+-/*
+- * @internal
+- * release resources for a dessertAppStatsTable_rowreq_ctx
+- */
+-void
+-dessertAppStatsTable_release_rowreq_ctx(dessertAppStatsTable_rowreq_ctx *
+- rowreq_ctx)
+-{
+- DEBUGMSGTL(("internal:dessertAppStatsTable:dessertAppStatsTable_release_rowreq_ctx", "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+-
+- /*
+- * free index oid pointer
+- */
+- if (rowreq_ctx->oid_idx.oids != rowreq_ctx->oid_tmp)
+- free(rowreq_ctx->oid_idx.oids);
+-
+- SNMP_FREE(rowreq_ctx);
+-} /* dessertAppStatsTable_release_rowreq_ctx */
+-
+-/**
+- * @internal
+- * wrapper
+- */
+-static int
+-_mfd_dessertAppStatsTable_pre_request(netsnmp_mib_handler *handler,
+- netsnmp_handler_registration
+- *reginfo,
+- netsnmp_agent_request_info
+- *agtreq_info,
+- netsnmp_request_info *requests)
+-{
+- int rc;
+-
+- DEBUGMSGTL(("internal:dessertAppStatsTable:_mfd_dessertAppStatsTable_pre_request", "called\n"));
+-
+- if (1 != netsnmp_row_merge_status_first(reginfo, agtreq_info)) {
+- DEBUGMSGTL(("internal:dessertAppStatsTable",
+- "skipping additional pre_request\n"));
+- return SNMP_ERR_NOERROR;
+- }
+-
+- rc = dessertAppStatsTable_pre_request(dessertAppStatsTable_if_ctx.
+- user_ctx);
+- if (MFD_SUCCESS != rc) {
+- /*
+- * nothing we can do about it but log it
+- */
+- DEBUGMSGTL(("dessertAppStatsTable", "error %d from "
+- "dessertAppStatsTable_pre_request\n", rc));
+- netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+- }
+-
+- return SNMP_ERR_NOERROR;
+-} /* _mfd_dessertAppStatsTable_pre_request */
+-
+-/**
+- * @internal
+- * wrapper
+- */
+-static int
+-_mfd_dessertAppStatsTable_post_request(netsnmp_mib_handler *handler,
+- netsnmp_handler_registration
+- *reginfo,
+- netsnmp_agent_request_info
+- *agtreq_info,
+- netsnmp_request_info *requests)
+-{
+- dessertAppStatsTable_rowreq_ctx *rowreq_ctx =
+- netsnmp_container_table_row_extract(requests);
+- int rc, packet_rc;
+-
+- DEBUGMSGTL(("internal:dessertAppStatsTable:_mfd_dessertAppStatsTable_post_request", "called\n"));
+-
+- /*
+- * release row context, if deleted
+- */
+- if (rowreq_ctx && (rowreq_ctx->rowreq_flags & MFD_ROW_DELETED))
+- dessertAppStatsTable_release_rowreq_ctx(rowreq_ctx);
+-
+- /*
+- * wait for last call before calling user
+- */
+- if (1 != netsnmp_row_merge_status_last(reginfo, agtreq_info)) {
+- DEBUGMSGTL(("internal:dessertAppStatsTable",
+- "waiting for last post_request\n"));
+- return SNMP_ERR_NOERROR;
+- }
+-
+- packet_rc = netsnmp_check_all_requests_error(agtreq_info->asp, 0);
+- rc = dessertAppStatsTable_post_request(dessertAppStatsTable_if_ctx.
+- user_ctx, packet_rc);
+- if (MFD_SUCCESS != rc) {
+- /*
+- * nothing we can do about it but log it
+- */
+- DEBUGMSGTL(("dessertAppStatsTable", "error %d from "
+- "dessertAppStatsTable_post_request\n", rc));
+- }
+-
+- return SNMP_ERR_NOERROR;
+-} /* _mfd_dessertAppStatsTable_post_request */
+-
+-/**
+- * @internal
+- * wrapper
+- */
+-static int
+-_mfd_dessertAppStatsTable_object_lookup(netsnmp_mib_handler *handler,
+- netsnmp_handler_registration
+- *reginfo,
+- netsnmp_agent_request_info
+- *agtreq_info,
+- netsnmp_request_info *requests)
+-{
+- int rc = SNMP_ERR_NOERROR;
+- dessertAppStatsTable_rowreq_ctx *rowreq_ctx =
+- netsnmp_container_table_row_extract(requests);
+-
+- DEBUGMSGTL(("internal:dessertAppStatsTable:_mfd_dessertAppStatsTable_object_lookup", "called\n"));
+-
+- /*
+- * get our context from mfd
+- * dessertAppStatsTable_interface_ctx *if_ctx =
+- * (dessertAppStatsTable_interface_ctx *)reginfo->my_reg_void;
+- */
+-
+- if (NULL == rowreq_ctx) {
+- rc = SNMP_ERR_NOCREATION;
+- }
+-
+- if (MFD_SUCCESS != rc)
+- netsnmp_request_set_error_all(requests, rc);
+- else
+- dessertAppStatsTable_row_prep(rowreq_ctx);
+-
+- return SNMP_VALIDATE_ERR(rc);
+-} /* _mfd_dessertAppStatsTable_object_lookup */
+-
+-/***********************************************************************
+- *
+- * GET processing
+- *
+- ***********************************************************************/
+-/*
+- * @internal
+- * Retrieve the value for a particular column
+- */
+-NETSNMP_STATIC_INLINE int
+-_dessertAppStatsTable_get_column(dessertAppStatsTable_rowreq_ctx *
+- rowreq_ctx, netsnmp_variable_list * var,
+- int column)
+-{
+- int rc = SNMPERR_SUCCESS;
+-
+- DEBUGMSGTL(("internal:dessertAppStatsTable:_mfd_dessertAppStatsTable_get_column", "called for %d\n", column));
+-
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- switch (column) {
+-
+- /*
+- * appStatsName(2)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
+- */
+- case COLUMN_APPSTATSNAME:
+- if (!(COLUMN_APPSTATSNAME_FLAG & rowreq_ctx->column_exists_flags)) {
+- DEBUGMSGTL(("internal:dessertAppStatsTable:_mfd_dessertAppStatsTable_get_column", "column %d (appStatsName) doesn't exist\n", column));
+- return MFD_SKIP;
+- }
+-
+- var->type = ASN_OCTET_STR;
+- rc = appStatsName_get(rowreq_ctx, (char **) &var->val.string,
+- &var->val_len);
+- break;
+-
+- /*
+- * appStatsDesc(3)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
+- */
+- case COLUMN_APPSTATSDESC:
+- if (!(COLUMN_APPSTATSDESC_FLAG & rowreq_ctx->column_exists_flags)) {
+- DEBUGMSGTL(("internal:dessertAppStatsTable:_mfd_dessertAppStatsTable_get_column", "column %d (appStatsDesc) doesn't exist\n", column));
+- return MFD_SKIP;
+- }
+-
+- var->type = ASN_OCTET_STR;
+- rc = appStatsDesc_get(rowreq_ctx, (char **) &var->val.string,
+- &var->val_len);
+- break;
+-
+- /*
+- * appStatsNodeOrLink(4)/INTEGER/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h
+- */
+- case COLUMN_APPSTATSNODEORLINK:
+- if (!
+- (COLUMN_APPSTATSNODEORLINK_FLAG & rowreq_ctx->
+- column_exists_flags)) {
+- DEBUGMSGTL(("internal:dessertAppStatsTable:_mfd_dessertAppStatsTable_get_column", "column %d (appStatsNodeOrLink) doesn't exist\n", column));
+- return MFD_SKIP;
+- }
+-
+- var->val_len = sizeof(u_long);
+- var->type = ASN_INTEGER;
+- rc = appStatsNodeOrLink_get(rowreq_ctx,
+- (u_long *) var->val.string);
+- break;
+-
+- /*
+- * appStatsValueType(5)/INTEGER/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h
+- */
+- case COLUMN_APPSTATSVALUETYPE:
+- if (!
+- (COLUMN_APPSTATSVALUETYPE_FLAG & rowreq_ctx->
+- column_exists_flags)) {
+- DEBUGMSGTL(("internal:dessertAppStatsTable:_mfd_dessertAppStatsTable_get_column", "column %d (appStatsValueType) doesn't exist\n", column));
+- return MFD_SKIP;
+- }
+-
+- var->val_len = sizeof(u_long);
+- var->type = ASN_INTEGER;
+- rc = appStatsValueType_get(rowreq_ctx, (u_long *) var->val.string);
+- break;
+-
+- /*
+- * appStatsMacAddress1(6)/MacAddress/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
+- */
+- case COLUMN_APPSTATSMACADDRESS1:
+- if (!
+- (COLUMN_APPSTATSMACADDRESS1_FLAG & rowreq_ctx->
+- column_exists_flags)) {
+- DEBUGMSGTL(("internal:dessertAppStatsTable:_mfd_dessertAppStatsTable_get_column", "column %d (appStatsMacAddress1) doesn't exist\n", column));
+- return MFD_SKIP;
+- }
+-
+- var->type = ASN_OCTET_STR;
+- rc = appStatsMacAddress1_get(rowreq_ctx,
+- (char **) &var->val.string,
+- &var->val_len);
+- break;
+-
+- /*
+- * appStatsMacAddress2(7)/MacAddress/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
+- */
+- case COLUMN_APPSTATSMACADDRESS2:
+- if (!
+- (COLUMN_APPSTATSMACADDRESS2_FLAG & rowreq_ctx->
+- column_exists_flags)) {
+- DEBUGMSGTL(("internal:dessertAppStatsTable:_mfd_dessertAppStatsTable_get_column", "column %d (appStatsMacAddress2) doesn't exist\n", column));
+- return MFD_SKIP;
+- }
+-
+- var->type = ASN_OCTET_STR;
+- rc = appStatsMacAddress2_get(rowreq_ctx,
+- (char **) &var->val.string,
+- &var->val_len);
+- break;
+-
+- /*
+- * appStatsTruthValue(8)/TruthValue/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h
+- */
+- case COLUMN_APPSTATSTRUTHVALUE:
+- if (!
+- (COLUMN_APPSTATSTRUTHVALUE_FLAG & rowreq_ctx->
+- column_exists_flags)) {
+- DEBUGMSGTL(("internal:dessertAppStatsTable:_mfd_dessertAppStatsTable_get_column", "column %d (appStatsTruthValue) doesn't exist\n", column));
+- return MFD_SKIP;
+- }
+-
+- var->val_len = sizeof(u_long);
+- var->type = ASN_INTEGER;
+- rc = appStatsTruthValue_get(rowreq_ctx,
+- (u_long *) var->val.string);
+- break;
+-
+- /*
+- * appStatsInteger32(9)/INTEGER32/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
+- */
+- case COLUMN_APPSTATSINTEGER32:
+- if (!
+- (COLUMN_APPSTATSINTEGER32_FLAG & rowreq_ctx->
+- column_exists_flags)) {
+- DEBUGMSGTL(("internal:dessertAppStatsTable:_mfd_dessertAppStatsTable_get_column", "column %d (appStatsInteger32) doesn't exist\n", column));
+- return MFD_SKIP;
+- }
+-
+- var->val_len = sizeof(long);
+- var->type = ASN_INTEGER;
+- rc = appStatsInteger32_get(rowreq_ctx, (long *) var->val.string);
+- break;
+-
+- /*
+- * appStatsUnsigned32(10)/UNSIGNED32/ASN_UNSIGNED/u_long(u_long)//l/A/w/e/r/d/h
+- */
+- case COLUMN_APPSTATSUNSIGNED32:
+- if (!
+- (COLUMN_APPSTATSUNSIGNED32_FLAG & rowreq_ctx->
+- column_exists_flags)) {
+- DEBUGMSGTL(("internal:dessertAppStatsTable:_mfd_dessertAppStatsTable_get_column", "column %d (appStatsUnsigned32) doesn't exist\n", column));
+- return MFD_SKIP;
+- }
+-
+- var->val_len = sizeof(u_long);
+- var->type = ASN_UNSIGNED;
+- rc = appStatsUnsigned32_get(rowreq_ctx,
+- (u_long *) var->val.string);
+- break;
+-
+- /*
+- * appStatsCounter64(11)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+- */
+- case COLUMN_APPSTATSCOUNTER64:
+- if (!
+- (COLUMN_APPSTATSCOUNTER64_FLAG & rowreq_ctx->
+- column_exists_flags)) {
+- DEBUGMSGTL(("internal:dessertAppStatsTable:_mfd_dessertAppStatsTable_get_column", "column %d (appStatsCounter64) doesn't exist\n", column));
+- return MFD_SKIP;
+- }
+-
+- var->val_len = sizeof(U64);
+- var->type = ASN_COUNTER64;
+- rc = appStatsCounter64_get(rowreq_ctx, (U64 *) var->val.string);
+- break;
+-
+- /*
+- * appStatsOctetString(12)/OCTETSTR/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/h
+- */
+- case COLUMN_APPSTATSOCTETSTRING:
+- if (!
+- (COLUMN_APPSTATSOCTETSTRING_FLAG & rowreq_ctx->
+- column_exists_flags)) {
+- DEBUGMSGTL(("internal:dessertAppStatsTable:_mfd_dessertAppStatsTable_get_column", "column %d (appStatsOctetString) doesn't exist\n", column));
+- return MFD_SKIP;
+- }
+-
+- var->type = ASN_OCTET_STR;
+- rc = appStatsOctetString_get(rowreq_ctx,
+- (char **) &var->val.string,
+- &var->val_len);
+- break;
+-
+- default:
+- if (DESSERTAPPSTATSTABLE_MIN_COL <= column
+- && column <= DESSERTAPPSTATSTABLE_MAX_COL) {
+- DEBUGMSGTL(("internal:dessertAppStatsTable:_mfd_dessertAppStatsTable_get_column", "assume column %d is reserved\n", column));
+- rc = MFD_SKIP;
+- } else {
+- snmp_log(LOG_ERR,
+- "unknown column %d in _dessertAppStatsTable_get_column\n",
+- column);
+- }
+- break;
+- }
+-
+- return rc;
+-} /* _dessertAppStatsTable_get_column */
+-
+-int
+-_mfd_dessertAppStatsTable_get_values(netsnmp_mib_handler *handler,
+- netsnmp_handler_registration *reginfo,
+- netsnmp_agent_request_info
+- *agtreq_info,
+- netsnmp_request_info *requests)
+-{
+- dessertAppStatsTable_rowreq_ctx *rowreq_ctx =
+- netsnmp_container_table_row_extract(requests);
+- netsnmp_table_request_info *tri;
+- u_char *old_string;
+- void (*dataFreeHook) (void *);
+- int rc;
+-
+- DEBUGMSGTL(("internal:dessertAppStatsTable:_mfd_dessertAppStatsTable_get_values", "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- DEBUGMSGTL(("9:dessertAppStatsTable:_mfd_dessertAppStatsTable_get_values", "exists %p\n", rowreq_ctx->column_exists_flags));
+-
+- for (; requests; requests = requests->next) {
+- /*
+- * save old pointer, so we can free it if replaced
+- */
+- old_string = requests->requestvb->val.string;
+- dataFreeHook = requests->requestvb->dataFreeHook;
+- if (NULL == requests->requestvb->val.string) {
+- requests->requestvb->val.string = requests->requestvb->buf;
+- requests->requestvb->val_len =
+- sizeof(requests->requestvb->buf);
+- } else if (requests->requestvb->buf ==
+- requests->requestvb->val.string) {
+- if (requests->requestvb->val_len !=
+- sizeof(requests->requestvb->buf))
+- requests->requestvb->val_len =
+- sizeof(requests->requestvb->buf);
+- }
+-
+- /*
+- * get column data
+- */
+- tri = netsnmp_extract_table_info(requests);
+- if (NULL == tri)
+- continue;
+-
+- rc = _dessertAppStatsTable_get_column(rowreq_ctx,
+- requests->requestvb,
+- tri->colnum);
+- if (rc) {
+- if (MFD_SKIP == rc) {
+- requests->requestvb->type = SNMP_NOSUCHINSTANCE;
+- rc = SNMP_ERR_NOERROR;
+- }
+- } else if (NULL == requests->requestvb->val.string) {
+- snmp_log(LOG_ERR, "NULL varbind data pointer!\n");
+- rc = SNMP_ERR_GENERR;
+- }
+- if (rc)
+- netsnmp_request_set_error(requests, SNMP_VALIDATE_ERR(rc));
+-
+- /*
+- * if the buffer wasn't used previously for the old data (i.e. it
+- * was allcoated memory) and the get routine replaced the pointer,
+- * we need to free the previous pointer.
+- */
+- if (old_string && (old_string != requests->requestvb->buf) &&
+- (requests->requestvb->val.string != old_string)) {
+- if (dataFreeHook)
+- (*dataFreeHook) (old_string);
+- else
+- free(old_string);
+- }
+- } /* for results */
+-
+- return SNMP_ERR_NOERROR;
+-} /* _mfd_dessertAppStatsTable_get_values */
+-
+-
+-/***********************************************************************
+- *
+- * SET processing
+- *
+- ***********************************************************************/
+-
+-/*
+- * SET PROCESSING NOT APPLICABLE (per MIB or user setting)
+- */
+-/***********************************************************************
+- *
+- * DATA ACCESS
+- *
+- ***********************************************************************/
+-static void _container_free(netsnmp_container * container);
+-
+-/**
+- * @internal
+- */
+-static int
+-_cache_load(netsnmp_cache * cache, void *vmagic)
+-{
+- DEBUGMSGTL(("internal:dessertAppStatsTable:_cache_load", "called\n"));
+-
+- if ((NULL == cache) || (NULL == cache->magic)) {
+- snmp_log(LOG_ERR,
+- "invalid cache for dessertAppStatsTable_cache_load\n");
+- return -1;
+- }
+-
+- /** should only be called for an invalid or expired cache */
+- netsnmp_assert((0 == cache->valid) || (1 == cache->expired));
+-
+- /*
+- * call user code
+- */
+- return dessertAppStatsTable_container_load((netsnmp_container *)
+- cache->magic);
+-} /* _cache_load */
+-
+-/**
+- * @internal
+- */
+-static void
+-_cache_free(netsnmp_cache * cache, void *magic)
+-{
+- netsnmp_container *container;
+-
+- DEBUGMSGTL(("internal:dessertAppStatsTable:_cache_free", "called\n"));
+-
+- if ((NULL == cache) || (NULL == cache->magic)) {
+- snmp_log(LOG_ERR,
+- "invalid cache in dessertAppStatsTable_cache_free\n");
+- return;
+- }
+-
+- container = (netsnmp_container *) cache->magic;
+-
+- _container_free(container);
+-} /* _cache_free */
+-
+-/**
+- * @internal
+- */
+-static void
+-_container_item_free(dessertAppStatsTable_rowreq_ctx * rowreq_ctx,
+- void *context)
+-{
+- DEBUGMSGTL(("internal:dessertAppStatsTable:_container_item_free",
+- "called\n"));
+-
+- if (NULL == rowreq_ctx)
+- return;
+-
+- dessertAppStatsTable_release_rowreq_ctx(rowreq_ctx);
+-} /* _container_item_free */
+-
+-/**
+- * @internal
+- */
+-static void
+-_container_free(netsnmp_container * container)
+-{
+- DEBUGMSGTL(("internal:dessertAppStatsTable:_container_free",
+- "called\n"));
+-
+- if (NULL == container) {
+- snmp_log(LOG_ERR,
+- "invalid container in dessertAppStatsTable_container_free\n");
+- return;
+- }
+-
+- /*
+- * call user code
+- */
+- dessertAppStatsTable_container_free(container);
+-
+- /*
+- * free all items. inefficient, but easy.
+- */
+- CONTAINER_CLEAR(container,
+- (netsnmp_container_obj_func *) _container_item_free,
+- NULL);
+-} /* _container_free */
+-
+-/**
+- * @internal
+- * initialize the container with functions or wrappers
+- */
+-void
+-_dessertAppStatsTable_container_init(dessertAppStatsTable_interface_ctx *
+- if_ctx)
+-{
+- DEBUGMSGTL(("internal:dessertAppStatsTable:_dessertAppStatsTable_container_init", "called\n"));
+-
+- /*
+- * cache init
+- */
+- if_ctx->cache = netsnmp_cache_create(30, /* timeout in seconds */
+- _cache_load, _cache_free,
+- dessertAppStatsTable_oid,
+- dessertAppStatsTable_oid_size);
+-
+- if (NULL == if_ctx->cache) {
+- snmp_log(LOG_ERR,
+- "error creating cache for dessertAppStatsTable\n");
+- return;
+- }
+-
+- if_ctx->cache->flags = NETSNMP_CACHE_DONT_INVALIDATE_ON_SET;
+-
+- dessertAppStatsTable_container_init(&if_ctx->container, if_ctx->cache);
+- if (NULL == if_ctx->container)
+- if_ctx->container =
+- netsnmp_container_find("dessertAppStatsTable:table_container");
+- if (NULL == if_ctx->container) {
+- snmp_log(LOG_ERR, "error creating container in "
+- "dessertAppStatsTable_container_init\n");
+- return;
+- }
+-
+- if (NULL != if_ctx->cache)
+- if_ctx->cache->magic = (void *) if_ctx->container;
+-} /* _dessertAppStatsTable_container_init */
+-
+-/**
+- * @internal
+- * shutdown the container with functions or wrappers
+- */
+-void
+-_dessertAppStatsTable_container_shutdown(dessertAppStatsTable_interface_ctx
+- * if_ctx)
+-{
+- DEBUGMSGTL(("internal:dessertAppStatsTable:_dessertAppStatsTable_container_shutdown", "called\n"));
+-
+- dessertAppStatsTable_container_shutdown(if_ctx->container);
+-
+- _container_free(if_ctx->container);
+-
+-} /* _dessertAppStatsTable_container_shutdown */
+-
+-
+-dessertAppStatsTable_rowreq_ctx *
+-dessertAppStatsTable_row_find_by_mib_index(dessertAppStatsTable_mib_index *
+- mib_idx)
+-{
+- dessertAppStatsTable_rowreq_ctx *rowreq_ctx;
+- oid oid_tmp[MAX_OID_LEN];
+- netsnmp_index oid_idx;
+- int rc;
+-
+- /*
+- * set up storage for OID
+- */
+- oid_idx.oids = oid_tmp;
+- oid_idx.len = sizeof(oid_tmp) / sizeof(oid);
+-
+- /*
+- * convert
+- */
+- rc = dessertAppStatsTable_index_to_oid(&oid_idx, mib_idx);
+- if (MFD_SUCCESS != rc)
+- return NULL;
+-
+- rowreq_ctx =
+- CONTAINER_FIND(dessertAppStatsTable_if_ctx.container, &oid_idx);
+-
+- return rowreq_ctx;
+-}
+Index: libdessert0.86-0.86.14/snmp/dessertAppStatsTable_interface.h
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertAppStatsTable_interface.h 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,98 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * version : 15899 $ of $
+- *
+- * $Id:$
+- */
+-/** @ingroup interface: Routines to interface to Net-SNMP
+- *
+- * \warning This code should not be modified, called directly,
+- * or used to interpret functionality. It is subject to
+- * change at any time.
+- *
+- * @{
+- */
+-/*
+- * *********************************************************************
+- * *********************************************************************
+- * *********************************************************************
+- * *** ***
+- * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
+- * *** ***
+- * *** ***
+- * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
+- * *** ***
+- * *** ***
+- * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
+- * *** ***
+- * *** ***
+- * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
+- * *** ***
+- * *** ***
+- * *********************************************************************
+- * *********************************************************************
+- * *********************************************************************
+- */
+-#ifndef DESSERTAPPSTATSTABLE_INTERFACE_H
+-#define DESSERTAPPSTATSTABLE_INTERFACE_H
+-
+-#ifdef __cplusplus
+-extern "C" {
+-#endif
+-
+-
+-#include "dessertAppStatsTable.h"
+-
+-
+- /*
+- ********************************************************************
+- * Table declarations
+- */
+-
+- /*
+- * PUBLIC interface initialization routine
+- */
+- void
+- _dessertAppStatsTable_initialize_interface
+- (dessertAppStatsTable_registration * user_ctx, u_long flags);
+- void
+- _dessertAppStatsTable_shutdown_interface
+- (dessertAppStatsTable_registration * user_ctx);
+-
+- dessertAppStatsTable_registration
+- *dessertAppStatsTable_registration_get(void);
+-
+- dessertAppStatsTable_registration
+- *dessertAppStatsTable_registration_set
+- (dessertAppStatsTable_registration * newreg);
+-
+- netsnmp_container *dessertAppStatsTable_container_get(void);
+- int dessertAppStatsTable_container_size(void);
+-
+- dessertAppStatsTable_rowreq_ctx
+- *dessertAppStatsTable_allocate_rowreq_ctx(void);
+- void
+- dessertAppStatsTable_release_rowreq_ctx
+- (dessertAppStatsTable_rowreq_ctx * rowreq_ctx);
+-
+- int dessertAppStatsTable_index_to_oid(netsnmp_index *
+- oid_idx,
+- dessertAppStatsTable_mib_index
+- * mib_idx);
+- int dessertAppStatsTable_index_from_oid(netsnmp_index *
+- oid_idx,
+- dessertAppStatsTable_mib_index
+- * mib_idx);
+-
+- /*
+- * access to certain internals. use with caution!
+- */
+- void
+- dessertAppStatsTable_valid_columns_set(netsnmp_column_info *vc);
+-
+-
+-#ifdef __cplusplus
+-}
+-#endif
+-#endif /* DESSERTAPPSTATSTABLE_INTERFACE_H */
+-/** @} */
+Index: libdessert0.86-0.86.14/snmp/dessertAppStatsTable_oids.h
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertAppStatsTable_oids.h 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,64 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * : generic-table-oids.m2c 12855 2005-09-27 15:56:08Z rstory $
+- *
+- * $Id:$
+- */
+-#ifndef DESSERTAPPSTATSTABLE_OIDS_H
+-#define DESSERTAPPSTATSTABLE_OIDS_H
+-
+-#ifdef __cplusplus
+-extern "C" {
+-#endif
+-
+-
+- /*
+- * column number definitions for table dessertAppStatsTable
+- */
+-#define DESSERTAPPSTATSTABLE_OID 1,3,6,1,4,1,18898,0,19,10,1,1,8
+-
+-#define COLUMN_APPSTATSINDEX 1
+-
+-#define COLUMN_APPSTATSNAME 2
+-#define COLUMN_APPSTATSNAME_FLAG (0x1 << 1)
+-
+-#define COLUMN_APPSTATSDESC 3
+-#define COLUMN_APPSTATSDESC_FLAG (0x1 << 2)
+-
+-#define COLUMN_APPSTATSNODEORLINK 4
+-#define COLUMN_APPSTATSNODEORLINK_FLAG (0x1 << 3)
+-
+-#define COLUMN_APPSTATSVALUETYPE 5
+-#define COLUMN_APPSTATSVALUETYPE_FLAG (0x1 << 4)
+-
+-#define COLUMN_APPSTATSMACADDRESS1 6
+-#define COLUMN_APPSTATSMACADDRESS1_FLAG (0x1 << 5)
+-
+-#define COLUMN_APPSTATSMACADDRESS2 7
+-#define COLUMN_APPSTATSMACADDRESS2_FLAG (0x1 << 6)
+-
+-#define COLUMN_APPSTATSTRUTHVALUE 8
+-#define COLUMN_APPSTATSTRUTHVALUE_FLAG (0x1 << 7)
+-
+-#define COLUMN_APPSTATSINTEGER32 9
+-#define COLUMN_APPSTATSINTEGER32_FLAG (0x1 << 8)
+-
+-#define COLUMN_APPSTATSUNSIGNED32 10
+-#define COLUMN_APPSTATSUNSIGNED32_FLAG (0x1 << 9)
+-
+-#define COLUMN_APPSTATSCOUNTER64 11
+-#define COLUMN_APPSTATSCOUNTER64_FLAG (0x1 << 10)
+-
+-#define COLUMN_APPSTATSOCTETSTRING 12
+-#define COLUMN_APPSTATSOCTETSTRING_FLAG (0x1 << 11)
+-
+-
+-#define DESSERTAPPSTATSTABLE_MIN_COL COLUMN_APPSTATSNAME
+-#define DESSERTAPPSTATSTABLE_MAX_COL COLUMN_APPSTATSOCTETSTRING
+-
+-
+-
+-#ifdef __cplusplus
+-}
+-#endif
+-#endif /* DESSERTAPPSTATSTABLE_OIDS_H */
+Index: libdessert0.86-0.86.14/snmp/dessertMeshifTable.c
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertMeshifTable.c 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,214 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * version : 14170 $ of $
+- *
+- * $Id:$
+- */
+-/** \page MFD helper for dessertMeshifTable
+- *
+- * \section intro Introduction
+- * Introductory text.
+- *
+- */
+-/*
+- * standard Net-SNMP includes
+- */
+-#include <net-snmp/net-snmp-config.h>
+-#include <net-snmp/net-snmp-includes.h>
+-#include <net-snmp/agent/net-snmp-agent-includes.h>
+-
+-/*
+- * include our parent header
+- */
+-#include "dessertMeshifTable.h"
+-
+-#include <net-snmp/agent/mib_modules.h>
+-
+-#include "dessertMeshifTable_interface.h"
+-
+-oid dessertMeshifTable_oid[] = { DESSERTMESHIFTABLE_OID };
+-
+-int dessertMeshifTable_oid_size =
+-OID_LENGTH(dessertMeshifTable_oid);
+-
+-dessertMeshifTable_registration dessertMeshifTable_user_context;
+-
+-void initialize_table_dessertMeshifTable(void);
+-void shutdown_table_dessertMeshifTable(void);
+-
+-
+-/**
+- * Initializes the dessertMeshifTable module
+- */
+-void
+-init_dessertMeshifTable(void)
+-{
+- DEBUGMSGTL(("verbose:dessertMeshifTable:init_dessertMeshifTable",
+- "called\n"));
+-
+- /*
+- * TODO:300:o: Perform dessertMeshifTable one-time module initialization.
+- */
+-
+- /*
+- * here we initialize all the tables we're planning on supporting
+- */
+- if (should_init("dessertMeshifTable"))
+- initialize_table_dessertMeshifTable();
+-
+-} /* init_dessertMeshifTable */
+-
+-/**
+- * Shut-down the dessertMeshifTable module (agent is exiting)
+- */
+-void
+-shutdown_dessertMeshifTable(void)
+-{
+- if (should_init("dessertMeshifTable"))
+- shutdown_table_dessertMeshifTable();
+-
+-}
+-
+-/**
+- * Initialize the table dessertMeshifTable
+- * (Define its contents and how it's structured)
+- */
+-void
+-initialize_table_dessertMeshifTable(void)
+-{
+- dessertMeshifTable_registration *user_context;
+- u_long flags;
+-
+- DEBUGMSGTL(("verbose:dessertMeshifTable:initialize_table_dessertMeshifTable", "called\n"));
+-
+- /*
+- * TODO:301:o: Perform dessertMeshifTable one-time table initialization.
+- */
+-
+- /*
+- * TODO:302:o: |->Initialize dessertMeshifTable user context
+- * if you'd like to pass in a pointer to some data for this
+- * table, allocate or set it up here.
+- */
+- /*
+- * a netsnmp_data_list is a simple way to store void pointers. A simple
+- * string token is used to add, find or remove pointers.
+- */
+- user_context =
+- netsnmp_create_data_list("dessertMeshifTable", NULL, NULL);
+-
+- /*
+- * No support for any flags yet, but in the future you would
+- * set any flags here.
+- */
+- flags = 0;
+-
+- /*
+- * call interface initialization code
+- */
+- _dessertMeshifTable_initialize_interface(user_context, flags);
+-} /* initialize_table_dessertMeshifTable */
+-
+-/**
+- * Shutdown the table dessertMeshifTable
+- */
+-void
+-shutdown_table_dessertMeshifTable(void)
+-{
+- /*
+- * call interface shutdown code
+- */
+- _dessertMeshifTable_shutdown_interface
+- (&dessertMeshifTable_user_context);
+-}
+-
+-/**
+- * extra context initialization (eg default values)
+- *
+- * @param rowreq_ctx : row request context
+- * @param user_init_ctx : void pointer for user (parameter to rowreq_ctx_allocate)
+- *
+- * @retval MFD_SUCCESS : no errors
+- * @retval MFD_ERROR : error (context allocate will fail)
+- */
+-int
+-dessertMeshifTable_rowreq_ctx_init(dessertMeshifTable_rowreq_ctx *
+- rowreq_ctx, void *user_init_ctx)
+-{
+- DEBUGMSGTL(("verbose:dessertMeshifTable:dessertMeshifTable_rowreq_ctx_init", "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:210:o: |-> Perform extra dessertMeshifTable rowreq initialization. (eg DEFVALS)
+- */
+-
+- return MFD_SUCCESS;
+-} /* dessertMeshifTable_rowreq_ctx_init */
+-
+-/**
+- * extra context cleanup
+- *
+- */
+-void
+-dessertMeshifTable_rowreq_ctx_cleanup(dessertMeshifTable_rowreq_ctx *
+- rowreq_ctx)
+-{
+- DEBUGMSGTL(("verbose:dessertMeshifTable:dessertMeshifTable_rowreq_ctx_cleanup", "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:211:o: |-> Perform extra dessertMeshifTable rowreq cleanup.
+- */
+-} /* dessertMeshifTable_rowreq_ctx_cleanup */
+-
+-/**
+- * pre-request callback
+- *
+- *
+- * @retval MFD_SUCCESS : success.
+- * @retval MFD_ERROR : other error
+- */
+-int
+-dessertMeshifTable_pre_request(dessertMeshifTable_registration *
+- user_context)
+-{
+- DEBUGMSGTL(("verbose:dessertMeshifTable:dessertMeshifTable_pre_request", "called\n"));
+-
+- /*
+- * TODO:510:o: Perform dessertMeshifTable pre-request actions.
+- */
+-
+- return MFD_SUCCESS;
+-} /* dessertMeshifTable_pre_request */
+-
+-/**
+- * post-request callback
+- *
+- * Note:
+- * New rows have been inserted into the container, and
+- * deleted rows have been removed from the container and
+- * released.
+- *
+- * @param user_context
+- * @param rc : MFD_SUCCESS if all requests succeeded
+- *
+- * @retval MFD_SUCCESS : success.
+- * @retval MFD_ERROR : other error (ignored)
+- */
+-int
+-dessertMeshifTable_post_request(dessertMeshifTable_registration *
+- user_context, int rc)
+-{
+- DEBUGMSGTL(("verbose:dessertMeshifTable:dessertMeshifTable_post_request", "called\n"));
+-
+- /*
+- * TODO:511:o: Perform dessertMeshifTable post-request actions.
+- */
+-
+- return MFD_SUCCESS;
+-} /* dessertMeshifTable_post_request */
+-
+-
+-/** @{ */
+Index: libdessert0.86-0.86.14/snmp/dessertMeshifTable.h
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertMeshifTable.h 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,222 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * version : 14170 $ of $
+- *
+- * $Id:$
+- */
+-#ifndef DESSERTMESHIFTABLE_H
+-#define DESSERTMESHIFTABLE_H
+-
+-#ifdef __cplusplus
+-extern "C" {
+-#endif
+-
+-/** @addtogroup misc misc: Miscellaneous routines
+- *
+- * @{
+- */
+-#include <net-snmp/library/asn1.h>
+-
+-/*
+- * other required module components
+- */
+-/* *INDENT-OFF* */
+-config_add_mib(DESSERT-MIB)
+-config_require(DESSERT-MIB/dessertMeshifTable/dessertMeshifTable_interface)
+-config_require(DESSERT-MIB/dessertMeshifTable/dessertMeshifTable_data_access)
+-config_require(DESSERT-MIB/dessertMeshifTable/dessertMeshifTable_data_get)
+-config_require(DESSERT-MIB/dessertMeshifTable/dessertMeshifTable_data_set)
+-/* *INDENT-ON* */
+-
+-/*
+- * OID and column number definitions for dessertMeshifTable
+- */
+-#include "dessertMeshifTable_oids.h"
+-
+-/*
+- * enum definions
+- */
+-#include "dessertMeshifTable_enums.h"
+-
+-/*
+- *********************************************************************
+- * function declarations
+- */
+-void init_dessertMeshifTable(void);
+-void shutdown_dessertMeshifTable(void);
+-
+-/*
+- *********************************************************************
+- * Table declarations
+- */
+-/**********************************************************************
+- **********************************************************************
+- ***
+- *** Table dessertMeshifTable
+- ***
+- **********************************************************************
+- **********************************************************************/
+-/*
+- * DESSERT-MIB::dessertMeshifTable is subid 5 of dessertObjects.
+- * Its status is Current.
+- * OID: .1.3.6.1.4.1.18898.0.19.42.1.5, length: 12
+- */
+-/*
+- *********************************************************************
+- * When you register your mib, you get to provide a generic
+- * pointer that will be passed back to you for most of the
+- * functions calls.
+- *
+- * TODO:100:r: Review all context structures
+- */
+-/*
+- * TODO:101:o: |-> Review dessertMeshifTable registration context.
+- */
+-typedef netsnmp_data_list dessertMeshifTable_registration;
+-
+-/**********************************************************************/
+-/*
+- * TODO:110:r: |-> Review dessertMeshifTable data context structure.
+- * This structure is used to represent the data for dessertMeshifTable.
+- */
+-/*
+- * This structure contains storage for all the columns defined in the
+- * dessertMeshifTable.
+- */
+-typedef struct dessertMeshifTable_data_s {
+-
+- /*
+- * meshifName(2)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
+- */
+- char meshifName[255];
+- size_t meshifName_len; /* # of char elements, not bytes */
+-
+- /*
+- * meshifMacAddress(3)/MacAddress/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
+- */
+- char meshifMacAddress[6];
+- size_t meshifMacAddress_len; /* # of char elements, not bytes */
+-
+- /*
+- * meshifInPkts(4)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+- */
+- U64 meshifInPkts;
+-
+- /*
+- * meshifOutPkts(5)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+- */
+- U64 meshifOutPkts;
+-
+- /*
+- * meshifInOctets(6)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+- */
+- U64 meshifInOctets;
+-
+- /*
+- * meshifOutOctets(7)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+- */
+- U64 meshifOutOctets;
+-
+-} dessertMeshifTable_data;
+-
+-/*
+- * TODO:120:r: |-> Review dessertMeshifTable mib index.
+- * This structure is used to represent the index for dessertMeshifTable.
+- */
+-typedef struct dessertMeshifTable_mib_index_s {
+-
+- /*
+- * meshifIndex(1)///()//L/a/w/e/r/d/h
+- */
+- long meshifIndex;
+-
+-} dessertMeshifTable_mib_index;
+-
+-/*
+- * TODO:121:r: | |-> Review dessertMeshifTable max index length.
+- * If you KNOW that your indexes will never exceed a certain
+- * length, update this macro to that length.
+- */
+-#define MAX_dessertMeshifTable_IDX_LEN 1
+-
+-/*
+- *********************************************************************
+- * TODO:130:o: |-> Review dessertMeshifTable Row request (rowreq) context.
+- * When your functions are called, you will be passed a
+- * dessertMeshifTable_rowreq_ctx pointer.
+- */
+-typedef struct dessertMeshifTable_rowreq_ctx_s {
+-
+- /** this must be first for container compare to work */
+- netsnmp_index oid_idx;
+- oid oid_tmp[MAX_dessertMeshifTable_IDX_LEN];
+-
+- dessertMeshifTable_mib_index tbl_idx;
+-
+- dessertMeshifTable_data data;
+-
+- /*
+- * flags per row. Currently, the first (lower) 8 bits are reserved
+- * for the user. See mfd.h for other flags.
+- */
+- u_int rowreq_flags;
+-
+- /*
+- * TODO:131:o: | |-> Add useful data to dessertMeshifTable rowreq context.
+- */
+-
+- /*
+- * storage for future expansion
+- */
+- netsnmp_data_list *dessertMeshifTable_data_list;
+-
+-} dessertMeshifTable_rowreq_ctx;
+-
+-typedef struct dessertMeshifTable_ref_rowreq_ctx_s {
+- dessertMeshifTable_rowreq_ctx *rowreq_ctx;
+-} dessertMeshifTable_ref_rowreq_ctx;
+-
+-/*
+- *********************************************************************
+- * function prototypes
+- */
+-int
+-dessertMeshifTable_pre_request(dessertMeshifTable_registration * user_context);
+-int
+-dessertMeshifTable_post_request(dessertMeshifTable_registration * user_context,
+- int rc);
+-
+-int
+-dessertMeshifTable_rowreq_ctx_init(dessertMeshifTable_rowreq_ctx * rowreq_ctx,
+- void *user_init_ctx);
+-void
+-dessertMeshifTable_rowreq_ctx_cleanup(
+- dessertMeshifTable_rowreq_ctx * rowreq_ctx);
+-
+-dessertMeshifTable_rowreq_ctx
+-*dessertMeshifTable_row_find_by_mib_index(
+- dessertMeshifTable_mib_index * mib_idx);
+-
+-extern oid dessertMeshifTable_oid[];
+-extern int dessertMeshifTable_oid_size;
+-
+-#include "dessertMeshifTable_interface.h"
+-#include "dessertMeshifTable_data_access.h"
+-#include "dessertMeshifTable_data_get.h"
+-#include "dessertMeshifTable_data_set.h"
+-
+-/*
+- * DUMMY markers, ignore
+- *
+- * TODO:099:x: *************************************************************
+- * TODO:199:x: *************************************************************
+- * TODO:299:x: *************************************************************
+- * TODO:399:x: *************************************************************
+- * TODO:499:x: *************************************************************
+- */
+-
+-#ifdef __cplusplus
+-}
+-#endif
+-#endif /* DESSERTMESHIFTABLE_H */
+-/** @} */
+Index: libdessert0.86-0.86.14/snmp/dessertMeshifTable_data_access.c
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertMeshifTable_data_access.c 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,377 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * version : 14170 $ of $
+- *
+- * $Id:$
+- */
+-/*
+- * standard Net-SNMP includes
+- */
+-#include <net-snmp/net-snmp-config.h>
+-#include <net-snmp/net-snmp-includes.h>
+-#include <net-snmp/agent/net-snmp-agent-includes.h>
+-
+-/*
+- * include our parent header
+- */
+-#include "../dessert_internal.h"
+-
+-
+-#include "dessertMeshifTable_data_access.h"
+-
+-/** @ingroup interface
+- * @addtogroup data_access data_access: Routines to access data
+- *
+- * These routines are used to locate the data used to satisfy
+- * requests.
+- *
+- * @{
+- */
+-/**********************************************************************
+- **********************************************************************
+- ***
+- *** Table dessertMeshifTable
+- ***
+- **********************************************************************
+- **********************************************************************/
+-/*
+- * DESSERT-MIB::dessertMeshifTable is subid 5 of dessertObjects.
+- * Its status is Current.
+- * OID: .1.3.6.1.4.1.18898.0.19.42.1.5, length: 12
+- */
+-
+-/**
+- * initialization for dessertMeshifTable data access
+- *
+- * This function is called during startup to allow you to
+- * allocate any resources you need for the data table.
+- *
+- * @param dessertMeshifTable_reg
+- * Pointer to dessertMeshifTable_registration
+- *
+- * @retval MFD_SUCCESS : success.
+- * @retval MFD_ERROR : unrecoverable error.
+- */
+-int
+-dessertMeshifTable_init_data(dessertMeshifTable_registration *
+- dessertMeshifTable_reg)
+-{
+- DEBUGMSGTL(("verbose:dessertMeshifTable:dessertMeshifTable_init_data",
+- "called\n"));
+- dessert_debug("dessertMeshifTable_container_load called");
+- /*
+- * TODO:303:o: Initialize dessertMeshifTable data.
+- */
+- /*
+- ***************************************************
+- *** START EXAMPLE CODE ***
+- ***---------------------------------------------***/
+- /*
+- * if you are the sole writer for the file, you could
+- * open it here. However, as stated earlier, we are assuming
+- * the worst case, which in this case means that the file is
+- * written to by someone else, and might not even exist when
+- * we start up. So we can't do anything here.
+- */
+- /*
+- ***---------------------------------------------***
+- *** END EXAMPLE CODE ***
+- ***************************************************/
+-
+- return MFD_SUCCESS;
+-} /* dessertMeshifTable_init_data */
+-
+-/**
+- * container overview
+- *
+- */
+-
+-/**
+- * container initialization
+- *
+- * @param container_ptr_ptr A pointer to a container pointer. If you
+- * create a custom container, use this parameter to return it
+- * to the MFD helper. If set to NULL, the MFD helper will
+- * allocate a container for you.
+- * @param cache A pointer to a cache structure. You can set the timeout
+- * and other cache flags using this pointer.
+- *
+- * This function is called at startup to allow you to customize certain
+- * aspects of the access method. For the most part, it is for advanced
+- * users. The default code should suffice for most cases. If no custom
+- * container is allocated, the MFD code will create one for your.
+- *
+- * This is also the place to set up cache behavior. The default, to
+- * simply set the cache timeout, will work well with the default
+- * container. If you are using a custom container, you may want to
+- * look at the cache helper documentation to see if there are any
+- * flags you want to set.
+- *
+- * @remark
+- * This would also be a good place to do any initialization needed
+- * for you data source. For example, opening a connection to another
+- * process that will supply the data, opening a database, etc.
+- */
+-void
+-dessertMeshifTable_container_init(netsnmp_container ** container_ptr_ptr,
+- netsnmp_cache * cache)
+-{
+- DEBUGMSGTL(("verbose:dessertMeshifTable:dessertMeshifTable_container_init", "called\n"));
+-
+- if (NULL == container_ptr_ptr) {
+- snmp_log(LOG_ERR,
+- "bad container param to dessertMeshifTable_container_init\n");
+- return;
+- }
+-
+- /*
+- * For advanced users, you can use a custom container. If you
+- * do not create one, one will be created for you.
+- */
+- *container_ptr_ptr = NULL;
+-
+- if (NULL == cache) {
+- snmp_log(LOG_ERR,
+- "bad cache param to dessertMeshifTable_container_init\n");
+- return;
+- }
+-
+- /*
+- * TODO:345:A: Set up dessertMeshifTable cache properties.
+- *
+- * Also for advanced users, you can set parameters for the
+- * cache. Do not change the magic pointer, as it is used
+- * by the MFD helper. To completely disable caching, set
+- * cache->enabled to 0.
+- */
+- cache->timeout = DESSERTMESHIFTABLE_CACHE_TIMEOUT; /* seconds */
+-} /* dessertMeshifTable_container_init */
+-
+-/**
+- * container shutdown
+- *
+- * @param container_ptr A pointer to the container.
+- *
+- * This function is called at shutdown to allow you to customize certain
+- * aspects of the access method. For the most part, it is for advanced
+- * users. The default code should suffice for most cases.
+- *
+- * This function is called before dessertMeshifTable_container_free().
+- *
+- * @remark
+- * This would also be a good place to do any cleanup needed
+- * for you data source. For example, closing a connection to another
+- * process that supplied the data, closing a database, etc.
+- */
+-void
+-dessertMeshifTable_container_shutdown(netsnmp_container * container_ptr)
+-{
+- DEBUGMSGTL(("verbose:dessertMeshifTable:dessertMeshifTable_container_shutdown", "called\n"));
+-
+- if (NULL == container_ptr) {
+- snmp_log(LOG_ERR,
+- "bad params to dessertMeshifTable_container_shutdown\n");
+- return;
+- }
+-
+-} /* dessertMeshifTable_container_shutdown */
+-
+-/**
+- * load initial data
+- *
+- * TODO:350:M: Implement dessertMeshifTable data load
+- * This function will also be called by the cache helper to load
+- * the container again (after the container free function has been
+- * called to free the previous contents).
+- *
+- * @param container container to which items should be inserted
+- *
+- * @retval MFD_SUCCESS : success.
+- * @retval MFD_RESOURCE_UNAVAILABLE : Can't access data source
+- * @retval MFD_ERROR : other error.
+- *
+- * This function is called to load the index(es) (and data, optionally)
+- * for the every row in the data set.
+- *
+- * @remark
+- * While loading the data, the only important thing is the indexes.
+- * If access to your data is cheap/fast (e.g. you have a pointer to a
+- * structure in memory), it would make sense to update the data here.
+- * If, however, the accessing the data invovles more work (e.g. parsing
+- * some other existing data, or peforming calculations to derive the data),
+- * then you can limit yourself to setting the indexes and saving any
+- * information you will need later. Then use the saved information in
+- * dessertMeshifTable_row_prep() for populating data.
+- *
+- * @note
+- * If you need consistency between rows (like you want statistics
+- * for each row to be from the same time frame), you should set all
+- * data here.
+- *
+- */
+-int
+-dessertMeshifTable_container_load(netsnmp_container * container)
+-{
+- dessertMeshifTable_rowreq_ctx *rowreq_ctx;
+- dessert_meshif_t *meshif;
+- size_t count = 0;
+-
+- char inPkts[I64CHARSZ+1];
+- char outPkts[I64CHARSZ+1];
+- char inOctets[I64CHARSZ+1];
+- char outOctets[I64CHARSZ+1];
+-
+- /*
+- * temporary storage for index values
+- */
+- /*
+- * meshifIndex(1)///()//L/a/w/e/r/d/h
+- */
+- long meshifIndex = -1;
+-
+- dessert_debug("dessertMeshifTable_container_load called");
+- DEBUGMSGTL(("verbose:dessertMeshifTable:dessertMeshifTable_container_load", "called\n"));
+-
+-
+-
+- /*
+- * TODO:351:M: |-> Load/update data in the dessertMeshifTable container.
+- * loop over your dessertMeshifTable data, allocate a rowreq context,
+- * set the index(es) [and data, optionally] and insert into
+- * the container.
+- */
+- pthread_rwlock_rdlock(&dessert_cfglock);
+- DL_FOREACH(dessert_meshiflist_get(), meshif){
+-
+- meshifIndex = ++count;
+-
+- /*
+- * TODO:352:M: | |-> set indexes in new dessertMeshifTable rowreq context.
+- * data context will be set from the param (unless NULL,
+- * in which case a new data context will be allocated)
+- */
+- rowreq_ctx = dessertMeshifTable_allocate_rowreq_ctx(NULL);
+- if (NULL == rowreq_ctx) {
+- snmp_log(LOG_ERR, "memory allocation failed\n");
+- pthread_rwlock_unlock(&dessert_cfglock);
+- return MFD_RESOURCE_UNAVAILABLE;
+- }
+-
+- if (MFD_SUCCESS != dessertMeshifTable_indexes_set(rowreq_ctx,
+- meshifIndex)) {
+- snmp_log(LOG_ERR, "error setting index while loading "
+- "dessertMeshifTable data.\n");
+- dessertMeshifTable_release_rowreq_ctx(rowreq_ctx);
+- continue;
+- }
+-
+- /*
+- * TODO:352:r: | |-> populate dessertMeshifTable data context.
+- * Populate data context here. (optionally, delay until row prep)
+- */
+-
+- rowreq_ctx->data.meshifName_len = strlen(meshif->if_name);
+- strcpy(rowreq_ctx->data.meshifName, meshif->if_name);
+-
+- rowreq_ctx->data.meshifMacAddress_len = 6;
+- memcpy(rowreq_ctx->data.meshifMacAddress, meshif->hwaddr, 6);
+-
+- pthread_mutex_lock(&(meshif->cnt_mutex));
+-
+- rowreq_ctx->data.meshifInPkts.low = meshif->ipkts & 0xffffffff;
+- rowreq_ctx->data.meshifInPkts.high = meshif->ipkts >> 32;
+-
+- rowreq_ctx->data.meshifOutPkts.low = meshif->opkts & 0xffffffff;
+- rowreq_ctx->data.meshifOutPkts.high = meshif->opkts >> 32;
+-
+- rowreq_ctx->data.meshifInOctets.low = meshif->ibytes & 0xffffffff;
+- rowreq_ctx->data.meshifInOctets.high = meshif->ibytes >> 32;
+-
+- rowreq_ctx->data.meshifOutOctets.low = meshif->obytes & 0xffffffff;
+- rowreq_ctx->data.meshifOutOctets.high = meshif->obytes >> 32;
+-
+-
+- printU64(inPkts, &rowreq_ctx->data.meshifInPkts);
+- printU64(outPkts, &rowreq_ctx->data.meshifOutPkts);
+- printU64(inOctets, &rowreq_ctx->data.meshifInOctets);
+- printU64(outOctets, &rowreq_ctx->data.meshifOutOctets);
+-
+-
+- dessert_debug("inPkts [%s] [%u]", inPkts, meshif->ipkts);
+- dessert_debug("outPkts [%s] [%u]", outPkts, meshif->opkts);
+- dessert_debug("inOctets [%s] [%u]", inOctets, meshif->ibytes);
+- dessert_debug("outOctets [%s] [%u]", outOctets,meshif->obytes);
+-
+-
+- pthread_mutex_unlock(&(meshif->cnt_mutex));
+-
+- /*
+- * insert into table container
+- */
+- CONTAINER_INSERT(container, rowreq_ctx);
+- }
+- pthread_rwlock_unlock(&dessert_cfglock);
+-
+-
+-
+- DEBUGMSGT(("verbose:dessertMeshifTable:dessertMeshifTable_container_load", "inserted %d records\n", count));
+-
+- if (meshifIndex == -1) return MFD_RESOURCE_UNAVAILABLE;
+-
+- return MFD_SUCCESS;
+-} /* dessertMeshifTable_container_load */
+-
+-/**
+- * container clean up
+- *
+- * @param container container with all current items
+- *
+- * This optional callback is called prior to all
+- * item's being removed from the container. If you
+- * need to do any processing before that, do it here.
+- *
+- * @note
+- * The MFD helper will take care of releasing all the row contexts.
+- *
+- */
+-void
+-dessertMeshifTable_container_free(netsnmp_container * container)
+-{
+- DEBUGMSGTL(("verbose:dessertMeshifTable:dessertMeshifTable_container_free", "called\n"));
+-
+- /*
+- * TODO:380:M: Free dessertMeshifTable container data.
+- */
+-} /* dessertMeshifTable_container_free */
+-
+-/**
+- * prepare row for processing.
+- *
+- * When the agent has located the row for a request, this function is
+- * called to prepare the row for processing. If you fully populated
+- * the data context during the index setup phase, you may not need to
+- * do anything.
+- *
+- * @param rowreq_ctx pointer to a context.
+- *
+- * @retval MFD_SUCCESS : success.
+- * @retval MFD_ERROR : other error.
+- */
+-int
+-dessertMeshifTable_row_prep(dessertMeshifTable_rowreq_ctx * rowreq_ctx)
+-{
+- DEBUGMSGTL(("verbose:dessertMeshifTable:dessertMeshifTable_row_prep",
+- "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:390:o: Prepare row for request.
+- * If populating row data was delayed, this is the place to
+- * fill in the row for this request.
+- */
+-
+- return MFD_SUCCESS;
+-} /* dessertMeshifTable_row_prep */
+-
+-/** @} */
+Index: libdessert0.86-0.86.14/snmp/dessertMeshifTable_data_access.h
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertMeshifTable_data_access.h 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,77 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * version : 14170 $ of $
+- *
+- * $Id:$
+- */
+-#ifndef DESSERTMESHIFTABLE_DATA_ACCESS_H
+-#define DESSERTMESHIFTABLE_DATA_ACCESS_H
+-
+-#include "../dessert_internal.h"
+-
+-#ifdef __cplusplus
+-extern "C" {
+-#endif
+-
+-
+- /*
+- *********************************************************************
+- * function declarations
+- */
+-
+- /*
+- *********************************************************************
+- * Table declarations
+- */
+-/**********************************************************************
+- **********************************************************************
+- ***
+- *** Table dessertMeshifTable
+- ***
+- **********************************************************************
+- **********************************************************************/
+- /*
+- * DESSERT-MIB::dessertMeshifTable is subid 5 of dessertObjects.
+- * Its status is Current.
+- * OID: .1.3.6.1.4.1.18898.0.19.42.1.5, length: 12
+- */
+-
+-
+- int
+- dessertMeshifTable_init_data(dessertMeshifTable_registration *
+- dessertMeshifTable_reg);
+-
+-
+- /*
+- * TODO:180:o: Review dessertMeshifTable cache timeout.
+- * The number of seconds before the cache times out
+- */
+-#define DESSERTMESHIFTABLE_CACHE_TIMEOUT DESSERT_AGENTX_MESHIFTABLE_CACHE_TIMEOUT
+-
+- void dessertMeshifTable_container_init(netsnmp_container **
+- container_ptr_ptr,
+- netsnmp_cache *
+- cache);
+- void dessertMeshifTable_container_shutdown(netsnmp_container
+- * container_ptr);
+-
+- int dessertMeshifTable_container_load(netsnmp_container *
+- container);
+- void dessertMeshifTable_container_free(netsnmp_container *
+- container);
+-
+- int dessertMeshifTable_cache_load(netsnmp_container *
+- container);
+- void dessertMeshifTable_cache_free(netsnmp_container *
+- container);
+-
+- int
+- dessertMeshifTable_row_prep(dessertMeshifTable_rowreq_ctx *
+- rowreq_ctx);
+-
+-
+-
+-#ifdef __cplusplus
+-}
+-#endif
+-#endif /* DESSERTMESHIFTABLE_DATA_ACCESS_H */
+Index: libdessert0.86-0.86.14/snmp/dessertMeshifTable_data_get.c
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertMeshifTable_data_get.c 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,522 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * version : 12088 $ of $
+- *
+- * $Id:$
+- */
+-/*
+- * standard Net-SNMP includes
+- */
+-#include <net-snmp/net-snmp-config.h>
+-#include <net-snmp/net-snmp-includes.h>
+-#include <net-snmp/agent/net-snmp-agent-includes.h>
+-
+-/*
+- * include our parent header
+- */
+-#include "dessertMeshifTable.h"
+-
+-
+-/** @defgroup data_get data_get: Routines to get data
+- *
+- * TODO:230:M: Implement dessertMeshifTable get routines.
+- * TODO:240:M: Implement dessertMeshifTable mapping routines (if any).
+- *
+- * These routine are used to get the value for individual objects. The
+- * row context is passed, along with a pointer to the memory where the
+- * value should be copied.
+- *
+- * @{
+- */
+-/**********************************************************************
+- **********************************************************************
+- ***
+- *** Table dessertMeshifTable
+- ***
+- **********************************************************************
+- **********************************************************************/
+-/*
+- * DESSERT-MIB::dessertMeshifTable is subid 5 of dessertObjects.
+- * Its status is Current.
+- * OID: .1.3.6.1.4.1.18898.0.19.42.1.5, length: 12
+- */
+-
+-/*
+- * ---------------------------------------------------------------------
+- * * TODO:200:r: Implement dessertMeshifTable data context functions.
+- */
+-
+-
+-/**
+- * set mib index(es)
+- *
+- * @param tbl_idx mib index structure
+- * @param meshifIndex_val
+- *
+- * @retval MFD_SUCCESS : success.
+- * @retval MFD_ERROR : other error.
+- *
+- * @remark
+- * This convenience function is useful for setting all the MIB index
+- * components with a single function call. It is assume that the C values
+- * have already been mapped from their native/rawformat to the MIB format.
+- */
+-int
+-dessertMeshifTable_indexes_set_tbl_idx(dessertMeshifTable_mib_index *
+- tbl_idx, long meshifIndex_val)
+-{
+- DEBUGMSGTL(("verbose:dessertMeshifTable:dessertMeshifTable_indexes_set_tbl_idx", "called\n"));
+-
+- /*
+- * meshifIndex(1)///()//L/a/w/e/r/d/h
+- */
+- tbl_idx->meshifIndex = meshifIndex_val;
+-
+-
+- return MFD_SUCCESS;
+-} /* dessertMeshifTable_indexes_set_tbl_idx */
+-
+-/**
+- * @internal
+- * set row context indexes
+- *
+- * @param reqreq_ctx the row context that needs updated indexes
+- *
+- * @retval MFD_SUCCESS : success.
+- * @retval MFD_ERROR : other error.
+- *
+- * @remark
+- * This function sets the mib indexs, then updates the oid indexs
+- * from the mib index.
+- */
+-int
+-dessertMeshifTable_indexes_set(dessertMeshifTable_rowreq_ctx * rowreq_ctx,
+- long meshifIndex_val)
+-{
+- DEBUGMSGTL(("verbose:dessertMeshifTable:dessertMeshifTable_indexes_set", "called\n"));
+-
+- if (MFD_SUCCESS !=
+- dessertMeshifTable_indexes_set_tbl_idx(&rowreq_ctx->tbl_idx,
+- meshifIndex_val))
+- return MFD_ERROR;
+-
+- /*
+- * convert mib index to oid index
+- */
+- rowreq_ctx->oid_idx.len = sizeof(rowreq_ctx->oid_tmp) / sizeof(oid);
+- if (0 != dessertMeshifTable_index_to_oid(&rowreq_ctx->oid_idx,
+- &rowreq_ctx->tbl_idx)) {
+- return MFD_ERROR;
+- }
+-
+- return MFD_SUCCESS;
+-} /* dessertMeshifTable_indexes_set */
+-
+-
+-/*---------------------------------------------------------------------
+- * DESSERT-MIB::dessertMeshifEntry.meshifName
+- * meshifName is subid 2 of dessertMeshifEntry.
+- * Its status is Current, and its access level is ReadOnly.
+- * OID: .1.3.6.1.4.1.18898.0.19.42.1.5.1.2
+- * Description:
+-name of interface
+- *
+- * Attributes:
+- * accessible 1 isscalar 0 enums 0 hasdefval 0
+- * readable 1 iscolumn 1 ranges 1 hashint 1
+- * settable 0
+- * hint: 255a
+- *
+- * Ranges: 0 - 255;
+- *
+- * Its syntax is DisplayString (based on perltype OCTETSTR)
+- * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+- * This data type requires a length. (Max 255)
+- */
+-/**
+- * Extract the current value of the meshifName data.
+- *
+- * Set a value using the data context for the row.
+- *
+- * @param rowreq_ctx
+- * Pointer to the row request context.
+- * @param meshifName_val_ptr_ptr
+- * Pointer to storage for a char variable
+- * @param meshifName_val_ptr_len_ptr
+- * Pointer to a size_t. On entry, it will contain the size (in bytes)
+- * pointed to by meshifName.
+- * On exit, this value should contain the data size (in bytes).
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_SKIP : skip this node (no value for now)
+- * @retval MFD_ERROR : Any other error
+-*
+- * @note If you need more than (*meshifName_val_ptr_len_ptr) bytes of memory,
+- * allocate it using malloc() and update meshifName_val_ptr_ptr.
+- * <b>DO NOT</b> free the previous pointer.
+- * The MFD helper will release the memory you allocate.
+- *
+- * @remark If you call this function yourself, you are responsible
+- * for checking if the pointer changed, and freeing any
+- * previously allocated memory. (Not necessary if you pass
+- * in a pointer to static memory, obviously.)
+- */
+-int
+-meshifName_get(dessertMeshifTable_rowreq_ctx * rowreq_ctx,
+- char **meshifName_val_ptr_ptr,
+- size_t *meshifName_val_ptr_len_ptr)
+-{
+- /** we should have a non-NULL pointer and enough storage */
+- netsnmp_assert((NULL != meshifName_val_ptr_ptr)
+- && (NULL != *meshifName_val_ptr_ptr));
+- netsnmp_assert(NULL != meshifName_val_ptr_len_ptr);
+-
+-
+- DEBUGMSGTL(("verbose:dessertMeshifTable:meshifName_get", "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:231:o: |-> Extract the current value of the meshifName data.
+- * copy (* meshifName_val_ptr_ptr ) data and (* meshifName_val_ptr_len_ptr ) from rowreq_ctx->data
+- */
+- /*
+- * make sure there is enough space for meshifName data
+- */
+- if ((NULL == (*meshifName_val_ptr_ptr)) ||
+- ((*meshifName_val_ptr_len_ptr) <
+- (rowreq_ctx->data.meshifName_len *
+- sizeof(rowreq_ctx->data.meshifName[0])))) {
+- /*
+- * allocate space for meshifName data
+- */
+- (*meshifName_val_ptr_ptr) =
+- malloc(rowreq_ctx->data.meshifName_len *
+- sizeof(rowreq_ctx->data.meshifName[0]));
+- if (NULL == (*meshifName_val_ptr_ptr)) {
+- snmp_log(LOG_ERR, "could not allocate memory\n");
+- return MFD_ERROR;
+- }
+- }
+- (*meshifName_val_ptr_len_ptr) =
+- rowreq_ctx->data.meshifName_len *
+- sizeof(rowreq_ctx->data.meshifName[0]);
+- memcpy((*meshifName_val_ptr_ptr), rowreq_ctx->data.meshifName,
+- rowreq_ctx->data.meshifName_len *
+- sizeof(rowreq_ctx->data.meshifName[0]));
+-
+- return MFD_SUCCESS;
+-} /* meshifName_get */
+-
+-/*---------------------------------------------------------------------
+- * DESSERT-MIB::dessertMeshifEntry.meshifMacAddress
+- * meshifMacAddress is subid 3 of dessertMeshifEntry.
+- * Its status is Current, and its access level is ReadOnly.
+- * OID: .1.3.6.1.4.1.18898.0.19.42.1.5.1.3
+- * Description:
+-hardware address of interface
+- *
+- * Attributes:
+- * accessible 1 isscalar 0 enums 0 hasdefval 0
+- * readable 1 iscolumn 1 ranges 1 hashint 1
+- * settable 0
+- * hint: 1x:
+- *
+- * Ranges: 6;
+- *
+- * Its syntax is MacAddress (based on perltype OCTETSTR)
+- * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+- * This data type requires a length. (Max 6)
+- */
+-/**
+- * Extract the current value of the meshifMacAddress data.
+- *
+- * Set a value using the data context for the row.
+- *
+- * @param rowreq_ctx
+- * Pointer to the row request context.
+- * @param meshifMacAddress_val_ptr_ptr
+- * Pointer to storage for a char variable
+- * @param meshifMacAddress_val_ptr_len_ptr
+- * Pointer to a size_t. On entry, it will contain the size (in bytes)
+- * pointed to by meshifMacAddress.
+- * On exit, this value should contain the data size (in bytes).
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_SKIP : skip this node (no value for now)
+- * @retval MFD_ERROR : Any other error
+-*
+- * @note If you need more than (*meshifMacAddress_val_ptr_len_ptr) bytes of memory,
+- * allocate it using malloc() and update meshifMacAddress_val_ptr_ptr.
+- * <b>DO NOT</b> free the previous pointer.
+- * The MFD helper will release the memory you allocate.
+- *
+- * @remark If you call this function yourself, you are responsible
+- * for checking if the pointer changed, and freeing any
+- * previously allocated memory. (Not necessary if you pass
+- * in a pointer to static memory, obviously.)
+- */
+-int
+-meshifMacAddress_get(dessertMeshifTable_rowreq_ctx * rowreq_ctx,
+- char **meshifMacAddress_val_ptr_ptr,
+- size_t *meshifMacAddress_val_ptr_len_ptr)
+-{
+- /** we should have a non-NULL pointer and enough storage */
+- netsnmp_assert((NULL != meshifMacAddress_val_ptr_ptr)
+- && (NULL != *meshifMacAddress_val_ptr_ptr));
+- netsnmp_assert(NULL != meshifMacAddress_val_ptr_len_ptr);
+-
+-
+- DEBUGMSGTL(("verbose:dessertMeshifTable:meshifMacAddress_get",
+- "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:231:o: |-> Extract the current value of the meshifMacAddress data.
+- * copy (* meshifMacAddress_val_ptr_ptr ) data and (* meshifMacAddress_val_ptr_len_ptr ) from rowreq_ctx->data
+- */
+- /*
+- * make sure there is enough space for meshifMacAddress data
+- */
+- if ((NULL == (*meshifMacAddress_val_ptr_ptr)) ||
+- ((*meshifMacAddress_val_ptr_len_ptr) <
+- (rowreq_ctx->data.meshifMacAddress_len *
+- sizeof(rowreq_ctx->data.meshifMacAddress[0])))) {
+- /*
+- * allocate space for meshifMacAddress data
+- */
+- (*meshifMacAddress_val_ptr_ptr) =
+- malloc(rowreq_ctx->data.meshifMacAddress_len *
+- sizeof(rowreq_ctx->data.meshifMacAddress[0]));
+- if (NULL == (*meshifMacAddress_val_ptr_ptr)) {
+- snmp_log(LOG_ERR, "could not allocate memory\n");
+- return MFD_ERROR;
+- }
+- }
+- (*meshifMacAddress_val_ptr_len_ptr) =
+- rowreq_ctx->data.meshifMacAddress_len *
+- sizeof(rowreq_ctx->data.meshifMacAddress[0]);
+- memcpy((*meshifMacAddress_val_ptr_ptr),
+- rowreq_ctx->data.meshifMacAddress,
+- rowreq_ctx->data.meshifMacAddress_len *
+- sizeof(rowreq_ctx->data.meshifMacAddress[0]));
+-
+- return MFD_SUCCESS;
+-} /* meshifMacAddress_get */
+-
+-/*---------------------------------------------------------------------
+- * DESSERT-MIB::dessertMeshifEntry.meshifInPkts
+- * meshifInPkts is subid 4 of dessertMeshifEntry.
+- * Its status is Current, and its access level is ReadOnly.
+- * OID: .1.3.6.1.4.1.18898.0.19.42.1.5.1.4
+- * Description:
+-packet counter in
+- *
+- * Attributes:
+- * accessible 1 isscalar 0 enums 0 hasdefval 0
+- * readable 1 iscolumn 1 ranges 0 hashint 0
+- * settable 0
+- *
+- *
+- * Its syntax is COUNTER64 (based on perltype COUNTER64)
+- * The net-snmp type is ASN_COUNTER64. The C type decl is U64 (U64)
+- */
+-/**
+- * Extract the current value of the meshifInPkts data.
+- *
+- * Set a value using the data context for the row.
+- *
+- * @param rowreq_ctx
+- * Pointer to the row request context.
+- * @param meshifInPkts_val_ptr
+- * Pointer to storage for a U64 variable
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_SKIP : skip this node (no value for now)
+- * @retval MFD_ERROR : Any other error
+- */
+-int
+-meshifInPkts_get(dessertMeshifTable_rowreq_ctx * rowreq_ctx,
+- U64 * meshifInPkts_val_ptr)
+-{
+- char inPkts[I64CHARSZ+1];
+-
+- /** we should have a non-NULL pointer */
+- netsnmp_assert(NULL != meshifInPkts_val_ptr);
+-
+- /*
+- * TODO:231:o: |-> copy meshifInPkts data.
+- * get (* meshifInPkts_val_ptr ).low and (* meshifInPkts_val_ptr ).high from rowreq_ctx->data
+- */
+- (*meshifInPkts_val_ptr).high = rowreq_ctx->data.meshifInPkts.high;
+- (*meshifInPkts_val_ptr).low = rowreq_ctx->data.meshifInPkts.low;
+-
+- printU64(inPkts, meshifInPkts_val_ptr);
+-
+- return MFD_SUCCESS;
+-} /* meshifInPkts_get */
+-
+-/*---------------------------------------------------------------------
+- * DESSERT-MIB::dessertMeshifEntry.meshifOutPkts
+- * meshifOutPkts is subid 5 of dessertMeshifEntry.
+- * Its status is Current, and its access level is ReadOnly.
+- * OID: .1.3.6.1.4.1.18898.0.19.42.1.5.1.5
+- * Description:
+-packet counter out
+- *
+- * Attributes:
+- * accessible 1 isscalar 0 enums 0 hasdefval 0
+- * readable 1 iscolumn 1 ranges 0 hashint 0
+- * settable 0
+- *
+- *
+- * Its syntax is COUNTER64 (based on perltype COUNTER64)
+- * The net-snmp type is ASN_COUNTER64. The C type decl is U64 (U64)
+- */
+-/**
+- * Extract the current value of the meshifOutPkts data.
+- *
+- * Set a value using the data context for the row.
+- *
+- * @param rowreq_ctx
+- * Pointer to the row request context.
+- * @param meshifOutPkts_val_ptr
+- * Pointer to storage for a U64 variable
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_SKIP : skip this node (no value for now)
+- * @retval MFD_ERROR : Any other error
+- */
+-int
+-meshifOutPkts_get(dessertMeshifTable_rowreq_ctx * rowreq_ctx,
+- U64 * meshifOutPkts_val_ptr)
+-{
+- char outPkts[I64CHARSZ+1];
+-
+- /** we should have a non-NULL pointer */
+- netsnmp_assert(NULL != meshifOutPkts_val_ptr);
+-
+- /*
+- * TODO:231:o: |-> copy meshifOutPkts data.
+- * get (* meshifOutPkts_val_ptr ).low and (* meshifOutPkts_val_ptr ).high from rowreq_ctx->data
+- */
+- (*meshifOutPkts_val_ptr).high = rowreq_ctx->data.meshifOutPkts.high;
+- (*meshifOutPkts_val_ptr).low = rowreq_ctx->data.meshifOutPkts.low;
+-
+- printU64(outPkts, meshifOutPkts_val_ptr);
+-
+-
+-
+-
+- return MFD_SUCCESS;
+-} /* meshifOutPkts_get */
+-
+-/*---------------------------------------------------------------------
+- * DESSERT-MIB::dessertMeshifEntry.meshifInOctets
+- * meshifInOctets is subid 6 of dessertMeshifEntry.
+- * Its status is Current, and its access level is ReadOnly.
+- * OID: .1.3.6.1.4.1.18898.0.19.42.1.5.1.6
+- * Description:
+-octet counter in
+- *
+- * Attributes:
+- * accessible 1 isscalar 0 enums 0 hasdefval 0
+- * readable 1 iscolumn 1 ranges 0 hashint 0
+- * settable 0
+- *
+- *
+- * Its syntax is COUNTER64 (based on perltype COUNTER64)
+- * The net-snmp type is ASN_COUNTER64. The C type decl is U64 (U64)
+- */
+-/**
+- * Extract the current value of the meshifInOctets data.
+- *
+- * Set a value using the data context for the row.
+- *
+- * @param rowreq_ctx
+- * Pointer to the row request context.
+- * @param meshifInOctets_val_ptr
+- * Pointer to storage for a U64 variable
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_SKIP : skip this node (no value for now)
+- * @retval MFD_ERROR : Any other error
+- */
+-int
+-meshifInOctets_get(dessertMeshifTable_rowreq_ctx * rowreq_ctx,
+- U64 * meshifInOctets_val_ptr)
+-{
+- char inOctets[I64CHARSZ+1];
+- /** we should have a non-NULL pointer */
+- netsnmp_assert(NULL != meshifInOctets_val_ptr);
+-
+- /*
+- * TODO:231:o: |-> copy meshifInOctets data.
+- * get (* meshifInOctets_val_ptr ).low and (* meshifInOctets_val_ptr ).high from rowreq_ctx->data
+- */
+- (*meshifInOctets_val_ptr).high = rowreq_ctx->data.meshifInOctets.high;
+- (*meshifInOctets_val_ptr).low = rowreq_ctx->data.meshifInOctets.low;
+-
+- printU64(inOctets, meshifInOctets_val_ptr);
+-
+-
+- return MFD_SUCCESS;
+-} /* meshifInOctets_get */
+-
+-/*---------------------------------------------------------------------
+- * DESSERT-MIB::dessertMeshifEntry.meshifOutOctets
+- * meshifOutOctets is subid 7 of dessertMeshifEntry.
+- * Its status is Current, and its access level is ReadOnly.
+- * OID: .1.3.6.1.4.1.18898.0.19.42.1.5.1.7
+- * Description:
+-octet counter out
+- *
+- * Attributes:
+- * accessible 1 isscalar 0 enums 0 hasdefval 0
+- * readable 1 iscolumn 1 ranges 0 hashint 0
+- * settable 0
+- *
+- *
+- * Its syntax is COUNTER64 (based on perltype COUNTER64)
+- * The net-snmp type is ASN_COUNTER64. The C type decl is U64 (U64)
+- */
+-/**
+- * Extract the current value of the meshifOutOctets data.
+- *
+- * Set a value using the data context for the row.
+- *
+- * @param rowreq_ctx
+- * Pointer to the row request context.
+- * @param meshifOutOctets_val_ptr
+- * Pointer to storage for a U64 variable
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_SKIP : skip this node (no value for now)
+- * @retval MFD_ERROR : Any other error
+- */
+-int
+-meshifOutOctets_get(dessertMeshifTable_rowreq_ctx * rowreq_ctx,
+- U64 * meshifOutOctets_val_ptr)
+-{
+- char outOctets[I64CHARSZ+1];
+- /** we should have a non-NULL pointer */
+- netsnmp_assert(NULL != meshifOutOctets_val_ptr);
+-
+- /*
+- * TODO:231:o: |-> copy meshifOutOctets data.
+- * get (* meshifOutOctets_val_ptr ).low and (* meshifOutOctets_val_ptr ).high from rowreq_ctx->data
+- */
+- (*meshifOutOctets_val_ptr).high =
+- rowreq_ctx->data.meshifOutOctets.high;
+- (*meshifOutOctets_val_ptr).low = rowreq_ctx->data.meshifOutOctets.low;
+-
+- printU64(outOctets, meshifOutOctets_val_ptr);
+-
+-
+- return MFD_SUCCESS;
+-} /* meshifOutOctets_get */
+-
+-
+-
+-/** @} */
+Index: libdessert0.86-0.86.14/snmp/dessertMeshifTable_data_get.h
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertMeshifTable_data_get.h 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,109 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * version : 12088 $ of $
+- *
+- * $Id:$
+- *
+- * @file dessertMeshifTable_data_get.h
+- *
+- * @addtogroup get
+- *
+- * Prototypes for get functions
+- *
+- * @{
+- */
+-#ifndef DESSERTMESHIFTABLE_DATA_GET_H
+-#define DESSERTMESHIFTABLE_DATA_GET_H
+-
+-#ifdef __cplusplus
+-extern "C" {
+-#endif
+-
+- /*
+- *********************************************************************
+- * GET function declarations
+- */
+-
+- /*
+- *********************************************************************
+- * GET Table declarations
+- */
+-/**********************************************************************
+- **********************************************************************
+- ***
+- *** Table dessertMeshifTable
+- ***
+- **********************************************************************
+- **********************************************************************/
+- /*
+- * DESSERT-MIB::dessertMeshifTable is subid 5 of dessertObjects.
+- * Its status is Current.
+- * OID: .1.3.6.1.4.1.18898.0.19.42.1.5, length: 12
+- */
+- /*
+- * indexes
+- */
+- int meshifIndex_map(uint *mib_meshifIndex_val_ptr, uint
+- raw_meshifIndex_val);
+-
+- int meshifName_map(char **mib_meshifName_val_ptr_ptr,
+- size_t *mib_meshifName_val_ptr_len_ptr,
+- char *raw_meshifName_val_ptr,
+- size_t raw_meshifName_val_ptr_len,
+- int allow_realloc);
+- int meshifName_get(dessertMeshifTable_rowreq_ctx *
+- rowreq_ctx,
+- char **meshifName_val_ptr_ptr,
+- size_t *meshifName_val_ptr_len_ptr);
+- int meshifMacAddress_map(char
+- **mib_meshifMacAddress_val_ptr_ptr,
+- size_t
+- *mib_meshifMacAddress_val_ptr_len_ptr,
+- char
+- *raw_meshifMacAddress_val_ptr,
+- size_t
+- raw_meshifMacAddress_val_ptr_len,
+- int allow_realloc);
+- int meshifMacAddress_get(dessertMeshifTable_rowreq_ctx *
+- rowreq_ctx,
+- char
+- **meshifMacAddress_val_ptr_ptr,
+- size_t
+- *meshifMacAddress_val_ptr_len_ptr);
+- int meshifInPkts_map(U64 * mib_meshifInPkts_val_ptr,
+- U64 raw_meshifInPkts_val);
+- int meshifInPkts_get(dessertMeshifTable_rowreq_ctx *
+- rowreq_ctx,
+- U64 * meshifInPkts_val_ptr);
+- int meshifOutPkts_map(U64 * mib_meshifOutPkts_val_ptr,
+- U64 raw_meshifOutPkts_val);
+- int meshifOutPkts_get(dessertMeshifTable_rowreq_ctx *
+- rowreq_ctx,
+- U64 * meshifOutPkts_val_ptr);
+- int meshifInOctets_map(U64 * mib_meshifInOctets_val_ptr,
+- U64 raw_meshifInOctets_val);
+- int meshifInOctets_get(dessertMeshifTable_rowreq_ctx *
+- rowreq_ctx,
+- U64 * meshifInOctets_val_ptr);
+- int meshifOutOctets_map(U64 * mib_meshifOutOctets_val_ptr,
+- U64 raw_meshifOutOctets_val);
+- int meshifOutOctets_get(dessertMeshifTable_rowreq_ctx *
+- rowreq_ctx,
+- U64 * meshifOutOctets_val_ptr);
+-
+-
+- int
+- dessertMeshifTable_indexes_set_tbl_idx(dessertMeshifTable_mib_index
+- * tbl_idx, long meshifIndex_val);
+- int
+- dessertMeshifTable_indexes_set(dessertMeshifTable_rowreq_ctx *
+- rowreq_ctx, long meshifIndex_val);
+-
+-
+-
+-
+-#ifdef __cplusplus
+-}
+-#endif
+-#endif /* DESSERTMESHIFTABLE_DATA_GET_H */
+-/** @} */
+Index: libdessert0.86-0.86.14/snmp/dessertMeshifTable_data_set.c
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertMeshifTable_data_set.c 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,28 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * version : 12077 $ of $
+- *
+- * $Id:$
+- *
+- */
+-/*
+- * standard Net-SNMP includes
+- */
+-#include <net-snmp/net-snmp-config.h>
+-#include <net-snmp/net-snmp-includes.h>
+-#include <net-snmp/agent/net-snmp-agent-includes.h>
+-
+-/*
+- * include our parent header
+- */
+-#include "dessertMeshifTable.h"
+-
+-
+-/** @defgroup data_set data_set: Routines to set data
+- *
+- * These routines are used to set the value for individual objects. The
+- * row context is passed, along with the new value.
+- *
+- * @{
+- */
+-/** @} */
+Index: libdessert0.86-0.86.14/snmp/dessertMeshifTable_data_set.h
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertMeshifTable_data_set.h 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,28 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * version : 12077 $ of $
+- *
+- * $Id:$
+- */
+-#ifndef DESSERTMESHIFTABLE_DATA_SET_H
+-#define DESSERTMESHIFTABLE_DATA_SET_H
+-
+-#ifdef __cplusplus
+-extern "C" {
+-#endif
+-
+- /*
+- *********************************************************************
+- * SET function declarations
+- */
+-
+- /*
+- *********************************************************************
+- * SET Table declarations
+- */
+-
+-
+-#ifdef __cplusplus
+-}
+-#endif
+-#endif /* DESSERTMESHIFTABLE_DATA_SET_H */
+Index: libdessert0.86-0.86.14/snmp/dessertMeshifTable_enums.h
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertMeshifTable_enums.h 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,39 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * : generic-table-enums.m2c 12526 2005-07-15 22:41:16Z rstory $
+- *
+- * $Id:$
+- */
+-#ifndef DESSERTMESHIFTABLE_ENUMS_H
+-#define DESSERTMESHIFTABLE_ENUMS_H
+-
+-#ifdef __cplusplus
+-extern "C" {
+-#endif
+-
+- /*
+- * NOTES on enums
+- * ==============
+- *
+- * Value Mapping
+- * -------------
+- * If the values for your data type don't exactly match the
+- * possible values defined by the mib, you should map them
+- * below. For example, a boolean flag (1/0) is usually represented
+- * as a TruthValue in a MIB, which maps to the values (1/2).
+- *
+- */
+-/*************************************************************************
+- *************************************************************************
+- *
+- * enum definitions for table dessertMeshifTable
+- *
+- *************************************************************************
+- *************************************************************************/
+-
+-
+-
+-#ifdef __cplusplus
+-}
+-#endif
+-#endif /* DESSERTMESHIFTABLE_ENUMS_H */
+Index: libdessert0.86-0.86.14/snmp/dessertMeshifTable_interface.c
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertMeshifTable_interface.c 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,944 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * version : 15899 $ of $
+- *
+- * $Id:$
+- */
+-/*
+- * *********************************************************************
+- * *********************************************************************
+- * *********************************************************************
+- * *** ***
+- * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
+- * *** ***
+- * *** ***
+- * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
+- * *** ***
+- * *** ***
+- * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
+- * *** ***
+- * *** ***
+- * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
+- * *** ***
+- * *** ***
+- * *********************************************************************
+- * *********************************************************************
+- * *********************************************************************
+- */
+-
+-/*
+- * standard Net-SNMP includes
+- */
+-#include <net-snmp/net-snmp-config.h>
+-#include <net-snmp/net-snmp-includes.h>
+-#include <net-snmp/agent/net-snmp-agent-includes.h>
+-
+-/*
+- * include our parent header
+- */
+-#include "dessertMeshifTable.h"
+-
+-
+-#include <net-snmp/agent/table_container.h>
+-#include <net-snmp/library/container.h>
+-
+-#include "dessertMeshifTable_interface.h"
+-
+-#include <ctype.h>
+-
+-/**********************************************************************
+- **********************************************************************
+- ***
+- *** Table dessertMeshifTable
+- ***
+- **********************************************************************
+- **********************************************************************/
+-/*
+- * DESSERT-MIB::dessertMeshifTable is subid 5 of dessertObjects.
+- * Its status is Current.
+- * OID: .1.3.6.1.4.1.18898.0.19.42.1.5, length: 12
+- */
+-typedef struct dessertMeshifTable_interface_ctx_s {
+-
+- netsnmp_container *container;
+- netsnmp_cache *cache;
+-
+- dessertMeshifTable_registration *user_ctx;
+-
+- netsnmp_table_registration_info tbl_info;
+-
+- netsnmp_baby_steps_access_methods access_multiplexer;
+-
+-} dessertMeshifTable_interface_ctx;
+-
+-static dessertMeshifTable_interface_ctx dessertMeshifTable_if_ctx;
+-
+-static void
+-_dessertMeshifTable_container_init(dessertMeshifTable_interface_ctx *
+- if_ctx);
+-static void
+-_dessertMeshifTable_container_shutdown(dessertMeshifTable_interface_ctx *
+- if_ctx);
+-
+-
+-netsnmp_container *
+-dessertMeshifTable_container_get(void)
+-{
+- return dessertMeshifTable_if_ctx.container;
+-}
+-
+-dessertMeshifTable_registration *
+-dessertMeshifTable_registration_get(void)
+-{
+- return dessertMeshifTable_if_ctx.user_ctx;
+-}
+-
+-dessertMeshifTable_registration *
+-dessertMeshifTable_registration_set(dessertMeshifTable_registration *
+- newreg)
+-{
+- dessertMeshifTable_registration *old =
+- dessertMeshifTable_if_ctx.user_ctx;
+- dessertMeshifTable_if_ctx.user_ctx = newreg;
+- return old;
+-}
+-
+-int
+-dessertMeshifTable_container_size(void)
+-{
+- return CONTAINER_SIZE(dessertMeshifTable_if_ctx.container);
+-}
+-
+-/*
+- * mfd multiplexer modes
+- */
+-static Netsnmp_Node_Handler _mfd_dessertMeshifTable_pre_request;
+-static Netsnmp_Node_Handler _mfd_dessertMeshifTable_post_request;
+-static Netsnmp_Node_Handler _mfd_dessertMeshifTable_object_lookup;
+-static Netsnmp_Node_Handler _mfd_dessertMeshifTable_get_values;
+-/**
+- * @internal
+- * Initialize the table dessertMeshifTable
+- * (Define its contents and how it's structured)
+- */
+-void
+-_dessertMeshifTable_initialize_interface(dessertMeshifTable_registration *
+- reg_ptr, u_long flags)
+-{
+- netsnmp_baby_steps_access_methods *access_multiplexer =
+- &dessertMeshifTable_if_ctx.access_multiplexer;
+- netsnmp_table_registration_info *tbl_info =
+- &dessertMeshifTable_if_ctx.tbl_info;
+- netsnmp_handler_registration *reginfo;
+- netsnmp_mib_handler *handler;
+- int mfd_modes = 0;
+-
+- DEBUGMSGTL(("internal:dessertMeshifTable:_dessertMeshifTable_initialize_interface", "called\n"));
+-
+-
+- /*************************************************
+- *
+- * save interface context for dessertMeshifTable
+- */
+- /*
+- * Setting up the table's definition
+- */
+- netsnmp_table_helper_add_indexes(tbl_info,ASN_INTEGER,
+- /** index: meshifIndex */
+- 0);
+-
+- /*
+- * Define the minimum and maximum accessible columns. This
+- * optimizes retrival.
+- */
+- tbl_info->min_column = DESSERTMESHIFTABLE_MIN_COL;
+- tbl_info->max_column = DESSERTMESHIFTABLE_MAX_COL;
+-
+- /*
+- * save users context
+- */
+- dessertMeshifTable_if_ctx.user_ctx = reg_ptr;
+-
+- /*
+- * call data access initialization code
+- */
+- dessertMeshifTable_init_data(reg_ptr);
+-
+- /*
+- * set up the container
+- */
+- _dessertMeshifTable_container_init(&dessertMeshifTable_if_ctx);
+- if (NULL == dessertMeshifTable_if_ctx.container) {
+- snmp_log(LOG_ERR,
+- "could not initialize container for dessertMeshifTable\n");
+- return;
+- }
+-
+- /*
+- * access_multiplexer: REQUIRED wrapper for get request handling
+- */
+- access_multiplexer->object_lookup =
+- _mfd_dessertMeshifTable_object_lookup;
+- access_multiplexer->get_values = _mfd_dessertMeshifTable_get_values;
+-
+- /*
+- * no wrappers yet
+- */
+- access_multiplexer->pre_request = _mfd_dessertMeshifTable_pre_request;
+- access_multiplexer->post_request =
+- _mfd_dessertMeshifTable_post_request;
+-
+-
+- /*************************************************
+- *
+- * Create a registration, save our reg data, register table.
+- */
+- DEBUGMSGTL(("dessertMeshifTable:init_dessertMeshifTable",
+- "Registering dessertMeshifTable as a mibs-for-dummies table.\n"));
+- handler =
+- netsnmp_baby_steps_access_multiplexer_get(access_multiplexer);
+- reginfo =
+- netsnmp_handler_registration_create("dessertMeshifTable", handler,
+- dessertMeshifTable_oid,
+- dessertMeshifTable_oid_size,
+- HANDLER_CAN_BABY_STEP |
+- HANDLER_CAN_RONLY);
+- if (NULL == reginfo) {
+- snmp_log(LOG_ERR, "error registering table dessertMeshifTable\n");
+- return;
+- }
+- reginfo->my_reg_void = &dessertMeshifTable_if_ctx;
+-
+- /*************************************************
+- *
+- * set up baby steps handler, create it and inject it
+- */
+- if (access_multiplexer->object_lookup)
+- mfd_modes |= BABY_STEP_OBJECT_LOOKUP;
+- if (access_multiplexer->set_values)
+- mfd_modes |= BABY_STEP_SET_VALUES;
+- if (access_multiplexer->irreversible_commit)
+- mfd_modes |= BABY_STEP_IRREVERSIBLE_COMMIT;
+- if (access_multiplexer->object_syntax_checks)
+- mfd_modes |= BABY_STEP_CHECK_OBJECT;
+-
+- if (access_multiplexer->pre_request)
+- mfd_modes |= BABY_STEP_PRE_REQUEST;
+- if (access_multiplexer->post_request)
+- mfd_modes |= BABY_STEP_POST_REQUEST;
+-
+- if (access_multiplexer->undo_setup)
+- mfd_modes |= BABY_STEP_UNDO_SETUP;
+- if (access_multiplexer->undo_cleanup)
+- mfd_modes |= BABY_STEP_UNDO_CLEANUP;
+- if (access_multiplexer->undo_sets)
+- mfd_modes |= BABY_STEP_UNDO_SETS;
+-
+- if (access_multiplexer->row_creation)
+- mfd_modes |= BABY_STEP_ROW_CREATE;
+- if (access_multiplexer->consistency_checks)
+- mfd_modes |= BABY_STEP_CHECK_CONSISTENCY;
+- if (access_multiplexer->commit)
+- mfd_modes |= BABY_STEP_COMMIT;
+- if (access_multiplexer->undo_commit)
+- mfd_modes |= BABY_STEP_UNDO_COMMIT;
+-
+- handler = netsnmp_baby_steps_handler_get(mfd_modes);
+- netsnmp_inject_handler(reginfo, handler);
+-
+- /*************************************************
+- *
+- * inject row_merge helper with prefix rootoid_len + 2 (entry.col)
+- */
+- handler = netsnmp_get_row_merge_handler(reginfo->rootoid_len + 2);
+- netsnmp_inject_handler(reginfo, handler);
+-
+- /*************************************************
+- *
+- * inject container_table helper
+- */
+- handler =
+- netsnmp_container_table_handler_get(tbl_info,
+- dessertMeshifTable_if_ctx.
+- container,
+- TABLE_CONTAINER_KEY_NETSNMP_INDEX);
+- netsnmp_inject_handler(reginfo, handler);
+-
+- /*************************************************
+- *
+- * inject cache helper
+- */
+- if (NULL != dessertMeshifTable_if_ctx.cache) {
+- handler =
+- netsnmp_cache_handler_get(dessertMeshifTable_if_ctx.cache);
+- netsnmp_inject_handler(reginfo, handler);
+- }
+-
+- /*
+- * register table
+- */
+- netsnmp_register_table(reginfo, tbl_info);
+-
+-} /* _dessertMeshifTable_initialize_interface */
+-
+-/**
+- * @internal
+- * Shutdown the table dessertMeshifTable
+- */
+-void
+-_dessertMeshifTable_shutdown_interface(dessertMeshifTable_registration *
+- reg_ptr)
+-{
+- /*
+- * shutdown the container
+- */
+- _dessertMeshifTable_container_shutdown(&dessertMeshifTable_if_ctx);
+-}
+-
+-void
+-dessertMeshifTable_valid_columns_set(netsnmp_column_info *vc)
+-{
+- dessertMeshifTable_if_ctx.tbl_info.valid_columns = vc;
+-} /* dessertMeshifTable_valid_columns_set */
+-
+-/**
+- * @internal
+- * convert the index component stored in the context to an oid
+- */
+-int
+-dessertMeshifTable_index_to_oid(netsnmp_index * oid_idx,
+- dessertMeshifTable_mib_index * mib_idx)
+-{
+- int err = SNMP_ERR_NOERROR;
+-
+- /*
+- * temp storage for parsing indexes
+- */
+- /*
+- * meshifIndex(1)///()//L/a/w/e/r/d/h
+- */
+- netsnmp_variable_list var_meshifIndex;
+-
+- /*
+- * set up varbinds
+- */
+- memset(&var_meshifIndex, 0x00, sizeof(var_meshifIndex));
+- var_meshifIndex.type = ASN_INTEGER;
+-
+- /*
+- * chain temp index varbinds together
+- */
+- var_meshifIndex.next_variable = NULL;
+-
+-
+- DEBUGMSGTL(("verbose:dessertMeshifTable:dessertMeshifTable_index_to_oid", "called\n"));
+-
+- /*
+- * meshifIndex(1)///()//L/a/w/e/r/d/h
+- */
+- snmp_set_var_value(&var_meshifIndex, (u_char *) & mib_idx->meshifIndex,
+- sizeof(mib_idx->meshifIndex));
+-
+-
+- err = build_oid_noalloc(oid_idx->oids, oid_idx->len, &oid_idx->len,
+- NULL, 0, &var_meshifIndex);
+- if (err)
+- snmp_log(LOG_ERR, "error %d converting index to oid\n", err);
+-
+- /*
+- * parsing may have allocated memory. free it.
+- */
+- snmp_reset_var_buffers(&var_meshifIndex);
+-
+- return err;
+-} /* dessertMeshifTable_index_to_oid */
+-
+-/**
+- * extract dessertMeshifTable indexes from a netsnmp_index
+- *
+- * @retval SNMP_ERR_NOERROR : no error
+- * @retval SNMP_ERR_GENERR : error
+- */
+-int
+-dessertMeshifTable_index_from_oid(netsnmp_index * oid_idx,
+- dessertMeshifTable_mib_index * mib_idx)
+-{
+- int err = SNMP_ERR_NOERROR;
+-
+- /*
+- * temp storage for parsing indexes
+- */
+- /*
+- * meshifIndex(1)///()//L/a/w/e/r/d/h
+- */
+- netsnmp_variable_list var_meshifIndex;
+-
+- /*
+- * set up varbinds
+- */
+- memset(&var_meshifIndex, 0x00, sizeof(var_meshifIndex));
+- var_meshifIndex.type = ASN_INTEGER;
+-
+- /*
+- * chain temp index varbinds together
+- */
+- var_meshifIndex.next_variable = NULL;
+-
+-
+- DEBUGMSGTL(("verbose:dessertMeshifTable:dessertMeshifTable_index_from_oid", "called\n"));
+-
+- /*
+- * parse the oid into the individual index components
+- */
+- err = parse_oid_indexes(oid_idx->oids, oid_idx->len, &var_meshifIndex);
+- if (err == SNMP_ERR_NOERROR) {
+- /*
+- * copy out values
+- */
+- mib_idx->meshifIndex = *((long *)var_meshifIndex.val.string);
+-
+-
+- }
+-
+- /*
+- * parsing may have allocated memory. free it.
+- */
+- snmp_reset_var_buffers(&var_meshifIndex);
+-
+- return err;
+-} /* dessertMeshifTable_index_from_oid */
+-
+-
+-/*
+- *********************************************************************
+- * @internal
+- * allocate resources for a dessertMeshifTable_rowreq_ctx
+- */
+-dessertMeshifTable_rowreq_ctx *
+-dessertMeshifTable_allocate_rowreq_ctx(void *user_init_ctx)
+-{
+- dessertMeshifTable_rowreq_ctx *rowreq_ctx =
+- SNMP_MALLOC_TYPEDEF(dessertMeshifTable_rowreq_ctx);
+-
+- DEBUGMSGTL(("internal:dessertMeshifTable:dessertMeshifTable_allocate_rowreq_ctx", "called\n"));
+-
+- if (NULL == rowreq_ctx) {
+- snmp_log(LOG_ERR, "Couldn't allocate memory for a "
+- "dessertMeshifTable_rowreq_ctx.\n");
+- return NULL;
+- }
+-
+- rowreq_ctx->oid_idx.oids = rowreq_ctx->oid_tmp;
+-
+- rowreq_ctx->dessertMeshifTable_data_list = NULL;
+-
+- /*
+- * if we allocated data, call init routine
+- */
+- if (!(rowreq_ctx->rowreq_flags & MFD_ROW_DATA_FROM_USER)) {
+- if (SNMPERR_SUCCESS !=
+- dessertMeshifTable_rowreq_ctx_init(rowreq_ctx,
+- user_init_ctx)) {
+- dessertMeshifTable_release_rowreq_ctx(rowreq_ctx);
+- rowreq_ctx = NULL;
+- }
+- }
+-
+- return rowreq_ctx;
+-} /* dessertMeshifTable_allocate_rowreq_ctx */
+-
+-/*
+- * @internal
+- * release resources for a dessertMeshifTable_rowreq_ctx
+- */
+-void
+-dessertMeshifTable_release_rowreq_ctx(dessertMeshifTable_rowreq_ctx *
+- rowreq_ctx)
+-{
+- DEBUGMSGTL(("internal:dessertMeshifTable:dessertMeshifTable_release_rowreq_ctx", "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- dessertMeshifTable_rowreq_ctx_cleanup(rowreq_ctx);
+-
+- /*
+- * free index oid pointer
+- */
+- if (rowreq_ctx->oid_idx.oids != rowreq_ctx->oid_tmp)
+- free(rowreq_ctx->oid_idx.oids);
+-
+- SNMP_FREE(rowreq_ctx);
+-} /* dessertMeshifTable_release_rowreq_ctx */
+-
+-/**
+- * @internal
+- * wrapper
+- */
+-static int
+-_mfd_dessertMeshifTable_pre_request(netsnmp_mib_handler *handler,
+- netsnmp_handler_registration *reginfo,
+- netsnmp_agent_request_info
+- *agtreq_info,
+- netsnmp_request_info *requests)
+-{
+- int rc;
+-
+- DEBUGMSGTL(("internal:dessertMeshifTable:_mfd_dessertMeshifTable_pre_request", "called\n"));
+-
+- if (1 != netsnmp_row_merge_status_first(reginfo, agtreq_info)) {
+- DEBUGMSGTL(("internal:dessertMeshifTable",
+- "skipping additional pre_request\n"));
+- return SNMP_ERR_NOERROR;
+- }
+-
+- rc = dessertMeshifTable_pre_request(dessertMeshifTable_if_ctx.
+- user_ctx);
+- if (MFD_SUCCESS != rc) {
+- /*
+- * nothing we can do about it but log it
+- */
+- DEBUGMSGTL(("dessertMeshifTable", "error %d from "
+- "dessertMeshifTable_pre_request\n", rc));
+- netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+- }
+-
+- return SNMP_ERR_NOERROR;
+-} /* _mfd_dessertMeshifTable_pre_request */
+-
+-/**
+- * @internal
+- * wrapper
+- */
+-static int
+-_mfd_dessertMeshifTable_post_request(netsnmp_mib_handler *handler,
+- netsnmp_handler_registration *reginfo,
+- netsnmp_agent_request_info
+- *agtreq_info,
+- netsnmp_request_info *requests)
+-{
+- dessertMeshifTable_rowreq_ctx *rowreq_ctx =
+- netsnmp_container_table_row_extract(requests);
+- int rc, packet_rc;
+-
+- DEBUGMSGTL(("internal:dessertMeshifTable:_mfd_dessertMeshifTable_post_request", "called\n"));
+-
+- /*
+- * release row context, if deleted
+- */
+- if (rowreq_ctx && (rowreq_ctx->rowreq_flags & MFD_ROW_DELETED))
+- dessertMeshifTable_release_rowreq_ctx(rowreq_ctx);
+-
+- /*
+- * wait for last call before calling user
+- */
+- if (1 != netsnmp_row_merge_status_last(reginfo, agtreq_info)) {
+- DEBUGMSGTL(("internal:dessertMeshifTable",
+- "waiting for last post_request\n"));
+- return SNMP_ERR_NOERROR;
+- }
+-
+- packet_rc = netsnmp_check_all_requests_error(agtreq_info->asp, 0);
+- rc = dessertMeshifTable_post_request(dessertMeshifTable_if_ctx.
+- user_ctx, packet_rc);
+- if (MFD_SUCCESS != rc) {
+- /*
+- * nothing we can do about it but log it
+- */
+- DEBUGMSGTL(("dessertMeshifTable", "error %d from "
+- "dessertMeshifTable_post_request\n", rc));
+- }
+-
+- return SNMP_ERR_NOERROR;
+-} /* _mfd_dessertMeshifTable_post_request */
+-
+-/**
+- * @internal
+- * wrapper
+- */
+-static int
+-_mfd_dessertMeshifTable_object_lookup(netsnmp_mib_handler *handler,
+- netsnmp_handler_registration
+- *reginfo,
+- netsnmp_agent_request_info
+- *agtreq_info,
+- netsnmp_request_info *requests)
+-{
+- int rc = SNMP_ERR_NOERROR;
+- dessertMeshifTable_rowreq_ctx *rowreq_ctx =
+- netsnmp_container_table_row_extract(requests);
+-
+- DEBUGMSGTL(("internal:dessertMeshifTable:_mfd_dessertMeshifTable_object_lookup", "called\n"));
+-
+- /*
+- * get our context from mfd
+- * dessertMeshifTable_interface_ctx *if_ctx =
+- * (dessertMeshifTable_interface_ctx *)reginfo->my_reg_void;
+- */
+-
+- if (NULL == rowreq_ctx) {
+- rc = SNMP_ERR_NOCREATION;
+- }
+-
+- if (MFD_SUCCESS != rc)
+- netsnmp_request_set_error_all(requests, rc);
+- else
+- dessertMeshifTable_row_prep(rowreq_ctx);
+-
+- return SNMP_VALIDATE_ERR(rc);
+-} /* _mfd_dessertMeshifTable_object_lookup */
+-
+-/***********************************************************************
+- *
+- * GET processing
+- *
+- ***********************************************************************/
+-/*
+- * @internal
+- * Retrieve the value for a particular column
+- */
+-NETSNMP_STATIC_INLINE int
+-_dessertMeshifTable_get_column(dessertMeshifTable_rowreq_ctx * rowreq_ctx,
+- netsnmp_variable_list * var, int column)
+-{
+- int rc = SNMPERR_SUCCESS;
+-
+- DEBUGMSGTL(("internal:dessertMeshifTable:_mfd_dessertMeshifTable_get_column", "called for %d\n", column));
+-
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- switch (column) {
+-
+- /*
+- * meshifName(2)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
+- */
+- case COLUMN_MESHIFNAME:
+- var->type = ASN_OCTET_STR;
+- rc = meshifName_get(rowreq_ctx, (char **) &var->val.string,
+- &var->val_len);
+- break;
+-
+- /*
+- * meshifMacAddress(3)/MacAddress/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
+- */
+- case COLUMN_MESHIFMACADDRESS:
+- var->type = ASN_OCTET_STR;
+- rc = meshifMacAddress_get(rowreq_ctx, (char **) &var->val.string,
+- &var->val_len);
+- break;
+-
+- /*
+- * meshifInPkts(4)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+- */
+- case COLUMN_MESHIFINPKTS:
+- var->val_len = sizeof(U64);
+- var->type = ASN_COUNTER64;
+- rc = meshifInPkts_get(rowreq_ctx, (U64 *) var->val.string);
+- break;
+-
+- /*
+- * meshifOutPkts(5)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+- */
+- case COLUMN_MESHIFOUTPKTS:
+- var->val_len = sizeof(U64);
+- var->type = ASN_COUNTER64;
+- rc = meshifOutPkts_get(rowreq_ctx, (U64 *) var->val.string);
+- break;
+-
+- /*
+- * meshifInOctets(6)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+- */
+- case COLUMN_MESHIFINOCTETS:
+- var->val_len = sizeof(U64);
+- var->type = ASN_COUNTER64;
+- rc = meshifInOctets_get(rowreq_ctx, (U64 *) var->val.string);
+- break;
+-
+- /*
+- * meshifOutOctets(7)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+- */
+- case COLUMN_MESHIFOUTOCTETS:
+- var->val_len = sizeof(U64);
+- var->type = ASN_COUNTER64;
+- rc = meshifOutOctets_get(rowreq_ctx, (U64 *) var->val.string);
+- break;
+-
+- default:
+- if (DESSERTMESHIFTABLE_MIN_COL <= column
+- && column <= DESSERTMESHIFTABLE_MAX_COL) {
+- DEBUGMSGTL(("internal:dessertMeshifTable:_mfd_dessertMeshifTable_get_column", "assume column %d is reserved\n", column));
+- rc = MFD_SKIP;
+- } else {
+- snmp_log(LOG_ERR,
+- "unknown column %d in _dessertMeshifTable_get_column\n",
+- column);
+- }
+- break;
+- }
+-
+- return rc;
+-} /* _dessertMeshifTable_get_column */
+-
+-int
+-_mfd_dessertMeshifTable_get_values(netsnmp_mib_handler *handler,
+- netsnmp_handler_registration *reginfo,
+- netsnmp_agent_request_info *agtreq_info,
+- netsnmp_request_info *requests)
+-{
+- dessertMeshifTable_rowreq_ctx *rowreq_ctx =
+- netsnmp_container_table_row_extract(requests);
+- netsnmp_table_request_info *tri;
+- u_char *old_string;
+- void (*dataFreeHook) (void *);
+- int rc;
+-
+- DEBUGMSGTL(("internal:dessertMeshifTable:_mfd_dessertMeshifTable_get_values", "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- for (; requests; requests = requests->next) {
+- /*
+- * save old pointer, so we can free it if replaced
+- */
+- old_string = requests->requestvb->val.string;
+- dataFreeHook = requests->requestvb->dataFreeHook;
+- if (NULL == requests->requestvb->val.string) {
+- requests->requestvb->val.string = requests->requestvb->buf;
+- requests->requestvb->val_len =
+- sizeof(requests->requestvb->buf);
+- } else if (requests->requestvb->buf ==
+- requests->requestvb->val.string) {
+- if (requests->requestvb->val_len !=
+- sizeof(requests->requestvb->buf))
+- requests->requestvb->val_len =
+- sizeof(requests->requestvb->buf);
+- }
+-
+- /*
+- * get column data
+- */
+- tri = netsnmp_extract_table_info(requests);
+- if (NULL == tri)
+- continue;
+-
+- rc = _dessertMeshifTable_get_column(rowreq_ctx,
+- requests->requestvb,
+- tri->colnum);
+- if (rc) {
+- if (MFD_SKIP == rc) {
+- requests->requestvb->type = SNMP_NOSUCHINSTANCE;
+- rc = SNMP_ERR_NOERROR;
+- }
+- } else if (NULL == requests->requestvb->val.string) {
+- snmp_log(LOG_ERR, "NULL varbind data pointer!\n");
+- rc = SNMP_ERR_GENERR;
+- }
+- if (rc)
+- netsnmp_request_set_error(requests, SNMP_VALIDATE_ERR(rc));
+-
+- /*
+- * if the buffer wasn't used previously for the old data (i.e. it
+- * was allcoated memory) and the get routine replaced the pointer,
+- * we need to free the previous pointer.
+- */
+- if (old_string && (old_string != requests->requestvb->buf) &&
+- (requests->requestvb->val.string != old_string)) {
+- if (dataFreeHook)
+- (*dataFreeHook) (old_string);
+- else
+- free(old_string);
+- }
+- } /* for results */
+-
+- return SNMP_ERR_NOERROR;
+-} /* _mfd_dessertMeshifTable_get_values */
+-
+-
+-/***********************************************************************
+- *
+- * SET processing
+- *
+- ***********************************************************************/
+-
+-/*
+- * SET PROCESSING NOT APPLICABLE (per MIB or user setting)
+- */
+-/***********************************************************************
+- *
+- * DATA ACCESS
+- *
+- ***********************************************************************/
+-static void _container_free(netsnmp_container * container);
+-
+-/**
+- * @internal
+- */
+-static int
+-_cache_load(netsnmp_cache * cache, void *vmagic)
+-{
+- DEBUGMSGTL(("internal:dessertMeshifTable:_cache_load", "called\n"));
+-
+- if ((NULL == cache) || (NULL == cache->magic)) {
+- snmp_log(LOG_ERR,
+- "invalid cache for dessertMeshifTable_cache_load\n");
+- return -1;
+- }
+-
+- /** should only be called for an invalid or expired cache */
+- netsnmp_assert((0 == cache->valid) || (1 == cache->expired));
+-
+- /*
+- * call user code
+- */
+- return dessertMeshifTable_container_load((netsnmp_container *) cache->
+- magic);
+-} /* _cache_load */
+-
+-/**
+- * @internal
+- */
+-static void
+-_cache_free(netsnmp_cache * cache, void *magic)
+-{
+- netsnmp_container *container;
+-
+- DEBUGMSGTL(("internal:dessertMeshifTable:_cache_free", "called\n"));
+-
+- if ((NULL == cache) || (NULL == cache->magic)) {
+- snmp_log(LOG_ERR,
+- "invalid cache in dessertMeshifTable_cache_free\n");
+- return;
+- }
+-
+- container = (netsnmp_container *) cache->magic;
+-
+- _container_free(container);
+-} /* _cache_free */
+-
+-/**
+- * @internal
+- */
+-static void
+-_container_item_free(dessertMeshifTable_rowreq_ctx * rowreq_ctx,
+- void *context)
+-{
+- DEBUGMSGTL(("internal:dessertMeshifTable:_container_item_free",
+- "called\n"));
+-
+- if (NULL == rowreq_ctx)
+- return;
+-
+- dessertMeshifTable_release_rowreq_ctx(rowreq_ctx);
+-} /* _container_item_free */
+-
+-/**
+- * @internal
+- */
+-static void
+-_container_free(netsnmp_container * container)
+-{
+- DEBUGMSGTL(("internal:dessertMeshifTable:_container_free",
+- "called\n"));
+-
+- if (NULL == container) {
+- snmp_log(LOG_ERR,
+- "invalid container in dessertMeshifTable_container_free\n");
+- return;
+- }
+-
+- /*
+- * call user code
+- */
+- dessertMeshifTable_container_free(container);
+-
+- /*
+- * free all items. inefficient, but easy.
+- */
+- CONTAINER_CLEAR(container,
+- (netsnmp_container_obj_func *) _container_item_free,
+- NULL);
+-} /* _container_free */
+-
+-/**
+- * @internal
+- * initialize the container with functions or wrappers
+- */
+-void
+-_dessertMeshifTable_container_init(dessertMeshifTable_interface_ctx *
+- if_ctx)
+-{
+- DEBUGMSGTL(("internal:dessertMeshifTable:_dessertMeshifTable_container_init", "called\n"));
+-
+- /*
+- * cache init
+- */
+- if_ctx->cache = netsnmp_cache_create(30, /* timeout in seconds */
+- _cache_load, _cache_free,
+- dessertMeshifTable_oid,
+- dessertMeshifTable_oid_size);
+-
+- if (NULL == if_ctx->cache) {
+- snmp_log(LOG_ERR, "error creating cache for dessertMeshifTable\n");
+- return;
+- }
+-
+- if_ctx->cache->flags = NETSNMP_CACHE_DONT_INVALIDATE_ON_SET;
+-
+- dessertMeshifTable_container_init(&if_ctx->container, if_ctx->cache);
+- if (NULL == if_ctx->container)
+- if_ctx->container =
+- netsnmp_container_find("dessertMeshifTable:table_container");
+- if (NULL == if_ctx->container) {
+- snmp_log(LOG_ERR, "error creating container in "
+- "dessertMeshifTable_container_init\n");
+- return;
+- }
+-
+- if (NULL != if_ctx->cache)
+- if_ctx->cache->magic = (void *) if_ctx->container;
+-} /* _dessertMeshifTable_container_init */
+-
+-/**
+- * @internal
+- * shutdown the container with functions or wrappers
+- */
+-void
+-_dessertMeshifTable_container_shutdown(dessertMeshifTable_interface_ctx *
+- if_ctx)
+-{
+- DEBUGMSGTL(("internal:dessertMeshifTable:_dessertMeshifTable_container_shutdown", "called\n"));
+-
+- dessertMeshifTable_container_shutdown(if_ctx->container);
+-
+- _container_free(if_ctx->container);
+-
+-} /* _dessertMeshifTable_container_shutdown */
+-
+-
+-dessertMeshifTable_rowreq_ctx *
+-dessertMeshifTable_row_find_by_mib_index(dessertMeshifTable_mib_index *
+- mib_idx)
+-{
+- dessertMeshifTable_rowreq_ctx *rowreq_ctx;
+- oid oid_tmp[MAX_OID_LEN];
+- netsnmp_index oid_idx;
+- int rc;
+-
+- /*
+- * set up storage for OID
+- */
+- oid_idx.oids = oid_tmp;
+- oid_idx.len = sizeof(oid_tmp) / sizeof(oid);
+-
+- /*
+- * convert
+- */
+- rc = dessertMeshifTable_index_to_oid(&oid_idx, mib_idx);
+- if (MFD_SUCCESS != rc)
+- return NULL;
+-
+- rowreq_ctx =
+- CONTAINER_FIND(dessertMeshifTable_if_ctx.container, &oid_idx);
+-
+- return rowreq_ctx;
+-}
+Index: libdessert0.86-0.86.14/snmp/dessertMeshifTable_interface.h
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertMeshifTable_interface.h 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,98 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * version : 15899 $ of $
+- *
+- * $Id:$
+- */
+-/** @ingroup interface: Routines to interface to Net-SNMP
+- *
+- * \warning This code should not be modified, called directly,
+- * or used to interpret functionality. It is subject to
+- * change at any time.
+- *
+- * @{
+- */
+-/*
+- * *********************************************************************
+- * *********************************************************************
+- * *********************************************************************
+- * *** ***
+- * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
+- * *** ***
+- * *** ***
+- * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
+- * *** ***
+- * *** ***
+- * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
+- * *** ***
+- * *** ***
+- * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
+- * *** ***
+- * *** ***
+- * *********************************************************************
+- * *********************************************************************
+- * *********************************************************************
+- */
+-#ifndef DESSERTMESHIFTABLE_INTERFACE_H
+-#define DESSERTMESHIFTABLE_INTERFACE_H
+-
+-#ifdef __cplusplus
+-extern "C" {
+-#endif
+-
+-
+-#include "dessertMeshifTable.h"
+-
+-
+- /*
+- ********************************************************************
+- * Table declarations
+- */
+-
+- /*
+- * PUBLIC interface initialization routine
+- */
+- void
+- _dessertMeshifTable_initialize_interface
+- (dessertMeshifTable_registration * user_ctx, u_long flags);
+- void
+- _dessertMeshifTable_shutdown_interface
+- (dessertMeshifTable_registration * user_ctx);
+-
+- dessertMeshifTable_registration
+- *dessertMeshifTable_registration_get(void);
+-
+- dessertMeshifTable_registration
+- *dessertMeshifTable_registration_set
+- (dessertMeshifTable_registration * newreg);
+-
+- netsnmp_container *dessertMeshifTable_container_get(void);
+- int dessertMeshifTable_container_size(void);
+-
+- dessertMeshifTable_rowreq_ctx
+- *dessertMeshifTable_allocate_rowreq_ctx(void *);
+- void
+- dessertMeshifTable_release_rowreq_ctx(dessertMeshifTable_rowreq_ctx
+- * rowreq_ctx);
+-
+- int dessertMeshifTable_index_to_oid(netsnmp_index *
+- oid_idx,
+- dessertMeshifTable_mib_index
+- * mib_idx);
+- int dessertMeshifTable_index_from_oid(netsnmp_index *
+- oid_idx,
+- dessertMeshifTable_mib_index
+- * mib_idx);
+-
+- /*
+- * access to certain internals. use with caution!
+- */
+- void
+- dessertMeshifTable_valid_columns_set(netsnmp_column_info *vc);
+-
+-
+-#ifdef __cplusplus
+-}
+-#endif
+-#endif /* DESSERTMESHIFTABLE_INTERFACE_H */
+-/** @} */
+Index: libdessert0.86-0.86.14/snmp/dessertMeshifTable_oids.h
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertMeshifTable_oids.h 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,43 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * : generic-table-oids.m2c 12855 2005-09-27 15:56:08Z rstory $
+- *
+- * $Id:$
+- */
+-#ifndef DESSERTMESHIFTABLE_OIDS_H
+-#define DESSERTMESHIFTABLE_OIDS_H
+-
+-#ifdef __cplusplus
+-extern "C" {
+-#endif
+-
+-
+- /*
+- * column number definitions for table dessertMeshifTable
+- */
+-#define DESSERTMESHIFTABLE_OID 1,3,6,1,4,1,18898,0,19,10,1,1,5
+-
+-#define COLUMN_MESHIFINDEX 1
+-
+-#define COLUMN_MESHIFNAME 2
+-
+-#define COLUMN_MESHIFMACADDRESS 3
+-
+-#define COLUMN_MESHIFINPKTS 4
+-
+-#define COLUMN_MESHIFOUTPKTS 5
+-
+-#define COLUMN_MESHIFINOCTETS 6
+-
+-#define COLUMN_MESHIFOUTOCTETS 7
+-
+-
+-#define DESSERTMESHIFTABLE_MIN_COL COLUMN_MESHIFNAME
+-#define DESSERTMESHIFTABLE_MAX_COL COLUMN_MESHIFOUTOCTETS
+-
+-
+-
+-#ifdef __cplusplus
+-}
+-#endif
+-#endif /* DESSERTMESHIFTABLE_OIDS_H */
+Index: libdessert0.86-0.86.14/snmp/dessertObjects.c
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertObjects.c 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,164 +0,0 @@
+-/**
+- * Note: this file originally auto-generated by mib2c using
+- * : mib2c.scalar.conf 11805 2005-01-07 09:37:18Z dts12 $
+- */
+-
+-#include <net-snmp/net-snmp-config.h>
+-#include <net-snmp/net-snmp-includes.h>
+-#include <net-snmp/agent/net-snmp-agent-includes.h>
+-#include "../dessert_internal.h"
+-
+-/** Initializes the dessertObjects module */
+-void
+-init_dessertObjects(void)
+-{
+- static oid dessertMeshifNumber_oid[] =
+- { 1, 3, 6, 1, 4, 1, 18898, 0, 19, 10, 1, 1, 4 };
+- static oid applicationVersion_oid[] =
+- { 1, 3, 6, 1, 4, 1, 18898, 0, 19, 10, 1, 1, 3, 2 };
+- static oid protocollShortName_oid[] =
+- { 1, 3, 6, 1, 4, 1, 18898, 0, 19, 10, 1, 1, 3, 3 };
+-
+- DEBUGMSGTL((AGENT, "Initializing\n"));
+-
+- netsnmp_register_scalar(netsnmp_create_handler_registration
+- ("dessertMeshifNumber",
+- handle_dessertMeshifNumber,
+- dessertMeshifNumber_oid,
+- OID_LENGTH(dessertMeshifNumber_oid),
+- HANDLER_CAN_RONLY));
+- netsnmp_register_scalar(netsnmp_create_handler_registration
+- ("applicationVersion",
+- handle_applicationVersion,
+- applicationVersion_oid,
+- OID_LENGTH(applicationVersion_oid),
+- HANDLER_CAN_RONLY));
+- netsnmp_register_scalar(netsnmp_create_handler_registration
+- ("protocollShortName",
+- handle_protocollShortName,
+- protocollShortName_oid,
+- OID_LENGTH(protocollShortName_oid),
+- HANDLER_CAN_RONLY));
+-}
+-
+-int
+-handle_dessertMeshifNumber(netsnmp_mib_handler *handler,
+- netsnmp_handler_registration *reginfo,
+- netsnmp_agent_request_info *reqinfo,
+- netsnmp_request_info *requests)
+-{
+- u_char meshif_count;
+-
+- dessert_meshif_t *meshif;
+-
+- DL_FOREACH(dessert_meshiflist_get(), meshif){
+- meshif_count++;
+- }
+-
+- /*
+- * We are never called for a GETNEXT if it's registered as a
+- * "instance", as it's "magically" handled for us.
+- */
+-
+- /*
+- * a instance handler also only hands us one request at a time, so
+- * we don't need to loop over a list of requests; we'll only get one.
+- */
+-
+- switch (reqinfo->mode) {
+-
+- case MODE_GET:
+- DEBUGMSGTL((AGENT, "handle_dessertMeshifNumber:MODE_GET\n"));
+- snmp_set_var_typed_value(requests->requestvb, ASN_INTEGER,
+- (u_char *) &meshif_count, sizeof(u_char));
+- break;
+-
+-
+- default:
+- /*
+- * we should never get here, so this is a really bad error
+- */
+- snmp_log(LOG_ERR,
+- "unknown mode (%d) in handle_dessertMeshifNumber\n",
+- reqinfo->mode);
+- return SNMP_ERR_GENERR;
+- }
+-
+- return SNMP_ERR_NOERROR;
+-}
+-
+-int
+-handle_applicationVersion(netsnmp_mib_handler *handler,
+- netsnmp_handler_registration *reginfo,
+- netsnmp_agent_request_info *reqinfo,
+- netsnmp_request_info *requests)
+-{
+- /*
+- * We are never called for a GETNEXT if it's registered as a
+- * "instance", as it's "magically" handled for us.
+- */
+-
+- /*
+- * a instance handler also only hands us one request at a time, so
+- * we don't need to loop over a list of requests; we'll only get one.
+- */
+-
+- switch (reqinfo->mode) {
+-
+- case MODE_GET:
+- DEBUGMSGTL((AGENT, "handle_applicationVersion:MODE_GET\n"));
+- snmp_set_var_typed_value(requests->requestvb, ASN_INTEGER,
+- (u_char *) &dessert_ver, sizeof(dessert_ver));
+- break;
+-
+-
+- default:
+- /*
+- * we should never get here, so this is a really bad error
+- */
+- snmp_log(LOG_ERR,
+- "unknown mode (%d) in handle_applicationVersion\n",
+- reqinfo->mode);
+- return SNMP_ERR_GENERR;
+- }
+-
+- return SNMP_ERR_NOERROR;
+-}
+-
+-int
+-handle_protocollShortName(netsnmp_mib_handler *handler,
+- netsnmp_handler_registration *reginfo,
+- netsnmp_agent_request_info *reqinfo,
+- netsnmp_request_info *requests)
+-{
+- /*
+- * We are never called for a GETNEXT if it's registered as a
+- * "instance", as it's "magically" handled for us.
+- */
+-
+- /*
+- * a instance handler also only hands us one request at a time, so
+- * we don't need to loop over a list of requests; we'll only get one.
+- */
+-
+- switch (reqinfo->mode) {
+-
+- case MODE_GET:
+- DEBUGMSGTL((AGENT, "handle_protocollShortName:MODE_GET\n"));
+- snmp_set_var_typed_value(requests->requestvb, ASN_OCTET_STR,
+- (u_char *) dessert_proto, DESSERT_PROTO_STRLEN+1);
+- break;
+-
+-
+- default:
+- /*
+- * we should never get here, so this is a really bad error
+- */
+- snmp_log(LOG_ERR,
+- "unknown mode (%d) in handle_protocollShortName\n",
+- reqinfo->mode);
+- return SNMP_ERR_GENERR;
+- }
+-
+- return SNMP_ERR_NOERROR;
+-}
+Index: libdessert0.86-0.86.14/snmp/dessertObjects.h
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertObjects.h 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,17 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * : mib2c.scalar.conf 11805 2005-01-07 09:37:18Z dts12 $
+- */
+-#ifndef DESSERTOBJECTS_H
+-#define DESSERTOBJECTS_H
+-
+-
+-/*
+- * function declarations
+- */
+-void init_dessertObjects(void);
+-Netsnmp_Node_Handler handle_dessertMeshifNumber;
+-Netsnmp_Node_Handler handle_applicationVersion;
+-Netsnmp_Node_Handler handle_protocollShortName;
+-
+-#endif /* DESSERTOBJECTS_H */
+Index: libdessert0.86-0.86.14/snmp/dessertSysifTable.c
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertSysifTable.c 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,215 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * version : 14170 $ of $
+- *
+- * $Id:$
+- */
+-/** \page MFD helper for dessertSysifTable
+- *
+- * \section intro Introduction
+- * Introductory text.
+- *
+- */
+-/*
+- * standard Net-SNMP includes
+- */
+-#include <net-snmp/net-snmp-config.h>
+-#include <net-snmp/net-snmp-includes.h>
+-#include <net-snmp/agent/net-snmp-agent-includes.h>
+-
+-/*
+- * include our parent header
+- */
+-#include "dessertSysifTable.h"
+-
+-#include <net-snmp/agent/mib_modules.h>
+-
+-#include "dessertSysifTable_interface.h"
+-
+-oid dessertSysifTable_oid[] = { DESSERTSYSIFTABLE_OID };
+-
+-int dessertSysifTable_oid_size =
+-OID_LENGTH(dessertSysifTable_oid);
+-
+-dessertSysifTable_registration dessertSysifTable_user_context;
+-
+-void initialize_table_dessertSysifTable(void);
+-void shutdown_table_dessertSysifTable(void);
+-
+-
+-/**
+- * Initializes the dessertSysifTable module
+- */
+-void
+-init_dessertSysifTable(void)
+-{
+- DEBUGMSGTL(("verbose:dessertSysifTable:init_dessertSysifTable",
+- "called\n"));
+-
+- /*
+- * TODO:300:o: Perform dessertSysifTable one-time module initialization.
+- */
+-
+- /*
+- * here we initialize all the tables we're planning on supporting
+- */
+- if (should_init("dessertSysifTable"))
+- initialize_table_dessertSysifTable();
+-
+-} /* init_dessertSysifTable */
+-
+-/**
+- * Shut-down the dessertSysifTable module (agent is exiting)
+- */
+-void
+-shutdown_dessertSysifTable(void)
+-{
+- if (should_init("dessertSysifTable"))
+- shutdown_table_dessertSysifTable();
+-
+-}
+-
+-/**
+- * Initialize the table dessertSysifTable
+- * (Define its contents and how it's structured)
+- */
+-void
+-initialize_table_dessertSysifTable(void)
+-{
+- dessertSysifTable_registration *user_context;
+- u_long flags;
+-
+- DEBUGMSGTL(("verbose:dessertSysifTable:initialize_table_dessertSysifTable", "called\n"));
+-
+- /*
+- * TODO:301:o: Perform dessertSysifTable one-time table initialization.
+- */
+-
+- /*
+- * TODO:302:o: |->Initialize dessertSysifTable user context
+- * if you'd like to pass in a pointer to some data for this
+- * table, allocate or set it up here.
+- */
+- /*
+- * a netsnmp_data_list is a simple way to store void pointers. A simple
+- * string token is used to add, find or remove pointers.
+- */
+- user_context =
+- netsnmp_create_data_list("dessertSysifTable", NULL, NULL);
+-
+- /*
+- * No support for any flags yet, but in the future you would
+- * set any flags here.
+- */
+- flags = 0;
+-
+- /*
+- * call interface initialization code
+- */
+- _dessertSysifTable_initialize_interface(user_context, flags);
+-} /* initialize_table_dessertSysifTable */
+-
+-/**
+- * Shutdown the table dessertSysifTable
+- */
+-void
+-shutdown_table_dessertSysifTable(void)
+-{
+- /*
+- * call interface shutdown code
+- */
+- _dessertSysifTable_shutdown_interface(&dessertSysifTable_user_context);
+-}
+-
+-/**
+- * extra context initialization (eg default values)
+- *
+- * @param rowreq_ctx : row request context
+- * @param user_init_ctx : void pointer for user (parameter to rowreq_ctx_allocate)
+- *
+- * @retval MFD_SUCCESS : no errors
+- * @retval MFD_ERROR : error (context allocate will fail)
+- */
+-int
+-dessertSysifTable_rowreq_ctx_init(dessertSysifTable_rowreq_ctx *
+- rowreq_ctx, void *user_init_ctx)
+-{
+- DEBUGMSGTL(("verbose:dessertSysifTable:dessertSysifTable_rowreq_ctx_init", "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:210:o: |-> Perform extra dessertSysifTable rowreq initialization. (eg DEFVALS)
+- */
+-
+- return MFD_SUCCESS;
+-} /* dessertSysifTable_rowreq_ctx_init */
+-
+-/**
+- * extra context cleanup
+- *
+- */
+-void
+-dessertSysifTable_rowreq_ctx_cleanup(dessertSysifTable_rowreq_ctx *
+- rowreq_ctx)
+-{
+- DEBUGMSGTL(("verbose:dessertSysifTable:dessertSysifTable_rowreq_ctx_cleanup", "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:211:o: |-> Perform extra dessertSysifTable rowreq cleanup.
+- */
+-} /* dessertSysifTable_rowreq_ctx_cleanup */
+-
+-/**
+- * pre-request callback
+- *
+- *
+- * @retval MFD_SUCCESS : success.
+- * @retval MFD_ERROR : other error
+- */
+-int
+-dessertSysifTable_pre_request(dessertSysifTable_registration *
+- user_context)
+-{
+- DEBUGMSGTL(("verbose:dessertSysifTable:dessertSysifTable_pre_request",
+- "called\n"));
+-
+- /*
+- * TODO:510:o: Perform dessertSysifTable pre-request actions.
+- */
+-
+- return MFD_SUCCESS;
+-} /* dessertSysifTable_pre_request */
+-
+-/**
+- * post-request callback
+- *
+- * Note:
+- * New rows have been inserted into the container, and
+- * deleted rows have been removed from the container and
+- * released.
+- *
+- * @param user_context
+- * @param rc : MFD_SUCCESS if all requests succeeded
+- *
+- * @retval MFD_SUCCESS : success.
+- * @retval MFD_ERROR : other error (ignored)
+- */
+-int
+-dessertSysifTable_post_request(dessertSysifTable_registration *
+- user_context, int rc)
+-{
+- DEBUGMSGTL(("verbose:dessertSysifTable:dessertSysifTable_post_request",
+- "called\n"));
+-
+- /*
+- * TODO:511:o: Perform dessertSysifTable post-request actions.
+- */
+-
+- return MFD_SUCCESS;
+-} /* dessertSysifTable_post_request */
+-
+-
+-/** @{ */
+Index: libdessert0.86-0.86.14/snmp/dessertSysifTable.h
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertSysifTable.h 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,230 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * version : 14170 $ of $
+- *
+- * $Id:$
+- */
+-#ifndef DESSERTSYSIFTABLE_H
+-#define DESSERTSYSIFTABLE_H
+-
+-#ifdef __cplusplus
+-extern "C" {
+-#endif
+-
+-
+-/** @addtogroup misc misc: Miscellaneous routines
+- *
+- * @{
+- */
+-#include <net-snmp/library/asn1.h>
+-
+- /*
+- * other required module components
+- */
+- /* *INDENT-OFF* */
+-config_add_mib(DESSERT2-MIB)
+-config_require(DESSERT2-MIB/dessertSysifTable/dessertSysifTable_interface)
+-config_require(DESSERT2-MIB/dessertSysifTable/dessertSysifTable_data_access)
+-config_require(DESSERT2-MIB/dessertSysifTable/dessertSysifTable_data_get)
+-config_require(DESSERT2-MIB/dessertSysifTable/dessertSysifTable_data_set)
+- /* *INDENT-ON* */
+-
+- /*
+- * OID and column number definitions for dessertSysifTable
+- */
+-#include "dessertSysifTable_oids.h"
+-
+- /*
+- * enum definions
+- */
+-#include "dessertSysifTable_enums.h"
+-
+-
+-
+-/*
+- *********************************************************************
+- * function declarations
+- */
+- void init_dessertSysifTable(void);
+- void shutdown_dessertSysifTable(void);
+-
+- /*
+- *********************************************************************
+- * Table declarations
+- */
+-/**********************************************************************
+- **********************************************************************
+- ***
+- *** Table dessertSysifTable
+- ***
+- **********************************************************************
+- **********************************************************************/
+- /*
+- * DESSERT2-MIB::dessertSysifTable is subid 7 of dessertObjects.
+- * Its status is Current.
+- * OID: .1.3.6.1.4.1.18898.0.19.42.1.7, length: 12
+- */
+- /*
+- *********************************************************************
+- * When you register your mib, you get to provide a generic
+- * pointer that will be passed back to you for most of the
+- * functions calls.
+- *
+- * TODO:100:r: Review all context structures
+- */
+- /*
+- * TODO:101:o: |-> Review dessertSysifTable registration context.
+- */
+- typedef netsnmp_data_list dessertSysifTable_registration;
+-
+-/**********************************************************************/
+- /*
+- * TODO:110:r: |-> Review dessertSysifTable data context structure.
+- * This structure is used to represent the data for dessertSysifTable.
+- */
+- /*
+- * This structure contains storage for all the columns defined in the
+- * dessertSysifTable.
+- */
+- typedef struct dessertSysifTable_data_s {
+-
+- /*
+- * sysifName(2)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
+- */
+- char sysifName[255];
+- size_t sysifName_len; /* # of char elements, not bytes */
+-
+- /*
+- * sysifMacAddress(3)/MacAddress/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
+- */
+- char sysifMacAddress[6];
+- size_t sysifMacAddress_len; /* # of char elements, not bytes */
+-
+- /*
+- * sysifInPkts(4)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+- */
+- U64 sysifInPkts;
+-
+- /*
+- * sysifOutPkts(5)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+- */
+- U64 sysifOutPkts;
+-
+- /*
+- * sysifInOctets(6)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+- */
+- U64 sysifInOctets;
+-
+- /*
+- * sysifOutOctets(7)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+- */
+- U64 sysifOutOctets;
+-
+- } dessertSysifTable_data;
+-
+-
+- /*
+- * TODO:120:r: |-> Review dessertSysifTable mib index.
+- * This structure is used to represent the index for dessertSysifTable.
+- */
+- typedef struct dessertSysifTable_mib_index_s {
+-
+- /*
+- * sysifIndex(1)///()//L/a/w/e/r/d/h
+- */
+- long sysifIndex;
+-
+-
+- } dessertSysifTable_mib_index;
+-
+- /*
+- * TODO:121:r: | |-> Review dessertSysifTable max index length.
+- * If you KNOW that your indexes will never exceed a certain
+- * length, update this macro to that length.
+- */
+-#define MAX_dessertSysifTable_IDX_LEN 1
+-
+-
+- /*
+- *********************************************************************
+- * TODO:130:o: |-> Review dessertSysifTable Row request (rowreq) context.
+- * When your functions are called, you will be passed a
+- * dessertSysifTable_rowreq_ctx pointer.
+- */
+- typedef struct dessertSysifTable_rowreq_ctx_s {
+-
+- /** this must be first for container compare to work */
+- netsnmp_index oid_idx;
+- oid oid_tmp[MAX_dessertSysifTable_IDX_LEN];
+-
+- dessertSysifTable_mib_index tbl_idx;
+-
+- dessertSysifTable_data data;
+-
+- /*
+- * flags per row. Currently, the first (lower) 8 bits are reserved
+- * for the user. See mfd.h for other flags.
+- */
+- u_int rowreq_flags;
+-
+- /*
+- * TODO:131:o: | |-> Add useful data to dessertSysifTable rowreq context.
+- */
+-
+- /*
+- * storage for future expansion
+- */
+- netsnmp_data_list *dessertSysifTable_data_list;
+-
+- } dessertSysifTable_rowreq_ctx;
+-
+- typedef struct dessertSysifTable_ref_rowreq_ctx_s {
+- dessertSysifTable_rowreq_ctx *rowreq_ctx;
+- } dessertSysifTable_ref_rowreq_ctx;
+-
+- /*
+- *********************************************************************
+- * function prototypes
+- */
+- int
+- dessertSysifTable_pre_request(dessertSysifTable_registration *
+- user_context);
+- int
+- dessertSysifTable_post_request(dessertSysifTable_registration *
+- user_context, int rc);
+-
+- int
+- dessertSysifTable_rowreq_ctx_init(dessertSysifTable_rowreq_ctx *
+- rowreq_ctx, void *user_init_ctx);
+- void
+- dessertSysifTable_rowreq_ctx_cleanup(dessertSysifTable_rowreq_ctx *
+- rowreq_ctx);
+-
+-
+- dessertSysifTable_rowreq_ctx
+- *dessertSysifTable_row_find_by_mib_index
+- (dessertSysifTable_mib_index * mib_idx);
+-
+- extern oid dessertSysifTable_oid[];
+- extern int dessertSysifTable_oid_size;
+-
+-#include "dessertSysifTable_interface.h"
+-#include "dessertSysifTable_data_access.h"
+-#include "dessertSysifTable_data_get.h"
+-#include "dessertSysifTable_data_set.h"
+-
+- /*
+- * DUMMY markers, ignore
+- *
+- * TODO:099:x: *************************************************************
+- * TODO:199:x: *************************************************************
+- * TODO:299:x: *************************************************************
+- * TODO:399:x: *************************************************************
+- * TODO:499:x: *************************************************************
+- */
+-
+-#ifdef __cplusplus
+-}
+-#endif
+-#endif /* DESSERTSYSIFTABLE_H */
+-/** @} */
+Index: libdessert0.86-0.86.14/snmp/dessertSysifTable_data_access.c
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertSysifTable_data_access.c 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,342 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * version : 14170 $ of $
+- *
+- * $Id:$
+- */
+-/*
+- * standard Net-SNMP includes
+- */
+-#include <net-snmp/net-snmp-config.h>
+-#include <net-snmp/net-snmp-includes.h>
+-#include <net-snmp/agent/net-snmp-agent-includes.h>
+-
+-/*
+- * include our parent header
+- */
+-#include "../dessert_internal.h"
+-
+-
+-#include "dessertSysifTable_data_access.h"
+-
+-/** @ingroup interface
+- * @addtogroup data_access data_access: Routines to access data
+- *
+- * These routines are used to locate the data used to satisfy
+- * requests.
+- *
+- * @{
+- */
+-/**********************************************************************
+- **********************************************************************
+- ***
+- *** Table dessertSysifTable
+- ***
+- **********************************************************************
+- **********************************************************************/
+-/*
+- * DESSERT2-MIB::dessertSysifTable is subid 7 of dessertObjects.
+- * Its status is Current.
+- * OID: .1.3.6.1.4.1.18898.0.19.42.1.7, length: 12
+- */
+-
+-/**
+- * initialization for dessertSysifTable data access
+- *
+- * This function is called during startup to allow you to
+- * allocate any resources you need for the data table.
+- *
+- * @param dessertSysifTable_reg
+- * Pointer to dessertSysifTable_registration
+- *
+- * @retval MFD_SUCCESS : success.
+- * @retval MFD_ERROR : unrecoverable error.
+- */
+-int
+-dessertSysifTable_init_data(dessertSysifTable_registration *
+- dessertSysifTable_reg)
+-{
+- DEBUGMSGTL(("verbose:dessertSysifTable:dessertSysifTable_init_data",
+- "called\n"));
+-
+- return MFD_SUCCESS;
+-} /* dessertSysifTable_init_data */
+-
+-/**
+- * container overview
+- *
+- */
+-
+-/**
+- * container initialization
+- *
+- * @param container_ptr_ptr A pointer to a container pointer. If you
+- * create a custom container, use this parameter to return it
+- * to the MFD helper. If set to NULL, the MFD helper will
+- * allocate a container for you.
+- * @param cache A pointer to a cache structure. You can set the timeout
+- * and other cache flags using this pointer.
+- *
+- * This function is called at startup to allow you to customize certain
+- * aspects of the access method. For the most part, it is for advanced
+- * users. The default code should suffice for most cases. If no custom
+- * container is allocated, the MFD code will create one for your.
+- *
+- * This is also the place to set up cache behavior. The default, to
+- * simply set the cache timeout, will work well with the default
+- * container. If you are using a custom container, you may want to
+- * look at the cache helper documentation to see if there are any
+- * flags you want to set.
+- *
+- * @remark
+- * This would also be a good place to do any initialization needed
+- * for you data source. For example, opening a connection to another
+- * process that will supply the data, opening a database, etc.
+- */
+-void
+-dessertSysifTable_container_init(netsnmp_container ** container_ptr_ptr,
+- netsnmp_cache * cache)
+-{
+- DEBUGMSGTL(("verbose:dessertSysifTable:dessertSysifTable_container_init", "called\n"));
+- dessert_debug("dessertSysifTable_container_load called");
+- if (NULL == container_ptr_ptr) {
+- snmp_log(LOG_ERR,
+- "bad container param to dessertSysifTable_container_init\n");
+- return;
+- }
+-
+- /*
+- * For advanced users, you can use a custom container. If you
+- * do not create one, one will be created for you.
+- */
+- *container_ptr_ptr = NULL;
+-
+- if (NULL == cache) {
+- snmp_log(LOG_ERR,
+- "bad cache param to dessertSysifTable_container_init\n");
+- return;
+- }
+-
+- /*
+- * TODO:345:A: Set up dessertSysifTable cache properties.
+- *
+- * Also for advanced users, you can set parameters for the
+- * cache. Do not change the magic pointer, as it is used
+- * by the MFD helper. To completely disable caching, set
+- * cache->enabled to 0.
+- */
+- cache->timeout = DESSERTSYSIFTABLE_CACHE_TIMEOUT; /* seconds */
+-} /* dessertSysifTable_container_init */
+-
+-/**
+- * container shutdown
+- *
+- * @param container_ptr A pointer to the container.
+- *
+- * This function is called at shutdown to allow you to customize certain
+- * aspects of the access method. For the most part, it is for advanced
+- * users. The default code should suffice for most cases.
+- *
+- * This function is called before dessertSysifTable_container_free().
+- *
+- * @remark
+- * This would also be a good place to do any cleanup needed
+- * for you data source. For example, closing a connection to another
+- * process that supplied the data, closing a database, etc.
+- */
+-void
+-dessertSysifTable_container_shutdown(netsnmp_container * container_ptr)
+-{
+- DEBUGMSGTL(("verbose:dessertSysifTable:dessertSysifTable_container_shutdown", "called\n"));
+-
+- if (NULL == container_ptr) {
+- snmp_log(LOG_ERR,
+- "bad params to dessertSysifTable_container_shutdown\n");
+- return;
+- }
+-
+-} /* dessertSysifTable_container_shutdown */
+-
+-/**
+- * load initial data
+- *
+- * TODO:350:M: Implement dessertSysifTable data load
+- * This function will also be called by the cache helper to load
+- * the container again (after the container free function has been
+- * called to free the previous contents).
+- *
+- * @param container container to which items should be inserted
+- *
+- * @retval MFD_SUCCESS : success.
+- * @retval MFD_RESOURCE_UNAVAILABLE : Can't access data source
+- * @retval MFD_ERROR : other error.
+- *
+- * This function is called to load the index(es) (and data, optionally)
+- * for the every row in the data set.
+- *
+- * @remark
+- * While loading the data, the only important thing is the indexes.
+- * If access to your data is cheap/fast (e.g. you have a pointer to a
+- * structure in memory), it would make sense to update the data here.
+- * If, however, the accessing the data invovles more work (e.g. parsing
+- * some other existing data, or peforming calculations to derive the data),
+- * then you can limit yourself to setting the indexes and saving any
+- * information you will need later. Then use the saved information in
+- * dessertSysifTable_row_prep() for populating data.
+- *
+- * @note
+- * If you need consistency between rows (like you want statistics
+- * for each row to be from the same time frame), you should set all
+- * data here.
+- *
+- */
+-int dessertSysifTable_container_load(netsnmp_container * container) {
+-
+- dessertSysifTable_rowreq_ctx *rowreq_ctx;
+- dessert_sysif_t *sysif = _dessert_sysif; /* TODO: change if multiple tun/tap interfaces are supported*/
+-
+- char inPkts[I64CHARSZ + 1];
+- char outPkts[I64CHARSZ + 1];
+- char inOctets[I64CHARSZ + 1];
+- char outOctets[I64CHARSZ + 1];
+-
+- /*
+- * temporary storage for index values
+- */
+- /*
+- * sysifIndex(1)///()//L/a/w/e/r/d/h
+- */
+- long sysifIndex = 0;
+-
+- dessert_debug("dessertSysifTable_container_load called");
+- DEBUGMSGTL(("verbose:dessertSysifTable:dessertSysifTable_container_load", "called\n"));
+-
+- /*
+- * TODO:351:M: |-> Load/update data in the dessertSysTable container.
+- * loop over your dessertSysifTable data, allocate a rowreq context,
+- * set the index(es) [and data, optionally] and insert into
+- * the container.
+- */
+-
+- /*
+- * TODO:352:M: | |-> set indexes in new dessertSysifTable rowreq context.
+- * data context will be set from the param (unless NULL,
+- * in which case a new data context will be allocated)
+- */
+- rowreq_ctx = dessertSysifTable_allocate_rowreq_ctx(NULL);
+- if (NULL == rowreq_ctx) {
+- snmp_log(LOG_ERR, "memory allocation failed\n");
+- return MFD_RESOURCE_UNAVAILABLE;
+- }
+-
+- if (MFD_SUCCESS != dessertSysifTable_indexes_set(rowreq_ctx, sysifIndex)) {
+- snmp_log(LOG_ERR, "error setting index while loading "
+- "dessertSysTable data.\n");
+- dessertSysifTable_release_rowreq_ctx(rowreq_ctx);
+- return MFD_RESOURCE_UNAVAILABLE;
+- }
+-
+- /*
+- * TODO:352:r: | |-> populate dessertMeshifTable data context.
+- * Populate data context here. (optionally, delay until row prep)
+- */
+- /*
+- * non-TRANSIENT data: no need to copy. set pointer to data
+- */
+-
+- rowreq_ctx->data.sysifName_len = strlen(sysif->if_name);
+- strcpy(rowreq_ctx->data.sysifName, sysif->if_name);
+-
+- rowreq_ctx->data.sysifMacAddress_len = 6;
+- memcpy(rowreq_ctx->data.sysifMacAddress, sysif->hwaddr, 6);
+-
+- pthread_mutex_lock(&(sysif->cnt_mutex));
+-
+- rowreq_ctx->data.sysifInPkts.low = sysif->ipkts & 0xffffffff;
+- rowreq_ctx->data.sysifInPkts.high = sysif->ipkts >> 32;
+-
+- rowreq_ctx->data.sysifOutPkts.low = sysif->opkts & 0xffffffff;
+- rowreq_ctx->data.sysifOutPkts.high = sysif->opkts >> 32;
+-
+- rowreq_ctx->data.sysifInOctets.low = sysif->ibytes & 0xffffffff;
+- rowreq_ctx->data.sysifInOctets.high = sysif->ibytes >> 32;
+-
+- rowreq_ctx->data.sysifOutOctets.low = sysif->obytes & 0xffffffff;
+- rowreq_ctx->data.sysifOutOctets.high = sysif->obytes >> 32;
+-
+- printU64(inPkts, &rowreq_ctx->data.sysifInPkts);
+- printU64(outPkts, &rowreq_ctx->data.sysifOutPkts);
+- printU64(inOctets, &rowreq_ctx->data.sysifInOctets);
+- printU64(outOctets, &rowreq_ctx->data.sysifOutOctets);
+-
+- dessert_debug("inPkts [%s] [%u]", inPkts, sysif->ipkts);
+- dessert_debug("outPkts [%s] [%u]", outPkts, sysif->opkts);
+- dessert_debug("inOctets [%s] [%u]", inOctets, sysif->ibytes);
+- dessert_debug("outOctets [%s] [%u]", outOctets, sysif->obytes);
+-
+- pthread_mutex_unlock(&(sysif->cnt_mutex));
+-
+- /*
+- * insert into table container
+- */
+- CONTAINER_INSERT(container, rowreq_ctx);
+-
+- DEBUGMSGT(("verbose:dessertSysifTable:dessertSysifTable_container_load", "inserted 1 record(s)\n"));
+-
+- return MFD_SUCCESS;
+-} /* dessertSysifTable_container_load */
+-
+-/**
+- * container clean up
+- *
+- * @param container container with all current items
+- *
+- * This optional callback is called prior to all
+- * item's being removed from the container. If you
+- * need to do any processing before that, do it here.
+- *
+- * @note
+- * The MFD helper will take care of releasing all the row contexts.
+- *
+- */
+-void
+-dessertSysifTable_container_free(netsnmp_container * container)
+-{
+- DEBUGMSGTL(("verbose:dessertSysifTable:dessertSysifTable_container_free", "called\n"));
+-
+- /*
+- * TODO:380:M: Free dessertSysifTable container data.
+- */
+-} /* dessertSysifTable_container_free */
+-
+-/**
+- * prepare row for processing.
+- *
+- * When the agent has located the row for a request, this function is
+- * called to prepare the row for processing. If you fully populated
+- * the data context during the index setup phase, you may not need to
+- * do anything.
+- *
+- * @param rowreq_ctx pointer to a context.
+- *
+- * @retval MFD_SUCCESS : success.
+- * @retval MFD_ERROR : other error.
+- */
+-int
+-dessertSysifTable_row_prep(dessertSysifTable_rowreq_ctx * rowreq_ctx)
+-{
+- DEBUGMSGTL(("verbose:dessertSysifTable:dessertSysifTable_row_prep",
+- "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:390:o: Prepare row for request.
+- * If populating row data was delayed, this is the place to
+- * fill in the row for this request.
+- */
+-
+- return MFD_SUCCESS;
+-} /* dessertSysifTable_row_prep */
+-
+-/** @} */
+Index: libdessert0.86-0.86.14/snmp/dessertSysifTable_data_access.h
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertSysifTable_data_access.h 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,90 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * version : 14170 $ of $
+- *
+- * $Id:$
+- */
+-#ifndef DESSERTSYSIFTABLE_DATA_ACCESS_H
+-#define DESSERTSYSIFTABLE_DATA_ACCESS_H
+-
+-#include "../dessert_internal.h"
+-
+-#ifdef __cplusplus
+-extern "C" {
+-#endif
+-
+-
+- /*
+- *********************************************************************
+- * function declarations
+- */
+-
+- /*
+- *********************************************************************
+- * Table declarations
+- */
+-/**********************************************************************
+- **********************************************************************
+- ***
+- *** Table dessertSysifTable
+- ***
+- **********************************************************************
+- **********************************************************************/
+- /*
+- * DESSERT2-MIB::dessertSysifTable is subid 7 of dessertObjects.
+- * Its status is Current.
+- * OID: .1.3.6.1.4.1.18898.0.19.42.1.7, length: 12
+- */
+-
+-
+- int
+- dessertSysifTable_init_data(dessertSysifTable_registration *
+- dessertSysifTable_reg);
+-
+-
+- /*
+- * TODO:180:o: Review dessertSysifTable cache timeout.
+- * The number of seconds before the cache times out
+- */
+-#define DESSERTSYSIFTABLE_CACHE_TIMEOUT DESSERT_AGENTX_SYSIFTABLE_CACHE_TIMEOUT
+-
+- void dessertSysifTable_container_init(netsnmp_container **
+- container_ptr_ptr,
+- netsnmp_cache *
+- cache);
+- void dessertSysifTable_container_shutdown(netsnmp_container
+- * container_ptr);
+-
+- int dessertSysifTable_container_load(netsnmp_container *
+- container);
+- void dessertSysifTable_container_free(netsnmp_container *
+- container);
+-
+- int dessertSysifTable_cache_load(netsnmp_container *
+- container);
+- void dessertSysifTable_cache_free(netsnmp_container *
+- container);
+-
+- /*
+- ***************************************************
+- *** START EXAMPLE CODE ***
+- ***---------------------------------------------***/
+- /*
+- *********************************************************************
+- * Since we have no idea how you really access your data, we'll go with
+- * a worst case example: a flat text file.
+- */
+-#define MAX_LINE_SIZE 256
+- /*
+- ***---------------------------------------------***
+- *** END EXAMPLE CODE ***
+- ***************************************************/
+- int dessertSysifTable_row_prep(dessertSysifTable_rowreq_ctx
+- * rowreq_ctx);
+-
+-
+-
+-#ifdef __cplusplus
+-}
+-#endif
+-#endif /* DESSERTSYSIFTABLE_DATA_ACCESS_H */
+Index: libdessert0.86-0.86.14/snmp/dessertSysifTable_data_get.c
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertSysifTable_data_get.c 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,507 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * version : 12088 $ of $
+- *
+- * $Id:$
+- */
+-/*
+- * standard Net-SNMP includes
+- */
+-#include <net-snmp/net-snmp-config.h>
+-#include <net-snmp/net-snmp-includes.h>
+-#include <net-snmp/agent/net-snmp-agent-includes.h>
+-
+-/*
+- * include our parent header
+- */
+-#include "dessertSysifTable.h"
+-
+-
+-/** @defgroup data_get data_get: Routines to get data
+- *
+- * TODO:230:M: Implement dessertSysifTable get routines.
+- * TODO:240:M: Implement dessertSysifTable mapping routines (if any).
+- *
+- * These routine are used to get the value for individual objects. The
+- * row context is passed, along with a pointer to the memory where the
+- * value should be copied.
+- *
+- * @{
+- */
+-/**********************************************************************
+- **********************************************************************
+- ***
+- *** Table dessertSysifTable
+- ***
+- **********************************************************************
+- **********************************************************************/
+-/*
+- * DESSERT2-MIB::dessertSysifTable is subid 7 of dessertObjects.
+- * Its status is Current.
+- * OID: .1.3.6.1.4.1.18898.0.19.42.1.7, length: 12
+- */
+-
+-/*
+- * ---------------------------------------------------------------------
+- * * TODO:200:r: Implement dessertSysifTable data context functions.
+- */
+-
+-
+-/**
+- * set mib index(es)
+- *
+- * @param tbl_idx mib index structure
+- * @param sysifIndex_val
+- *
+- * @retval MFD_SUCCESS : success.
+- * @retval MFD_ERROR : other error.
+- *
+- * @remark
+- * This convenience function is useful for setting all the MIB index
+- * components with a single function call. It is assume that the C values
+- * have already been mapped from their native/rawformat to the MIB format.
+- */
+-int
+-dessertSysifTable_indexes_set_tbl_idx(dessertSysifTable_mib_index *
+- tbl_idx, long sysifIndex_val)
+-{
+- DEBUGMSGTL(("verbose:dessertSysifTable:dessertSysifTable_indexes_set_tbl_idx", "called\n"));
+-
+- /*
+- * sysifIndex(1)///()//L/a/w/e/r/d/h
+- */
+- tbl_idx->sysifIndex = sysifIndex_val;
+-
+-
+- return MFD_SUCCESS;
+-} /* dessertSysifTable_indexes_set_tbl_idx */
+-
+-/**
+- * @internal
+- * set row context indexes
+- *
+- * @param reqreq_ctx the row context that needs updated indexes
+- *
+- * @retval MFD_SUCCESS : success.
+- * @retval MFD_ERROR : other error.
+- *
+- * @remark
+- * This function sets the mib indexs, then updates the oid indexs
+- * from the mib index.
+- */
+-int
+-dessertSysifTable_indexes_set(dessertSysifTable_rowreq_ctx * rowreq_ctx,
+- long sysifIndex_val)
+-{
+- DEBUGMSGTL(("verbose:dessertSysifTable:dessertSysifTable_indexes_set",
+- "called\n"));
+-
+- if (MFD_SUCCESS !=
+- dessertSysifTable_indexes_set_tbl_idx(&rowreq_ctx->tbl_idx,
+- sysifIndex_val))
+- return MFD_ERROR;
+-
+- /*
+- * convert mib index to oid index
+- */
+- rowreq_ctx->oid_idx.len = sizeof(rowreq_ctx->oid_tmp) / sizeof(oid);
+- if (0 != dessertSysifTable_index_to_oid(&rowreq_ctx->oid_idx,
+- &rowreq_ctx->tbl_idx)) {
+- return MFD_ERROR;
+- }
+-
+- return MFD_SUCCESS;
+-} /* dessertSysifTable_indexes_set */
+-
+-
+-/*---------------------------------------------------------------------
+- * DESSERT2-MIB::dessertSysifEntry.sysifName
+- * sysifName is subid 2 of dessertSysifEntry.
+- * Its status is Current, and its access level is ReadOnly.
+- * OID: .1.3.6.1.4.1.18898.0.19.42.1.7.1.2
+- * Description:
+-name of interface
+- *
+- * Attributes:
+- * accessible 1 isscalar 0 enums 0 hasdefval 0
+- * readable 1 iscolumn 1 ranges 1 hashint 1
+- * settable 0
+- * hint: 255a
+- *
+- * Ranges: 0 - 255;
+- *
+- * Its syntax is DisplayString (based on perltype OCTETSTR)
+- * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+- * This data type requires a length. (Max 255)
+- */
+-/**
+- * Extract the current value of the sysifName data.
+- *
+- * Set a value using the data context for the row.
+- *
+- * @param rowreq_ctx
+- * Pointer to the row request context.
+- * @param sysifName_val_ptr_ptr
+- * Pointer to storage for a char variable
+- * @param sysifName_val_ptr_len_ptr
+- * Pointer to a size_t. On entry, it will contain the size (in bytes)
+- * pointed to by sysifName.
+- * On exit, this value should contain the data size (in bytes).
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_SKIP : skip this node (no value for now)
+- * @retval MFD_ERROR : Any other error
+-*
+- * @note If you need more than (*sysifName_val_ptr_len_ptr) bytes of memory,
+- * allocate it using malloc() and update sysifName_val_ptr_ptr.
+- * <b>DO NOT</b> free the previous pointer.
+- * The MFD helper will release the memory you allocate.
+- *
+- * @remark If you call this function yourself, you are responsible
+- * for checking if the pointer changed, and freeing any
+- * previously allocated memory. (Not necessary if you pass
+- * in a pointer to static memory, obviously.)
+- */
+-int
+-sysifName_get(dessertSysifTable_rowreq_ctx * rowreq_ctx,
+- char **sysifName_val_ptr_ptr,
+- size_t *sysifName_val_ptr_len_ptr)
+-{
+- /** we should have a non-NULL pointer and enough storage */
+- netsnmp_assert((NULL != sysifName_val_ptr_ptr)
+- && (NULL != *sysifName_val_ptr_ptr));
+- netsnmp_assert(NULL != sysifName_val_ptr_len_ptr);
+-
+-
+- DEBUGMSGTL(("verbose:dessertSysifTable:sysifName_get", "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:231:o: |-> Extract the current value of the sysifName data.
+- * copy (* sysifName_val_ptr_ptr ) data and (* sysifName_val_ptr_len_ptr ) from rowreq_ctx->data
+- */
+- /*
+- * make sure there is enough space for sysifName data
+- */
+- if ((NULL == (*sysifName_val_ptr_ptr)) ||
+- ((*sysifName_val_ptr_len_ptr) <
+- (rowreq_ctx->data.sysifName_len *
+- sizeof(rowreq_ctx->data.sysifName[0])))) {
+- /*
+- * allocate space for sysifName data
+- */
+- (*sysifName_val_ptr_ptr) =
+- malloc(rowreq_ctx->data.sysifName_len *
+- sizeof(rowreq_ctx->data.sysifName[0]));
+- if (NULL == (*sysifName_val_ptr_ptr)) {
+- snmp_log(LOG_ERR, "could not allocate memory\n");
+- return MFD_ERROR;
+- }
+- }
+- (*sysifName_val_ptr_len_ptr) =
+- rowreq_ctx->data.sysifName_len *
+- sizeof(rowreq_ctx->data.sysifName[0]);
+- memcpy((*sysifName_val_ptr_ptr), rowreq_ctx->data.sysifName,
+- rowreq_ctx->data.sysifName_len *
+- sizeof(rowreq_ctx->data.sysifName[0]));
+-
+- return MFD_SUCCESS;
+-} /* sysifName_get */
+-
+-/*---------------------------------------------------------------------
+- * DESSERT2-MIB::dessertSysifEntry.sysifMacAddress
+- * sysifMacAddress is subid 3 of dessertSysifEntry.
+- * Its status is Current, and its access level is ReadOnly.
+- * OID: .1.3.6.1.4.1.18898.0.19.42.1.7.1.3
+- * Description:
+-hardware address of interface
+- *
+- * Attributes:
+- * accessible 1 isscalar 0 enums 0 hasdefval 0
+- * readable 1 iscolumn 1 ranges 1 hashint 1
+- * settable 0
+- * hint: 1x:
+- *
+- * Ranges: 6;
+- *
+- * Its syntax is MacAddress (based on perltype OCTETSTR)
+- * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
+- * This data type requires a length. (Max 6)
+- */
+-/**
+- * Extract the current value of the sysifMacAddress data.
+- *
+- * Set a value using the data context for the row.
+- *
+- * @param rowreq_ctx
+- * Pointer to the row request context.
+- * @param sysifMacAddress_val_ptr_ptr
+- * Pointer to storage for a char variable
+- * @param sysifMacAddress_val_ptr_len_ptr
+- * Pointer to a size_t. On entry, it will contain the size (in bytes)
+- * pointed to by sysifMacAddress.
+- * On exit, this value should contain the data size (in bytes).
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_SKIP : skip this node (no value for now)
+- * @retval MFD_ERROR : Any other error
+-*
+- * @note If you need more than (*sysifMacAddress_val_ptr_len_ptr) bytes of memory,
+- * allocate it using malloc() and update sysifMacAddress_val_ptr_ptr.
+- * <b>DO NOT</b> free the previous pointer.
+- * The MFD helper will release the memory you allocate.
+- *
+- * @remark If you call this function yourself, you are responsible
+- * for checking if the pointer changed, and freeing any
+- * previously allocated memory. (Not necessary if you pass
+- * in a pointer to static memory, obviously.)
+- */
+-int
+-sysifMacAddress_get(dessertSysifTable_rowreq_ctx * rowreq_ctx,
+- char **sysifMacAddress_val_ptr_ptr,
+- size_t *sysifMacAddress_val_ptr_len_ptr)
+-{
+- /** we should have a non-NULL pointer and enough storage */
+- netsnmp_assert((NULL != sysifMacAddress_val_ptr_ptr)
+- && (NULL != *sysifMacAddress_val_ptr_ptr));
+- netsnmp_assert(NULL != sysifMacAddress_val_ptr_len_ptr);
+-
+-
+- DEBUGMSGTL(("verbose:dessertSysifTable:sysifMacAddress_get",
+- "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- /*
+- * TODO:231:o: |-> Extract the current value of the sysifMacAddress data.
+- * copy (* sysifMacAddress_val_ptr_ptr ) data and (* sysifMacAddress_val_ptr_len_ptr ) from rowreq_ctx->data
+- */
+- /*
+- * make sure there is enough space for sysifMacAddress data
+- */
+- if ((NULL == (*sysifMacAddress_val_ptr_ptr)) ||
+- ((*sysifMacAddress_val_ptr_len_ptr) <
+- (rowreq_ctx->data.sysifMacAddress_len *
+- sizeof(rowreq_ctx->data.sysifMacAddress[0])))) {
+- /*
+- * allocate space for sysifMacAddress data
+- */
+- (*sysifMacAddress_val_ptr_ptr) =
+- malloc(rowreq_ctx->data.sysifMacAddress_len *
+- sizeof(rowreq_ctx->data.sysifMacAddress[0]));
+- if (NULL == (*sysifMacAddress_val_ptr_ptr)) {
+- snmp_log(LOG_ERR, "could not allocate memory\n");
+- return MFD_ERROR;
+- }
+- }
+- (*sysifMacAddress_val_ptr_len_ptr) =
+- rowreq_ctx->data.sysifMacAddress_len *
+- sizeof(rowreq_ctx->data.sysifMacAddress[0]);
+- memcpy((*sysifMacAddress_val_ptr_ptr),
+- rowreq_ctx->data.sysifMacAddress,
+- rowreq_ctx->data.sysifMacAddress_len *
+- sizeof(rowreq_ctx->data.sysifMacAddress[0]));
+-
+- return MFD_SUCCESS;
+-} /* sysifMacAddress_get */
+-
+-/*---------------------------------------------------------------------
+- * DESSERT2-MIB::dessertSysifEntry.sysifInPkts
+- * sysifInPkts is subid 4 of dessertSysifEntry.
+- * Its status is Current, and its access level is ReadOnly.
+- * OID: .1.3.6.1.4.1.18898.0.19.42.1.7.1.4
+- * Description:
+-packet counter in
+- *
+- * Attributes:
+- * accessible 1 isscalar 0 enums 0 hasdefval 0
+- * readable 1 iscolumn 1 ranges 0 hashint 0
+- * settable 0
+- *
+- *
+- * Its syntax is COUNTER64 (based on perltype COUNTER64)
+- * The net-snmp type is ASN_COUNTER64. The C type decl is U64 (U64)
+- */
+-/**
+- * Extract the current value of the sysifInPkts data.
+- *
+- * Set a value using the data context for the row.
+- *
+- * @param rowreq_ctx
+- * Pointer to the row request context.
+- * @param sysifInPkts_val_ptr
+- * Pointer to storage for a U64 variable
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_SKIP : skip this node (no value for now)
+- * @retval MFD_ERROR : Any other error
+- */
+-int
+-sysifInPkts_get(dessertSysifTable_rowreq_ctx * rowreq_ctx,
+- U64 * sysifInPkts_val_ptr)
+-{
+- /** we should have a non-NULL pointer */
+- netsnmp_assert(NULL != sysifInPkts_val_ptr);
+-
+- /*
+- * TODO:231:o: |-> copy sysifInPkts data.
+- * get (* sysifInPkts_val_ptr ).low and (* sysifInPkts_val_ptr ).high from rowreq_ctx->data
+- */
+- (*sysifInPkts_val_ptr).high = rowreq_ctx->data.sysifInPkts.high;
+- (*sysifInPkts_val_ptr).low = rowreq_ctx->data.sysifInPkts.low;
+-
+-
+- return MFD_SUCCESS;
+-} /* sysifInPkts_get */
+-
+-/*---------------------------------------------------------------------
+- * DESSERT2-MIB::dessertSysifEntry.sysifOutPkts
+- * sysifOutPkts is subid 5 of dessertSysifEntry.
+- * Its status is Current, and its access level is ReadOnly.
+- * OID: .1.3.6.1.4.1.18898.0.19.42.1.7.1.5
+- * Description:
+-packet counter out
+- *
+- * Attributes:
+- * accessible 1 isscalar 0 enums 0 hasdefval 0
+- * readable 1 iscolumn 1 ranges 0 hashint 0
+- * settable 0
+- *
+- *
+- * Its syntax is COUNTER64 (based on perltype COUNTER64)
+- * The net-snmp type is ASN_COUNTER64. The C type decl is U64 (U64)
+- */
+-/**
+- * Extract the current value of the sysifOutPkts data.
+- *
+- * Set a value using the data context for the row.
+- *
+- * @param rowreq_ctx
+- * Pointer to the row request context.
+- * @param sysifOutPkts_val_ptr
+- * Pointer to storage for a U64 variable
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_SKIP : skip this node (no value for now)
+- * @retval MFD_ERROR : Any other error
+- */
+-int
+-sysifOutPkts_get(dessertSysifTable_rowreq_ctx * rowreq_ctx,
+- U64 * sysifOutPkts_val_ptr)
+-{
+- /** we should have a non-NULL pointer */
+- netsnmp_assert(NULL != sysifOutPkts_val_ptr);
+-
+- /*
+- * TODO:231:o: |-> copy sysifOutPkts data.
+- * get (* sysifOutPkts_val_ptr ).low and (* sysifOutPkts_val_ptr ).high from rowreq_ctx->data
+- */
+- (*sysifOutPkts_val_ptr).high = rowreq_ctx->data.sysifOutPkts.high;
+- (*sysifOutPkts_val_ptr).low = rowreq_ctx->data.sysifOutPkts.low;
+-
+-
+- return MFD_SUCCESS;
+-} /* sysifOutPkts_get */
+-
+-/*---------------------------------------------------------------------
+- * DESSERT2-MIB::dessertSysifEntry.sysifInOctets
+- * sysifInOctets is subid 6 of dessertSysifEntry.
+- * Its status is Current, and its access level is ReadOnly.
+- * OID: .1.3.6.1.4.1.18898.0.19.42.1.7.1.6
+- * Description:
+-octet counter in
+- *
+- * Attributes:
+- * accessible 1 isscalar 0 enums 0 hasdefval 0
+- * readable 1 iscolumn 1 ranges 0 hashint 0
+- * settable 0
+- *
+- *
+- * Its syntax is COUNTER64 (based on perltype COUNTER64)
+- * The net-snmp type is ASN_COUNTER64. The C type decl is U64 (U64)
+- */
+-/**
+- * Extract the current value of the sysifInOctets data.
+- *
+- * Set a value using the data context for the row.
+- *
+- * @param rowreq_ctx
+- * Pointer to the row request context.
+- * @param sysifInOctets_val_ptr
+- * Pointer to storage for a U64 variable
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_SKIP : skip this node (no value for now)
+- * @retval MFD_ERROR : Any other error
+- */
+-int
+-sysifInOctets_get(dessertSysifTable_rowreq_ctx * rowreq_ctx,
+- U64 * sysifInOctets_val_ptr)
+-{
+- /** we should have a non-NULL pointer */
+- netsnmp_assert(NULL != sysifInOctets_val_ptr);
+-
+- /*
+- * TODO:231:o: |-> copy sysifInOctets data.
+- * get (* sysifInOctets_val_ptr ).low and (* sysifInOctets_val_ptr ).high from rowreq_ctx->data
+- */
+- (*sysifInOctets_val_ptr).high = rowreq_ctx->data.sysifInOctets.high;
+- (*sysifInOctets_val_ptr).low = rowreq_ctx->data.sysifInOctets.low;
+-
+-
+- return MFD_SUCCESS;
+-} /* sysifInOctets_get */
+-
+-/*---------------------------------------------------------------------
+- * DESSERT2-MIB::dessertSysifEntry.sysifOutOctets
+- * sysifOutOctets is subid 7 of dessertSysifEntry.
+- * Its status is Current, and its access level is ReadOnly.
+- * OID: .1.3.6.1.4.1.18898.0.19.42.1.7.1.7
+- * Description:
+-octet counter out
+- *
+- * Attributes:
+- * accessible 1 isscalar 0 enums 0 hasdefval 0
+- * readable 1 iscolumn 1 ranges 0 hashint 0
+- * settable 0
+- *
+- *
+- * Its syntax is COUNTER64 (based on perltype COUNTER64)
+- * The net-snmp type is ASN_COUNTER64. The C type decl is U64 (U64)
+- */
+-/**
+- * Extract the current value of the sysifOutOctets data.
+- *
+- * Set a value using the data context for the row.
+- *
+- * @param rowreq_ctx
+- * Pointer to the row request context.
+- * @param sysifOutOctets_val_ptr
+- * Pointer to storage for a U64 variable
+- *
+- * @retval MFD_SUCCESS : success
+- * @retval MFD_SKIP : skip this node (no value for now)
+- * @retval MFD_ERROR : Any other error
+- */
+-int
+-sysifOutOctets_get(dessertSysifTable_rowreq_ctx * rowreq_ctx,
+- U64 * sysifOutOctets_val_ptr)
+-{
+- /** we should have a non-NULL pointer */
+- netsnmp_assert(NULL != sysifOutOctets_val_ptr);
+-
+- /*
+- * TODO:231:o: |-> copy sysifOutOctets data.
+- * get (* sysifOutOctets_val_ptr ).low and (* sysifOutOctets_val_ptr ).high from rowreq_ctx->data
+- */
+- (*sysifOutOctets_val_ptr).high = rowreq_ctx->data.sysifOutOctets.high;
+- (*sysifOutOctets_val_ptr).low = rowreq_ctx->data.sysifOutOctets.low;
+-
+-
+- return MFD_SUCCESS;
+-} /* sysifOutOctets_get */
+-
+-
+-
+-/** @} */
+Index: libdessert0.86-0.86.14/snmp/dessertSysifTable_data_get.h
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertSysifTable_data_get.h 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,105 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * version : 12088 $ of $
+- *
+- * $Id:$
+- *
+- * @file dessertSysifTable_data_get.h
+- *
+- * @addtogroup get
+- *
+- * Prototypes for get functions
+- *
+- * @{
+- */
+-#ifndef DESSERTSYSIFTABLE_DATA_GET_H
+-#define DESSERTSYSIFTABLE_DATA_GET_H
+-
+-#ifdef __cplusplus
+-extern "C" {
+-#endif
+-
+- /*
+- *********************************************************************
+- * GET function declarations
+- */
+-
+- /*
+- *********************************************************************
+- * GET Table declarations
+- */
+-/**********************************************************************
+- **********************************************************************
+- ***
+- *** Table dessertSysifTable
+- ***
+- **********************************************************************
+- **********************************************************************/
+- /*
+- * DESSERT2-MIB::dessertSysifTable is subid 7 of dessertObjects.
+- * Its status is Current.
+- * OID: .1.3.6.1.4.1.18898.0.19.42.1.7, length: 12
+- */
+- /*
+- * indexes
+- */
+- int sysifIndex_map(uint* *mib_sysifIndex_val_ptr,
+- uint raw_sysifIndex_val);
+-
+- int sysifName_map(char **mib_sysifName_val_ptr_ptr,
+- size_t *mib_sysifName_val_ptr_len_ptr,
+- char *raw_sysifName_val_ptr,
+- size_t raw_sysifName_val_ptr_len,
+- int allow_realloc);
+- int sysifName_get(dessertSysifTable_rowreq_ctx *
+- rowreq_ctx, char **sysifName_val_ptr_ptr,
+- size_t *sysifName_val_ptr_len_ptr);
+- int sysifMacAddress_map(char
+- **mib_sysifMacAddress_val_ptr_ptr,
+- size_t
+- *mib_sysifMacAddress_val_ptr_len_ptr,
+- char *raw_sysifMacAddress_val_ptr,
+- size_t
+- raw_sysifMacAddress_val_ptr_len,
+- int allow_realloc);
+- int sysifMacAddress_get(dessertSysifTable_rowreq_ctx *
+- rowreq_ctx,
+- char **sysifMacAddress_val_ptr_ptr,
+- size_t
+- *sysifMacAddress_val_ptr_len_ptr);
+- int sysifInPkts_map(U64 * mib_sysifInPkts_val_ptr,
+- U64 raw_sysifInPkts_val);
+- int sysifInPkts_get(dessertSysifTable_rowreq_ctx *
+- rowreq_ctx, U64 * sysifInPkts_val_ptr);
+- int sysifOutPkts_map(U64 * mib_sysifOutPkts_val_ptr,
+- U64 raw_sysifOutPkts_val);
+- int sysifOutPkts_get(dessertSysifTable_rowreq_ctx *
+- rowreq_ctx,
+- U64 * sysifOutPkts_val_ptr);
+- int sysifInOctets_map(U64 * mib_sysifInOctets_val_ptr,
+- U64 raw_sysifInOctets_val);
+- int sysifInOctets_get(dessertSysifTable_rowreq_ctx *
+- rowreq_ctx,
+- U64 * sysifInOctets_val_ptr);
+- int sysifOutOctets_map(U64 * mib_sysifOutOctets_val_ptr,
+- U64 raw_sysifOutOctets_val);
+- int sysifOutOctets_get(dessertSysifTable_rowreq_ctx *
+- rowreq_ctx,
+- U64 * sysifOutOctets_val_ptr);
+-
+-
+- int
+- dessertSysifTable_indexes_set_tbl_idx(dessertSysifTable_mib_index *
+- tbl_idx, long sysifIndex_val);
+- int
+- dessertSysifTable_indexes_set(dessertSysifTable_rowreq_ctx *
+- rowreq_ctx, long sysifIndex_val);
+-
+-
+-
+-
+-#ifdef __cplusplus
+-}
+-#endif
+-#endif /* DESSERTSYSIFTABLE_DATA_GET_H */
+-/** @} */
+Index: libdessert0.86-0.86.14/snmp/dessertSysifTable_data_set.c
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertSysifTable_data_set.c 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,28 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * version : 12077 $ of $
+- *
+- * $Id:$
+- *
+- */
+-/*
+- * standard Net-SNMP includes
+- */
+-#include <net-snmp/net-snmp-config.h>
+-#include <net-snmp/net-snmp-includes.h>
+-#include <net-snmp/agent/net-snmp-agent-includes.h>
+-
+-/*
+- * include our parent header
+- */
+-#include "dessertSysifTable.h"
+-
+-
+-/** @defgroup data_set data_set: Routines to set data
+- *
+- * These routines are used to set the value for individual objects. The
+- * row context is passed, along with the new value.
+- *
+- * @{
+- */
+-/** @} */
+Index: libdessert0.86-0.86.14/snmp/dessertSysifTable_data_set.h
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertSysifTable_data_set.h 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,28 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * version : 12077 $ of $
+- *
+- * $Id:$
+- */
+-#ifndef DESSERTSYSIFTABLE_DATA_SET_H
+-#define DESSERTSYSIFTABLE_DATA_SET_H
+-
+-#ifdef __cplusplus
+-extern "C" {
+-#endif
+-
+- /*
+- *********************************************************************
+- * SET function declarations
+- */
+-
+- /*
+- *********************************************************************
+- * SET Table declarations
+- */
+-
+-
+-#ifdef __cplusplus
+-}
+-#endif
+-#endif /* DESSERTSYSIFTABLE_DATA_SET_H */
+Index: libdessert0.86-0.86.14/snmp/dessertSysifTable_enums.h
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertSysifTable_enums.h 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,39 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * : generic-table-enums.m2c 12526 2005-07-15 22:41:16Z rstory $
+- *
+- * $Id:$
+- */
+-#ifndef DESSERTSYSIFTABLE_ENUMS_H
+-#define DESSERTSYSIFTABLE_ENUMS_H
+-
+-#ifdef __cplusplus
+-extern "C" {
+-#endif
+-
+- /*
+- * NOTES on enums
+- * ==============
+- *
+- * Value Mapping
+- * -------------
+- * If the values for your data type don't exactly match the
+- * possible values defined by the mib, you should map them
+- * below. For example, a boolean flag (1/0) is usually represented
+- * as a TruthValue in a MIB, which maps to the values (1/2).
+- *
+- */
+-/*************************************************************************
+- *************************************************************************
+- *
+- * enum definitions for table dessertSysifTable
+- *
+- *************************************************************************
+- *************************************************************************/
+-
+-
+-
+-#ifdef __cplusplus
+-}
+-#endif
+-#endif /* DESSERTSYSIFTABLE_ENUMS_H */
+Index: libdessert0.86-0.86.14/snmp/dessertSysifTable_interface.c
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertSysifTable_interface.c 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,936 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * version : 15899 $ of $
+- *
+- * $Id:$
+- */
+-/*
+- * *********************************************************************
+- * *********************************************************************
+- * *********************************************************************
+- * *** ***
+- * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
+- * *** ***
+- * *** ***
+- * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
+- * *** ***
+- * *** ***
+- * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
+- * *** ***
+- * *** ***
+- * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
+- * *** ***
+- * *** ***
+- * *********************************************************************
+- * *********************************************************************
+- * *********************************************************************
+- */
+-
+-/*
+- * standard Net-SNMP includes
+- */
+-#include <net-snmp/net-snmp-config.h>
+-#include <net-snmp/net-snmp-includes.h>
+-#include <net-snmp/agent/net-snmp-agent-includes.h>
+-
+-/*
+- * include our parent header
+- */
+-#include "dessertSysifTable.h"
+-
+-
+-#include <net-snmp/agent/table_container.h>
+-#include <net-snmp/library/container.h>
+-
+-#include "dessertSysifTable_interface.h"
+-
+-#include <ctype.h>
+-
+-/**********************************************************************
+- **********************************************************************
+- ***
+- *** Table dessertSysifTable
+- ***
+- **********************************************************************
+- **********************************************************************/
+-/*
+- * DESSERT2-MIB::dessertSysifTable is subid 7 of dessertObjects.
+- * Its status is Current.
+- * OID: .1.3.6.1.4.1.18898.0.19.42.1.7, length: 12
+- */
+-typedef struct dessertSysifTable_interface_ctx_s {
+-
+- netsnmp_container *container;
+- netsnmp_cache *cache;
+-
+- dessertSysifTable_registration *user_ctx;
+-
+- netsnmp_table_registration_info tbl_info;
+-
+- netsnmp_baby_steps_access_methods access_multiplexer;
+-
+-} dessertSysifTable_interface_ctx;
+-
+-static dessertSysifTable_interface_ctx dessertSysifTable_if_ctx;
+-
+-static void
+-_dessertSysifTable_container_init(dessertSysifTable_interface_ctx *
+- if_ctx);
+-static void
+-_dessertSysifTable_container_shutdown(dessertSysifTable_interface_ctx *
+- if_ctx);
+-
+-
+-netsnmp_container *
+-dessertSysifTable_container_get(void)
+-{
+- return dessertSysifTable_if_ctx.container;
+-}
+-
+-dessertSysifTable_registration *
+-dessertSysifTable_registration_get(void)
+-{
+- return dessertSysifTable_if_ctx.user_ctx;
+-}
+-
+-dessertSysifTable_registration *
+-dessertSysifTable_registration_set(dessertSysifTable_registration * newreg)
+-{
+- dessertSysifTable_registration *old =
+- dessertSysifTable_if_ctx.user_ctx;
+- dessertSysifTable_if_ctx.user_ctx = newreg;
+- return old;
+-}
+-
+-int
+-dessertSysifTable_container_size(void)
+-{
+- return CONTAINER_SIZE(dessertSysifTable_if_ctx.container);
+-}
+-
+-/*
+- * mfd multiplexer modes
+- */
+-static Netsnmp_Node_Handler _mfd_dessertSysifTable_pre_request;
+-static Netsnmp_Node_Handler _mfd_dessertSysifTable_post_request;
+-static Netsnmp_Node_Handler _mfd_dessertSysifTable_object_lookup;
+-static Netsnmp_Node_Handler _mfd_dessertSysifTable_get_values;
+-/**
+- * @internal
+- * Initialize the table dessertSysifTable
+- * (Define its contents and how it's structured)
+- */
+-void
+-_dessertSysifTable_initialize_interface(dessertSysifTable_registration *
+- reg_ptr, u_long flags)
+-{
+- netsnmp_baby_steps_access_methods *access_multiplexer =
+- &dessertSysifTable_if_ctx.access_multiplexer;
+- netsnmp_table_registration_info *tbl_info =
+- &dessertSysifTable_if_ctx.tbl_info;
+- netsnmp_handler_registration *reginfo;
+- netsnmp_mib_handler *handler;
+- int mfd_modes = 0;
+-
+- DEBUGMSGTL(("internal:dessertSysifTable:_dessertSysifTable_initialize_interface", "called\n"));
+-
+-
+- /*************************************************
+- *
+- * save interface context for dessertSysifTable
+- */
+- /*
+- * Setting up the table's definition
+- */
+- netsnmp_table_helper_add_indexes(tbl_info,
+- /** index: sysifIndex */
+- 0);
+-
+- /*
+- * Define the minimum and maximum accessible columns. This
+- * optimizes retrival.
+- */
+- tbl_info->min_column = DESSERTSYSIFTABLE_MIN_COL;
+- tbl_info->max_column = DESSERTSYSIFTABLE_MAX_COL;
+-
+- /*
+- * save users context
+- */
+- dessertSysifTable_if_ctx.user_ctx = reg_ptr;
+-
+- /*
+- * call data access initialization code
+- */
+- dessertSysifTable_init_data(reg_ptr);
+-
+- /*
+- * set up the container
+- */
+- _dessertSysifTable_container_init(&dessertSysifTable_if_ctx);
+- if (NULL == dessertSysifTable_if_ctx.container) {
+- snmp_log(LOG_ERR,
+- "could not initialize container for dessertSysifTable\n");
+- return;
+- }
+-
+- /*
+- * access_multiplexer: REQUIRED wrapper for get request handling
+- */
+- access_multiplexer->object_lookup =
+- _mfd_dessertSysifTable_object_lookup;
+- access_multiplexer->get_values = _mfd_dessertSysifTable_get_values;
+-
+- /*
+- * no wrappers yet
+- */
+- access_multiplexer->pre_request = _mfd_dessertSysifTable_pre_request;
+- access_multiplexer->post_request = _mfd_dessertSysifTable_post_request;
+-
+-
+- /*************************************************
+- *
+- * Create a registration, save our reg data, register table.
+- */
+- DEBUGMSGTL(("dessertSysifTable:init_dessertSysifTable",
+- "Registering dessertSysifTable as a mibs-for-dummies table.\n"));
+- handler =
+- netsnmp_baby_steps_access_multiplexer_get(access_multiplexer);
+- reginfo =
+- netsnmp_handler_registration_create("dessertSysifTable", handler,
+- dessertSysifTable_oid,
+- dessertSysifTable_oid_size,
+- HANDLER_CAN_BABY_STEP |
+- HANDLER_CAN_RONLY);
+- if (NULL == reginfo) {
+- snmp_log(LOG_ERR, "error registering table dessertSysifTable\n");
+- return;
+- }
+- reginfo->my_reg_void = &dessertSysifTable_if_ctx;
+-
+- /*************************************************
+- *
+- * set up baby steps handler, create it and inject it
+- */
+- if (access_multiplexer->object_lookup)
+- mfd_modes |= BABY_STEP_OBJECT_LOOKUP;
+- if (access_multiplexer->set_values)
+- mfd_modes |= BABY_STEP_SET_VALUES;
+- if (access_multiplexer->irreversible_commit)
+- mfd_modes |= BABY_STEP_IRREVERSIBLE_COMMIT;
+- if (access_multiplexer->object_syntax_checks)
+- mfd_modes |= BABY_STEP_CHECK_OBJECT;
+-
+- if (access_multiplexer->pre_request)
+- mfd_modes |= BABY_STEP_PRE_REQUEST;
+- if (access_multiplexer->post_request)
+- mfd_modes |= BABY_STEP_POST_REQUEST;
+-
+- if (access_multiplexer->undo_setup)
+- mfd_modes |= BABY_STEP_UNDO_SETUP;
+- if (access_multiplexer->undo_cleanup)
+- mfd_modes |= BABY_STEP_UNDO_CLEANUP;
+- if (access_multiplexer->undo_sets)
+- mfd_modes |= BABY_STEP_UNDO_SETS;
+-
+- if (access_multiplexer->row_creation)
+- mfd_modes |= BABY_STEP_ROW_CREATE;
+- if (access_multiplexer->consistency_checks)
+- mfd_modes |= BABY_STEP_CHECK_CONSISTENCY;
+- if (access_multiplexer->commit)
+- mfd_modes |= BABY_STEP_COMMIT;
+- if (access_multiplexer->undo_commit)
+- mfd_modes |= BABY_STEP_UNDO_COMMIT;
+-
+- handler = netsnmp_baby_steps_handler_get(mfd_modes);
+- netsnmp_inject_handler(reginfo, handler);
+-
+- /*************************************************
+- *
+- * inject row_merge helper with prefix rootoid_len + 2 (entry.col)
+- */
+- handler = netsnmp_get_row_merge_handler(reginfo->rootoid_len + 2);
+- netsnmp_inject_handler(reginfo, handler);
+-
+- /*************************************************
+- *
+- * inject container_table helper
+- */
+- handler =
+- netsnmp_container_table_handler_get(tbl_info,
+- dessertSysifTable_if_ctx.
+- container,
+- TABLE_CONTAINER_KEY_NETSNMP_INDEX);
+- netsnmp_inject_handler(reginfo, handler);
+-
+- /*************************************************
+- *
+- * inject cache helper
+- */
+- if (NULL != dessertSysifTable_if_ctx.cache) {
+- handler =
+- netsnmp_cache_handler_get(dessertSysifTable_if_ctx.cache);
+- netsnmp_inject_handler(reginfo, handler);
+- }
+-
+- /*
+- * register table
+- */
+- netsnmp_register_table(reginfo, tbl_info);
+-
+-} /* _dessertSysifTable_initialize_interface */
+-
+-/**
+- * @internal
+- * Shutdown the table dessertSysifTable
+- */
+-void
+-_dessertSysifTable_shutdown_interface(dessertSysifTable_registration *
+- reg_ptr)
+-{
+- /*
+- * shutdown the container
+- */
+- _dessertSysifTable_container_shutdown(&dessertSysifTable_if_ctx);
+-}
+-
+-void
+-dessertSysifTable_valid_columns_set(netsnmp_column_info *vc)
+-{
+- dessertSysifTable_if_ctx.tbl_info.valid_columns = vc;
+-} /* dessertSysifTable_valid_columns_set */
+-
+-/**
+- * @internal
+- * convert the index component stored in the context to an oid
+- */
+-int
+-dessertSysifTable_index_to_oid(netsnmp_index * oid_idx,
+- dessertSysifTable_mib_index * mib_idx)
+-{
+- int err = SNMP_ERR_NOERROR;
+-
+- /*
+- * temp storage for parsing indexes
+- */
+- /*
+- * sysifIndex(1)///()//L/a/w/e/r/d/h
+- */
+- netsnmp_variable_list var_sysifIndex;
+-
+- /*
+- * set up varbinds
+- */
+- memset(&var_sysifIndex, 0x00, sizeof(var_sysifIndex));
+- var_sysifIndex.type = ASN_INTEGER;
+-
+- /*
+- * chain temp index varbinds together
+- */
+- var_sysifIndex.next_variable = NULL;
+-
+-
+- DEBUGMSGTL(("verbose:dessertSysifTable:dessertSysifTable_index_to_oid",
+- "called\n"));
+-
+- /*
+- * sysifIndex(1)///()//L/a/w/e/r/d/h
+- */
+- snmp_set_var_value(&var_sysifIndex, (u_char *) & mib_idx->sysifIndex,
+- sizeof(mib_idx->sysifIndex));
+-
+-
+- err = build_oid_noalloc(oid_idx->oids, oid_idx->len, &oid_idx->len,
+- NULL, 0, &var_sysifIndex);
+- if (err)
+- snmp_log(LOG_ERR, "error %d converting index to oid\n", err);
+-
+- /*
+- * parsing may have allocated memory. free it.
+- */
+- snmp_reset_var_buffers(&var_sysifIndex);
+-
+- return err;
+-} /* dessertSysifTable_index_to_oid */
+-
+-/**
+- * extract dessertSysifTable indexes from a netsnmp_index
+- *
+- * @retval SNMP_ERR_NOERROR : no error
+- * @retval SNMP_ERR_GENERR : error
+- */
+-int
+-dessertSysifTable_index_from_oid(netsnmp_index * oid_idx,
+- dessertSysifTable_mib_index * mib_idx)
+-{
+- int err = SNMP_ERR_NOERROR;
+-
+- /*
+- * temp storage for parsing indexes
+- */
+- /*
+- * sysifIndex(1)///()//L/a/w/e/r/d/h
+- */
+- netsnmp_variable_list var_sysifIndex;
+-
+- /*
+- * set up varbinds
+- */
+- memset(&var_sysifIndex, 0x00, sizeof(var_sysifIndex));
+- var_sysifIndex.type = ASN_INTEGER;
+-
+- /*
+- * chain temp index varbinds together
+- */
+- var_sysifIndex.next_variable = NULL;
+-
+-
+- DEBUGMSGTL(("verbose:dessertSysifTable:dessertSysifTable_index_from_oid", "called\n"));
+-
+- /*
+- * parse the oid into the individual index components
+- */
+- err = parse_oid_indexes(oid_idx->oids, oid_idx->len, &var_sysifIndex);
+- if (err == SNMP_ERR_NOERROR) {
+- /*
+- * copy out values
+- */
+- mib_idx->sysifIndex = *((long *)var_sysifIndex.val.string);
+-
+-
+- }
+-
+- /*
+- * parsing may have allocated memory. free it.
+- */
+- snmp_reset_var_buffers(&var_sysifIndex);
+-
+- return err;
+-} /* dessertSysifTable_index_from_oid */
+-
+-
+-/*
+- *********************************************************************
+- * @internal
+- * allocate resources for a dessertSysifTable_rowreq_ctx
+- */
+-dessertSysifTable_rowreq_ctx *
+-dessertSysifTable_allocate_rowreq_ctx(void *user_init_ctx)
+-{
+- dessertSysifTable_rowreq_ctx *rowreq_ctx =
+- SNMP_MALLOC_TYPEDEF(dessertSysifTable_rowreq_ctx);
+-
+- DEBUGMSGTL(("internal:dessertSysifTable:dessertSysifTable_allocate_rowreq_ctx", "called\n"));
+-
+- if (NULL == rowreq_ctx) {
+- snmp_log(LOG_ERR, "Couldn't allocate memory for a "
+- "dessertSysifTable_rowreq_ctx.\n");
+- return NULL;
+- }
+-
+- rowreq_ctx->oid_idx.oids = rowreq_ctx->oid_tmp;
+-
+- rowreq_ctx->dessertSysifTable_data_list = NULL;
+-
+- /*
+- * if we allocated data, call init routine
+- */
+- if (!(rowreq_ctx->rowreq_flags & MFD_ROW_DATA_FROM_USER)) {
+- if (SNMPERR_SUCCESS !=
+- dessertSysifTable_rowreq_ctx_init(rowreq_ctx, user_init_ctx)) {
+- dessertSysifTable_release_rowreq_ctx(rowreq_ctx);
+- rowreq_ctx = NULL;
+- }
+- }
+-
+- return rowreq_ctx;
+-} /* dessertSysifTable_allocate_rowreq_ctx */
+-
+-/*
+- * @internal
+- * release resources for a dessertSysifTable_rowreq_ctx
+- */
+-void
+-dessertSysifTable_release_rowreq_ctx(dessertSysifTable_rowreq_ctx *
+- rowreq_ctx)
+-{
+- DEBUGMSGTL(("internal:dessertSysifTable:dessertSysifTable_release_rowreq_ctx", "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- dessertSysifTable_rowreq_ctx_cleanup(rowreq_ctx);
+-
+- /*
+- * free index oid pointer
+- */
+- if (rowreq_ctx->oid_idx.oids != rowreq_ctx->oid_tmp)
+- free(rowreq_ctx->oid_idx.oids);
+-
+- SNMP_FREE(rowreq_ctx);
+-} /* dessertSysifTable_release_rowreq_ctx */
+-
+-/**
+- * @internal
+- * wrapper
+- */
+-static int
+-_mfd_dessertSysifTable_pre_request(netsnmp_mib_handler *handler,
+- netsnmp_handler_registration *reginfo,
+- netsnmp_agent_request_info *agtreq_info,
+- netsnmp_request_info *requests)
+-{
+- int rc;
+-
+- DEBUGMSGTL(("internal:dessertSysifTable:_mfd_dessertSysifTable_pre_request", "called\n"));
+-
+- if (1 != netsnmp_row_merge_status_first(reginfo, agtreq_info)) {
+- DEBUGMSGTL(("internal:dessertSysifTable",
+- "skipping additional pre_request\n"));
+- return SNMP_ERR_NOERROR;
+- }
+-
+- rc = dessertSysifTable_pre_request(dessertSysifTable_if_ctx.user_ctx);
+- if (MFD_SUCCESS != rc) {
+- /*
+- * nothing we can do about it but log it
+- */
+- DEBUGMSGTL(("dessertSysifTable", "error %d from "
+- "dessertSysifTable_pre_request\n", rc));
+- netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
+- }
+-
+- return SNMP_ERR_NOERROR;
+-} /* _mfd_dessertSysifTable_pre_request */
+-
+-/**
+- * @internal
+- * wrapper
+- */
+-static int
+-_mfd_dessertSysifTable_post_request(netsnmp_mib_handler *handler,
+- netsnmp_handler_registration *reginfo,
+- netsnmp_agent_request_info
+- *agtreq_info,
+- netsnmp_request_info *requests)
+-{
+- dessertSysifTable_rowreq_ctx *rowreq_ctx =
+- netsnmp_container_table_row_extract(requests);
+- int rc, packet_rc;
+-
+- DEBUGMSGTL(("internal:dessertSysifTable:_mfd_dessertSysifTable_post_request", "called\n"));
+-
+- /*
+- * release row context, if deleted
+- */
+- if (rowreq_ctx && (rowreq_ctx->rowreq_flags & MFD_ROW_DELETED))
+- dessertSysifTable_release_rowreq_ctx(rowreq_ctx);
+-
+- /*
+- * wait for last call before calling user
+- */
+- if (1 != netsnmp_row_merge_status_last(reginfo, agtreq_info)) {
+- DEBUGMSGTL(("internal:dessertSysifTable",
+- "waiting for last post_request\n"));
+- return SNMP_ERR_NOERROR;
+- }
+-
+- packet_rc = netsnmp_check_all_requests_error(agtreq_info->asp, 0);
+- rc = dessertSysifTable_post_request(dessertSysifTable_if_ctx.user_ctx,
+- packet_rc);
+- if (MFD_SUCCESS != rc) {
+- /*
+- * nothing we can do about it but log it
+- */
+- DEBUGMSGTL(("dessertSysifTable", "error %d from "
+- "dessertSysifTable_post_request\n", rc));
+- }
+-
+- return SNMP_ERR_NOERROR;
+-} /* _mfd_dessertSysifTable_post_request */
+-
+-/**
+- * @internal
+- * wrapper
+- */
+-static int
+-_mfd_dessertSysifTable_object_lookup(netsnmp_mib_handler *handler,
+- netsnmp_handler_registration *reginfo,
+- netsnmp_agent_request_info
+- *agtreq_info,
+- netsnmp_request_info *requests)
+-{
+- int rc = SNMP_ERR_NOERROR;
+- dessertSysifTable_rowreq_ctx *rowreq_ctx =
+- netsnmp_container_table_row_extract(requests);
+-
+- DEBUGMSGTL(("internal:dessertSysifTable:_mfd_dessertSysifTable_object_lookup", "called\n"));
+-
+- /*
+- * get our context from mfd
+- * dessertSysifTable_interface_ctx *if_ctx =
+- * (dessertSysifTable_interface_ctx *)reginfo->my_reg_void;
+- */
+-
+- if (NULL == rowreq_ctx) {
+- rc = SNMP_ERR_NOCREATION;
+- }
+-
+- if (MFD_SUCCESS != rc)
+- netsnmp_request_set_error_all(requests, rc);
+- else
+- dessertSysifTable_row_prep(rowreq_ctx);
+-
+- return SNMP_VALIDATE_ERR(rc);
+-} /* _mfd_dessertSysifTable_object_lookup */
+-
+-/***********************************************************************
+- *
+- * GET processing
+- *
+- ***********************************************************************/
+-/*
+- * @internal
+- * Retrieve the value for a particular column
+- */
+-NETSNMP_STATIC_INLINE int
+-_dessertSysifTable_get_column(dessertSysifTable_rowreq_ctx * rowreq_ctx,
+- netsnmp_variable_list * var, int column)
+-{
+- int rc = SNMPERR_SUCCESS;
+-
+- DEBUGMSGTL(("internal:dessertSysifTable:_mfd_dessertSysifTable_get_column", "called for %d\n", column));
+-
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- switch (column) {
+-
+- /*
+- * sysifName(2)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
+- */
+- case COLUMN_SYSIFNAME:
+- var->type = ASN_OCTET_STR;
+- rc = sysifName_get(rowreq_ctx, (char **) &var->val.string,
+- &var->val_len);
+- break;
+-
+- /*
+- * sysifMacAddress(3)/MacAddress/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
+- */
+- case COLUMN_SYSIFMACADDRESS:
+- var->type = ASN_OCTET_STR;
+- rc = sysifMacAddress_get(rowreq_ctx, (char **) &var->val.string,
+- &var->val_len);
+- break;
+-
+- /*
+- * sysifInPkts(4)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+- */
+- case COLUMN_SYSIFINPKTS:
+- var->val_len = sizeof(U64);
+- var->type = ASN_COUNTER64;
+- rc = sysifInPkts_get(rowreq_ctx, (U64 *) var->val.string);
+- break;
+-
+- /*
+- * sysifOutPkts(5)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+- */
+- case COLUMN_SYSIFOUTPKTS:
+- var->val_len = sizeof(U64);
+- var->type = ASN_COUNTER64;
+- rc = sysifOutPkts_get(rowreq_ctx, (U64 *) var->val.string);
+- break;
+-
+- /*
+- * sysifInOctets(6)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+- */
+- case COLUMN_SYSIFINOCTETS:
+- var->val_len = sizeof(U64);
+- var->type = ASN_COUNTER64;
+- rc = sysifInOctets_get(rowreq_ctx, (U64 *) var->val.string);
+- break;
+-
+- /*
+- * sysifOutOctets(7)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
+- */
+- case COLUMN_SYSIFOUTOCTETS:
+- var->val_len = sizeof(U64);
+- var->type = ASN_COUNTER64;
+- rc = sysifOutOctets_get(rowreq_ctx, (U64 *) var->val.string);
+- break;
+-
+- default:
+- if (DESSERTSYSIFTABLE_MIN_COL <= column
+- && column <= DESSERTSYSIFTABLE_MAX_COL) {
+- DEBUGMSGTL(("internal:dessertSysifTable:_mfd_dessertSysifTable_get_column", "assume column %d is reserved\n", column));
+- rc = MFD_SKIP;
+- } else {
+- snmp_log(LOG_ERR,
+- "unknown column %d in _dessertSysifTable_get_column\n",
+- column);
+- }
+- break;
+- }
+-
+- return rc;
+-} /* _dessertSysifTable_get_column */
+-
+-int
+-_mfd_dessertSysifTable_get_values(netsnmp_mib_handler *handler,
+- netsnmp_handler_registration *reginfo,
+- netsnmp_agent_request_info *agtreq_info,
+- netsnmp_request_info *requests)
+-{
+- dessertSysifTable_rowreq_ctx *rowreq_ctx =
+- netsnmp_container_table_row_extract(requests);
+- netsnmp_table_request_info *tri;
+- u_char *old_string;
+- void (*dataFreeHook) (void *);
+- int rc;
+-
+- DEBUGMSGTL(("internal:dessertSysifTable:_mfd_dessertSysifTable_get_values", "called\n"));
+-
+- netsnmp_assert(NULL != rowreq_ctx);
+-
+- for (; requests; requests = requests->next) {
+- /*
+- * save old pointer, so we can free it if replaced
+- */
+- old_string = requests->requestvb->val.string;
+- dataFreeHook = requests->requestvb->dataFreeHook;
+- if (NULL == requests->requestvb->val.string) {
+- requests->requestvb->val.string = requests->requestvb->buf;
+- requests->requestvb->val_len =
+- sizeof(requests->requestvb->buf);
+- } else if (requests->requestvb->buf ==
+- requests->requestvb->val.string) {
+- if (requests->requestvb->val_len !=
+- sizeof(requests->requestvb->buf))
+- requests->requestvb->val_len =
+- sizeof(requests->requestvb->buf);
+- }
+-
+- /*
+- * get column data
+- */
+- tri = netsnmp_extract_table_info(requests);
+- if (NULL == tri)
+- continue;
+-
+- rc = _dessertSysifTable_get_column(rowreq_ctx, requests->requestvb,
+- tri->colnum);
+- if (rc) {
+- if (MFD_SKIP == rc) {
+- requests->requestvb->type = SNMP_NOSUCHINSTANCE;
+- rc = SNMP_ERR_NOERROR;
+- }
+- } else if (NULL == requests->requestvb->val.string) {
+- snmp_log(LOG_ERR, "NULL varbind data pointer!\n");
+- rc = SNMP_ERR_GENERR;
+- }
+- if (rc)
+- netsnmp_request_set_error(requests, SNMP_VALIDATE_ERR(rc));
+-
+- /*
+- * if the buffer wasn't used previously for the old data (i.e. it
+- * was allcoated memory) and the get routine replaced the pointer,
+- * we need to free the previous pointer.
+- */
+- if (old_string && (old_string != requests->requestvb->buf) &&
+- (requests->requestvb->val.string != old_string)) {
+- if (dataFreeHook)
+- (*dataFreeHook) (old_string);
+- else
+- free(old_string);
+- }
+- } /* for results */
+-
+- return SNMP_ERR_NOERROR;
+-} /* _mfd_dessertSysifTable_get_values */
+-
+-
+-/***********************************************************************
+- *
+- * SET processing
+- *
+- ***********************************************************************/
+-
+-/*
+- * SET PROCESSING NOT APPLICABLE (per MIB or user setting)
+- */
+-/***********************************************************************
+- *
+- * DATA ACCESS
+- *
+- ***********************************************************************/
+-static void _container_free(netsnmp_container * container);
+-
+-/**
+- * @internal
+- */
+-static int
+-_cache_load(netsnmp_cache * cache, void *vmagic)
+-{
+- DEBUGMSGTL(("internal:dessertSysifTable:_cache_load", "called\n"));
+-
+- if ((NULL == cache) || (NULL == cache->magic)) {
+- snmp_log(LOG_ERR,
+- "invalid cache for dessertSysifTable_cache_load\n");
+- return -1;
+- }
+-
+- /** should only be called for an invalid or expired cache */
+- netsnmp_assert((0 == cache->valid) || (1 == cache->expired));
+-
+- /*
+- * call user code
+- */
+- return dessertSysifTable_container_load((netsnmp_container *) cache->
+- magic);
+-} /* _cache_load */
+-
+-/**
+- * @internal
+- */
+-static void
+-_cache_free(netsnmp_cache * cache, void *magic)
+-{
+- netsnmp_container *container;
+-
+- DEBUGMSGTL(("internal:dessertSysifTable:_cache_free", "called\n"));
+-
+- if ((NULL == cache) || (NULL == cache->magic)) {
+- snmp_log(LOG_ERR,
+- "invalid cache in dessertSysifTable_cache_free\n");
+- return;
+- }
+-
+- container = (netsnmp_container *) cache->magic;
+-
+- _container_free(container);
+-} /* _cache_free */
+-
+-/**
+- * @internal
+- */
+-static void
+-_container_item_free(dessertSysifTable_rowreq_ctx * rowreq_ctx,
+- void *context)
+-{
+- DEBUGMSGTL(("internal:dessertSysifTable:_container_item_free",
+- "called\n"));
+-
+- if (NULL == rowreq_ctx)
+- return;
+-
+- dessertSysifTable_release_rowreq_ctx(rowreq_ctx);
+-} /* _container_item_free */
+-
+-/**
+- * @internal
+- */
+-static void
+-_container_free(netsnmp_container * container)
+-{
+- DEBUGMSGTL(("internal:dessertSysifTable:_container_free", "called\n"));
+-
+- if (NULL == container) {
+- snmp_log(LOG_ERR,
+- "invalid container in dessertSysifTable_container_free\n");
+- return;
+- }
+-
+- /*
+- * call user code
+- */
+- dessertSysifTable_container_free(container);
+-
+- /*
+- * free all items. inefficient, but easy.
+- */
+- CONTAINER_CLEAR(container,
+- (netsnmp_container_obj_func *) _container_item_free,
+- NULL);
+-} /* _container_free */
+-
+-/**
+- * @internal
+- * initialize the container with functions or wrappers
+- */
+-void
+-_dessertSysifTable_container_init(dessertSysifTable_interface_ctx * if_ctx)
+-{
+- DEBUGMSGTL(("internal:dessertSysifTable:_dessertSysifTable_container_init", "called\n"));
+-
+- /*
+- * cache init
+- */
+- if_ctx->cache = netsnmp_cache_create(30, /* timeout in seconds */
+- _cache_load, _cache_free,
+- dessertSysifTable_oid,
+- dessertSysifTable_oid_size);
+-
+- if (NULL == if_ctx->cache) {
+- snmp_log(LOG_ERR, "error creating cache for dessertSysifTable\n");
+- return;
+- }
+-
+- if_ctx->cache->flags = NETSNMP_CACHE_DONT_INVALIDATE_ON_SET;
+-
+- dessertSysifTable_container_init(&if_ctx->container, if_ctx->cache);
+- if (NULL == if_ctx->container)
+- if_ctx->container =
+- netsnmp_container_find("dessertSysifTable:table_container");
+- if (NULL == if_ctx->container) {
+- snmp_log(LOG_ERR, "error creating container in "
+- "dessertSysifTable_container_init\n");
+- return;
+- }
+-
+- if (NULL != if_ctx->cache)
+- if_ctx->cache->magic = (void *) if_ctx->container;
+-} /* _dessertSysifTable_container_init */
+-
+-/**
+- * @internal
+- * shutdown the container with functions or wrappers
+- */
+-void
+-_dessertSysifTable_container_shutdown(dessertSysifTable_interface_ctx *
+- if_ctx)
+-{
+- DEBUGMSGTL(("internal:dessertSysifTable:_dessertSysifTable_container_shutdown", "called\n"));
+-
+- dessertSysifTable_container_shutdown(if_ctx->container);
+-
+- _container_free(if_ctx->container);
+-
+-} /* _dessertSysifTable_container_shutdown */
+-
+-
+-dessertSysifTable_rowreq_ctx *
+-dessertSysifTable_row_find_by_mib_index(dessertSysifTable_mib_index *
+- mib_idx)
+-{
+- dessertSysifTable_rowreq_ctx *rowreq_ctx;
+- oid oid_tmp[MAX_OID_LEN];
+- netsnmp_index oid_idx;
+- int rc;
+-
+- /*
+- * set up storage for OID
+- */
+- oid_idx.oids = oid_tmp;
+- oid_idx.len = sizeof(oid_tmp) / sizeof(oid);
+-
+- /*
+- * convert
+- */
+- rc = dessertSysifTable_index_to_oid(&oid_idx, mib_idx);
+- if (MFD_SUCCESS != rc)
+- return NULL;
+-
+- rowreq_ctx =
+- CONTAINER_FIND(dessertSysifTable_if_ctx.container, &oid_idx);
+-
+- return rowreq_ctx;
+-}
+Index: libdessert0.86-0.86.14/snmp/dessertSysifTable_interface.h
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertSysifTable_interface.h 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,97 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * version : 15899 $ of $
+- *
+- * $Id:$
+- */
+-/** @ingroup interface: Routines to interface to Net-SNMP
+- *
+- * \warning This code should not be modified, called directly,
+- * or used to interpret functionality. It is subject to
+- * change at any time.
+- *
+- * @{
+- */
+-/*
+- * *********************************************************************
+- * *********************************************************************
+- * *********************************************************************
+- * *** ***
+- * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
+- * *** ***
+- * *** ***
+- * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
+- * *** ***
+- * *** ***
+- * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
+- * *** ***
+- * *** ***
+- * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
+- * *** ***
+- * *** ***
+- * *********************************************************************
+- * *********************************************************************
+- * *********************************************************************
+- */
+-#ifndef DESSERTSYSIFTABLE_INTERFACE_H
+-#define DESSERTSYSIFTABLE_INTERFACE_H
+-
+-#ifdef __cplusplus
+-extern "C" {
+-#endif
+-
+-
+-#include "dessertSysifTable.h"
+-
+-
+- /*
+- ********************************************************************
+- * Table declarations
+- */
+-
+- /*
+- * PUBLIC interface initialization routine
+- */
+- void
+- _dessertSysifTable_initialize_interface
+- (dessertSysifTable_registration * user_ctx, u_long flags);
+- void
+- _dessertSysifTable_shutdown_interface
+- (dessertSysifTable_registration * user_ctx);
+-
+- dessertSysifTable_registration
+- *dessertSysifTable_registration_get(void);
+-
+- dessertSysifTable_registration
+- *dessertSysifTable_registration_set(dessertSysifTable_registration
+- * newreg);
+-
+- netsnmp_container *dessertSysifTable_container_get(void);
+- int dessertSysifTable_container_size(void);
+-
+- dessertSysifTable_rowreq_ctx
+- *dessertSysifTable_allocate_rowreq_ctx(void *);
+- void
+- dessertSysifTable_release_rowreq_ctx(dessertSysifTable_rowreq_ctx *
+- rowreq_ctx);
+-
+- int dessertSysifTable_index_to_oid(netsnmp_index * oid_idx,
+- dessertSysifTable_mib_index
+- * mib_idx);
+- int dessertSysifTable_index_from_oid(netsnmp_index *
+- oid_idx,
+- dessertSysifTable_mib_index
+- * mib_idx);
+-
+- /*
+- * access to certain internals. use with caution!
+- */
+- void dessertSysifTable_valid_columns_set(netsnmp_column_info
+- *vc);
+-
+-
+-#ifdef __cplusplus
+-}
+-#endif
+-#endif /* DESSERTSYSIFTABLE_INTERFACE_H */
+-/** @} */
+Index: libdessert0.86-0.86.14/snmp/dessertSysifTable_oids.h
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertSysifTable_oids.h 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,43 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * : generic-table-oids.m2c 12855 2005-09-27 15:56:08Z rstory $
+- *
+- * $Id:$
+- */
+-#ifndef DESSERTSYSIFTABLE_OIDS_H
+-#define DESSERTSYSIFTABLE_OIDS_H
+-
+-#ifdef __cplusplus
+-extern "C" {
+-#endif
+-
+-
+- /*
+- * column number definitions for table dessertSysifTable
+- */
+-#define DESSERTSYSIFTABLE_OID 1,3,6,1,4,1,18898,0,19,10,1,1,7
+-
+-#define COLUMN_SYSIFINDEX 1
+-
+-#define COLUMN_SYSIFNAME 2
+-
+-#define COLUMN_SYSIFMACADDRESS 3
+-
+-#define COLUMN_SYSIFINPKTS 4
+-
+-#define COLUMN_SYSIFOUTPKTS 5
+-
+-#define COLUMN_SYSIFINOCTETS 6
+-
+-#define COLUMN_SYSIFOUTOCTETS 7
+-
+-
+-#define DESSERTSYSIFTABLE_MIN_COL COLUMN_SYSIFNAME
+-#define DESSERTSYSIFTABLE_MAX_COL COLUMN_SYSIFOUTOCTETS
+-
+-
+-
+-#ifdef __cplusplus
+-}
+-#endif
+-#endif /* DESSERTSYSIFTABLE_OIDS_H */
+Index: libdessert0.86-0.86.14/snmp/dessertSysifTable_subagent.c
+===================================================================
+--- libdessert0.86-0.86.14.orig/snmp/dessertSysifTable_subagent.c 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,202 +0,0 @@
+-/*
+- * Note: this file originally auto-generated by mib2c using
+- * version : 15795 $ of $
+- */
+-/*
+- * standard Net-SNMP includes
+- */
+-#include <net-snmp/net-snmp-config.h>
+-#include <net-snmp/net-snmp-includes.h>
+-#include <net-snmp/agent/net-snmp-agent-includes.h>
+-
+-/*
+- * include our parent header
+- */
+-#include "dessertSysifTable.h"
+-
+-#include <signal.h>
+-
+-static int keep_running;
+-
+-static RETSIGTYPE
+-stop_server(int a)
+-{
+- keep_running = 0;
+-}
+-
+-static void
+-usage(void)
+-{
+- printf
+- ("usage: dessertSysifTable [-D<tokens>] [-f] [-L] [-M] [-H] [LISTENING ADDRESSES]\n"
+- "\t-f Do not fork() from the calling shell.\n"
+- "\t-DTOKEN[,TOKEN,...]\n"
+- "\t\tTurn on debugging output for the given TOKEN(s).\n"
+- "\t\tWithout any tokens specified, it defaults to printing\n"
+- "\t\tall the tokens (which is equivalent to the keyword 'ALL').\n"
+- "\t\tYou might want to try ALL for extremely verbose output.\n"
+- "\t\tNote: You can't put a space between the -D and the TOKENs.\n"
+- "\t-H\tDisplay a list of configuration file directives\n"
+- "\t\tunderstood by the agent and then exit.\n"
+- "\t-M\tRun as a normal SNMP Agent instead of an AgentX sub-agent.\n"
+- "\t-x ADDRESS\tconnect to master agent at ADDRESS (default /var/agentx/master).\n"
+- "\t-L\tDo not open a log file; print all messages to stderr.\n");
+- exit(0);
+-}
+-
+-int
+-main(int argc, char **argv)
+-{
+- int agentx_subagent = 1; /* change this if you want to be a SNMP master agent */
+- /*
+- * Defs for arg-handling code: handles setting of policy-related variables
+- */
+- int ch;
+- extern char *optarg;
+- int dont_fork = 0, use_syslog = 0;
+- char *agentx_socket = NULL;
+-
+- while ((ch = getopt(argc, argv, "D:fHLMx:")) != EOF)
+- switch (ch) {
+- case 'D':
+- debug_register_tokens(optarg);
+- snmp_set_do_debugging(1);
+- break;
+- case 'f':
+- dont_fork = 1;
+- break;
+- case 'H':
+- netsnmp_ds_set_boolean(NETSNMP_DS_APPLICATION_ID,
+- NETSNMP_DS_AGENT_NO_ROOT_ACCESS, 1);
+- init_agent("dessertSysifTable"); /* register our .conf handlers */
+- init_dessertSysifTable();
+- init_snmp("dessertSysifTable");
+- fprintf(stderr, "Configuration directives understood:\n");
+- read_config_print_usage(" ");
+- exit(0);
+- case 'M':
+- agentx_subagent = 0;
+- break;
+- case 'L':
+- use_syslog = 0; /* use stderr */
+- break;
+- case 'x':
+- agentx_socket = optarg;
+- break;
+- default:
+- fprintf(stderr, "unknown option %c\n", ch);
+- usage();
+- }
+-
+- if (optind < argc) {
+- int i;
+- /*
+- * There are optional transport addresses on the command line.
+- */
+- DEBUGMSGTL(("snmpd/main", "optind %d, argc %d\n", optind, argc));
+- for (i = optind; i < argc; i++) {
+- char *c, *astring;
+- if ((c = netsnmp_ds_get_string(NETSNMP_DS_APPLICATION_ID,
+- NETSNMP_DS_AGENT_PORTS))) {
+- astring = malloc(strlen(c) + 2 + strlen(argv[i]));
+- if (astring == NULL) {
+- fprintf(stderr, "malloc failure processing argv[%d]\n",
+- i);
+- exit(1);
+- }
+- sprintf(astring, "%s,%s", c, argv[i]);
+- netsnmp_ds_set_string(NETSNMP_DS_APPLICATION_ID,
+- NETSNMP_DS_AGENT_PORTS, astring);
+- SNMP_FREE(astring);
+- } else {
+- netsnmp_ds_set_string(NETSNMP_DS_APPLICATION_ID,
+- NETSNMP_DS_AGENT_PORTS, argv[i]);
+- }
+- }
+- DEBUGMSGTL(("snmpd/main", "port spec: %s\n",
+- netsnmp_ds_get_string(NETSNMP_DS_APPLICATION_ID,
+- NETSNMP_DS_AGENT_PORTS)));
+- }
+-
+- /*
+- * we're an agentx subagent?
+- */
+- if (agentx_subagent) {
+- /*
+- * make us a agentx client.
+- */
+- netsnmp_enable_subagent();
+- if (NULL != agentx_socket)
+- netsnmp_ds_set_string(NETSNMP_DS_APPLICATION_ID,
+- NETSNMP_DS_AGENT_X_SOCKET,
+- agentx_socket);
+- }
+-
+- snmp_disable_log();
+- if (use_syslog)
+- snmp_enable_calllog();
+- else
+- snmp_enable_stderrlog();
+-
+- /*
+- * daemonize
+- */
+- if (!dont_fork) {
+- int rc = netsnmp_daemonize(1, !use_syslog);
+- if (rc)
+- exit(-1);
+- }
+-
+- /*
+- * initialize tcp/ip if necessary
+- */
+- SOCK_STARTUP;
+-
+- /*
+- * initialize the agent library
+- */
+- init_agent("dessertSysifTable");
+-
+- /*
+- * init dessertSysifTable mib code
+- */
+- init_dessertSysifTable();
+-
+- /*
+- * read dessertSysifTable.conf files.
+- */
+- init_snmp("dessertSysifTable");
+-
+- /*
+- * If we're going to be a snmp master agent, initial the ports
+- */
+- if (!agentx_subagent)
+- init_master_agent(); /* open the port to listen on (defaults to udp:161) */
+-
+- /*
+- * In case we recevie a request to stop (kill -TERM or kill -INT)
+- */
+- keep_running = 1;
+- signal(SIGTERM, stop_server);
+- signal(SIGINT, stop_server);
+-
+- /*
+- * you're main loop here...
+- */
+- while (keep_running) {
+- /*
+- * if you use select(), see snmp_select_info() in snmp_api(3)
+- */
+- /*
+- * --- OR ---
+- */
+- agent_check_and_process(1); /* 0 == don't block */
+- }
+-
+- /*
+- * at shutdown time
+- */
+- snmp_shutdown("dessertSysifTable");
+- SOCK_CLEANUP;
+- exit(0);
+-}
+Index: libdessert0.86-0.86.14/src/Makefile.am
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/Makefile.am 2009-12-09 16:38:27.281423443 +0100
+@@ -0,0 +1,3 @@
++
++SUBDIRS = snmp libdessert
++
+Index: libdessert0.86-0.86.14/src/Makefile.in
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/Makefile.in 2009-12-09 16:38:51.091836080 +0100
+@@ -0,0 +1,591 @@
++# Makefile.in generated by automake 1.11 from Makefile.am.
++# @configure_input@
++
++# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
++# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
++# Inc.
++# This Makefile.in is free software; the Free Software Foundation
++# gives unlimited permission to copy and/or distribute it,
++# with or without modifications, as long as this notice is preserved.
++
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
++# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
++# PARTICULAR PURPOSE.
++
++@SET_MAKE@
++VPATH = @srcdir@
++pkgdatadir = $(datadir)/@PACKAGE@
++pkgincludedir = $(includedir)/@PACKAGE@
++pkglibdir = $(libdir)/@PACKAGE@
++pkglibexecdir = $(libexecdir)/@PACKAGE@
++am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
++install_sh_DATA = $(install_sh) -c -m 644
++install_sh_PROGRAM = $(install_sh) -c
++install_sh_SCRIPT = $(install_sh) -c
++INSTALL_HEADER = $(INSTALL_DATA)
++transform = $(program_transform_name)
++NORMAL_INSTALL = :
++PRE_INSTALL = :
++POST_INSTALL = :
++NORMAL_UNINSTALL = :
++PRE_UNINSTALL = :
++POST_UNINSTALL = :
++build_triplet = @build@
++host_triplet = @host@
++subdir = src
++DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
++ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
++am__aclocal_m4_deps = $(top_srcdir)/m4/ac_doxygen.m4 \
++ $(top_srcdir)/m4/ax_pthread.m4 $(top_srcdir)/m4/libtool.m4 \
++ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
++ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
++ $(top_srcdir)/m4/net-snmp.m4 $(top_srcdir)/m4/pcap.m4 \
++ $(top_srcdir)/configure.ac
++am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
++ $(ACLOCAL_M4)
++mkinstalldirs = $(install_sh) -d
++CONFIG_HEADER = $(top_builddir)/config.h
++CONFIG_CLEAN_FILES =
++CONFIG_CLEAN_VPATH_FILES =
++SOURCES =
++DIST_SOURCES =
++RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \
++ html-recursive info-recursive install-data-recursive \
++ install-dvi-recursive install-exec-recursive \
++ install-html-recursive install-info-recursive \
++ install-pdf-recursive install-ps-recursive install-recursive \
++ installcheck-recursive installdirs-recursive pdf-recursive \
++ ps-recursive uninstall-recursive
++RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \
++ distclean-recursive maintainer-clean-recursive
++AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \
++ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \
++ distdir
++ETAGS = etags
++CTAGS = ctags
++DIST_SUBDIRS = $(SUBDIRS)
++DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
++am__relativize = \
++ dir0=`pwd`; \
++ sed_first='s,^\([^/]*\)/.*$$,\1,'; \
++ sed_rest='s,^[^/]*/*,,'; \
++ sed_last='s,^.*/\([^/]*\)$$,\1,'; \
++ sed_butlast='s,/*[^/]*$$,,'; \
++ while test -n "$$dir1"; do \
++ first=`echo "$$dir1" | sed -e "$$sed_first"`; \
++ if test "$$first" != "."; then \
++ if test "$$first" = ".."; then \
++ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
++ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
++ else \
++ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
++ if test "$$first2" = "$$first"; then \
++ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
++ else \
++ dir2="../$$dir2"; \
++ fi; \
++ dir0="$$dir0"/"$$first"; \
++ fi; \
++ fi; \
++ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
++ done; \
++ reldir="$$dir2"
++ACLOCAL = @ACLOCAL@
++AMTAR = @AMTAR@
++AR = @AR@
++AUTOCONF = @AUTOCONF@
++AUTOHEADER = @AUTOHEADER@
++AUTOMAKE = @AUTOMAKE@
++AWK = @AWK@
++CC = @CC@
++CCDEPMODE = @CCDEPMODE@
++CFLAGS = @CFLAGS@
++CLI_LIBS = @CLI_LIBS@
++CPP = @CPP@
++CPPFLAGS = @CPPFLAGS@
++CYGPATH_W = @CYGPATH_W@
++DEFS = @DEFS@
++DEPDIR = @DEPDIR@
++DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@
++DSYMUTIL = @DSYMUTIL@
++DUMPBIN = @DUMPBIN@
++DX_CONFIG = @DX_CONFIG@
++DX_DOCDIR = @DX_DOCDIR@
++DX_DOT = @DX_DOT@
++DX_DOXYGEN = @DX_DOXYGEN@
++DX_DVIPS = @DX_DVIPS@
++DX_EGREP = @DX_EGREP@
++DX_ENV = @DX_ENV@
++DX_FLAG_chi = @DX_FLAG_chi@
++DX_FLAG_chm = @DX_FLAG_chm@
++DX_FLAG_doc = @DX_FLAG_doc@
++DX_FLAG_dot = @DX_FLAG_dot@
++DX_FLAG_html = @DX_FLAG_html@
++DX_FLAG_man = @DX_FLAG_man@
++DX_FLAG_pdf = @DX_FLAG_pdf@
++DX_FLAG_ps = @DX_FLAG_ps@
++DX_FLAG_rtf = @DX_FLAG_rtf@
++DX_FLAG_xml = @DX_FLAG_xml@
++DX_HHC = @DX_HHC@
++DX_LATEX = @DX_LATEX@
++DX_MAKEINDEX = @DX_MAKEINDEX@
++DX_PDFLATEX = @DX_PDFLATEX@
++DX_PERL = @DX_PERL@
++DX_PROJECT = @DX_PROJECT@
++ECHO_C = @ECHO_C@
++ECHO_N = @ECHO_N@
++ECHO_T = @ECHO_T@
++EGREP = @EGREP@
++EXEEXT = @EXEEXT@
++FGREP = @FGREP@
++GREP = @GREP@
++INSTALL = @INSTALL@
++INSTALL_DATA = @INSTALL_DATA@
++INSTALL_PROGRAM = @INSTALL_PROGRAM@
++INSTALL_SCRIPT = @INSTALL_SCRIPT@
++INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
++LD = @LD@
++LDFLAGS = @LDFLAGS@
++LIBDESSERT_LIBRARY_VERSION = @LIBDESSERT_LIBRARY_VERSION@
++LIBOBJS = @LIBOBJS@
++LIBS = @LIBS@
++LIBTOOL = @LIBTOOL@
++LIPO = @LIPO@
++LN_S = @LN_S@
++LTLIBOBJS = @LTLIBOBJS@
++MAKEINFO = @MAKEINFO@
++MKDIR_P = @MKDIR_P@
++NM = @NM@
++NMEDIT = @NMEDIT@
++OBJDUMP = @OBJDUMP@
++OBJEXT = @OBJEXT@
++OTOOL = @OTOOL@
++OTOOL64 = @OTOOL64@
++PACKAGE = @PACKAGE@
++PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
++PACKAGE_NAME = @PACKAGE_NAME@
++PACKAGE_STRING = @PACKAGE_STRING@
++PACKAGE_TARNAME = @PACKAGE_TARNAME@
++PACKAGE_URL = @PACKAGE_URL@
++PACKAGE_VERSION = @PACKAGE_VERSION@
++PATH_SEPARATOR = @PATH_SEPARATOR@
++PCAP_CFLAGS = @PCAP_CFLAGS@
++PCAP_CFLGAS = @PCAP_CFLGAS@
++PCAP_LIBS = @PCAP_LIBS@
++PTHREAD_CC = @PTHREAD_CC@
++PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
++PTHREAD_LIBS = @PTHREAD_LIBS@
++RANLIB = @RANLIB@
++SED = @SED@
++SET_MAKE = @SET_MAKE@
++SHELL = @SHELL@
++SNMP_CFLAGS = @SNMP_CFLAGS@
++SNMP_CFLGAS = @SNMP_CFLGAS@
++SNMP_LIBS = @SNMP_LIBS@
++STRIP = @STRIP@
++VERSION = @VERSION@
++abs_builddir = @abs_builddir@
++abs_srcdir = @abs_srcdir@
++abs_top_builddir = @abs_top_builddir@
++abs_top_srcdir = @abs_top_srcdir@
++ac_ct_CC = @ac_ct_CC@
++ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
++am__include = @am__include@
++am__leading_dot = @am__leading_dot@
++am__quote = @am__quote@
++am__tar = @am__tar@
++am__untar = @am__untar@
++ax_pthread_config = @ax_pthread_config@
++bindir = @bindir@
++build = @build@
++build_alias = @build_alias@
++build_cpu = @build_cpu@
++build_os = @build_os@
++build_vendor = @build_vendor@
++builddir = @builddir@
++datadir = @datadir@
++datarootdir = @datarootdir@
++docdir = @docdir@
++dvidir = @dvidir@
++exec_prefix = @exec_prefix@
++host = @host@
++host_alias = @host_alias@
++host_cpu = @host_cpu@
++host_os = @host_os@
++host_vendor = @host_vendor@
++htmldir = @htmldir@
++includedir = @includedir@
++infodir = @infodir@
++install_sh = @install_sh@
++libdir = @libdir@
++libexecdir = @libexecdir@
++localedir = @localedir@
++localstatedir = @localstatedir@
++lt_ECHO = @lt_ECHO@
++mandir = @mandir@
++mkdir_p = @mkdir_p@
++oldincludedir = @oldincludedir@
++pdfdir = @pdfdir@
++prefix = @prefix@
++program_transform_name = @program_transform_name@
++psdir = @psdir@
++sbindir = @sbindir@
++sharedstatedir = @sharedstatedir@
++srcdir = @srcdir@
++sysconfdir = @sysconfdir@
++target_alias = @target_alias@
++top_build_prefix = @top_build_prefix@
++top_builddir = @top_builddir@
++top_srcdir = @top_srcdir@
++SUBDIRS = snmp libdessert
++all: all-recursive
++
++.SUFFIXES:
++$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
++ @for dep in $?; do \
++ case '$(am__configure_deps)' in \
++ *$$dep*) \
++ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
++ && { if test -f $@; then exit 0; else break; fi; }; \
++ exit 1;; \
++ esac; \
++ done; \
++ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \
++ $(am__cd) $(top_srcdir) && \
++ $(AUTOMAKE) --gnu src/Makefile
++.PRECIOUS: Makefile
++Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
++ @case '$?' in \
++ *config.status*) \
++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
++ *) \
++ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
++ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
++ esac;
++
++$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
++
++$(top_srcdir)/configure: $(am__configure_deps)
++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
++$(ACLOCAL_M4): $(am__aclocal_m4_deps)
++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
++$(am__aclocal_m4_deps):
++
++mostlyclean-libtool:
++ -rm -f *.lo
++
++clean-libtool:
++ -rm -rf .libs _libs
++
++# This directory's subdirectories are mostly independent; you can cd
++# into them and run `make' without going through this Makefile.
++# To change the values of `make' variables: instead of editing Makefiles,
++# (1) if the variable is set in `config.status', edit `config.status'
++# (which will cause the Makefiles to be regenerated when you run `make');
++# (2) otherwise, pass the desired values on the `make' command line.
++$(RECURSIVE_TARGETS):
++ @failcom='exit 1'; \
++ for f in x $$MAKEFLAGS; do \
++ case $$f in \
++ *=* | --[!k]*);; \
++ *k*) failcom='fail=yes';; \
++ esac; \
++ done; \
++ dot_seen=no; \
++ target=`echo $@ | sed s/-recursive//`; \
++ list='$(SUBDIRS)'; 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; \
++ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
++ || eval $$failcom; \
++ done; \
++ if test "$$dot_seen" = "no"; then \
++ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
++ fi; test -z "$$fail"
++
++$(RECURSIVE_CLEAN_TARGETS):
++ @failcom='exit 1'; \
++ for f in x $$MAKEFLAGS; do \
++ case $$f in \
++ *=* | --[!k]*);; \
++ *k*) failcom='fail=yes';; \
++ esac; \
++ done; \
++ dot_seen=no; \
++ case "$@" in \
++ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
++ *) list='$(SUBDIRS)' ;; \
++ esac; \
++ rev=''; for subdir in $$list; do \
++ if test "$$subdir" = "."; then :; else \
++ rev="$$subdir $$rev"; \
++ fi; \
++ done; \
++ rev="$$rev ."; \
++ target=`echo $@ | sed s/-recursive//`; \
++ for subdir in $$rev; do \
++ echo "Making $$target in $$subdir"; \
++ if test "$$subdir" = "."; then \
++ local_target="$$target-am"; \
++ else \
++ local_target="$$target"; \
++ fi; \
++ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
++ || eval $$failcom; \
++ done && test -z "$$fail"
++tags-recursive:
++ list='$(SUBDIRS)'; for subdir in $$list; do \
++ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \
++ done
++ctags-recursive:
++ list='$(SUBDIRS)'; for subdir in $$list; do \
++ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \
++ done
++
++ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
++ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
++ unique=`for i in $$list; do \
++ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
++ done | \
++ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
++ END { if (nonempty) { for (i in files) print i; }; }'`; \
++ mkid -fID $$unique
++tags: TAGS
++
++TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
++ $(TAGS_FILES) $(LISP)
++ set x; \
++ here=`pwd`; \
++ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
++ include_option=--etags-include; \
++ empty_fix=.; \
++ else \
++ include_option=--include; \
++ empty_fix=; \
++ fi; \
++ list='$(SUBDIRS)'; for subdir in $$list; do \
++ if test "$$subdir" = .; then :; else \
++ test ! -f $$subdir/TAGS || \
++ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
++ fi; \
++ done; \
++ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
++ unique=`for i in $$list; do \
++ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
++ done | \
++ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
++ END { if (nonempty) { for (i in files) print i; }; }'`; \
++ shift; \
++ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
++ test -n "$$unique" || unique=$$empty_fix; \
++ if test $$# -gt 0; then \
++ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
++ "$$@" $$unique; \
++ else \
++ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
++ $$unique; \
++ fi; \
++ fi
++ctags: CTAGS
++CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
++ $(TAGS_FILES) $(LISP)
++ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
++ unique=`for i in $$list; do \
++ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
++ done | \
++ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
++ END { if (nonempty) { for (i in files) print i; }; }'`; \
++ test -z "$(CTAGS_ARGS)$$unique" \
++ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
++ $$unique
++
++GTAGS:
++ here=`$(am__cd) $(top_builddir) && pwd` \
++ && $(am__cd) $(top_srcdir) \
++ && gtags -i $(GTAGS_ARGS) "$$here"
++
++distclean-tags:
++ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
++
++distdir: $(DISTFILES)
++ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
++ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
++ list='$(DISTFILES)'; \
++ dist_files=`for file in $$list; do echo $$file; done | \
++ sed -e "s|^$$srcdirstrip/||;t" \
++ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
++ case $$dist_files in \
++ */*) $(MKDIR_P) `echo "$$dist_files" | \
++ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
++ sort -u` ;; \
++ esac; \
++ for file in $$dist_files; do \
++ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
++ if test -d $$d/$$file; then \
++ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
++ if test -d "$(distdir)/$$file"; then \
++ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
++ fi; \
++ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
++ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
++ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
++ fi; \
++ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
++ else \
++ test -f "$(distdir)/$$file" \
++ || cp -p $$d/$$file "$(distdir)/$$file" \
++ || exit 1; \
++ fi; \
++ done
++ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
++ if test "$$subdir" = .; then :; else \
++ test -d "$(distdir)/$$subdir" \
++ || $(MKDIR_P) "$(distdir)/$$subdir" \
++ || exit 1; \
++ fi; \
++ done
++ @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
++ if test "$$subdir" = .; then :; else \
++ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
++ $(am__relativize); \
++ new_distdir=$$reldir; \
++ dir1=$$subdir; dir2="$(top_distdir)"; \
++ $(am__relativize); \
++ new_top_distdir=$$reldir; \
++ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
++ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
++ ($(am__cd) $$subdir && \
++ $(MAKE) $(AM_MAKEFLAGS) \
++ top_distdir="$$new_top_distdir" \
++ distdir="$$new_distdir" \
++ am__remove_distdir=: \
++ am__skip_length_check=: \
++ am__skip_mode_fix=: \
++ distdir) \
++ || exit 1; \
++ fi; \
++ done
++check-am: all-am
++check: check-recursive
++all-am: Makefile
++installdirs: installdirs-recursive
++installdirs-am:
++install: install-recursive
++install-exec: install-exec-recursive
++install-data: install-data-recursive
++uninstall: uninstall-recursive
++
++install-am: all-am
++ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
++
++installcheck: installcheck-recursive
++install-strip:
++ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
++ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
++ `test -z '$(STRIP)' || \
++ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
++mostlyclean-generic:
++
++clean-generic:
++
++distclean-generic:
++ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
++ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
++
++maintainer-clean-generic:
++ @echo "This command is intended for maintainers to use"
++ @echo "it deletes files that may require special tools to rebuild."
++clean: clean-recursive
++
++clean-am: clean-generic clean-libtool mostlyclean-am
++
++distclean: distclean-recursive
++ -rm -f Makefile
++distclean-am: clean-am distclean-generic distclean-tags
++
++dvi: dvi-recursive
++
++dvi-am:
++
++html: html-recursive
++
++html-am:
++
++info: info-recursive
++
++info-am:
++
++install-data-am:
++
++install-dvi: install-dvi-recursive
++
++install-dvi-am:
++
++install-exec-am:
++
++install-html: install-html-recursive
++
++install-html-am:
++
++install-info: install-info-recursive
++
++install-info-am:
++
++install-man:
++
++install-pdf: install-pdf-recursive
++
++install-pdf-am:
++
++install-ps: install-ps-recursive
++
++install-ps-am:
++
++installcheck-am:
++
++maintainer-clean: maintainer-clean-recursive
++ -rm -f Makefile
++maintainer-clean-am: distclean-am maintainer-clean-generic
++
++mostlyclean: mostlyclean-recursive
++
++mostlyclean-am: mostlyclean-generic mostlyclean-libtool
++
++pdf: pdf-recursive
++
++pdf-am:
++
++ps: ps-recursive
++
++ps-am:
++
++uninstall-am:
++
++.MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \
++ install-am install-strip tags-recursive
++
++.PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \
++ all all-am check check-am clean clean-generic clean-libtool \
++ ctags ctags-recursive distclean distclean-generic \
++ distclean-libtool distclean-tags distdir dvi dvi-am html \
++ html-am info info-am install install-am install-data \
++ install-data-am install-dvi install-dvi-am install-exec \
++ install-exec-am install-html install-html-am install-info \
++ install-info-am install-man install-pdf install-pdf-am \
++ install-ps install-ps-am install-strip installcheck \
++ installcheck-am installdirs installdirs-am maintainer-clean \
++ maintainer-clean-generic mostlyclean mostlyclean-generic \
++ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-recursive \
++ uninstall uninstall-am
++
++
++# Tell versions [3.59,3.63) of GNU make to not export all variables.
++# Otherwise a system limit (for SysV at least) may be exceeded.
++.NOEXPORT:
+Index: libdessert0.86-0.86.14/src/libdessert/Makefile.am
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/libdessert/Makefile.am 2009-12-09 16:38:27.291429614 +0100
+@@ -0,0 +1,26 @@
++
++AM_CPPFLAGS = -I$(top_srcdir)/include \
++ -I../snmp \
++ @PCAP_CFLAGS@ \
++ @SNMP_CFLAGS@ \
++ @PTHREAD_CFLAGS@
++
++lib_LTLIBRARIES = libdessert.la
++
++libdessert_la_SOURCES = dessert_agentx.c \
++ dessert_core.c \
++ dessert_meshiface.c \
++ dessert_periodic.c \
++ dessert_cli.c \
++ dessert_log.c \
++ dessert_msg.c \
++ dessert_sysiface.c \
++ dessert_internal.h
++
++libdessert_la_LIBADD = ../snmp/libdessertsnmp.la \
++ @SNMP_LIBS@ \
++ @PCAP_LIBS@ \
++ @CLI_LIBS@ \
++ @PTHREAD_LIBS@
++
++libdessert_la_LDFLAGS = -version-number @LIBDESSERT_LIBRARY_VERSION@
+Index: libdessert0.86-0.86.14/src/libdessert/Makefile.in
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/libdessert/Makefile.in 2009-12-09 16:38:51.145169485 +0100
+@@ -0,0 +1,586 @@
++# Makefile.in generated by automake 1.11 from Makefile.am.
++# @configure_input@
++
++# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
++# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
++# Inc.
++# This Makefile.in is free software; the Free Software Foundation
++# gives unlimited permission to copy and/or distribute it,
++# with or without modifications, as long as this notice is preserved.
++
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
++# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
++# PARTICULAR PURPOSE.
++
++@SET_MAKE@
++
++VPATH = @srcdir@
++pkgdatadir = $(datadir)/@PACKAGE@
++pkgincludedir = $(includedir)/@PACKAGE@
++pkglibdir = $(libdir)/@PACKAGE@
++pkglibexecdir = $(libexecdir)/@PACKAGE@
++am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
++install_sh_DATA = $(install_sh) -c -m 644
++install_sh_PROGRAM = $(install_sh) -c
++install_sh_SCRIPT = $(install_sh) -c
++INSTALL_HEADER = $(INSTALL_DATA)
++transform = $(program_transform_name)
++NORMAL_INSTALL = :
++PRE_INSTALL = :
++POST_INSTALL = :
++NORMAL_UNINSTALL = :
++PRE_UNINSTALL = :
++POST_UNINSTALL = :
++build_triplet = @build@
++host_triplet = @host@
++subdir = src/libdessert
++DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
++ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
++am__aclocal_m4_deps = $(top_srcdir)/m4/ac_doxygen.m4 \
++ $(top_srcdir)/m4/ax_pthread.m4 $(top_srcdir)/m4/libtool.m4 \
++ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
++ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
++ $(top_srcdir)/m4/net-snmp.m4 $(top_srcdir)/m4/pcap.m4 \
++ $(top_srcdir)/configure.ac
++am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
++ $(ACLOCAL_M4)
++mkinstalldirs = $(install_sh) -d
++CONFIG_HEADER = $(top_builddir)/config.h
++CONFIG_CLEAN_FILES =
++CONFIG_CLEAN_VPATH_FILES =
++am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
++am__vpath_adj = case $$p in \
++ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
++ *) f=$$p;; \
++ esac;
++am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
++am__install_max = 40
++am__nobase_strip_setup = \
++ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
++am__nobase_strip = \
++ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
++am__nobase_list = $(am__nobase_strip_setup); \
++ for p in $$list; do echo "$$p $$p"; done | \
++ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
++ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
++ if (++n[$$2] == $(am__install_max)) \
++ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
++ END { for (dir in files) print dir, files[dir] }'
++am__base_list = \
++ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
++ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
++am__installdirs = "$(DESTDIR)$(libdir)"
++LTLIBRARIES = $(lib_LTLIBRARIES)
++libdessert_la_DEPENDENCIES = ../snmp/libdessertsnmp.la
++am_libdessert_la_OBJECTS = dessert_agentx.lo dessert_core.lo \
++ dessert_meshiface.lo dessert_periodic.lo dessert_cli.lo \
++ dessert_log.lo dessert_msg.lo dessert_sysiface.lo
++libdessert_la_OBJECTS = $(am_libdessert_la_OBJECTS)
++libdessert_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
++ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
++ $(libdessert_la_LDFLAGS) $(LDFLAGS) -o $@
++DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
++depcomp = $(SHELL) $(top_srcdir)/depcomp
++am__depfiles_maybe = depfiles
++am__mv = mv -f
++COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
++ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
++LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
++ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
++ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
++CCLD = $(CC)
++LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
++ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
++ $(LDFLAGS) -o $@
++SOURCES = $(libdessert_la_SOURCES)
++DIST_SOURCES = $(libdessert_la_SOURCES)
++ETAGS = etags
++CTAGS = ctags
++DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
++ACLOCAL = @ACLOCAL@
++AMTAR = @AMTAR@
++AR = @AR@
++AUTOCONF = @AUTOCONF@
++AUTOHEADER = @AUTOHEADER@
++AUTOMAKE = @AUTOMAKE@
++AWK = @AWK@
++CC = @CC@
++CCDEPMODE = @CCDEPMODE@
++CFLAGS = @CFLAGS@
++CLI_LIBS = @CLI_LIBS@
++CPP = @CPP@
++CPPFLAGS = @CPPFLAGS@
++CYGPATH_W = @CYGPATH_W@
++DEFS = @DEFS@
++DEPDIR = @DEPDIR@
++DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@
++DSYMUTIL = @DSYMUTIL@
++DUMPBIN = @DUMPBIN@
++DX_CONFIG = @DX_CONFIG@
++DX_DOCDIR = @DX_DOCDIR@
++DX_DOT = @DX_DOT@
++DX_DOXYGEN = @DX_DOXYGEN@
++DX_DVIPS = @DX_DVIPS@
++DX_EGREP = @DX_EGREP@
++DX_ENV = @DX_ENV@
++DX_FLAG_chi = @DX_FLAG_chi@
++DX_FLAG_chm = @DX_FLAG_chm@
++DX_FLAG_doc = @DX_FLAG_doc@
++DX_FLAG_dot = @DX_FLAG_dot@
++DX_FLAG_html = @DX_FLAG_html@
++DX_FLAG_man = @DX_FLAG_man@
++DX_FLAG_pdf = @DX_FLAG_pdf@
++DX_FLAG_ps = @DX_FLAG_ps@
++DX_FLAG_rtf = @DX_FLAG_rtf@
++DX_FLAG_xml = @DX_FLAG_xml@
++DX_HHC = @DX_HHC@
++DX_LATEX = @DX_LATEX@
++DX_MAKEINDEX = @DX_MAKEINDEX@
++DX_PDFLATEX = @DX_PDFLATEX@
++DX_PERL = @DX_PERL@
++DX_PROJECT = @DX_PROJECT@
++ECHO_C = @ECHO_C@
++ECHO_N = @ECHO_N@
++ECHO_T = @ECHO_T@
++EGREP = @EGREP@
++EXEEXT = @EXEEXT@
++FGREP = @FGREP@
++GREP = @GREP@
++INSTALL = @INSTALL@
++INSTALL_DATA = @INSTALL_DATA@
++INSTALL_PROGRAM = @INSTALL_PROGRAM@
++INSTALL_SCRIPT = @INSTALL_SCRIPT@
++INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
++LD = @LD@
++LDFLAGS = @LDFLAGS@
++LIBDESSERT_LIBRARY_VERSION = @LIBDESSERT_LIBRARY_VERSION@
++LIBOBJS = @LIBOBJS@
++LIBS = @LIBS@
++LIBTOOL = @LIBTOOL@
++LIPO = @LIPO@
++LN_S = @LN_S@
++LTLIBOBJS = @LTLIBOBJS@
++MAKEINFO = @MAKEINFO@
++MKDIR_P = @MKDIR_P@
++NM = @NM@
++NMEDIT = @NMEDIT@
++OBJDUMP = @OBJDUMP@
++OBJEXT = @OBJEXT@
++OTOOL = @OTOOL@
++OTOOL64 = @OTOOL64@
++PACKAGE = @PACKAGE@
++PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
++PACKAGE_NAME = @PACKAGE_NAME@
++PACKAGE_STRING = @PACKAGE_STRING@
++PACKAGE_TARNAME = @PACKAGE_TARNAME@
++PACKAGE_URL = @PACKAGE_URL@
++PACKAGE_VERSION = @PACKAGE_VERSION@
++PATH_SEPARATOR = @PATH_SEPARATOR@
++PCAP_CFLAGS = @PCAP_CFLAGS@
++PCAP_CFLGAS = @PCAP_CFLGAS@
++PCAP_LIBS = @PCAP_LIBS@
++PTHREAD_CC = @PTHREAD_CC@
++PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
++PTHREAD_LIBS = @PTHREAD_LIBS@
++RANLIB = @RANLIB@
++SED = @SED@
++SET_MAKE = @SET_MAKE@
++SHELL = @SHELL@
++SNMP_CFLAGS = @SNMP_CFLAGS@
++SNMP_CFLGAS = @SNMP_CFLGAS@
++SNMP_LIBS = @SNMP_LIBS@
++STRIP = @STRIP@
++VERSION = @VERSION@
++abs_builddir = @abs_builddir@
++abs_srcdir = @abs_srcdir@
++abs_top_builddir = @abs_top_builddir@
++abs_top_srcdir = @abs_top_srcdir@
++ac_ct_CC = @ac_ct_CC@
++ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
++am__include = @am__include@
++am__leading_dot = @am__leading_dot@
++am__quote = @am__quote@
++am__tar = @am__tar@
++am__untar = @am__untar@
++ax_pthread_config = @ax_pthread_config@
++bindir = @bindir@
++build = @build@
++build_alias = @build_alias@
++build_cpu = @build_cpu@
++build_os = @build_os@
++build_vendor = @build_vendor@
++builddir = @builddir@
++datadir = @datadir@
++datarootdir = @datarootdir@
++docdir = @docdir@
++dvidir = @dvidir@
++exec_prefix = @exec_prefix@
++host = @host@
++host_alias = @host_alias@
++host_cpu = @host_cpu@
++host_os = @host_os@
++host_vendor = @host_vendor@
++htmldir = @htmldir@
++includedir = @includedir@
++infodir = @infodir@
++install_sh = @install_sh@
++libdir = @libdir@
++libexecdir = @libexecdir@
++localedir = @localedir@
++localstatedir = @localstatedir@
++lt_ECHO = @lt_ECHO@
++mandir = @mandir@
++mkdir_p = @mkdir_p@
++oldincludedir = @oldincludedir@
++pdfdir = @pdfdir@
++prefix = @prefix@
++program_transform_name = @program_transform_name@
++psdir = @psdir@
++sbindir = @sbindir@
++sharedstatedir = @sharedstatedir@
++srcdir = @srcdir@
++sysconfdir = @sysconfdir@
++target_alias = @target_alias@
++top_build_prefix = @top_build_prefix@
++top_builddir = @top_builddir@
++top_srcdir = @top_srcdir@
++AM_CPPFLAGS = -I$(top_srcdir)/include \
++ -I../snmp \
++ @PCAP_CFLAGS@ \
++ @SNMP_CFLAGS@ \
++ @PTHREAD_CFLAGS@
++
++lib_LTLIBRARIES = libdessert.la
++libdessert_la_SOURCES = dessert_agentx.c \
++ dessert_core.c \
++ dessert_meshiface.c \
++ dessert_periodic.c \
++ dessert_cli.c \
++ dessert_log.c \
++ dessert_msg.c \
++ dessert_sysiface.c \
++ dessert_internal.h
++
++libdessert_la_LIBADD = ../snmp/libdessertsnmp.la \
++ @SNMP_LIBS@ \
++ @PCAP_LIBS@ \
++ @CLI_LIBS@ \
++ @PTHREAD_LIBS@
++
++libdessert_la_LDFLAGS = -version-number @LIBDESSERT_LIBRARY_VERSION@
++all: all-am
++
++.SUFFIXES:
++.SUFFIXES: .c .lo .o .obj
++$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
++ @for dep in $?; do \
++ case '$(am__configure_deps)' in \
++ *$$dep*) \
++ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
++ && { if test -f $@; then exit 0; else break; fi; }; \
++ exit 1;; \
++ esac; \
++ done; \
++ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libdessert/Makefile'; \
++ $(am__cd) $(top_srcdir) && \
++ $(AUTOMAKE) --gnu src/libdessert/Makefile
++.PRECIOUS: Makefile
++Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
++ @case '$?' in \
++ *config.status*) \
++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
++ *) \
++ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
++ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
++ esac;
++
++$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
++
++$(top_srcdir)/configure: $(am__configure_deps)
++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
++$(ACLOCAL_M4): $(am__aclocal_m4_deps)
++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
++$(am__aclocal_m4_deps):
++install-libLTLIBRARIES: $(lib_LTLIBRARIES)
++ @$(NORMAL_INSTALL)
++ test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)"
++ @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
++ list2=; for p in $$list; do \
++ if test -f $$p; then \
++ list2="$$list2 $$p"; \
++ else :; fi; \
++ done; \
++ test -z "$$list2" || { \
++ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \
++ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \
++ }
++
++uninstall-libLTLIBRARIES:
++ @$(NORMAL_UNINSTALL)
++ @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
++ for p in $$list; do \
++ $(am__strip_dir) \
++ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \
++ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \
++ done
++
++clean-libLTLIBRARIES:
++ -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
++ @list='$(lib_LTLIBRARIES)'; for p in $$list; do \
++ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
++ test "$$dir" != "$$p" || dir=.; \
++ echo "rm -f \"$${dir}/so_locations\""; \
++ rm -f "$${dir}/so_locations"; \
++ done
++libdessert.la: $(libdessert_la_OBJECTS) $(libdessert_la_DEPENDENCIES)
++ $(libdessert_la_LINK) -rpath $(libdir) $(libdessert_la_OBJECTS) $(libdessert_la_LIBADD) $(LIBS)
++
++mostlyclean-compile:
++ -rm -f *.$(OBJEXT)
++
++distclean-compile:
++ -rm -f *.tab.c
++
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dessert_agentx.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dessert_cli.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dessert_core.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dessert_log.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dessert_meshiface.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dessert_msg.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dessert_periodic.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dessert_sysiface.Plo@am__quote@
++
++.c.o:
++@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
++@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCC_FALSE@ $(COMPILE) -c $<
++
++.c.obj:
++@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
++@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
++
++.c.lo:
++@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
++@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
++
++mostlyclean-libtool:
++ -rm -f *.lo
++
++clean-libtool:
++ -rm -rf .libs _libs
++
++ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
++ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
++ unique=`for i in $$list; do \
++ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
++ done | \
++ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
++ END { if (nonempty) { for (i in files) print i; }; }'`; \
++ mkid -fID $$unique
++tags: TAGS
++
++TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
++ $(TAGS_FILES) $(LISP)
++ set x; \
++ here=`pwd`; \
++ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
++ unique=`for i in $$list; do \
++ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
++ done | \
++ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
++ END { if (nonempty) { for (i in files) print i; }; }'`; \
++ shift; \
++ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
++ test -n "$$unique" || unique=$$empty_fix; \
++ if test $$# -gt 0; then \
++ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
++ "$$@" $$unique; \
++ else \
++ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
++ $$unique; \
++ fi; \
++ fi
++ctags: CTAGS
++CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
++ $(TAGS_FILES) $(LISP)
++ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
++ unique=`for i in $$list; do \
++ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
++ done | \
++ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
++ END { if (nonempty) { for (i in files) print i; }; }'`; \
++ test -z "$(CTAGS_ARGS)$$unique" \
++ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
++ $$unique
++
++GTAGS:
++ here=`$(am__cd) $(top_builddir) && pwd` \
++ && $(am__cd) $(top_srcdir) \
++ && gtags -i $(GTAGS_ARGS) "$$here"
++
++distclean-tags:
++ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
++
++distdir: $(DISTFILES)
++ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
++ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
++ list='$(DISTFILES)'; \
++ dist_files=`for file in $$list; do echo $$file; done | \
++ sed -e "s|^$$srcdirstrip/||;t" \
++ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
++ case $$dist_files in \
++ */*) $(MKDIR_P) `echo "$$dist_files" | \
++ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
++ sort -u` ;; \
++ esac; \
++ for file in $$dist_files; do \
++ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
++ if test -d $$d/$$file; then \
++ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
++ if test -d "$(distdir)/$$file"; then \
++ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
++ fi; \
++ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
++ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
++ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
++ fi; \
++ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
++ else \
++ test -f "$(distdir)/$$file" \
++ || cp -p $$d/$$file "$(distdir)/$$file" \
++ || exit 1; \
++ fi; \
++ done
++check-am: all-am
++check: check-am
++all-am: Makefile $(LTLIBRARIES)
++installdirs:
++ for dir in "$(DESTDIR)$(libdir)"; do \
++ test -z "$$dir" || $(MKDIR_P) "$$dir"; \
++ done
++install: install-am
++install-exec: install-exec-am
++install-data: install-data-am
++uninstall: uninstall-am
++
++install-am: all-am
++ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
++
++installcheck: installcheck-am
++install-strip:
++ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
++ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
++ `test -z '$(STRIP)' || \
++ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
++mostlyclean-generic:
++
++clean-generic:
++
++distclean-generic:
++ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
++ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
++
++maintainer-clean-generic:
++ @echo "This command is intended for maintainers to use"
++ @echo "it deletes files that may require special tools to rebuild."
++clean: clean-am
++
++clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
++ mostlyclean-am
++
++distclean: distclean-am
++ -rm -rf ./$(DEPDIR)
++ -rm -f Makefile
++distclean-am: clean-am distclean-compile distclean-generic \
++ distclean-tags
++
++dvi: dvi-am
++
++dvi-am:
++
++html: html-am
++
++html-am:
++
++info: info-am
++
++info-am:
++
++install-data-am:
++
++install-dvi: install-dvi-am
++
++install-dvi-am:
++
++install-exec-am: install-libLTLIBRARIES
++
++install-html: install-html-am
++
++install-html-am:
++
++install-info: install-info-am
++
++install-info-am:
++
++install-man:
++
++install-pdf: install-pdf-am
++
++install-pdf-am:
++
++install-ps: install-ps-am
++
++install-ps-am:
++
++installcheck-am:
++
++maintainer-clean: maintainer-clean-am
++ -rm -rf ./$(DEPDIR)
++ -rm -f Makefile
++maintainer-clean-am: distclean-am maintainer-clean-generic
++
++mostlyclean: mostlyclean-am
++
++mostlyclean-am: mostlyclean-compile mostlyclean-generic \
++ mostlyclean-libtool
++
++pdf: pdf-am
++
++pdf-am:
++
++ps: ps-am
++
++ps-am:
++
++uninstall-am: uninstall-libLTLIBRARIES
++
++.MAKE: install-am install-strip
++
++.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
++ clean-libLTLIBRARIES clean-libtool ctags distclean \
++ distclean-compile distclean-generic distclean-libtool \
++ distclean-tags distdir dvi dvi-am html html-am info info-am \
++ install install-am install-data install-data-am install-dvi \
++ install-dvi-am install-exec install-exec-am install-html \
++ install-html-am install-info install-info-am \
++ install-libLTLIBRARIES install-man install-pdf install-pdf-am \
++ install-ps install-ps-am install-strip installcheck \
++ installcheck-am installdirs maintainer-clean \
++ maintainer-clean-generic mostlyclean mostlyclean-compile \
++ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
++ tags uninstall uninstall-am uninstall-libLTLIBRARIES
++
++
++# Tell versions [3.59,3.63) of GNU make to not export all variables.
++# Otherwise a system limit (for SysV at least) may be exceeded.
++.NOEXPORT:
+Index: libdessert0.86-0.86.14/src/libdessert/dessert_agentx.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/libdessert/dessert_agentx.c 2009-12-09 16:38:27.294762951 +0100
+@@ -0,0 +1,563 @@
++/******************************************************************************
++ Copyright 2009, The DES-SERT Team, Freie Universitaet Berlin (FUB).
++ All rights reserved.
++
++ These sources were originally developed by David Gutzmann
++ at Freie Universitaet Berlin (http://www.fu-berlin.de/),
++ Computer Systems and Telematics / Distributed, Embedded Systems (DES) group
++ (http://cst.mi.fu-berlin.de/, http://www.des-testbed.net/)
++ ------------------------------------------------------------------------------
++ This program is free software: you can redistribute it and/or modify it under
++ the terms of the GNU General Public License as published by the Free Software
++ Foundation, either version 3 of the License, or (at your option) any later
++ version.
++
++ This program is distributed in the hope that it will be useful, but WITHOUT
++ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
++ FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License along with
++ this program. If not, see http://www.gnu.org/licenses/ .
++ ------------------------------------------------------------------------------
++ For further information and questions please use the web site
++ http://www.des-testbed.net/
++ *******************************************************************************/
++
++#include "dessert_internal.h"
++#include <dessert/dessert.h>
++
++/* global data storage // P U B L I C */
++
++/* global data storage // P R I V A T E */
++pthread_rwlock_t _dessert_appstats_cblist_lock = PTHREAD_RWLOCK_INITIALIZER;
++dessert_agentx_appstats_cb_entry_t *_dessert_appstats_cblist = NULL;
++
++pthread_rwlock_t _dessert_appparams_cblist_lock = PTHREAD_RWLOCK_INITIALIZER;
++dessert_agentx_appparams_cb_entry_t *_dessert_appparams_cblist = NULL;
++
++/* local data storage*/
++int keep_snmp_running = 1;
++
++pthread_mutex_t _dessert_agentx_appparams_nextindex_mutex =
++ PTHREAD_MUTEX_INITIALIZER;
++uint8_t _dessert_agentx_appparams_nextindex = 0;
++
++/* internal functions forward declarations*/
++static void *_dessert_agentx_worker(void *arg);
++static dessert_agentx_appstats_cb_entry_t *_dessert_agentx_appstats_add(
++ dessert_agentx_appstatscb_get_t *c, uint8_t bulknobulk_flag);
++static uint8_t _dessert_agentx_appparams_new_index(void);
++
++/******************************************************************************
++ *
++ * EXTERNAL / PUBLIC
++ *
++ * NET - S N M P // A G E N T _ X
++ *
++ ******************************************************************************/
++
++/******************************************************************************
++ * appStats
++ ******************************************************************************/
++
++/** Creates and initializes a new dessert_agentx_appstats_t.
++ *
++ * @return the new dessert_agentx_appstats_t
++ *
++ * @warning A dessert_agentx_appstats_t allocated with this function must be
++ * freed with dessert_agentx_appstats_destroy().
++ *
++ * @see dessert_agentx_appstats_destroy()
++ *
++ * @par Description:\n
++ *
++ */
++dessert_agentx_appstats_t *dessert_agentx_appstats_new() {
++ dessert_agentx_appstats_t *appstat;
++
++ appstat = malloc(sizeof(dessert_agentx_appstats_t));
++
++ appstat->prev = appstat;
++ appstat->next = NULL;
++
++ memset(appstat->name,0, sizeof(appstat->name));
++ memset(appstat->desc,0, sizeof(appstat->desc));
++
++ appstat->value_type = DESSERT_APPSTATS_VALUETYPE_BOOL;
++ appstat->node_or_link = DESSERT_APPSTATS_NODEORLINK_NONE;
++ memset(appstat->macaddress1, 0, ETHER_ADDR_LEN);
++ memset(appstat->macaddress2, 0, ETHER_ADDR_LEN);
++
++ appstat->bool = DESSERT_APPSTATS_BOOL_FALSE;
++
++ return appstat;
++}
++
++/** Frees a dessert_agentx_appstats_t.
++ *
++ * @param appstat the dessert_agentx_appstats_t to be freed
++ *
++ * @warning Only use this method to free a dessert_agentx_appstats_t which was allocated with dessert_agentx_appstats_new().
++ *
++ * @see dessert_agentx_appstats_new()
++ *
++ * @par Description:\n
++ */
++void dessert_agentx_appstats_destroy(dessert_agentx_appstats_t *appstat) {
++ free(appstat);
++}
++
++/** Adds an application statistics callback.
++ *
++ * @param[in] *c the callback to add
++ *
++ * @retval pointer to the corresponding callback entry on success
++ * @retval NULL otherwise
++ *
++ * @par Description:\n
++ *
++ */
++dessert_agentx_appstats_cb_entry_t *dessert_agentx_appstats_add(
++ dessert_agentx_appstatscb_get_t *c) {
++
++ return (_dessert_agentx_appstats_add(c, DESSERT_APPSTATS_CB_NOBULK));
++}
++
++/** Adds an application statistics bulk callback.
++ *
++ * @param[in] *c the callback to add
++ *
++ * @retval pointer to the corresponding callback entry on success
++ * @retval NULL otherwise
++ *
++ * @par Description:\n
++ *
++ */
++dessert_agentx_appstats_cb_entry_t *dessert_agentx_appstats_add_bulk(
++ dessert_agentx_appstatscb_get_t *c) {
++
++ return (_dessert_agentx_appstats_add(c, DESSERT_APPSTATS_CB_BULK));
++}
++
++/** Deletes an application statistics callback.
++ *
++ * @param *e pointer to a callback entry
++ *
++ * @retval DESSERT_OK on success
++ * @retval DESSERT_ERR otherwise
++ *
++ * @see dessert_agentx_appstats_add()
++ * @see dessert_agentx_appstats_add_bulk()
++ *
++ * @par Description:\n
++ */
++int dessert_agentx_appstats_del(dessert_agentx_appstats_cb_entry_t *e) {
++
++ if (e == NULL) {
++ return DESSERT_ERR;
++ }
++
++ pthread_rwlock_wrlock(&_dessert_appstats_cblist_lock);
++ DL_DELETE(_dessert_appstats_cblist, e);
++ pthread_rwlock_unlock(&_dessert_appstats_cblist_lock);
++
++ free(e);
++
++ return DESSERT_OK;
++}
++
++/******************************************************************************
++ * appParams
++ ******************************************************************************/
++
++/** Creates and initializes a new dessert_agentx_appparams_t.
++ *
++ * @return the new dessert_agentx_appparams_t
++ *
++ * @warning A dessert_agentx_appparams_t allocated with this function must be
++ * freed with dessert_agentx_appparams_destroy().
++ *
++ * @see dessert_agentx_appparams_destroy()
++ *
++ * @par Description:\n
++ *
++ */
++dessert_agentx_appparams_t *dessert_agentx_appparam_new() {
++ dessert_agentx_appparams_t *appparam;
++
++ appparam = malloc(sizeof(dessert_agentx_appparams_t));
++
++ memset(appparam->name,0, sizeof(appparam->name));
++ memset(appparam->desc,0, sizeof(appparam->desc));
++
++ appparam->value_type = DESSERT_APPPARAMS_VALUETYPE_BOOL;
++
++ appparam->bool = DESSERT_APPSTATS_BOOL_FALSE;
++
++ return appparam;
++}
++
++/** Frees a dessert_agentx_appparams_t.
++ *
++ * @param appparam the dessert_agentx_appparams_t to be freed
++ *
++ * @warning Only use this method to free a dessert_agentx_appparams_t which was
++ * allocated with dessert_agentx_appparams_new().
++ *
++ * @see dessert_agentx_appparams_new()
++ *
++ * @par Description:\n
++ */
++void dessert_agentx_appparam_destroy(dessert_agentx_appparams_t *appparam) {
++ free(appparam);
++}
++
++/** Adds an application parameter callback.
++ *
++ * @param[in] *c the callback to add
++ *
++ * @retval pointer to the corresponding callback entry on success
++ * @retval NULL otherwise
++ *
++ * @par Description:\n
++ *
++ */
++dessert_agentx_appparams_cb_entry_t *dessert_agentx_appparams_add(
++ dessert_agentx_appparamscb_get_t *get,
++ dessert_agentx_appparamscb_set_t *set) {
++
++ dessert_agentx_appparams_cb_entry_t *e;
++
++ e = malloc(sizeof(dessert_agentx_appparams_cb_entry_t));
++
++ if (e == NULL) {
++ dessert_err("failed to allocate buffer for new dessert_agentx_appparams_entry_t");
++ return (NULL);
++ }
++
++ e->index = _dessert_agentx_appparams_new_index();
++ e->get = get;
++ e->set = set;
++
++ pthread_rwlock_wrlock(&_dessert_appparams_cblist_lock);
++ DL_APPEND(_dessert_appparams_cblist, e);
++ pthread_rwlock_unlock(&_dessert_appparams_cblist_lock);
++
++ return (e);
++}
++
++/** Deletes an application parameter callback.
++ *
++ * @param *e pointer to a callback entry
++ *
++ * @retval DESSERT_OK on success
++ * @retval DESSERT_ERR otherwise
++ *
++ * @see dessert_agentx_appparams_add()
++ *
++ * @par Description:\n
++ */
++int dessert_agentx_appparams_del(dessert_agentx_appparams_cb_entry_t *e) {
++
++ if (e == NULL) {
++ return DESSERT_ERR;
++ }
++
++ pthread_rwlock_wrlock(&_dessert_appparams_cblist_lock);
++ DL_DELETE(_dessert_appparams_cblist, e);
++ pthread_rwlock_unlock(&_dessert_appparams_cblist_lock);
++
++ /* TODO: invalidate row*/
++
++ return DESSERT_OK;
++}
++
++/******************************************************************************
++ *
++ * INTERNAL / PRIVATE
++ *
++ * NET - S N M P // A G E N T _ X
++ *
++ ******************************************************************************/
++
++/******************************************************************************
++ * appStats
++ ******************************************************************************/
++
++void _dessert_agentx_appstats_free(dessert_agentx_appstats_t *appstat){
++ if (appstat->value_type == DESSERT_APPSTATS_VALUETYPE_OCTETSTRING
++ && appstat->octetstring != NULL) {
++ free(appstat->octetstring);
++ }
++ dessert_agentx_appstats_destroy(appstat);
++}
++
++void _dessert_agentx_appstats_free_list(
++ dessert_agentx_appstats_t **appstats_list) {
++ dessert_agentx_appstats_t *appstat;
++ dessert_agentx_appstats_t *tbf;
++
++ for (appstat = (*appstats_list); appstat;) {
++ tbf = appstat;
++ appstat = appstat->next;
++ _dessert_agentx_appstats_free(tbf);
++ }
++}
++
++int _dessert_agentx_appstats_harvest_callbacks(
++ dessert_agentx_appstats_t **appstats_list) {
++ dessert_agentx_appstats_cb_entry_t *cbe;
++ dessert_agentx_appstats_t *new_appstat;
++ dessert_agentx_appstats_t *appstat;
++ int res = 0;
++
++ pthread_rwlock_rdlock(&_dessert_appstats_cblist_lock);
++ DL_FOREACH(_dessert_appstats_cblist, cbe) {
++
++ new_appstat = dessert_agentx_appstats_new();
++ if (new_appstat == NULL) {
++ dessert_err("failed to allocate buffer for new dessert_agentx_appstats_entry_t");
++
++ dessert_err("freeing appstats harvested so far...");
++ _dessert_agentx_appstats_free_list(appstats_list);
++
++ return DESSERT_ERR;
++ }
++
++ res = cbe->c(new_appstat);
++
++ if (res == DESSERT_OK) {
++ if (cbe->isbulk_flag & DESSERT_APPSTATS_CB_NOBULK) {
++
++ DL_APPEND(*appstats_list, new_appstat);
++ } else { // DESSERT_APPSTATS_BULK
++ dessert_agentx_appstats_t temp;
++ DL_FOREACH(new_appstat, appstat ) {
++ temp.next = appstat->next;
++ temp.prev = appstat->prev;
++ DL_APPEND(*appstats_list, appstat);
++ appstat = &temp;
++ }
++ }
++ } else {
++ dessert_err("freeing list of appstats received from callback...");
++ _dessert_agentx_appstats_free_list(&new_appstat);
++ pthread_rwlock_unlock(&_dessert_appstats_cblist_lock);
++ dessert_agentx_appstats_del(cbe);
++ pthread_rwlock_rdlock(&_dessert_appstats_cblist_lock);
++ }
++
++ }
++ pthread_rwlock_unlock(&_dessert_appstats_cblist_lock);
++
++ return DESSERT_OK;
++}
++
++/******************************************************************************
++ * appParams
++ ******************************************************************************/
++
++void _dessert_agentx_appparams_free(dessert_agentx_appparams_t *appparam) {
++ if (appparam->value_type == DESSERT_APPPARAMS_VALUETYPE_OCTETSTRING
++ && appparam->octetstring != NULL) {
++ free(appparam->octetstring);
++ }
++ dessert_agentx_appparam_destroy(appparam);
++}
++
++void _dessert_agentx_appparams_free_list(
++ dessert_agentx_appparams_t **appparams_list) {
++ dessert_agentx_appparams_t *appparam;
++ dessert_agentx_appparams_t *tbf;
++
++ for (appparam = (*appparams_list); appparam;) {
++ tbf = appparam;
++ appparam = appparam->next;
++ _dessert_agentx_appparams_free(tbf);
++ }
++}
++
++int _dessert_agentx_appparams_harvest_callbacks(
++ dessert_agentx_appparams_t **appparams_list) {
++ dessert_agentx_appparams_cb_entry_t *cbe;
++ dessert_agentx_appparams_t *new_appparam;
++ int res = 0;
++
++ pthread_rwlock_rdlock(&_dessert_appparams_cblist_lock);
++ DL_FOREACH(_dessert_appparams_cblist, cbe) {
++ new_appparam = dessert_agentx_appparam_new();
++
++ if (new_appparam == NULL) {
++ dessert_err("failed to allocate buffer for new dessert_agentx_appparams_entry_t");
++
++ dessert_err("freeing appstats harvested so far...");
++ _dessert_agentx_appparams_free_list(appparams_list);
++
++ return DESSERT_ERR;
++ }
++
++ res = cbe->get(new_appparam);
++ new_appparam->index = cbe->index;
++
++ if (res == DESSERT_OK) {
++ DL_APPEND(*appparams_list, new_appparam);
++ } else {
++ _dessert_agentx_appparams_free(new_appparam);
++ pthread_rwlock_unlock(&_dessert_appparams_cblist_lock);
++ dessert_agentx_appparams_del(cbe);
++ pthread_rwlock_rdlock(&_dessert_appparams_cblist_lock);
++ }
++
++ } // DL_FOREACH
++
++ pthread_rwlock_unlock(&_dessert_appparams_cblist_lock);
++
++ return DESSERT_OK;
++}
++
++dessert_agentx_appparamscb_set_t *_dessert_agentx_appparams_getsettercbforindex(
++ int index) {
++ dessert_agentx_appparams_cb_entry_t *cbe;
++
++ pthread_rwlock_rdlock(&_dessert_appparams_cblist_lock);
++ DL_FOREACH(_dessert_appparams_cblist, cbe)
++ if (cbe->index == index)
++ break;
++ pthread_rwlock_unlock(&_dessert_appparams_cblist_lock);
++
++ if (cbe->index == index)
++
++ return cbe->set;
++ else {
++
++ return NULL;
++ }
++}
++
++/******************************************************************************
++ * other
++ ******************************************************************************/
++
++/** setup and initialize net-snmp subagent (via agent x)*/
++void _dessert_agentx_init_subagent() {
++ /**************************************************************************
++ * setup snmp handling....
++ *************************************************************************/
++
++ pthread_t snmp_worker;
++
++ snmp_enable_calllog();
++ //debug_register_tokens("trace");
++ //debug_register_tokens("tdomain");
++ debug_register_tokens(AGENT);
++ //debug_register_tokens("snmp_agent");
++ //debug_register_tokens("helper:table:req");
++
++ debug_register_tokens("dessertAppParamsTable");
++ debug_register_tokens("verbose:dessertAppParamsTable");
++ debug_register_tokens("internal:dessertAppParamsTable");
++
++ debug_register_tokens("dessertAppParamsTable");
++ debug_register_tokens("verbose:dessertAppStatsTable");
++ debug_register_tokens("internal:dessertAppStatsTable");
++
++ snmp_set_do_debugging(1);
++
++ netsnmp_log_handler *logh;
++
++ logh = netsnmp_register_loghandler(NETSNMP_LOGHANDLER_FILE, LOG_DEBUG);
++ if (logh) {
++ logh->pri_max = LOG_EMERG;
++ logh->token = strdup("/tmp/dessertAGENTX.log");
++ }
++
++ netsnmp_ds_set_boolean(NETSNMP_DS_APPLICATION_ID, NETSNMP_DS_AGENT_ROLE, 1);
++
++ //SOCK_STARTUP;
++ init_agent(AGENT);
++
++ /*
++ * initialize the scalars
++ */
++ init_dessertObjects();
++
++ /*
++ * init dessert{Mesh, Sys}ifTable mib code
++ */
++ init_dessertMeshifTable();
++ init_dessertSysifTable();
++
++ /*
++ * init dessertApp{Stats, Param}Table mib code
++ */
++ init_dessertAppParamsTable();
++ init_dessertAppStatsTable();
++
++ init_snmp(AGENT);
++ DEBUGMSGTL((AGENT, "Initialized agent and snmp.\n"));
++
++ pthread_create(&snmp_worker, NULL, _dessert_agentx_worker, NULL);
++}
++
++void dessert_agentx_stop_subagent() {
++ keep_snmp_running = 0;
++}
++
++/******************************************************************************
++ *
++ * LOCAL
++ *
++ * NET - S N M P // A G E N T _ X
++ *
++ ******************************************************************************/
++
++static dessert_agentx_appstats_cb_entry_t *_dessert_agentx_appstats_add(
++ dessert_agentx_appstatscb_get_t *c, uint8_t bulknobulk_flag) {
++
++ dessert_agentx_appstats_cb_entry_t *e;
++
++ e = malloc(sizeof(dessert_agentx_appstats_cb_entry_t));
++
++ if (e == NULL) {
++ dessert_err("failed to allocate buffer for new dessert_agentx_appstats_entry_t");
++ return (NULL);
++ }
++
++ e->isbulk_flag |= bulknobulk_flag;
++ e->c = c;
++
++ pthread_rwlock_wrlock(&_dessert_appstats_cblist_lock);
++ DL_APPEND(_dessert_appstats_cblist, e);
++ pthread_rwlock_unlock(&_dessert_appstats_cblist_lock);
++
++ return (e);
++}
++
++static uint8_t _dessert_agentx_appparams_new_index(void) {
++ uint8_t index;
++
++ pthread_mutex_lock(&_dessert_agentx_appparams_nextindex_mutex);
++ index = _dessert_agentx_appparams_nextindex++;
++ pthread_mutex_unlock(&_dessert_agentx_appparams_nextindex_mutex);
++
++ return index;
++}
++
++static void *_dessert_agentx_worker(void *arg) {
++ DEBUGMSGTL((AGENT, "snmp_worker running...\n"));
++ dessert_info("snmp_worker running...");
++
++ while (keep_snmp_running) {
++ /*
++ * if you use select(), see snmp_select_info() in snmp_api(3)
++ */
++ /*
++ * --- OR ---
++ */
++ agent_check_and_process(1); /* 0 == don't block */
++ }
++
++ dessert_info("snmp_worker exiting...");
++
++ return (NULL);
++}
+Index: libdessert0.86-0.86.14/src/libdessert/dessert_cli.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/libdessert/dessert_cli.c 2009-12-09 16:38:27.294762951 +0100
+@@ -0,0 +1,257 @@
++/******************************************************************************
++ Copyright 2009, The DES-SERT Team, Freie Universitaet Berlin (FUB).
++ All rights reserved.
++
++ These sources were originally developed by Philipp Schmidt
++ at Freie Universitaet Berlin (http://www.fu-berlin.de/),
++ Computer Systems and Telematics / Distributed, Embedded Systems (DES) group
++ (http://cst.mi.fu-berlin.de/, http://www.des-testbed.net/)
++ ------------------------------------------------------------------------------
++ This program is free software: you can redistribute it and/or modify it under
++ the terms of the GNU General Public License as published by the Free Software
++ Foundation, either version 3 of the License, or (at your option) any later
++ version.
++
++ This program is distributed in the hope that it will be useful, but WITHOUT
++ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
++ FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License along with
++ this program. If not, see http://www.gnu.org/licenses/ .
++ ------------------------------------------------------------------------------
++ For further information and questions please use the web site
++ http://www.des-testbed.net/
++ *******************************************************************************/
++
++#include "config.h"
++
++#include "dessert_internal.h"
++#include <dessert/dessert.h>
++
++#ifndef HOST_NAME_MAX
++#define HOST_NAME_MAX 32
++#endif
++
++/* global data storage // P U B L I C */
++struct cli_def *dessert_cli;
++struct cli_command *dessert_cli_show;
++struct cli_command *dessert_cli_cfg_iface;
++struct cli_command *dessert_cli_cfg_no;
++struct cli_command *dessert_cli_cfg_no_iface;
++struct cli_command *dessert_cli_cfg_logging;
++struct cli_command *dessert_cli_cfg_no_logging;
++
++/* global data storage // P R I V A T E */
++/* nothing here - yet */
++
++/* local data storage*/
++int _dessert_cli_sock;
++struct sockaddr_in6 _dessert_cli_addr;
++char _dessert_cli_hostname[HOST_NAME_MAX + DESSERT_PROTO_STRLEN + 1];
++pthread_t _dessert_cli_worker;
++
++/* internal functions forward declarations*/
++static void *_dessert_cli_accept_thread(void* arg);
++static int _dessert_cli_cmd_dessertinfo(struct cli_def *cli, char *command,
++ char *argv[], int argc);
++
++/******************************************************************************
++ *
++ * EXTERNAL / PUBLIC
++ *
++ * C L I - C O M M A N D L I N E I N T E R F A C E
++ *
++ ******************************************************************************/
++
++/** Start up the command line interface.
++ *
++ * @param[in] port port to listen on
++ *
++ * @retval DESSERT_OK on success
++ * @retval -errno otherwise
++ *
++ * %DESCRIPTION:
++ *
++ */
++int dessert_cli_run(int port) {
++ int on = 1;
++
++ /* listen for connections */
++ _dessert_cli_sock = socket(AF_INET6, SOCK_STREAM, 0);
++ setsockopt(_dessert_cli_sock, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on));
++ memset(&_dessert_cli_addr, 0, sizeof(_dessert_cli_addr));
++ _dessert_cli_addr.sin6_family = AF_INET6;
++ _dessert_cli_addr.sin6_addr = in6addr_any;
++ _dessert_cli_addr.sin6_port = htons(port);
++ if (bind(_dessert_cli_sock, (struct sockaddr *) &_dessert_cli_addr,
++ sizeof(_dessert_cli_addr))) {
++ dessert_err("cli socket bind to port %d failed - %s", port, strerror(errno));
++ return -errno;
++ }
++ listen(_dessert_cli_sock, 8);
++ dessert_debug("starting worker thread for cli");
++ pthread_create(&_dessert_cli_worker, NULL, _dessert_cli_accept_thread,
++ &_dessert_cli_sock);
++ return DESSERT_OK;
++}
++
++/******************************************************************************
++ *
++ * INTERNAL / PRIVATE
++ *
++ * C L I - C O M M A N D L I N E I N T E R F A C E
++ *
++ ******************************************************************************/
++
++/** internal function to initialize libcli */
++int _dessert_cli_init() {
++
++ dessert_cli = cli_init();
++
++ /* set host name */
++ memset(_dessert_cli_hostname, 0x0, HOST_NAME_MAX + DESSERT_PROTO_STRLEN + 1);
++ gethostname(_dessert_cli_hostname, HOST_NAME_MAX);
++ strncpy(_dessert_cli_hostname + strlen(_dessert_cli_hostname), ":", 1);
++ strncpy(_dessert_cli_hostname + strlen(_dessert_cli_hostname),
++ dessert_proto, DESSERT_PROTO_STRLEN);
++ cli_set_hostname(dessert_cli, _dessert_cli_hostname);
++
++ /* initialize show commands */
++ dessert_cli_show = cli_register_command(dessert_cli, NULL, "show", NULL,
++ PRIVILEGE_UNPRIVILEGED, MODE_EXEC, "display information");
++ cli_register_command(dessert_cli, dessert_cli_show, "dessert-info",
++ _dessert_cli_cmd_dessertinfo, PRIVILEGE_UNPRIVILEGED, MODE_EXEC,
++ "display information about this program");
++ cli_register_command(dessert_cli, dessert_cli_show, "logging",
++ _dessert_cli_cmd_logging, PRIVILEGE_UNPRIVILEGED, MODE_EXEC,
++ "show logging ringbuffer");
++
++ /* initialize config mode commands */
++ dessert_cli_cfg_iface = cli_register_command(dessert_cli, NULL,
++ "interface", NULL, PRIVILEGE_PRIVILEGED, MODE_CONFIG,
++ "create or configure interfaces");
++ dessert_cli_cfg_no = cli_register_command(dessert_cli, NULL, "no", NULL,
++ PRIVILEGE_PRIVILEGED, MODE_CONFIG, "negate command");
++ dessert_cli_cfg_no_iface = cli_register_command(dessert_cli,
++ dessert_cli_cfg_no, "interface", NULL, PRIVILEGE_PRIVILEGED,
++ MODE_CONFIG, "remove interface or negate interface config");
++ dessert_cli_cfg_logging = cli_register_command(dessert_cli, NULL,
++ "logging", NULL, PRIVILEGE_PRIVILEGED, MODE_CONFIG,
++ "change logging config");
++ dessert_cli_cfg_no_logging = cli_register_command(dessert_cli,
++ dessert_cli_cfg_no, "logging", NULL, PRIVILEGE_PRIVILEGED,
++ MODE_CONFIG, "disable logging for...");
++ cli_register_command(dessert_cli, dessert_cli_cfg_logging, "ringbuffer",
++ _dessert_cli_logging_ringbuffer, PRIVILEGE_PRIVILEGED, MODE_CONFIG,
++ "set logging ringbuffer size (in lines)");
++ cli_register_command(dessert_cli, dessert_cli_cfg_no_logging, "ringbuffer",
++ _dessert_cli_logging_ringbuffer, PRIVILEGE_PRIVILEGED, MODE_CONFIG,
++ "disable logging to ringbuffer");
++ cli_register_command(dessert_cli, dessert_cli_cfg_logging, "file",
++ _dessert_cli_logging_file, PRIVILEGE_PRIVILEGED, MODE_CONFIG,
++ "set logfile and enable file logging");
++ cli_register_command(dessert_cli, dessert_cli_cfg_no_logging, "file",
++ _dessert_cli_logging_file, PRIVILEGE_PRIVILEGED, MODE_CONFIG,
++ "set logfile disable file logging");
++
++ /* initialize other commands */
++ cli_register_command(dessert_cli, NULL, "shutdown",
++ _dessert_cli_cmd_shutdown, PRIVILEGE_PRIVILEGED, MODE_EXEC,
++ "shut daemon down");
++
++ return DESSERT_OK;
++}
++
++/******************************************************************************
++ *
++ * LOCAL
++ *
++ * C L I - C O M M A N D L I N E I N T E R F A C E
++ *
++ ******************************************************************************/
++
++/** command "show dessert-info" */
++static int _dessert_cli_cmd_dessertinfo(struct cli_def *cli, char *command,
++ char *argv[], int argc) {
++ cli_print(cli, "\nprotocol running: %s v %d", dessert_proto, dessert_ver);
++ cli_print(cli, "libdessert version: %s", VERSION);
++ cli_print(
++ cli,
++ " ------------------------------------------------------------------------------ ");
++ cli_print(
++ cli,
++ " Copyright 2009, The DES-SERT Team, Freie Universitaet Berlin (FUB). ");
++ cli_print(
++ cli,
++ " All rights reserved. ");
++ cli_print(
++ cli,
++ " ");
++ cli_print(
++ cli,
++ " These sources were originally developed by Philipp Schmidt ");
++ cli_print(
++ cli,
++ " at Freie Universitaet Berlin (http://www.fu-berlin.de/), ");
++ cli_print(
++ cli,
++ " Computer Systems and Telematics / Distributed, Embedded Systems (DES) group ");
++ cli_print(
++ cli,
++ " (http://cst.mi.fu-berlin.de/, http://www.des-testbed.net/) ");
++ cli_print(
++ cli,
++ " ------------------------------------------------------------------------------ ");
++ cli_print(
++ cli,
++ " This program is free software: you can redistribute it and/or modify it under ");
++ cli_print(
++ cli,
++ " the terms of the GNU General Public License as published by the Free Software ");
++ cli_print(
++ cli,
++ " Foundation, either version 3 of the License, or (at your option) any later ");
++ cli_print(
++ cli,
++ " version. ");
++ cli_print(
++ cli,
++ " ");
++ cli_print(
++ cli,
++ " This program is distributed in the hope that it will be useful, but WITHOUT ");
++ cli_print(
++ cli,
++ " ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS ");
++ cli_print(
++ cli,
++ " FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. ");
++ cli_print(
++ cli,
++ " ");
++ cli_print(
++ cli,
++ " You should have received a copy of the GNU General Public License along with ");
++ cli_print(
++ cli,
++ " this program. If not, see http://www.gnu.org/licenses/ . ");
++ cli_print(
++ cli,
++ " ------------------------------------------------------------------------------ ");
++ return CLI_OK;
++}
++
++/** internal thread function running the cli */
++static void *_dessert_cli_accept_thread(void* arg) {
++ int *s = (int *) arg;
++ int c;
++
++ while ((c = accept(*s, NULL, 0))) {
++ cli_loop(dessert_cli, c); /* pass the connection off to libcli */
++ close(c);
++ }
++
++ cli_done(dessert_cli); /* free data structures */
++
++ return (NULL);
++}
+Index: libdessert0.86-0.86.14/src/libdessert/dessert_core.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/libdessert/dessert_core.c 2009-12-09 16:38:27.309345061 +0100
+@@ -0,0 +1,241 @@
++/******************************************************************************
++ Copyright 2009, The DES-SERT Team, Freie Universitaet Berlin (FUB).
++ All rights reserved.
++
++ These sources were originally developed by Philipp Schmidt
++ at Freie Universitaet Berlin (http://www.fu-berlin.de/),
++ Computer Systems and Telematics / Distributed, Embedded Systems (DES) group
++ (http://cst.mi.fu-berlin.de/, http://www.des-testbed.net/)
++ ------------------------------------------------------------------------------
++ This program is free software: you can redistribute it and/or modify it under
++ the terms of the GNU General Public License as published by the Free Software
++ Foundation, either version 3 of the License, or (at your option) any later
++ version.
++
++ This program is distributed in the hope that it will be useful, but WITHOUT
++ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
++ FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License along with
++ this program. If not, see http://www.gnu.org/licenses/ .
++ ------------------------------------------------------------------------------
++ For further information and questions please use the web site
++ http://www.des-testbed.net/
++ *******************************************************************************/
++
++#include "dessert_internal.h"
++#include <dessert/dessert.h>
++#include <sys/stat.h>
++
++/* global data storage // P U B L I C */
++char dessert_proto[DESSERT_PROTO_STRLEN + 1];
++u_int8_t dessert_ver;
++u_int8_t dessert_l25_defsrc[ETHER_ADDR_LEN];
++u_char ether_broadcast[ETHER_ADDR_LEN];
++u_char ether_null[ETHER_ADDR_LEN];
++pthread_rwlock_t dessert_cfglock = PTHREAD_RWLOCK_INITIALIZER;
++
++/* global data storage // P R I V A T E */
++int _dessert_status = 0x0;
++
++/* local data storage*/
++dessert_frameid_t _dessert_nextframeid = 0;
++pthread_mutex_t _dessert_nextframeid_mutex = PTHREAD_MUTEX_INITIALIZER;
++pthread_mutex_t _dessert_exit_mutex = PTHREAD_MUTEX_INITIALIZER;
++pthread_cond_t _dessert_exit_do = PTHREAD_COND_INITIALIZER;
++int _dessert_exit_code = 0;
++char *dessert_pidfile_name;
++
++/* internal functions forward declarations*/
++static void _dessert_cleanup(void);
++static void _dessert_daemonize(void);
++static int _dessert_pid(char* pidfile);
++
++/******************************************************************************
++ *
++ * EXTERNAL / PUBLIC
++ *
++ * C O R E
++ *
++ ******************************************************************************/
++
++/** Initializes dessert framework and sets up logging
++ * @arg *proto 4 char string for protocol name
++ * @arg version version number of protocol
++ * @arg opts @see DESSERT_OPT_*
++ * @returns DESSERT_OK on success, DESSERT_ERR otherwise
++ **/
++int dessert_init(const char* proto, int version, uint16_t opts, char* pidfile) {
++
++ pthread_rwlock_wrlock(&dessert_cfglock);
++
++ /* save global config */
++ memset(dessert_proto, 0x0, DESSERT_PROTO_STRLEN + 1);
++ strncpy(dessert_proto, proto, DESSERT_PROTO_STRLEN);
++ dessert_ver = version;
++
++ /* initialize pseudo constants */
++ memset(ether_broadcast, 255, ETHER_ADDR_LEN);
++ memset(ether_null, 0, ETHER_ADDR_LEN);
++
++ pthread_rwlock_unlock(&dessert_cfglock);
++
++ /* daemonize if needed */
++ if ((opts & DESSERT_OPT_DAEMONIZE) && !(opts & DESSERT_OPT_NODAEMONIZE)) {
++ _dessert_daemonize();
++ }
++
++ /* write pid to file if needed */
++ if (pidfile != NULL) {
++ dessert_pidfile_name = pidfile;
++ _dessert_pid(pidfile);
++ }
++
++ /* initialize cli */
++ _dessert_cli_init();
++
++ /* start periodic thread */
++ _dessert_periodic_init();
++
++ /* initialize net-snmp subagent */
++ _dessert_agentx_init_subagent();
++
++ return DESSERT_OK;
++}
++
++/** main loop - wait until dessert_exit() is called or killed
++ * @return arg to dessert_exit
++ */
++int dessert_run() {
++ pthread_mutex_lock(&_dessert_exit_mutex);
++ pthread_cond_wait(&_dessert_exit_do, &_dessert_exit_mutex);
++ _dessert_cleanup();
++ pthread_mutex_unlock(&_dessert_exit_mutex);
++ return (_dessert_exit_code);
++}
++
++/**Causes dessert_run() to break out of the main loop.
++ */
++void dessert_exit() {
++ /* kill snmp_worker thread */
++ dessert_agentx_stop_subagent();
++ pthread_cond_signal(&_dessert_exit_do);
++}
++
++/** generates a new, runtime-unique frame id
++ * @returns runtime-unique frame id
++ **/
++dessert_frameid_t _dessert_newframeid() {
++ dessert_frameid_t x;
++ pthread_mutex_lock(&_dessert_nextframeid_mutex);
++ x = _dessert_nextframeid++;
++ pthread_mutex_unlock(&_dessert_nextframeid_mutex);
++ return (x);
++}
++
++/******************************************************************************
++ *
++ * INTERNAL / PRIVATE
++ *
++ * C O R E
++ *
++ ******************************************************************************/
++
++/** command "shutdown" */
++int _dessert_cli_cmd_shutdown(struct cli_def *cli, char *command, char *argv[],
++ int argc) {
++ cli_print(cli, "daemon will shut down now!");
++ pthread_mutex_lock(&_dessert_exit_mutex);
++ pthread_cond_broadcast(&_dessert_exit_do);
++ pthread_mutex_unlock(&_dessert_exit_mutex);
++
++ return CLI_OK;
++}
++
++/******************************************************************************
++ *
++ * LOCAL
++ *
++ * C O R E
++ *
++ ******************************************************************************/
++
++/** internal function to clean up things */
++void _dessert_cleanup(void) {
++ /* remove pidfile */
++ if (dessert_pidfile_name != NULL) {
++ unlink(dessert_pidfile_name);
++ }
++}
++
++/** internal daemonize helper */
++void _dessert_daemonize(void) {
++ pid_t pid, sid;
++
++ /* Fork off the parent process */
++ pid = fork();
++ if (pid < 0) {
++ perror("could not create daemon process!");
++ exit(EXIT_FAILURE);
++ }
++ /* If we got a good PID, then
++ we can exit the parent process. */
++ if (pid > 0) {
++ exit(EXIT_SUCCESS);
++ }
++
++ /* Change the file mode mask */
++ umask(0);
++
++ /* Open any logs here */
++
++ /* Create a new SID for the child process */
++ sid = setsid();
++ if (sid < 0) {
++ perror("could not set sid!");
++ exit(EXIT_FAILURE);
++ }
++
++ /* Change the current working directory */
++ if ((chdir("/")) < 0) {
++ perror("could not chdir /!");
++ exit(EXIT_FAILURE);
++ }
++
++ /* Close out the standard file descriptors */
++ close(STDIN_FILENO);
++ close(STDOUT_FILENO);
++ close(STDERR_FILENO);
++
++ /* write config */
++ pthread_rwlock_wrlock(&dessert_cfglock);
++ _dessert_status |= _DESSERT_STATUS_DAEMON;
++ pthread_rwlock_unlock(&dessert_cfglock);
++
++ /* adopt logging */
++ dessert_logcfg(0x0);
++}
++
++/** internal pid-write helper */
++int _dessert_pid(char* pidfile) {
++ FILE *fd;
++
++ fd = fopen(pidfile, "w");
++ if (fd == 0) {
++ dessert_warn("could not open pid file");
++ return 1;
++ } else {
++ int r;
++ r = fprintf(fd, "%d\n", getpid());
++ if (r < 0) {
++ dessert_warn("could not write to pid file");
++ return DESSERT_ERR;
++ }
++
++ if (fclose(fd) != 0) {
++ dessert_warn("failed to close pid file");
++ }
++ }
++
++ return DESSERT_OK;
++}
+Index: libdessert0.86-0.86.14/src/libdessert/dessert_internal.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/libdessert/dessert_internal.h 2009-12-09 16:38:27.309345061 +0100
+@@ -0,0 +1,219 @@
++/******************************************************************************
++ Copyright 2009, The DES-SERT Team, Freie Universitaet Berlin (FUB).
++ All rights reserved.
++
++ These sources were originally developed by Philipp Schmidt
++ at Freie Universitaet Berlin (http://www.fu-berlin.de/),
++ Computer Systems and Telematics / Distributed, Embedded Systems (DES) group
++ (http://cst.mi.fu-berlin.de/, http://www.des-testbed.net/)
++ ------------------------------------------------------------------------------
++ This program is free software: you can redistribute it and/or modify it under
++ the terms of the GNU General Public License as published by the Free Software
++ Foundation, either version 3 of the License, or (at your option) any later
++ version.
++
++ This program is distributed in the hope that it will be useful, but WITHOUT
++ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
++ FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License along with
++ this program. If not, see http://www.gnu.org/licenses/ .
++ ------------------------------------------------------------------------------
++ For further information and questions please use the web site
++ http://www.des-testbed.net/
++*******************************************************************************/
++
++#ifndef DESSERT_INTERNAL_H
++#define DESSERT_INTERNAL_H
++
++/* load needed libs - quite dirty */
++#include <stdlib.h>
++#include <stdio.h>
++#include <fcntl.h>
++#include <string.h>
++#include <stdarg.h>
++#include <unistd.h>
++#include <errno.h>
++#include <pthread.h>
++#include <syslog.h>
++#include <sys/socket.h>
++#include <sys/ioctl.h>
++#include <sys/sysctl.h>
++#include <net/route.h>
++#include <arpa/inet.h>
++#include <netinet/in.h>
++#include <libcli.h>
++#include <net-snmp/net-snmp-config.h>
++#include <net-snmp/net-snmp-includes.h>
++#include <net-snmp/agent/net-snmp-agent-includes.h>
++#include <dessert/utlist.h>
++
++/* internal snmp includes */
++#include "dessertObjects.h"
++#include "dessertMeshifTable.h"
++#include "dessertSysifTable.h"
++#include "dessertAppStatsTable.h"
++#include "dessertAppParamsTable.h"
++
++/******************************************************************************
++ *
++ * INTERNAL / PRIVATE
++ *
++ * C O R E
++ *
++ ******************************************************************************/
++
++/** flag for _dessert_status - program is daemon */
++#define _DESSERT_STATUS_DAEMON 0x1
++
++/** global status flag holder */
++extern int _dessert_status;
++
++dessert_frameid_t _dessert_newframeid(void);
++
++int _dessert_cli_cmd_shutdown(struct cli_def *cli, char *command, char *argv[], int argc);
++
++/******************************************************************************
++ *
++ * INTERNAL / PRIVATE
++ *
++ * C L I - C O M M A N D L I N E I N T E R F A C E
++ *
++ ******************************************************************************/
++
++int _dessert_cli_init(void);
++
++/******************************************************************************
++ *
++ * INTERNAL / PRIVATE
++ *
++ * L O G F A C I L I T Y
++ *
++ ******************************************************************************/
++
++/** maximum size of a log line */
++#define DESSERT_LOGLINE_MAX 1024
++
++/** logfile file pointer to use with DESSERT_OPT_LOGFILE */
++extern FILE *dessert_logfd;
++
++int _dessert_cli_cmd_logging(struct cli_def *cli, char *command, char *argv[], int argc);
++int _dessert_cli_logging_file(struct cli_def *cli, char *command, char *argv[], int argc);
++int _dessert_cli_no_logging_file(struct cli_def *cli, char *command, char *argv[], int argc);
++int _dessert_cli_logging_ringbuffer(struct cli_def *cli, char *command, char *argv[], int argc);
++int _dessert_cli_no_logging_ringbuffer(struct cli_def *cli, char *command, char *argv[], int argc);
++
++/******************************************************************************
++ *
++ * INTERNAL / PRIVATE
++ *
++ * M E S H - I N T E R F A C E S
++ *
++ ******************************************************************************/
++
++/** callback list entry for dessert mesh interface callbacks */
++typedef struct dessert_meshrxcbe {
++ /** pointer to callback to call */
++ dessert_meshrxcb_t *c;
++ /** priority - lowest first */
++ int prio;
++ /** next entry in list */
++ struct dessert_meshrxcbe *next;
++} dessert_meshrxcbe_t;
++
++int _dessert_meshif_gethwaddr(dessert_meshif_t *meshif);
++int _dessert_meshrxcb_runall(dessert_msg_t* msg_in, size_t len, dessert_msg_proc_t *proc_in, const dessert_meshif_t *meshif, dessert_frameid_t id);
++
++/******************************************************************************
++ *
++ * INTERNAL / PRIVATE
++ *
++ * S Y S - I N T E R F A C E S
++ *
++ ******************************************************************************/
++
++/** callback list entry for tun/tap callbacks */
++typedef struct dessert_sysrxcbe {
++ /** pointer to callback to call */
++ dessert_sysrxcb_t *c;
++ /** priority - lowest first */
++ int prio;
++ /** next entry in list */
++ struct dessert_sysrxcbe *next;
++} dessert_sysrxcbe_t;
++
++extern struct dessert_sysif *_dessert_sysif;
++
++/******************************************************************************
++ *
++ * INTERNAL / PRIVATE
++ *
++ * M E S S A G E H A N D L I N G
++ *
++ ******************************************************************************/
++
++/** size of a dessert_msg struct */
++#define DESSERT_MSGLEN sizeof(struct dessert_msg)
++
++/** size of a dessert_msg_proc struct */
++#define DESSERT_MSGPROCLEN sizeof(struct dessert_msg_proc)
++
++/** maximum frame size to assemble as dessert_msg */
++#define DESSERT_MAXFRAMEBUFLEN DESSERT_MAXFRAMELEN
++
++/******************************************************************************
++ *
++ * INTERNAL / PRIVATE
++ *
++ * P E R I O D I C T A S K S
++ *
++ ******************************************************************************/
++
++void _dessert_periodic_init(void);
++
++/******************************************************************************
++ *
++ * INTERNAL / PRIVATE
++ *
++ * NET - S N M P // A G E N T _ X
++ *
++ ******************************************************************************/
++
++/******************************************************************************
++ * #defines
++ ******************************************************************************/
++
++#define AGENT "dessertAGENTX"
++
++#define DESSERT_AGENTX_SYSIFTABLE_CACHE_TIMEOUT 10
++#define DESSERT_AGENTX_MESHIFTABLE_CACHE_TIMEOUT 10
++#define DESSERT_AGENTX_APPSTATSTABLE_CACHE_TIMEOUT 10
++#define DESSERT_AGENTX_APPPARAMTABLE_CACHE_TIMEOUT 1
++
++/******************************************************************************
++ * globals
++ ******************************************************************************/
++
++extern pthread_rwlock_t _dessert_appstats_cblist_lock;
++extern dessert_agentx_appstats_cb_entry_t *_dessert_appstats_cblist;
++
++extern pthread_rwlock_t _dessert_appparams_cblist_lock;
++extern dessert_agentx_appparams_cb_entry_t *_dessert_appparams_cblist;
++
++/******************************************************************************
++ * functions
++ ******************************************************************************/
++int _dessert_agentx_appstats_harvest_callbacks(dessert_agentx_appstats_t **appstats_list);
++void _dessert_agentx_appstats_free(dessert_agentx_appstats_t *appstat);
++void _dessert_agentx_appstats_free_list(dessert_agentx_appstats_t **appstats_list);
++
++int _dessert_agentx_appparams_harvest_callbacks(dessert_agentx_appparams_t **appparams_list);
++void _dessert_agentx_appparams_free(dessert_agentx_appparams_t *appparam);
++void _dessert_agentx_appparams_free_list(dessert_agentx_appparams_t **appparams_list);
++dessert_agentx_appparamscb_set_t *_dessert_agentx_appparams_getsettercbforindex(int index);
++
++void _dessert_agentx_init_subagent(void);
++void dessert_agentx_stop_subagent(void);
++
++
++#endif /* DESSERT_INTERNAL_H */
+Index: libdessert0.86-0.86.14/src/libdessert/dessert_log.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/libdessert/dessert_log.c 2009-12-09 16:38:27.309345061 +0100
+@@ -0,0 +1,417 @@
++/******************************************************************************
++ Copyright 2009, The DES-SERT Team, Freie Universitaet Berlin (FUB).
++ All rights reserved.
++
++ These sources were originally developed by Philipp Schmidt
++ at Freie Universitaet Berlin (http://www.fu-berlin.de/),
++ Computer Systems and Telematics / Distributed, Embedded Systems (DES) group
++ (http://cst.mi.fu-berlin.de/, http://www.des-testbed.net/)
++ ------------------------------------------------------------------------------
++ This program is free software: you can redistribute it and/or modify it under
++ the terms of the GNU General Public License as published by the Free Software
++ Foundation, either version 3 of the License, or (at your option) any later
++ version.
++
++ This program is distributed in the hope that it will be useful, but WITHOUT
++ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
++ FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License along with
++ this program. If not, see http://www.gnu.org/licenses/ .
++ ------------------------------------------------------------------------------
++ For further information and questions please use the web site
++ http://www.des-testbed.net/
++ *******************************************************************************/
++
++#include "dessert_internal.h"
++#include <dessert/dessert.h>
++#include <sys/stat.h>
++
++/* data storage */
++FILE *dessert_logfd = NULL;
++char dessert_logprefix[12];
++
++#define _DESSERT_LOGFLAG_SYSLOG 0x1
++#define _DESSERT_LOGFLAG_LOGFILE 0x2
++#define _DESSERT_LOGFLAG_STDERR 0x4
++#define _DESSERT_LOGFLAG_RBUF 0x8
++int _dessert_logflags = _DESSERT_LOGFLAG_STDERR;
++int _dessert_loglevel = LOG_DEBUG;
++
++/* the logging ringbuffer */
++char *_dessert_logrbuf = NULL; /* pointer to begin */
++int _dessert_logrbuf_len = 0; /* length in lines (DESSERT_LOGLINE_MAX*_dessert_logrbuf_len*sizeof(char) would be in bytes) */
++int _dessert_logrbuf_cur = 0; /* current position */
++int _dessert_logrbuf_used = 0; /* used slots */
++pthread_rwlock_t _dessert_logrbuf_len_lock = PTHREAD_RWLOCK_INITIALIZER; /* for resizing */
++pthread_mutex_t _dessert_logrbuf_mutex = PTHREAD_MUTEX_INITIALIZER; /* for moving _dessert_logrbuf_cur */
++
++/* internal functions forward declarations TODO: cleanup */
++
++/******************************************************************************
++ *
++ * EXTERNAL / PUBLIC
++ *
++ * L O G F A C I L I T Y
++ *
++ ******************************************************************************/
++
++/** Configure dessert logging framework and sets up logging.
++ *
++ * @arg opts OR'd flags - @see DESSERT_LOG_*
++ *
++ * %DESCRIPTION:
++ *
++ **/
++int dessert_logcfg(uint16_t opts) {
++ snprintf(dessert_logprefix, 12, "dessert/%s", dessert_proto);
++
++ pthread_rwlock_wrlock(&dessert_cfglock);
++
++ /* configure logging */
++ if ((opts & DESSERT_LOG_SYSLOG) && !(opts & DESSERT_LOG_NOSYSLOG)) {
++ if (!(_dessert_logflags & _DESSERT_LOGFLAG_SYSLOG)) {
++ /* initialize syslog channel */
++ openlog(dessert_logprefix, LOG_PID, LOG_DAEMON);
++ }
++ _dessert_logflags |= _DESSERT_LOGFLAG_SYSLOG;
++ } else if (!(opts & DESSERT_LOG_SYSLOG) && (opts & DESSERT_LOG_NOSYSLOG)) {
++ if (_dessert_logflags & _DESSERT_LOGFLAG_SYSLOG) {
++ /* close syslog channel */
++ closelog();
++ }
++ _dessert_logflags &= ~_DESSERT_LOGFLAG_SYSLOG;
++ }
++ if ((opts & DESSERT_LOG_STDERR) && !(opts & DESSERT_LOG_NOSTDERR)
++ && !(_dessert_status & _DESSERT_STATUS_DAEMON)) {
++ _dessert_logflags |= _DESSERT_LOGFLAG_STDERR;
++ } else if ((!(opts & DESSERT_LOG_STDERR) && (opts & DESSERT_LOG_NOSTDERR))
++ || (_dessert_status & _DESSERT_STATUS_DAEMON)) {
++ _dessert_logflags &= ~_DESSERT_LOGFLAG_STDERR;
++ }
++ if ((opts & DESSERT_LOG_FILE) && !(opts & DESSERT_LOG_NOFILE)
++ && dessert_logfd != NULL) {
++ _dessert_logflags |= _DESSERT_LOGFLAG_LOGFILE;
++ } else if ((!(opts & DESSERT_LOG_FILE) && (opts & DESSERT_LOG_NOFILE))
++ || dessert_logfd == NULL) {
++ _dessert_logflags &= ~_DESSERT_LOGFLAG_LOGFILE;
++ }
++ if ((opts & DESSERT_LOG_DEBUG) && !(opts & DESSERT_LOG_NODEBUG)) {
++ _dessert_loglevel = LOG_DEBUG;
++ } else if (!(opts & DESSERT_LOG_DEBUG) && (opts & DESSERT_LOG_NODEBUG)) {
++ _dessert_loglevel = LOG_INFO;
++ }
++ if ((opts & DESSERT_LOG_RBUF) && !(opts & DESSERT_LOG_NORBUF)) {
++ _dessert_logflags |= _DESSERT_LOGFLAG_RBUF;
++ } else if (!(opts & DESSERT_LOG_RBUF) && (opts & DESSERT_LOG_NORBUF)) {
++ _dessert_logflags &= ~_DESSERT_LOGFLAG_RBUF;
++ }
++
++ pthread_rwlock_unlock(&dessert_cfglock);
++
++ return 0;
++}
++
++/******************************************************************************
++ *
++ * INTERNAL / PRIVATE
++ *
++ * L O G F A C I L I T Y
++ *
++ ******************************************************************************/
++
++char* _dessert_log_rbuf_nextline(void) {
++ char* r = NULL;
++ pthread_mutex_lock(&_dessert_logrbuf_mutex);
++ if (_dessert_logrbuf_len > 0) {
++ if (_dessert_logrbuf_cur >= _dessert_logrbuf_len) {
++ _dessert_logrbuf_cur = 0;
++ }
++ r = _dessert_logrbuf + (DESSERT_LOGLINE_MAX * _dessert_logrbuf_cur);
++ _dessert_logrbuf_cur++;
++ if (_dessert_logrbuf_used < _dessert_logrbuf_len - 1) {
++ _dessert_logrbuf_used++;
++ }
++ }
++ pthread_mutex_unlock(&_dessert_logrbuf_mutex);
++
++ return (r);
++}
++
++/** internal log function
++ *
++ * @internal
++ *
++ * @param[in] level loglevel from <syslog.h>
++ * @param[in] *func function name called from
++ * @param[in] *file file name called from
++ * @param[in] *line line called from
++ * @param[in] *fmt printf format string
++ * @param[in] ... (var-arg) printf like variables
++ **/
++void _dessert_log(int level, const char* func, const char* file, int line,
++ const char *fmt, ...) {
++ va_list args;
++ char *rbuf_line = NULL;
++ char buf[DESSERT_LOGLINE_MAX];
++ char lf[80];
++ char *lt;
++ char lds[27];
++ struct tm ldd;
++ time_t ldi;
++ int lf_slen, buf_slen;
++
++ if (_dessert_loglevel < level)
++ return;
++
++ snprintf(lf, 80, " (%s@%s:%d)", func, file, line);
++ lf_slen = strlen(lf);
++
++ va_start(args, fmt);
++ vsnprintf(buf, DESSERT_LOGLINE_MAX, fmt, args);
++ va_end(args);
++ buf_slen = strlen(buf);
++
++ if (_dessert_logflags | _DESSERT_LOGFLAG_SYSLOG) {
++ syslog(level, "%s%s", buf, lf);
++ }
++
++ if (_dessert_logflags & _DESSERT_LOGFLAG_RBUF) {
++ pthread_rwlock_rdlock(&_dessert_logrbuf_len_lock);
++ rbuf_line = _dessert_log_rbuf_nextline();
++ }
++
++ if (_dessert_logflags | (_DESSERT_LOGFLAG_LOGFILE | _DESSERT_LOGFLAG_STDERR
++ | _DESSERT_LOGFLAG_RBUF)) {
++
++ time(&ldi);
++ localtime_r(&ldi, &ldd);
++ snprintf(lds, 26, "%04d-%02d-%02d %02d:%02d:%02d%+05.1f ", ldd.tm_year
++ + 1900, ldd.tm_mon + 1, ldd.tm_mday, ldd.tm_hour, ldd.tm_min,
++ ldd.tm_sec, (double) ldd.tm_gmtoff / 3600);
++
++ switch (level) {
++ case LOG_EMERG:
++ lt = "EMERG: ";
++ break;
++ case LOG_ALERT:
++ lt = "ALERT: ";
++ break;
++ case LOG_CRIT:
++ lt = "CRIT: ";
++ break;
++ case LOG_ERR:
++ lt = "ERR: ";
++ break;
++ case LOG_WARNING:
++ lt = "WARN: ";
++ break;
++ case LOG_NOTICE:
++ lt = "NOTICE:";
++ break;
++ case LOG_INFO:
++ lt = "INFO: ";
++ break;
++ default:
++ lt = "DEBUG: ";
++ break;
++ }
++
++ if (32 + buf_slen + lf_slen > 80) {
++ if (_dessert_logflags & _DESSERT_LOGFLAG_LOGFILE && dessert_logfd
++ != NULL)
++ fprintf(dessert_logfd, "%s%s%s\n%80s\n", lds, lt, buf, lf);
++ if (_dessert_logflags & _DESSERT_LOGFLAG_STDERR)
++ fprintf(stderr, "%s%s%s\n%80s\n", lds, lt, buf, lf);
++ if (_dessert_logflags & _DESSERT_LOGFLAG_RBUF && rbuf_line != NULL)
++ snprintf(rbuf_line, DESSERT_LOGLINE_MAX, "%s%s%s\n%80s", lds,
++ lt, buf, lf);
++ } else {
++ while (32 + buf_slen + lf_slen < 80) {
++ buf[buf_slen++] = ' ';
++ }
++ buf[buf_slen] = '\0';
++ if (_dessert_logflags & _DESSERT_LOGFLAG_LOGFILE && dessert_logfd
++ != NULL)
++ fprintf(dessert_logfd, "%s%s%s%s\n", lds, lt, buf, lf);
++ if (_dessert_logflags & _DESSERT_LOGFLAG_STDERR)
++ fprintf(stderr, "%s%s%s%s\n", lds, lt, buf, lf);
++ if (_dessert_logflags & _DESSERT_LOGFLAG_RBUF && rbuf_line != NULL)
++ snprintf(rbuf_line, DESSERT_LOGLINE_MAX, "%s%s%s%s", lds, lt,
++ buf, lf);
++ }
++
++ if (_dessert_logflags & _DESSERT_LOGFLAG_LOGFILE && dessert_logfd
++ != NULL) {
++ fflush(dessert_logfd);
++ }
++ if (_dessert_logflags & _DESSERT_LOGFLAG_RBUF) {
++ pthread_rwlock_unlock(&_dessert_logrbuf_len_lock);
++ }
++
++ }
++}
++
++/** command "logging file" */
++int _dessert_cli_logging_file(struct cli_def *cli, char *command, char *argv[],
++ int argc) {
++ FILE *newlogdf;
++
++ if (argc != 1) {
++ cli_print(cli, "usage %s filename\n", command);
++ return CLI_ERROR;
++ }
++
++ newlogdf = fopen(argv[0], "a");
++
++ if (newlogdf == NULL) {
++ dessert_err("failed o open %s as logfile\n", argv[0]);
++ cli_print(cli, "failed o open %s as logfile\n", argv[0]);
++ return CLI_ERROR;
++ }
++
++ /* clean up old logfile first */
++ if (dessert_logfd != NULL) {
++ dessert_logcfg(DESSERT_LOG_NOFILE);
++ fclose(dessert_logfd);
++ }
++
++ dessert_logfd = newlogdf;
++ dessert_logcfg(DESSERT_LOG_FILE);
++
++ return CLI_OK;
++}
++
++/** command "logging file" */
++int _dessert_cli_no_logging_file(struct cli_def *cli, char *command,
++ char *argv[], int argc) {
++ dessert_logcfg(DESSERT_LOG_NOFILE);
++ if (dessert_logfd != NULL) {
++ fclose(dessert_logfd);
++ }
++ dessert_logfd = NULL;
++ return CLI_OK;
++}
++
++/** command "logging ringbuffer" */
++int _dessert_cli_logging_ringbuffer(struct cli_def *cli, char *command,
++ char *argv[], int argc) {
++ int newlen = -1;
++ if (argc != 1 || (newlen = (int) strtol(argv[0], NULL, 10)) < 0) {
++ cli_print(cli, "usage %s [buffer length]\n", command);
++ return CLI_ERROR;
++ }
++
++ if (newlen == _dessert_logrbuf_len)
++ return CLI_OK;
++
++ if (newlen == 0) {
++ cli_print(cli,
++ "will not set buffer length to 0 - use no logging ringbuffer instead\n");
++ return CLI_ERROR;
++ }
++
++ pthread_rwlock_wrlock(&_dessert_logrbuf_len_lock);
++
++ /* make logging buffer larger - easy if not ENOMEM*/
++ if (newlen > _dessert_logrbuf_len) {
++ _dessert_logrbuf = realloc(_dessert_logrbuf, newlen
++ * DESSERT_LOGLINE_MAX * sizeof(char));
++ if (_dessert_logrbuf == NULL) {
++ _dessert_logrbuf_len = 0;
++ _dessert_logrbuf_cur = 0;
++ } else {
++ _dessert_logrbuf_len = newlen;
++ }
++ dessert_logcfg(DESSERT_LOG_RBUF);
++ /* make logging buffer smaller - pain in the ass */
++ } else if (newlen < _dessert_logrbuf_len) {
++ /* move current log buffer if needed */
++ if (_dessert_logrbuf_cur > newlen) {
++ memmove(_dessert_logrbuf, _dessert_logrbuf + (DESSERT_LOGLINE_MAX
++ * (_dessert_logrbuf_cur - newlen)), newlen
++ * DESSERT_LOGLINE_MAX * sizeof(char));
++ _dessert_logrbuf_cur -= newlen;
++ }
++ _dessert_logrbuf = realloc(_dessert_logrbuf, newlen
++ * DESSERT_LOGLINE_MAX * sizeof(char));
++ if (_dessert_logrbuf == NULL) {
++ _dessert_logrbuf_len = 0;
++ _dessert_logrbuf_cur = 0;
++ } else {
++ _dessert_logrbuf_len = newlen;
++ }
++ } else {
++ dessert_err("this never happens");
++ }
++ if (_dessert_logrbuf_used > _dessert_logrbuf_len - 1)
++ _dessert_logrbuf_used = _dessert_logrbuf_len - 1;
++ pthread_rwlock_unlock(&_dessert_logrbuf_len_lock);
++ return CLI_OK;
++
++}
++
++/** command "no logging ringbuffer" */
++int _dessert_cli_no_logging_ringbuffer(struct cli_def *cli, char *command,
++ char *argv[], int argc) {
++ if (_dessert_logrbuf == NULL) {
++ return CLI_OK;
++ } else {
++ pthread_rwlock_wrlock(&_dessert_logrbuf_len_lock);
++ dessert_logcfg(DESSERT_LOG_NORBUF);
++ free(_dessert_logrbuf);
++ _dessert_logrbuf = NULL;
++ _dessert_logrbuf_len = 0;
++ _dessert_logrbuf_cur = 0;
++ pthread_rwlock_unlock(&_dessert_logrbuf_len_lock);
++ return CLI_OK;
++ }
++
++}
++
++/** command "show logging" */
++int _dessert_cli_cmd_logging(struct cli_def *cli, char *command, char *argv[],
++ int argc) {
++ pthread_rwlock_rdlock(&_dessert_logrbuf_len_lock);
++ int i = 0;
++ int max = _dessert_logrbuf_len - 1;
++ char* line;
++
++ if (_dessert_logrbuf_len < 1) {
++ cli_print(
++ cli,
++ "logging to ringbuffer is disables - use \"logging ringbuffer [int]\" in config-mode first");
++ pthread_rwlock_unlock(&_dessert_logrbuf_len_lock);
++ return CLI_ERROR;
++ }
++
++ if (argc == 1) {
++ int max2 = (int) strtol(argv[0], NULL, 10);
++ if (max2 > 0) {
++ max = max2;
++ }
++ }
++
++ /* where to start and print? */
++ if (max > _dessert_logrbuf_used) {
++ max = _dessert_logrbuf_used;
++ }
++ i = _dessert_logrbuf_cur - max - 1;
++ if (i < 0) {
++ i += _dessert_logrbuf_len;
++ }
++
++ while (max > 0) {
++ i++;
++ max--;
++ if (i == _dessert_logrbuf_len) {
++ i = 0;
++ }
++ line = _dessert_logrbuf + (DESSERT_LOGLINE_MAX * i);
++ cli_print(cli, "%s", line);
++ }
++
++ pthread_rwlock_unlock(&_dessert_logrbuf_len_lock);
++
++ return CLI_OK;
++}
+Index: libdessert0.86-0.86.14/src/libdessert/dessert_meshiface.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/libdessert/dessert_meshiface.c 2009-12-09 16:38:27.309345061 +0100
+@@ -0,0 +1,1221 @@
++/******************************************************************************
++ Copyright 2009, The DES-SERT Team, Freie Universitaet Berlin (FUB).
++ All rights reserved.
++
++ These sources were originally developed by Philipp Schmidt
++ at Freie Universitaet Berlin (http://www.fu-berlin.de/),
++ Computer Systems and Telematics / Distributed, Embedded Systems (DES) group
++ (http://cst.mi.fu-berlin.de/, http://www.des-testbed.net/)
++ ------------------------------------------------------------------------------
++ This program is free software: you can redistribute it and/or modify it under
++ the terms of the GNU General Public License as published by the Free Software
++ Foundation, either version 3 of the License, or (at your option) any later
++ version.
++
++ This program is distributed in the hope that it will be useful, but WITHOUT
++ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
++ FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License along with
++ this program. If not, see http://www.gnu.org/licenses/ .
++ ------------------------------------------------------------------------------
++ For further information and questions please use the web site
++ http://www.des-testbed.net/
++ *******************************************************************************/
++
++#include "dessert_internal.h"
++#include <dessert/dessert.h>
++
++#ifdef __FreeBSD__
++#include <ifaddrs.h>
++#include <net/if_dl.h>
++#endif
++
++/* global data storage // P U B L I C */
++/* nothing here - yet */
++
++/* global data storage // P R I V A T E */
++/* nothing here - yet */
++
++/* local data storage*/
++dessert_meshif_t *_dessert_meshiflist = NULL;
++
++pthread_mutex_t _dessert_meshiflist_mutex = PTHREAD_MUTEX_INITIALIZER;
++int _dessert_meshiflist_len = 0;
++int _dessert_meshiflist_perm_count = 0;
++int _dessert_meshiflist_current_perm = 0;
++dessert_meshif_t ***_dessert_meshiflist_perms = NULL;
++
++dessert_meshrxcbe_t *_dessert_meshrxcblist;
++int _dessert_meshrxcblistver = 0;
++
++/* internal functions forward declarations*/
++static void _dessert_packet_process(u_char *args,
++ const struct pcap_pkthdr *header, const u_char *packet);
++static void *_dessert_meshif_add_thread(void* arg);
++static inline int _dessert_meshsend_if2(dessert_msg_t* msg,
++ dessert_meshif_t *iface);
++static void _dessert_meshif_cleanup(dessert_meshif_t *meshif);
++static void _dessert_meshiflist_update_permutations(void);
++static inline int DL_LENGTH(dessert_meshif_t *l);
++static inline void list2array(dessert_meshif_t *l, dessert_meshif_t **a,
++ int len);
++static inline int fact(int i);
++static inline void permutation(int k, int len, dessert_meshif_t **a);
++
++/******************************************************************************
++ *
++ * EXTERNAL / PUBLIC
++ *
++ * M E S H - I N T E R F A C E S
++ *
++ ******************************************************************************/
++
++/******************************************************************************
++ * sending messages
++ ******************************************************************************/
++
++/** Sends a \b dessert \b message via the specified interface or all interfaces.
++ *
++ * The original message buffer will not be altered, and the ethernet src address
++ * will be set correctly
++ *
++ * @param[in] *msgin message to send
++ * @param[in] *iface interface to send from - use NULL for all interfaces
++ *
++ * @retval DESSERT_OK on success
++ * @retval EINVAL if message is broken
++ * @retval EIO if message was not sent successfully
++ *
++ * %DESCRIPTION:
++ *
++ **/
++int dessert_meshsend(const dessert_msg_t* msgin, const dessert_meshif_t *iface) {
++ dessert_msg_t* msg;
++ int res;
++
++ /* check message - we only send valid messages! */
++ if (dessert_msg_check(msgin, msgin->hlen + msgin->plen)) {
++ dessert_warn("will not send invalid message - aborting");
++ return EINVAL;
++ }
++
++ /* clone message */
++ dessert_msg_clone(&msg, msgin, 1);
++ res = dessert_meshsend_fast(msg, iface);
++ dessert_msg_destroy(msg);
++
++ return res;
++
++}
++
++/** Sends a \b dessert \b message via all interfaces, except via the specified interface.
++ *
++ * The original message buffer will not be altered, and the ethernet src address will be set correctly.
++ *
++ * @param[in] *msgin message to send
++ * @param[in] *iface interface NOT to send from - use NULL for all interfaces
++
++ * @retval DESSERT_OK on success
++ * @retval EINVAL if message is broken
++ * @retval EIO if message was not sent successfully
++ *
++ * %DESCRIPTION:
++ *
++ **/
++int dessert_meshsend_allbutone(const dessert_msg_t* msgin,
++ const dessert_meshif_t *iface) {
++ dessert_msg_t* msg;
++ int res;
++
++ /* check message - we only send valid messages! */
++ if (dessert_msg_check(msgin, msgin->hlen + msgin->plen)) {
++ dessert_warn("will not send invalid message - aborting");
++ return EINVAL;
++ }
++
++ /* clone message */
++ dessert_msg_clone(&msg, msgin, 1);
++ res = dessert_meshsend_fast_allbutone(msg, iface);
++ dessert_msg_destroy(msg);
++
++ return res;
++
++}
++
++/** Sends a \b dessert \b message via the interface which is identified by the given hardware address.
++ *
++ * The original message buffer will not be altered, and the ethernet src address
++ * will be set correctly.
++ *
++ * @param[in] *msgin message to send
++ * @param[in] *hwaddr hardware address of the interface to send from
++ *
++ * @retval DESSERT_OK on success
++ * @retval EINVAL if message is broken
++ * @retval EIO if message was not sent successfully
++ *
++ * %DESCRIPTION:
++ *
++ **/
++int dessert_meshsend_hwaddr(const dessert_msg_t* msgin,
++ const uint8_t hwaddr[ETHER_ADDR_LEN]) {
++ dessert_msg_t* msg;
++ int res;
++
++ /* check message - we only send valid messages! */
++ if (dessert_msg_check(msgin, msgin->hlen + msgin->plen)) {
++ dessert_warn("will not send invalid message - aborting");
++ return EINVAL;
++ }
++
++ /* clone message */
++ dessert_msg_clone(&msg, msgin, 1);
++ res = dessert_meshsend_fast_hwaddr(msg, hwaddr);
++ dessert_msg_destroy(msg);
++
++ return res;
++}
++
++/** Sends a \b dessert \b message via all interfaces in a randomized fashion.
++ *
++ * The original message buffer will not be altered, and the ethernet src address
++ * will be set correctly.
++ *
++ * @param[in] *msgin message to send
++ *
++ * @retval DESSERT_OK on success
++ * @retval EINVAL if message is broken
++ * @retval EIO if message was not sent successfully
++ *
++ * %DESCRIPTION:
++ *
++ **/
++int dessert_meshsend_randomized(const dessert_msg_t* msgin) {
++ dessert_msg_t* msg;
++ int res;
++
++ /* check message - we only send valid messages! */
++ if (dessert_msg_check(msgin, msgin->hlen + msgin->plen)) {
++ dessert_warn("will not send invalid message - aborting");
++ return EINVAL;
++ }
++
++ /* clone message */
++ dessert_msg_clone(&msg, msgin, 1);
++ res = dessert_meshsend_fast_randomized(msg);
++ dessert_msg_destroy(msg);
++
++ return res;
++}
++
++/** Sends a \b dessert \b message fast via the specified interface or all interfaces.
++ *
++ * This method is faster than dessert_meshsend(), but does not check the message
++ * and may alter the message buffer.
++ *
++ * @param[in] *msg message to send
++ * @param[in] *iface interface to send from
++ *
++ * @retval DESSERT_OK on success
++ * @retval EINVAL if message is broken
++ * @retval EIO if message was not sent successfully
++ *
++ * %DESCRIPTION:
++ *
++ **/
++int dessert_meshsend_fast(dessert_msg_t* msg, const dessert_meshif_t *iface) {
++ int res = 0;
++
++ /* we have no iface - send on all! */
++ if (iface == NULL) {
++ pthread_rwlock_rdlock(&dessert_cfglock);
++ DL_FOREACH(_dessert_meshiflist, iface) {
++ /* set shost */
++ memcpy(msg->l2h.ether_shost, iface->hwaddr, ETHER_ADDR_LEN);
++ /* send */
++ res = _dessert_meshsend_if2(msg, iface);
++ if (res) {
++ break;
++ }
++ }
++ pthread_rwlock_unlock(&dessert_cfglock);
++ } else {
++ /* set shost */
++ memcpy(msg->l2h.ether_shost, iface->hwaddr, ETHER_ADDR_LEN);
++ /* send */
++ res = _dessert_meshsend_if2(msg, iface);
++ }
++
++ return (res);
++
++}
++
++/** Sends a \b dessert \b message fast via all interfaces, except the specified interface.
++ *
++ * This method is faster than dessert_meshsend_allbutone(), but does not check the message
++ * and may alter the message buffer.
++ *
++ * @param[in] *msg message to send
++ * @param[in] *iface interface to NOT send from - use NULL for all interfaces
++ *
++ * @retval DESSERT_OK on success
++ * @retval EINVAL if message is broken
++ * @retval EIO if message was not sent successfully
++ *
++ * %DESCRIPTION:
++ *
++ **/
++int dessert_meshsend_fast_allbutone(dessert_msg_t* msg,
++ const dessert_meshif_t *iface) {
++ dessert_meshif_t *curr_iface;
++ int res = 0;
++
++ /* we have no iface - send on all! */
++ if (iface == NULL) {
++ pthread_rwlock_rdlock(&dessert_cfglock);
++ DL_FOREACH(_dessert_meshiflist, curr_iface) {
++ /* set shost */
++ memcpy(msg->l2h.ether_shost, iface->hwaddr, ETHER_ADDR_LEN);
++ /* send */
++ res = _dessert_meshsend_if2(msg, iface);
++ if (res) {
++ break;
++ }
++ }
++ pthread_rwlock_unlock(&dessert_cfglock);
++ } else {
++ pthread_rwlock_rdlock(&dessert_cfglock);
++ DL_FOREACH(_dessert_meshiflist, curr_iface) {
++
++ /* skip if it is the 'allbutone' interface */
++ if (curr_iface == iface)
++ curr_iface = curr_iface->next;
++
++ /* set shost */
++ memcpy(msg->l2h.ether_shost, iface->hwaddr, ETHER_ADDR_LEN);
++ /* send */
++ res = _dessert_meshsend_if2(msg, iface);
++ if (res) {
++ break;
++ }
++ }
++ pthread_rwlock_unlock(&dessert_cfglock);
++ }
++
++ return (res);
++
++}
++
++/** Sends a \b dessert \b message fast via the interface specified by the given
++ * hardware address.
++ *
++ * This method is faster than dessert_meshsend_hwaddr(), but does not check the message
++ * and may alter the message buffer.
++ *
++ * @param[in] *msg message to send
++ * @param[in] *hwaddr hardware address of the interface to send from
++ *
++ * @retval DESSERT_OK on success
++ * @retval EINVAL if message is broken
++ * @retval EIO if message was not sent successfully
++ *
++ * %DESCRIPTION:
++ *
++ **/
++int dessert_meshsend_fast_hwaddr(dessert_msg_t* msg,
++ const uint8_t hwaddr[ETHER_ADDR_LEN]) {
++ int res;
++ dessert_meshif_t *meshif;
++
++ pthread_rwlock_rdlock(&dessert_cfglock);
++ DL_FOREACH(_dessert_meshiflist, meshif) {
++ if (memcmp(meshif->hwaddr, hwaddr, ETHER_ADDR_LEN) == 0)
++ break;
++ }
++ pthread_rwlock_unlock(&dessert_cfglock);
++ if (likely(meshif != NULL)) {
++ /* set shost */
++ memcpy(msg->l2h.ether_shost, meshif->hwaddr, ETHER_ADDR_LEN);
++ /* send */
++ res = _dessert_meshsend_if2(msg, meshif);
++ } else {
++ dessert_err("No such interface - aborting");
++ return ENODEV;
++ }
++
++ return (res);
++}
++
++/** Sends a \b dessert \b message fast via all interfaces in a randomized fashion.
++ *
++ * This method is faster than dessert_meshsend_randomized(), but does not check
++ * the message and may alter the message buffer.
++ *
++ * @param[in] *msgin message to send
++ *
++ * @retval DESSERT_OK on success
++ * @retval EINVAL if message is broken
++ * @retval EIO if message was not sent successfully
++ *
++ * %DESCRIPTION:
++ *
++ **/
++int dessert_meshsend_fast_randomized(dessert_msg_t* msgin) {
++ int i;
++ int res = 0;
++
++ pthread_mutex_lock(&_dessert_meshiflist_mutex);
++ for (i = 0; i < _dessert_meshiflist_len; i++) {
++ res = dessert_meshsend_fast(msgin, _dessert_meshiflist_perms[_dessert_meshiflist_current_perm][i]);
++ if (res) {
++ break;
++ }
++ }
++ _dessert_meshiflist_current_perm = (_dessert_meshiflist_current_perm+1) % _dessert_meshiflist_perm_count;
++ pthread_mutex_unlock(&_dessert_meshiflist_mutex);
++
++ return res;
++}
++
++/** Sends a @b dessert @b message @a msg via the specified interface @a iface or
++ * all interfaces.
++ *
++ * This method is faster than dessert_meshsend(), but does not check the message
++ * and may alter the message buffer. In contrast to dessert_meshsend_fast() it
++ * does not write the ether_shost address.
++ *
++ * @param[in] *msg message to send
++ * @param[in] *iface interface to send from
++ *
++ * @retval DESSERT_OK on success
++ * @retval EINVAL if message is broken
++ * @retval EIO if message was not sent successfully
++ *
++ * %DESCRIPTION:
++ *
++ **/
++int dessert_meshsend_raw(dessert_msg_t* msg, const dessert_meshif_t *iface) {
++ int res = 0;
++
++ if (iface == NULL) {
++ pthread_rwlock_rdlock(&dessert_cfglock);
++ DL_FOREACH(_dessert_meshiflist, iface) {
++ res = _dessert_meshsend_if2(msg, iface);
++ if (res) {
++ break;
++ }
++ }
++ pthread_rwlock_unlock(&dessert_cfglock);
++ } else {
++ res = _dessert_meshsend_if2(msg, iface);
++ }
++
++ return (res);
++
++}
++
++/******************************************************************************
++ * meshrx-callback handling
++ ******************************************************************************/
++
++/** Removes all occurrences of the given callback function @a c from the meshrx
++ * pipeline.
++ *
++ * @param[in] c callback function pointer
++ *
++ * @retval DESSERT_OK on success
++ * @retval DESSERT_ERR otherwise
++ *
++ * %DESCRIPTION:
++ *
++ **/
++int dessert_meshrxcb_del(dessert_meshrxcb_t* c) {
++ int count = 0;
++ dessert_meshrxcbe_t *i, *last;
++
++ pthread_rwlock_wrlock(&dessert_cfglock);
++
++ if (_dessert_meshrxcblist == NULL) {
++ count++;
++ goto dessert_meshrxcb_del_out;
++ }
++
++ while (_dessert_meshrxcblist->c == c) {
++ count++;
++ i = _dessert_meshrxcblist;
++ _dessert_meshrxcblist = _dessert_meshrxcblist->next;
++ free(i);
++ if (_dessert_meshrxcblist == NULL) {
++ goto dessert_meshrxcb_del_out;
++ }
++ }
++
++ for (i = _dessert_meshrxcblist; i->next != NULL; i = i->next) {
++ if (i->c == c) {
++ count++;
++ last->next = i->next;
++ free(i);
++ i = last;
++ }
++ last = i;
++ }
++
++ dessert_meshrxcb_del_out: _dessert_meshrxcblistver++;
++ pthread_rwlock_unlock(&dessert_cfglock);
++ return ((count > 0) ? DESSERT_OK : DESSERT_ERR);
++
++}
++
++/** Adds a callback function to the meshrx pipeline.
++ *
++ * The callback going to get called if a packet is received via a dessert interface.
++ *
++ * @param[in] c callback function
++ * @param[in] prio priority of the function - lower first!
++ *
++ * @retval DESSERT_OK on success
++ * @retval -errno on error
++ *
++ * %DESCRIPTION:
++ *
++ **/
++int dessert_meshrxcb_add(dessert_meshrxcb_t* c, int prio) {
++ dessert_meshrxcbe_t *cb, *i;
++
++ cb = (dessert_meshrxcbe_t *) malloc(sizeof(dessert_meshrxcbe_t));
++ if (cb == NULL)
++ return (-errno);
++
++ pthread_rwlock_wrlock(&dessert_cfglock);
++
++ cb->c = c;
++ cb->prio = prio;
++ cb->next = NULL;
++
++ if (_dessert_meshrxcblist == NULL) {
++ _dessert_meshrxcblist = cb;
++ _dessert_meshrxcblistver++;
++
++ pthread_rwlock_unlock(&dessert_cfglock);
++ return DESSERT_OK;
++ }
++
++ if (_dessert_meshrxcblist->prio > cb->prio) {
++ cb->next = _dessert_meshrxcblist;
++ _dessert_meshrxcblist = cb;
++ _dessert_meshrxcblistver++;
++
++ pthread_rwlock_unlock(&dessert_cfglock);
++ return DESSERT_OK;
++ }
++
++ /* find right place for callback */
++ for (i = _dessert_meshrxcblist; i->next != NULL && i->next->prio
++ <= cb->prio; i = i->next)
++ ;
++
++ /* insert it */
++ cb->next = i->next;
++ i->next = cb;
++ _dessert_meshrxcblistver++;
++
++ pthread_rwlock_unlock(&dessert_cfglock);
++ return DESSERT_OK;
++}
++
++/******************************************************************************
++ * mesh interface handling
++ ******************************************************************************/
++
++/** Returns the head of the list of mesh interfaces (_desert_meshiflist).
++ *
++ * @retval pointer if list is not empty
++ * @retval NULL otherwise
++ *
++ * %DESCRIPTION:
++ *
++ */
++dessert_meshif_t* dessert_meshiflist_get() {
++ return _dessert_meshiflist;
++}
++
++/** Looks for mesh interface with name @a dev in the list of mesh interfaces and
++ * returns a pointer to it.
++ *
++ * @param[in] *dev interface name
++ *
++ * @retval pointer if the interface is found
++ * @retval NULL otherwise
++ *
++ * %DESCRIPTION:
++ *
++ **/
++dessert_meshif_t* dessert_meshif_get_name(const char* dev) {
++ dessert_meshif_t *meshif = NULL;
++
++ /* search dev name in iflist */
++ //meshif = _dessert_meshiflist;
++ pthread_rwlock_rdlock(&dessert_cfglock);
++ DL_FOREACH(_dessert_meshiflist, meshif) {
++ if (strncmp(meshif->if_name, dev, IF_NAMESIZE) == 0)
++ break;
++ }
++ pthread_rwlock_unlock(&dessert_cfglock);
++
++ return (meshif);
++}
++
++/** Looks for mesh interface with hardware address @a hwaddr in the list of mesh
++ * interfaces and returns a pointer to it.
++ *
++ * @param[in] *hwaddr interface hardware address
++ *
++ * @retval pointer if the interface is found
++ * @retval NULL otherwise
++ *
++ * %DESCRIPTION:
++ *
++ */
++dessert_meshif_t* dessert_meshif_get_hwaddr(const uint8_t hwaddr[ETHER_ADDR_LEN]) {
++ dessert_meshif_t *meshif = NULL;
++
++ pthread_rwlock_rdlock(&dessert_cfglock);
++ DL_FOREACH(_dessert_meshiflist, meshif) {
++ if (memcmp(meshif->hwaddr, hwaddr, ETHER_ADDR_LEN) == 0)
++ break;
++ }
++ pthread_rwlock_unlock(&dessert_cfglock);
++
++ return meshif;
++}
++
++/** Removes the corresponding dessert_meshif struct from _dessert_meshiflist and does some cleanup.
++ *
++ * @param[in] dev interface name to remove from list
++ *
++ * @retval DESSERT_OK on success
++ * @retval -errno on error
++ *
++ * %DESCRIPTION:
++ *
++ */
++int dessert_meshif_del(const char* dev) {
++ dessert_meshif_t *meshif;
++ // dessert_meshif_t *meshif_prev; TODO MESHIF_HASH
++
++ /* lock the list */
++ pthread_rwlock_wrlock(&dessert_cfglock);
++ /* search dev name in iflist */
++ DL_FOREACH(_dessert_meshiflist, meshif) {
++ if (strncmp(meshif->if_name, dev, IF_NAMESIZE) == 0)
++ break;
++ }
++
++ if (meshif == NULL) {
++ pthread_rwlock_unlock(&dessert_cfglock);
++ return (ENODEV);
++ }
++
++ /* remove it from list */
++ DL_DELETE(_dessert_meshiflist, meshif);
++ _dessert_meshiflist_update_permutations();
++ pthread_rwlock_unlock(&dessert_cfglock);
++
++ /* tell pcap not to further process packets */
++ pcap_breakloop(meshif->pcap);
++
++ /* the remaining cleanup is done in the interface thread *
++ * using _dessert_meshif_cleanup */
++
++ return DESSERT_OK;
++
++}
++
++/** Initializes given mesh interface, starts up the packet processor thread.
++
++ * @param[in] *dev interface name
++ * @param[in] flags @todo Document the flags parameter.
++ *
++ * @retval DESSERT_OK on success
++ * @retval DESSERT_ERR on error
++ *
++ *
++ *
++ * %DESCRIPTION:
++ *
++ */
++int dessert_meshif_add(const char* dev, uint8_t flags) {
++ dessert_meshif_t *meshif;
++
++ uint8_t promisc = (flags & DESSERT_IF_NOPROMISC) ? 0 : 1;
++ struct bpf_program fp; /* filter program for libpcap */
++ char fe[64]; /* filter expression for libpcap */
++
++ snprintf(fe, 64, "ether proto 0x%04x", DESSERT_ETHPROTO);
++
++ /* init new interface entry */
++ meshif = (dessert_meshif_t*) malloc(sizeof(dessert_meshif_t));
++ if (meshif == NULL)
++ return (-errno);
++ memset((void *) meshif, 0, sizeof(dessert_meshif_t));
++ strncpy(meshif->if_name, dev, IF_NAMESIZE);
++ meshif->if_name[IF_NAMESIZE - 1] = '\0';
++ meshif->if_index = if_nametoindex(dev);
++ pthread_mutex_init(&(meshif->cnt_mutex), NULL);
++
++ /* check if interface exists */
++ if (!meshif->if_index) {
++ dessert_err("interface %s - no such interface", meshif->if_name);
++ goto dessert_meshif_add_err;
++ }
++
++ /* initialize libpcap */
++ meshif->pcap = pcap_open_live(meshif->if_name, DESSERT_MAXFRAMELEN,
++ promisc, 10, meshif->pcap_err);
++ if (meshif->pcap == NULL) {
++ dessert_err("pcap_open_live failed for interface %s(%d):\n%s",
++ meshif->if_name, meshif->if_index, meshif->pcap_err);
++ goto dessert_meshif_add_err;
++ }
++ if (pcap_datalink(meshif->pcap) != DLT_EN10MB) {
++ dessert_err("interface %s(%d) is not an ethernet interface!",
++ meshif->if_name, meshif->if_index);
++ goto dessert_meshif_add_err;
++ }
++
++ /* pcap filter */
++ if (!(flags & DESSERT_IF_NOFILTER)) {
++ if (pcap_compile(meshif->pcap, &fp, fe, 0, 0) == -1) {
++ dessert_err("couldn't parse filter %s: %s\n", fe, pcap_geterr(meshif->pcap));
++ goto dessert_meshif_add_err;
++ }
++ if (pcap_setfilter(meshif->pcap, &fp) == -1) {
++ dessert_err("couldn't install filter %s: %s\n", fe, pcap_geterr(meshif->pcap));
++ goto dessert_meshif_add_err;
++ }
++ /* else { TODO: pcap_freecode() } */
++ }
++
++ /* get hardware address */
++ if (_dessert_meshif_gethwaddr(meshif) != 0) {
++ dessert_err("failed to get hwaddr of interface %s(%d)",
++ meshif->if_name, meshif->if_index);
++ goto dessert_meshif_add_err;
++ }
++
++ /* check whether we need to set defsrc (default source) */
++ if (memcmp(dessert_l25_defsrc, ether_null, ETHER_ADDR_LEN) == 0) {
++ memcpy(dessert_l25_defsrc, meshif->hwaddr, ETHER_ADDR_LEN);
++ dessert_info("set dessert_l25_defsrc to hwaddr %02x:%02x:%02x:%02x:%02x:%02x",
++ dessert_l25_defsrc[0], dessert_l25_defsrc[1],dessert_l25_defsrc[2],
++ dessert_l25_defsrc[3], dessert_l25_defsrc[4], dessert_l25_defsrc[5]);
++ }
++
++ dessert_info("starting worker thread for interface %s(%d) hwaddr %02x:%02x:%02x:%02x:%02x:%02x",
++ meshif->if_name, meshif->if_index,
++ meshif->hwaddr[0], meshif->hwaddr[1], meshif->hwaddr[2],
++ meshif->hwaddr[3], meshif->hwaddr[4], meshif->hwaddr[5]);
++
++ /* start worker thread */
++ if (pthread_create(&(meshif->worker), NULL, _dessert_meshif_add_thread,
++ (void *) meshif)) {
++ dessert_err("creating worker thread failed for interface %s(%d)",
++ meshif->if_name, meshif->if_index);
++ goto dessert_meshif_add_err;
++ }
++
++ /* prepend to interface list */
++ pthread_rwlock_wrlock(&dessert_cfglock);
++ DL_PREPEND(_dessert_meshiflist, meshif);
++ _dessert_meshiflist_update_permutations();
++ pthread_rwlock_unlock(&dessert_cfglock);
++
++ return (DESSERT_OK);
++
++ dessert_meshif_add_err:
++
++ if (meshif->pcap != NULL) {
++ pcap_close(meshif->pcap);
++ }
++ free(meshif);
++ return (DESSERT_ERR);
++}
++
++/*****************************************************************************
++ *
++ * INTERNAL / PRIVATE
++ *
++ * M E S H - I N T E R F A C E S
++ *
++ ******************************************************************************/
++
++/** Run all registered callbacks.
++ *
++ * @internal
++ *
++ * @return the return status of the last callback called
++ *
++ * @warning Use with care - never register as callback!
++ *
++ * %DESCRIPTION:
++ *
++ */
++int _dessert_meshrxcb_runall(dessert_msg_t* msg_in, size_t len,
++ dessert_msg_proc_t *proc_in, const dessert_meshif_t *meshif,
++ dessert_frameid_t id) {
++ dessert_msg_t *msg = msg_in;
++ dessert_msg_proc_t *proc = proc_in;
++ dessert_meshrxcbe_t *cb;
++ int res = 0;
++ dessert_meshrxcb_t **cbl = NULL;
++ int cbllen = 0;
++ int cblcur = -1;
++
++ /* copy callbacks to internal list to release dessert_cfglock before invoking callbacks*/
++ pthread_rwlock_rdlock(&dessert_cfglock);
++ cbllen = 0;
++ for (cb = _dessert_meshrxcblist; cb != NULL; cb = cb->next)
++ cbllen++;
++ cbl = malloc(cbllen * sizeof(dessert_meshrxcb_t *));
++ if (cbl == NULL) {
++ dessert_err("failed to allocate memory for internal callback list");
++ pthread_rwlock_unlock(&dessert_cfglock);
++ return DESSERT_MSG_DROP;
++ }
++
++ cblcur = 0;
++ for (cb = _dessert_meshrxcblist; cb != NULL; cb = cb->next)
++ cbl[cblcur++] = cb->c;
++
++ pthread_rwlock_unlock(&dessert_cfglock);
++
++ /* call the interested */
++ res = 0;
++ cblcur = 0;
++ while (res > DESSERT_MSG_DROP && cblcur < cbllen) {
++
++ _dessert_packet_process_cbagain: res = cbl[cblcur](msg, len, proc,
++ meshif, id);
++
++ if (res == DESSERT_MSG_NEEDNOSPARSE && msg == msg_in) {
++ dessert_msg_clone(&msg, msg_in, 0);
++ len = DESSERT_MAXFRAMEBUFLEN;
++ goto _dessert_packet_process_cbagain;
++ } else if (res == DESSERT_MSG_NEEDNOSPARSE && msg != msg_in) {
++ dessert_warn("bogus DESSERT_MSG_NEEDNOSPARSE returned from callback!");
++ }
++
++ if (res == DESSERT_MSG_NEEDMSGPROC && proc == NULL) {
++ proc = malloc(DESSERT_MSGPROCLEN);
++ memset(proc, 0, DESSERT_MSGPROCLEN);
++ goto _dessert_packet_process_cbagain;
++ } else if (res == DESSERT_MSG_NEEDMSGPROC && proc != NULL) {
++ dessert_warn("bogus DESSERT_MSG_NEEDMSGPROC returned from callback!");
++ }
++
++ cblcur++;
++ }
++
++ free(cbl);
++
++ if (msg != msg_in)
++ dessert_msg_destroy(msg);
++
++ if (proc != proc_in)
++ free(proc);
++
++ return (res);
++}
++
++/** Get the hardware address of the ethernet device behind meshif.
++ *
++ * @internal
++ *
++ * @param *meshif pointer to dessert_meshif_t to query
++ *
++ * @retval DESSERT_OK on success
++ *
++ * \warning This is a platform depended function!
++ *
++ * %DESCRIPTION:
++ *
++ **/
++int _dessert_meshif_gethwaddr(dessert_meshif_t *meshif)
++#ifdef __DARWIN__
++{
++ /* the Apple way... */
++
++ int mib[6];
++ size_t len;
++ uint8_t *buf, *next;
++ struct if_msghdr *ifm;
++ struct sockaddr_dl *sdl;
++ int ret = DESSERT_ERR;
++
++ mib[0] = CTL_NET;
++ mib[1] = AF_ROUTE;
++ mib[2] = 0;
++ mib[3] = AF_LINK;
++ mib[4] = NET_RT_IFLIST;
++ mib[5] = 0;
++
++ if (sysctl(mib, 6, NULL, &len, NULL, 0) < 0) {
++ dessert_err("Acquiring hwaddr failed: sysctl 1 error");
++ return(DESSERT_ERR);
++ }
++
++ if ((buf = malloc(len)) == NULL) {
++ dessert_err("acquiring hwaddr failed: malloc error");
++ return(DESSERT_ERR);
++ }
++
++ if (sysctl(mib, 6, buf, &len, NULL, 0) < 0) {
++ dessert_err("acquiring hwaddr failed: sysctl 2 error");
++ return(DESSERT_ERR);
++ }
++
++ for (next = buf; next < buf+len; next += ifm->ifm_msglen) {
++ ifm = (struct if_msghdr *)next;
++ if (ifm->ifm_type == RTM_IFINFO) {
++ sdl = (struct sockaddr_dl *)(ifm + 1);
++ if (strncmp(&sdl->sdl_data[0], meshif->if_name, sdl->sdl_len) == 0) {
++ memcpy(meshif->hwaddr, LLADDR(sdl), ETHER_ADDR_LEN);
++ ret = DESSERT_OK;
++ break;
++ }
++ }
++ }
++
++ free(buf);
++ return ret;
++}
++#elif __FreeBSD__
++{
++ struct ifaddrs *ifaphead;
++ struct ifaddrs *ifap;
++ struct sockaddr_dl *sdl = NULL;
++
++ if (getifaddrs(&ifaphead) != 0)
++ {
++ dessert_err("getifaddrs() failed");
++ return(DESSERT_ERR);
++ }
++
++ for (ifap = ifaphead; ifap; ifap = ifap->ifa_next)
++ {
++ if ((ifap->ifa_addr->sa_family == AF_LINK))
++ {
++ if (strcmp(ifap->ifa_name,meshif->if_name) == 0)
++ {
++ sdl = (struct sockaddr_dl *)ifap->ifa_addr;
++ if (sdl)
++ {
++ memcpy(meshif->hwaddr, LLADDR(sdl), ETHER_ADDR_LEN);
++ return(DESSERT_OK);
++ }
++ }
++ }
++ }
++ return(DESSERT_ERR);
++}
++#elif __linux__
++{
++ /* the linux and solaris way */
++ int sockfd;
++ struct ifreq ifr;
++
++ /* we need some socket to do that */
++ sockfd = socket(AF_INET, SOCK_STREAM, 0);
++
++ /* set interface options and get hardware address */
++ strncpy(ifr.ifr_name, meshif->if_name, sizeof(ifr.ifr_name));
++
++#ifdef SIOCGIFHWADDR
++ if (ioctl(sockfd, SIOCGIFHWADDR, &ifr) >= 0) {
++ memcpy(meshif->hwaddr, &ifr.ifr_hwaddr.sa_data, ETHER_ADDR_LEN);
++ /* } */
++#elif defined SIOCGENADDR
++ if ( ioctl(sd, SIOCGENADDR, &ifr_work) >= 0 ) {
++ memcpy( meshif->hwaddr, &ifr.ifr_enaddr, ETHER_ADDR_LEN );
++ /* } */
++#else
++ if (false) {
++#endif
++ close(sockfd);
++ return (DESSERT_OK);
++ } else {
++ dessert_err("acquiring hwaddr failed");
++ close(sockfd);
++ return (DESSERT_ERR);
++ }
++}
++#else
++{
++ dessert_err("acquiring hwaddr failed - platform not supported");
++ return(DESSERT_ERR);
++}
++#endif
++
++/******************************************************************************
++ *
++ * LOCAL
++ *
++ * M E S H - I N T E R F A C E S
++ *
++ ******************************************************************************/
++
++/** Function to send packet via a single interface.
++ *
++ * @internal
++ *
++ * @param[in] *msg the message to send
++ * @param[in] *iface the interface the message should be send via
++ *
++ * @retval DESSERT_OK on success
++ * @retval EINVAL if *iface is NULL
++ * @retval EIO if there was a problem sending the message
++ *
++ * %DESCRIPTION:
++ *
++ */
++static inline int _dessert_meshsend_if2(dessert_msg_t* msg,
++ dessert_meshif_t *iface) {
++ int res;
++ uint8_t oldflags;
++ size_t msglen = ntohs(msg->hlen) + ntohs(msg->plen);
++
++ /* check for null meshInterface */
++ if (iface == NULL) {
++ dessert_err("NULL-pointer given as interface - programming error!");
++ return EINVAL;
++ }
++
++ /* send packet - temporally setting DESSERT_FLAG_SPARSE */
++ oldflags = msg->flags;
++ msg->flags &= ~DESSERT_FLAG_SPARSE;
++ res = pcap_inject(iface->pcap, (u_char *) msg, msglen);
++ msg->flags = oldflags;
++
++ if (res != msglen) {
++ if (res == -1) {
++ dessert_warn("couldn't send message: %s\n", pcap_geterr(iface->pcap));
++ } else {
++ dessert_warn("couldn't send message: sent only %d of %d bytes\n",
++ res, msglen);
++ }
++ return (EIO);
++ }
++
++ pthread_mutex_lock(&(iface->cnt_mutex));
++ iface->opkts++;
++ iface->obytes += res;
++ pthread_mutex_unlock(&(iface->cnt_mutex));
++
++ return (DESSERT_OK);
++
++}
++
++/** Callback doing the main work for packets received through a dessert interface.
++ *
++ * @internal
++ *
++ * @param arg - meshif-pointer carried by libpcap in something else
++ * @param header - pointer to the header by libpcap
++ * @param packet - pointer to the packet by libpcap
++ *
++ * %DESCRIPTION:
++ *
++ */
++static void _dessert_packet_process(u_char *args,
++ const struct pcap_pkthdr *header, const u_char *packet) {
++ dessert_meshif_t *meshif = (dessert_meshif_t *) args;
++ dessert_msg_t *msg = (dessert_msg_t *) packet;
++ size_t len = header->caplen;
++ dessert_frameid_t id;
++ dessert_msg_proc_t proc;
++
++ /* is it something I understand? */
++ if (ntohs(msg->l2h.ether_type) != DESSERT_ETHPROTO) {
++ dessert_debug("got packet with ethertype %04x - discarding", ntohs(msg->l2h.ether_type));
++ return;
++ }
++
++ /* check message */
++ if (header->caplen < header->len) {
++ dessert_warn("packet too short - check pcap_open_live() parameters");
++ return;
++ }
++ if (header->caplen < DESSERT_MSGLEN) {
++ dessert_notice("packet too short - shorter than DESSERT_MSGLEN");
++ return;
++ }
++
++ /* generate frame id */
++ id = _dessert_newframeid();
++ memset(&proc, 0, DESSERT_MSGPROCLEN);
++
++ /* count packet */
++ pthread_mutex_lock(&(meshif->cnt_mutex));
++ meshif->ipkts++;
++ meshif->ibytes += header->caplen;
++ pthread_mutex_unlock(&(meshif->cnt_mutex));
++
++ _dessert_meshrxcb_runall(msg, len, &proc, meshif, id);
++
++}
++
++/** Internal routine called before interface thread finishes.
++ *
++ * @internal
++ *
++ * @param *meshif the interface to be cleaned up
++ *
++ * %DESCRIPTION:
++ *
++ */
++static void _dessert_meshif_cleanup(dessert_meshif_t *meshif) {
++ pcap_close(meshif->pcap);
++ free(meshif);
++}
++
++/** Internal thread function running the capture loop.
++ *
++ * @internal
++ *
++ * @param *arg a void pointer representing a dessert_meshif_t interface
++ *
++ * %DESCRIPTION:
++ */
++static void *_dessert_meshif_add_thread(void* arg) {
++
++ dessert_meshif_t *meshif = (dessert_meshif_t *) arg;
++
++ pcap_loop(meshif->pcap, -1, _dessert_packet_process, (u_char *) meshif);
++
++ _dessert_meshif_cleanup(meshif);
++
++ return (NULL);
++
++}
++
++/** Internal function to update the lookup table of permutations of the current _dessert_meshiflist.
++ *
++ * @internal
++ *
++ * %DESCRIPTION: \n
++ */
++static void _dessert_meshiflist_update_permutations() {
++ int i, r;
++
++ pthread_mutex_lock(&_dessert_meshiflist_mutex);
++ _dessert_meshiflist_len = DL_LENGTH(_dessert_meshiflist);
++
++ dessert_meshif_t **a = calloc(sizeof(a) * _dessert_meshiflist_len, 1);
++ list2array(_dessert_meshiflist, a, _dessert_meshiflist_len);
++
++ _dessert_meshiflist_perm_count = fact(_dessert_meshiflist_len);
++
++ if (_dessert_meshiflist_perms != NULL) {
++ free(_dessert_meshiflist_perms);
++ }
++ _dessert_meshiflist_perms = calloc(sizeof(dessert_meshif_t **) * _dessert_meshiflist_perm_count + sizeof(dessert_meshif_t *) * _dessert_meshiflist_perm_count * _dessert_meshiflist_len, 1);
++ for (i = 0; i < _dessert_meshiflist_perm_count; ++i) {
++ _dessert_meshiflist_perms[i]
++ = (dessert_meshif_t **) (((char *) _dessert_meshiflist_perms)
++ + sizeof(dessert_meshif_t **)
++ * _dessert_meshiflist_perm_count + i
++ * _dessert_meshiflist_len * sizeof(dessert_meshif_t *));
++ }
++
++ for (r = 0; r < _dessert_meshiflist_perm_count; r++) {
++ memcpy(_dessert_meshiflist_perms[r], a, sizeof(dessert_meshif_t *)
++ * _dessert_meshiflist_len);
++ }
++ free(a);
++
++ for(r = 0; r < _dessert_meshiflist_perm_count; r++){
++ permutation(r, _dessert_meshiflist_len, _dessert_meshiflist_perms[r]);
++ }
++
++ pthread_mutex_unlock(&_dessert_meshiflist_mutex);
++}
++
++/** Internal function to get the length of a double-linked utlist.
++ *
++ * @internal
++ *
++ * @param[in] *l a pointer to the list head
++ *
++ * @return the number of elements in the list
++ *
++ * %DESCRIPTION: \n
++ */
++static inline int DL_LENGTH(dessert_meshif_t *l) {
++ int len = 0;
++ dessert_meshif_t *temp;
++ DL_FOREACH(l, temp)
++ len++;
++ return len;
++}
++
++/** Internal function to copy the element pointers of the _dessert_meshiflist to an array.
++ *
++ * @internal
++ *
++ * @param[in] *l a pointer to the list head
++ * @param[out] **a a pointer to an array of dessert_meshif_t
++ *
++ * %DESCRIPTION: \n
++ */
++static inline void list2array(dessert_meshif_t *l, dessert_meshif_t **a,
++ int len) {
++ dessert_meshif_t *t;
++ int i = 0;
++ DL_FOREACH(l, t) {
++ a[i++] = t;
++ if (--len == 0)
++ break;
++ }
++}
++
++/** Internal function to compute the factorial of a given number.
++ *
++ * @internal
++ *
++ * @param[in] i the number
++ *
++ * @return the factorial
++ *
++ * %DESCRIPTION: \n
++ */
++static inline int fact(int i){
++ int fact = 1;
++ while (i > 0) fact *= i--;
++ return fact;
++}
++
++/** Internal function to produce a permutation of @a a.
++ *
++ * @internal
++ *
++ * @param[in] k the permutation to generate
++ * @param[in] len the number of elements in the array
++ * @param[out] the array to permute
++ *
++ * @note Algorithm adopted from the Wikipedia article on
++ * <a href="http://en.wikipedia.org/wiki/Permutation">Permutations</a>.
++ *
++ * %DESCRIPTION: \n
++ */
++static inline void permutation(int k, int len, dessert_meshif_t **a) {
++ dessert_meshif_t *temp;
++ int j;
++
++ for(j = 2 ; j <= len; j++ ) {
++ temp = a[(k%j)];
++ a[(k%j)] = a[j-1];
++ a[j-1] = temp;
++ k = k / j;
++ }
++}
+Index: libdessert0.86-0.86.14/src/libdessert/dessert_msg.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/libdessert/dessert_msg.c 2009-12-09 16:38:27.309345061 +0100
+@@ -0,0 +1,876 @@
++/******************************************************************************
++ Copyright 2009, The DES-SERT Team, Freie Universitaet Berlin (FUB).
++ All rights reserved.
++
++ These sources were originally developed by Philipp Schmidt
++ at Freie Universitaet Berlin (http://www.fu-berlin.de/),
++ Computer Systems and Telematics / Distributed, Embedded Systems (DES) group
++ (http://cst.mi.fu-berlin.de/, http://www.des-testbed.net/)
++ ------------------------------------------------------------------------------
++ This program is free software: you can redistribute it and/or modify it under
++ the terms of the GNU General Public License as published by the Free Software
++ Foundation, either version 3 of the License, or (at your option) any later
++ version.
++
++ This program is distributed in the hope that it will be useful, but WITHOUT
++ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
++ FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License along with
++ this program. If not, see http://www.gnu.org/licenses/ .
++ ------------------------------------------------------------------------------
++ For further information and questions please use the web site
++ http://www.des-testbed.net/
++ *******************************************************************************/
++
++#include "dessert_internal.h"
++#include <dessert/dessert.h>
++
++/* global data storage // P U B L I C */
++
++/* global data storage // P R I V A T E */
++
++/* local data storage*/
++
++/* internal functions forward declarations*/
++
++/******************************************************************************
++ *
++ * EXTERNAL / PUBLIC
++ *
++ * M E S S A G E H A N D L I N G
++ *
++ ******************************************************************************/
++
++/** creates a new dessert_msg_t and initializes it.
++ * @arg **msgout (out) pointer to return message address
++ * @return 0 on success, -errno on error
++ **/
++int dessert_msg_new(dessert_msg_t **msgout) {
++ dessert_msg_t *msg;
++
++ msg = malloc(DESSERT_MAXFRAMEBUFLEN);
++
++ if (msg == NULL) {
++ dessert_err("failed to allocate buffer for new message!");
++ return (-ENOMEM);
++ }
++
++ memset(msg, 0, DESSERT_MAXFRAMEBUFLEN);
++ msg->l2h.ether_type = htons(DESSERT_ETHPROTO);
++ memset(msg->l2h.ether_dhost, 255, ETHER_ADDR_LEN);
++ memcpy(msg->proto, dessert_proto, DESSERT_PROTO_STRLEN);
++ msg->ver = dessert_ver;
++ msg->ttl = 0xff;
++ msg->u8 = 0x00;
++ msg->u16 = htons(0xbeef);
++ msg->hlen = htons(sizeof(dessert_msg_t));
++ msg->plen = htons(0);
++
++ *msgout = msg;
++ return (DESSERT_OK);
++
++}
++
++/** generates a copy of a dessert_msg
++ * @arg **msgnew (out) pointer to return message address
++ * @arg *msgold pointer to the message to clone
++ * @arg sparse whether to allocate DESSERT_MAXFRAMELEN or only hlen+plen
++ * @return DESSERT_OK on success, -errno otherwise
++ **/
++int dessert_msg_clone(dessert_msg_t **msgnew, const dessert_msg_t *msgold,
++ uint8_t sparse) {
++ dessert_msg_t *msg;
++ size_t msglen = ntohs(msgold->hlen) + ntohs(msgold->plen);
++
++ if (sparse) {
++ msg = malloc(msglen);
++ } else {
++ msg = malloc(DESSERT_MAXFRAMEBUFLEN);
++ }
++
++ if (msg == NULL) {
++ return (-errno);
++ }
++
++ memcpy(msg, msgold, msglen);
++
++ if (sparse) {
++ msg->flags |= DESSERT_FLAG_SPARSE;
++ } else {
++ msg->flags &= DESSERT_FLAG_SPARSE ^ DESSERT_FLAG_SPARSE;
++ }
++
++ *msgnew = msg;
++ return (DESSERT_OK);
++
++}
++
++/** checks whether a dessert_msg is consistent
++ * @arg msg the message to be checked
++ * @arg len the length of the buffer
++ * @return DESSERT_OK on success
++ * @return -1 of the message is too large for the buffer
++ * @return -2 if the message was not intended to this daemon
++ * @return -3 if some extension is not consistent
++ * %DESCRIPTION:
++ ***********************************************************************/
++int dessert_msg_check(const dessert_msg_t* msg, size_t len) {
++ dessert_ext_t *ext;
++
++ /* is the message large enough to at least carry the header */
++ if (len < DESSERT_MSGLEN) {
++ dessert_info("message too short - shorter than DESSERT_MSGLEN");
++ return (-1);
++ }
++ if (ntohs(msg->hlen) + ntohs(msg->plen) > len) {
++ dessert_info("message too short - shorter than header + payload");
++ return (-1);
++ }
++
++ /* right protocol and version */
++ if (msg->proto[0] != dessert_proto[0] || msg->proto[1] != dessert_proto[1]
++ || msg->proto[2] != dessert_proto[2] || msg->proto[3]
++ != dessert_proto[3]) {
++ dessert_info("wrong dessert protocol");
++ return (-2);
++ }
++ if (msg->ver != dessert_ver) {
++ dessert_info("wrong dessert protocol version");
++ return (-2);
++ }
++
++ /* now check extensions.... */
++ ext = (dessert_ext_t *) ((uint8_t *) msg + DESSERT_MSGLEN);
++ while ((uint8_t *) ext < ((uint8_t *) msg + (size_t) ntohs(msg->hlen))) {
++ /* does current extension fit into the header? */
++ if (((uint8_t *) ext + (size_t) ext->len) > ((uint8_t *) msg
++ + (size_t) ntohs(msg->hlen))) {
++ dessert_info("extension %x too long", ext->type);
++ return (-3);
++ }
++ if (ext->len < 2) {
++ dessert_info("extension %x too short", ext->type);
++ return (-3);
++ }
++
++ ext = (dessert_ext_t *) ((uint8_t *) ext + (size_t) ext->len);
++ }
++
++ /* message is valid */
++ return DESSERT_OK;
++}
++
++/** dump a dessert_msg_t to a string
++ * @arg *msg the message to be dumped
++ * @arg len the length of the buffer
++ * @arg *buf text output buffer
++ * @arg blen text output buffer length
++ **/
++void dessert_msg_dump(const dessert_msg_t* msg, size_t len, char *buf,
++ size_t blen) {
++ dessert_msg_proc_dump(msg, len, NULL, buf, blen);
++}
++
++/** free a dessert_msg
++ * @arg *msg message to free
++ **/
++void dessert_msg_destroy(dessert_msg_t* msg) {
++ free(msg);
++}
++
++/** creates a new dessert_msg from an ethernet frame.
++ * @arg *eth ethernet frame to encapsulate
++ * @arg len length of the ethernet frame
++ * @arg **msgout (out) pointer to return message address
++ * @return DESSERT_OK on success, -errno otherwise
++ **/
++int dessert_msg_ethencap(const struct ether_header* eth, size_t eth_len,
++ dessert_msg_t** msgout) {
++ int res;
++ dessert_ext_t *ext;
++ void *payload;
++
++ /* check len */
++ if (eth_len > DESSERT_MAXFRAMELEN - DESSERT_MSGLEN + ETHER_HDR_LEN) {
++ dessert_debug("failed to encapsulate ethernet frame of %d bytes (max=%d)",
++ eth_len, DESSERT_MAXFRAMELEN - DESSERT_MSGLEN + ETHER_HDR_LEN);
++ return (-EMSGSIZE);
++ }
++
++ /* create message */
++ res = dessert_msg_new(msgout);
++ if (res) {
++ return res;
++ }
++
++ /* add ether header */
++ res = dessert_msg_addext(*msgout, &ext, DESSERT_EXT_ETH, ETHER_HDR_LEN);
++ if (res) {
++ return res;
++ }
++ memcpy(ext->data, eth, ETHER_HDR_LEN);
++
++ /* copy message */
++ dessert_msg_addpayload(*msgout, &payload, (eth_len - ETHER_HDR_LEN));
++ memcpy(payload, ((uint8_t *) eth) + ETHER_HDR_LEN,
++ (eth_len - ETHER_HDR_LEN));
++
++ return (DESSERT_OK);
++}
++
++/** extracts an ethernet frame from a dessert_msg
++ * @arg *msg pointer to dessert_msg message to decapsulate
++ * @arg **ethout (out) pointer to return ethernet message
++ * @return eth_len on success, -1 otherwise
++ **/
++int dessert_msg_ethdecap(const dessert_msg_t* msg, struct ether_header** ethout) {
++ dessert_ext_t *ext;
++ int res;
++
++ /* create message */
++ size_t eth_len = ntohs(msg->plen) + ETHER_HDR_LEN;
++ *ethout = malloc(eth_len);
++ if (*ethout == NULL) {
++ return (-1);
++ }
++
++ /* copy header */
++ res = dessert_msg_getext(msg, &ext, DESSERT_EXT_ETH, 0);
++ if (res != 1) {
++ free(ethout);
++ return (-1);
++ }
++ memcpy(*ethout, ext->data, ETHER_HDR_LEN);
++
++ /* copy message */
++ memcpy(((uint8_t *) (*ethout)) + ETHER_HDR_LEN, (((uint8_t *) msg)
++ +ntohs(msg->hlen)), ntohs(msg->plen));
++
++ return (eth_len);
++}
++
++/** get the ether_header sent as DESSERT_EXT_ETH in a dessert_msg
++ * @arg *msg the message
++ * @return pointer to ether_header data, NULL if DESSERT_EXT_ETH not present
++ **/
++struct ether_header* dessert_msg_getl25ether(const dessert_msg_t* msg) {
++ dessert_ext_t *ext;
++ struct ether_header *l25h;
++ int res;
++
++ res = dessert_msg_getext(msg, &ext, DESSERT_EXT_ETH, 0);
++ if (res != 1) {
++ l25h = NULL;
++ } else {
++ l25h = (struct ether_header *) ext->data;
++ }
++
++ return l25h;
++}
++
++/** generates a copy of a dessert_msg_proc
++ * @arg **procnew (out) pointer to return message address
++ * @arg *procold pointer to the message to clone
++ * @return DESSERT_OK on success, -errno otherwise
++ **/
++int dessert_msg_proc_clone(dessert_msg_proc_t **procnew,
++ const dessert_msg_proc_t *procold) {
++ if (procold == NULL) {
++ *procnew = procold;
++ return (DESSERT_OK);
++ }
++
++ dessert_msg_proc_t *proc;
++
++ proc = malloc(DESSERT_MSGPROCLEN);
++
++ if (proc == NULL) {
++ return (-errno);
++ }
++
++ memcpy(proc, procold, DESSERT_MSGPROCLEN);
++
++ *procnew = proc;
++ return (DESSERT_OK);
++
++}
++
++/** dump a dessert_msg_t to a string
++ * @arg *msg the message to be dumped
++ * @arg len the length of the buffer
++ * @arg *proc the processing buffer
++ * @arg *buf text output buffer
++ * @arg blen text output buffer length
++ **/
++void dessert_msg_proc_dump(const dessert_msg_t* msg, size_t len,
++ const dessert_msg_proc_t *proc, char *buf, size_t blen) {
++ dessert_ext_t *ext;
++ int extidx = 0;
++ int i;
++ struct ether_header *l25h;
++
++#define _dessert_msg_check_append(...) snprintf(buf+strlen(buf), blen-strlen(buf), __VA_ARGS__)
++ memset((void *) buf, 0, blen);
++
++ _dessert_msg_check_append("\tl2_dhost: %02x:%02x:%02x:%02x:%02x:%02x\n",
++ msg->l2h.ether_dhost[0], msg->l2h.ether_dhost[1], msg->l2h.ether_dhost[2],
++ msg->l2h.ether_dhost[3], msg->l2h.ether_dhost[4], msg->l2h.ether_dhost[5]);
++ _dessert_msg_check_append("\tl2_shost: %02x:%02x:%02x:%02x:%02x:%02x\n",
++ msg->l2h.ether_shost[0], msg->l2h.ether_shost[1], msg->l2h.ether_shost[2],
++ msg->l2h.ether_shost[3], msg->l2h.ether_shost[4], msg->l2h.ether_shost[5]);
++ _dessert_msg_check_append("\tl2_type: %x\n\n", ntohs(msg->l2h.ether_type));
++
++ _dessert_msg_check_append("\tproto: ");
++ strncpy(buf + strlen(buf), msg->proto, DESSERT_PROTO_STRLEN);
++ _dessert_msg_check_append("\n\tver: %d\n", msg->ver);
++
++ _dessert_msg_check_append("\tflags: ");
++ if (msg->flags & DESSERT_FLAG_SPARSE)
++ _dessert_msg_check_append(" SPARSE");
++
++ _dessert_msg_check_append("\n\tttl: %x\n", (msg->ttl));
++ _dessert_msg_check_append("\tu8: %x\n", (msg->u8));
++ _dessert_msg_check_append("\tu16: %x\n", ntohs(msg->u16));
++ _dessert_msg_check_append("\thlen: %d\n", ntohs(msg->hlen));
++ _dessert_msg_check_append("\tplen: %d\n\n", ntohs(msg->plen));
++
++ /* get l2.5 header if possible */
++ if ((l25h = dessert_msg_getl25ether(msg)) != NULL) {
++ _dessert_msg_check_append("\tl25 proto: ethernet\n");
++
++ _dessert_msg_check_append("\tl25_dhost: %02x:%02x:%02x:%02x:%02x:%02x\n",
++ l25h->ether_dhost[0], l25h->ether_dhost[1], l25h->ether_dhost[2],
++ l25h->ether_dhost[3], l25h->ether_dhost[4], l25h->ether_dhost[5]);
++ _dessert_msg_check_append("\tl25_shost: %02x:%02x:%02x:%02x:%02x:%02x\n",
++ l25h->ether_shost[0], l25h->ether_shost[1], l25h->ether_shost[2],
++ l25h->ether_shost[3], l25h->ether_shost[4], l25h->ether_shost[5]);
++ _dessert_msg_check_append("\tl25_type: %x\n\n", ntohs(l25h->ether_type));
++
++ }
++
++ /* we have a trace */
++ if (dessert_msg_trace_dump(msg, buf, blen - strlen(buf)) > 1)
++ _dessert_msg_check_append("\n");
++
++ /* now other extensions.... */
++ ext = (dessert_ext_t *) ((uint8_t *) msg + DESSERT_MSGLEN);
++ while ((uint8_t *) ext < ((uint8_t *) msg + (size_t) ntohs(msg->hlen))) {
++ _dessert_msg_check_append("\textension %d:\n", extidx);
++
++ /* does current extension fit into the header? */
++ if ((((uint8_t *) ext + (size_t) ext->len) > ((uint8_t *) msg
++ + (size_t) ntohs(msg->hlen))) || (ext->len < 2)) {
++ _dessert_msg_check_append("\t\tbroken extension - giving up!\n");
++ break;
++ }
++
++ _dessert_msg_check_append("\t\ttype: 0x%02x\n", ext->type);
++ _dessert_msg_check_append("\t\tlen: %d\n", ext->len);
++
++ if (ext->type != DESSERT_EXT_ETH && ext->type != DESSERT_EXT_TRACE) {
++ _dessert_msg_check_append("\t\tdata: ");
++ for (i = 0; i < dessert_ext_getdatalen(ext); i++) {
++ _dessert_msg_check_append("0x%x ", ext->data[i]);
++ if (i % 12 == 1 && i != 1)
++ _dessert_msg_check_append("\t\t ");
++ }
++ }
++ _dessert_msg_check_append("\n");
++
++ ext = (dessert_ext_t *) ((uint8_t *) ext + (size_t) ext->len);
++ extidx++;
++ }
++
++ if (proc != NULL) {
++ _dessert_msg_check_append("\tlocal processing header:\n");
++ _dessert_msg_check_append("\tlflags: ");
++
++ if (proc->lflags & DESSERT_LFLAG_SRC_SELF)
++ _dessert_msg_check_append(" DESSERT_FLAG_SRC_SELF");
++ if (proc->lflags & DESSERT_LFLAG_DST_SELF)
++ _dessert_msg_check_append(" DESSERT_FLAG_DST_MULTICAST");
++ if (proc->lflags & DESSERT_LFLAG_DST_MULTICAST)
++ _dessert_msg_check_append(" DESSERT_FLAG_DST_SELF");
++ if (proc->lflags & DESSERT_LFLAG_DST_BROADCAST)
++ _dessert_msg_check_append(" DESSERT_FLAG_DST_BROADCAST");
++ if (proc->lflags & DESSERT_LFLAG_PREVHOP_SELF)
++ _dessert_msg_check_append(" DESSERT_FLAG_PREVHOP_SELF");
++ if (proc->lflags & DESSERT_LFLAG_NEXTHOP_SELF)
++ _dessert_msg_check_append(" NEXTHOP_SELF");
++ if (proc->lflags & DESSERT_LFLAG_NEXTHOP_BROADCAST)
++ _dessert_msg_check_append(" NEXTHOP_BROADCAST");
++ }
++
++}
++
++/** free a dessert_prc_msg
++ * @arg *proc processing buffer to free
++ **/
++void dessert_msg_proc_destroy(dessert_msg_proc_t* proc) {
++ free(proc);
++}
++
++/** add or replace payload to a dessert_msg
++ * @arg *msg the message the payload should be added to
++ * @arg **payload (out) the pointer to place the payload
++ * @arg len the length of the payload
++ * @return DESSERT_OK on success, DESSERT_ERR otherwise
++ **/
++int dessert_msg_addpayload(dessert_msg_t* msg, void** payload, int len) {
++ /* check payload */
++ if (len > DESSERT_MAXFRAMELEN - ntohs(msg->hlen)) {
++ return DESSERT_ERR; /* too big */
++ }
++
++ /* export payload pointer */
++ *payload = ((uint8_t *) msg + ntohs(msg->hlen));
++ msg->plen = htons(len);
++
++ return DESSERT_OK;
++}
++
++/** Retrieves a pointer to the payload of a dessert message @a msg.
++ *
++ * @param[in] *msg the message the payload should be retrieved from
++ * @param[out] **payload the pointer to place the payload in
++ *
++ * @return the length of the payload in bytes if any, 0 otherwise
++ */
++int dessert_msg_getpayload(dessert_msg_t *msg, void** payload) {
++
++ /* test if payload is present in msg */
++ if (msg->plen == 0) {
++ *payload = NULL;
++ return 0;
++ }
++
++ *payload = (uint8_t *) msg + ntohs(msg->hlen);
++
++ return msg->plen;
++}
++
++
++/** add an extension record to a dessert_msg
++ * @arg *msg the message the extension should be added to
++ * @arg **ext (out) the extension pointer to the reserved extension space
++ * @arg type the type of the extension
++ * @arg len the length of the ext data (without 2 byte extension header)
++ * @return DESSERT_OK on success,
++ **/
++int dessert_msg_addext(dessert_msg_t *msg, dessert_ext_t **ext, uint8_t type,
++ size_t len) {
++
++ /* check if sparse message */
++ if ((msg->flags & DESSERT_FLAG_SPARSE) > 0) {
++ dessert_debug("tried to add extension to a sparse message - use dessert_msg_clone() first!");
++ return -1;
++ }
++
++ /* add DESSERT_EXTLEN to len for convenience*/
++ len += DESSERT_EXTLEN;
++
++ /* check ext */
++ if (len > DESSERT_MAXFRAMELEN - ntohs(msg->hlen) - ntohs(msg->plen)) {
++ dessert_debug("message would be too large after adding extension!");
++ return -2; /* too big */
++ } else if (len < DESSERT_EXTLEN) {
++ dessert_debug("extension too small!");
++ return -3; /* too small */
++ } else if (len > 255) {
++ dessert_debug("extension too big!");
++ return -2; /* too big */
++ }
++
++ /* move payload if necessary */
++ if (ntohs(msg->plen) > 0) {
++ memmove(((uint8_t *) msg + ntohs(msg->hlen) + len), ((uint8_t *) msg
++ + ntohs(msg->hlen)), ntohs(msg->plen));
++ }
++
++ /* get ext addr */
++ *ext = (dessert_ext_t *) ((uint8_t *) msg + ntohs(msg->hlen));
++
++ /* update msg hlen */
++ msg->hlen = htons(ntohs(msg->hlen) + len);
++
++ /* copy in extension data */
++ (*ext)->len = len;
++ (*ext)->type = type;
++
++ return DESSERT_OK;
++}
++
++/** remove an extension record from a dessert_msg
++ * @arg *msg the message the extension should be added to
++ * @arg *ext (out) the extension pointer to the extension to be removed
++ * @return DESSERT_OK on success,
++ **/
++int dessert_msg_delext(dessert_msg_t *msg, dessert_ext_t *ext) {
++
++ /* check ext */
++ if ((((uint8_t *) ext) < ((uint8_t *) msg)) || (((uint8_t *) ext)
++ > (((uint8_t *) msg) + ntohs(msg->hlen)))) {
++ dessert_debug("extension not within packet header - won't remove");
++ return DESSERT_ERR;
++ }
++
++ msg->hlen = htons(ntohs(msg->hlen) - ext->len);
++
++ memmove(ext, ((uint8_t *) ext) + ext->len, (ntohs(msg->hlen)
++ + ntohs(msg->plen)) - (((uint8_t *) ext) - ((uint8_t *) msg)));
++
++ return DESSERT_OK;
++}
++
++/** Resizes a given extension record @a ext within in a @b dessert @b message
++ * @a msg to the new length @a new_len.
++ *
++ * @param[in] *msg the message
++ * @param[in] *ext the extension record
++ * @param[in] new_len the new length of the extension record
++ *
++ * @retval DESSERT_OK on success
++ *
++ * %DESCRIPTION:
++ *
++ **/
++int dessert_msg_resizeext(dessert_msg_t *msg, dessert_ext_t *ext, size_t new_len) {
++
++ int old_len = ext->len;
++
++ /* check ext */
++ if (new_len > DESSERT_MAXFRAMELEN - ntohs(msg->hlen) - ntohs(msg->plen) - old_len) {
++ dessert_debug("message would be too large after adding extension!");
++ return -2; /* too big */
++ } else if (new_len < DESSERT_EXTLEN) {
++ dessert_debug("extension too small!");
++ return -3; /* too small */
++ } else if (new_len > 255) {
++ dessert_debug("extension too big!");
++ return -2; /* too big */
++ }
++
++ memmove(((uint8_t *)ext) + new_len,((uint8_t *)ext) + ext->len, ntohs(msg->hlen)
++ + ntohs(msg->plen) - (((uint8_t *) ext) - ((uint8_t *) msg)) - ext->len);
++
++ msg->hlen = htons(ntohs(msg->hlen) - (ext->len - new_len));
++ ext->len = new_len;
++
++ return DESSERT_OK;
++}
++
++/** get an specific or all extensions
++ *
++ * @arg *msg the message
++ * @arg **ext (out) pointer to extracted extension
++ * sets *ext=NULL if extension not found
++ * may be NULL in this case only count/existence matters
++ * @arg type type of the ext to retrieve - use DESSERT_EXT_ANY to get any ext
++ * @arg index the index of the extension of that type, starting with 0
++ * @return 0 if the message has no such extension,
++ * @return count of extensions of that type if count > index
++ * @return -count of extensions of that type if count <= index
++ **/
++int dessert_msg_getext(const dessert_msg_t* msg, dessert_ext_t** ext,
++ uint8_t type, int index) {
++ int i = 0;
++ dessert_ext_t *exti;
++
++ if (ext != NULL)
++ *ext = NULL;
++
++ exti = (dessert_ext_t *) ((uint8_t *) msg + DESSERT_MSGLEN);
++ while ((uint8_t *) exti < ((uint8_t *) msg + (size_t) ntohs(msg->hlen))) {
++ /* does current extension fit into the header? */
++ if (type == exti->type || type == DESSERT_EXT_ANY) {
++ if (i == index && ext != NULL) {
++ *ext = exti;
++ }
++ i++;
++ }
++ exti = (dessert_ext_t *) (((uint8_t *) exti) + (size_t) exti->len);
++ }
++
++ if (i <= index) {
++ i = -i;
++ }
++ return (i);
++
++}
++
++/** get an specific or all extensions
++ *
++ * @arg *msg the message
++ * @arg type type of the ext to retrieve - use DESSERT_EXT_ANY to get any ext
++ * @return 0 if the message has no such extension,
++ * @return count of extensions of that type
++ **/
++int dessert_msg_get_ext_count(const dessert_msg_t* msg, uint8_t type) {
++ return dessert_msg_getext(msg, NULL, type, 0);
++}
++
++/** add initial trace header to dessert message
++ * @arg *msg dessert_msg_t message used for tracing
++ * @arg mode trace mode
++ * use DESSERT_MSG_TRACE_HOST to only record default mac of hosts on the way
++ * use DESSERT_MSG_TRACE_IFACE to also trace input interface and last hop
++ * ®return DESSERT_OK on success
++ **/
++int dessert_msg_trace_initiate(dessert_msg_t* msg, int mode) {
++
++ dessert_ext_t *ext;
++ struct ether_header *l25h;
++
++ if (mode != DESSERT_MSG_TRACE_HOST && mode != DESSERT_MSG_TRACE_IFACE)
++ return EINVAL;
++
++ if (msg->flags & DESSERT_FLAG_SPARSE)
++ return DESSERT_MSG_NEEDNOSPARSE;
++
++ dessert_msg_addext(msg, &ext, DESSERT_EXT_TRACE, mode);
++ memcpy((ext->data), dessert_l25_defsrc, ETHER_ADDR_LEN);
++ if (mode == DESSERT_MSG_TRACE_IFACE) {
++ memcpy((ext->data) + ETHER_ADDR_LEN, msg->l2h.ether_shost,
++ ETHER_ADDR_LEN);
++ l25h = dessert_msg_getl25ether(msg);
++ if (l25h == NULL) {
++ memcpy((ext->data) + ETHER_ADDR_LEN, ether_null, ETHER_ADDR_LEN);
++ } else {
++ memcpy((ext->data) + ETHER_ADDR_LEN * 2, l25h->ether_shost,
++ ETHER_ADDR_LEN);
++ }
++ }
++
++ return DESSERT_OK;
++
++}
++
++/** dump packet trace to string
++ * @arg *msg dessert_msg_t message used for tracing
++ * @arg *buf char buffer to place string
++ * use DESSERT_MSG_TRACE_HOST to only record default mac of hosts on the way
++ * use DESSERT_MSG_TRACE_IFACE to also trace input interface and last hop
++ * ®return length of the string - 0 if msg has no trace header
++ **/
++int dessert_msg_trace_dump(const dessert_msg_t* msg, char* buf, int blen) {
++
++ dessert_ext_t *ext;
++ int x, i = 0;
++
++#define _dessert_msg_trace_dump_append(...) snprintf(buf+strlen(buf), blen-strlen(buf), __VA_ARGS__)
++
++ x = dessert_msg_getext(msg, &ext, DESSERT_EXT_TRACE, 0);
++ if (x < 1)
++ return 0;
++
++ _dessert_msg_trace_dump_append("\tpacket trace:\n");
++ _dessert_msg_trace_dump_append("\t\tfrom %02x:%02x:%02x:%02x:%02x:%02x\n",
++ ext->data[0], ext->data[1], ext->data[2],
++ ext->data[3], ext->data[4], ext->data[5]);
++
++ if (dessert_ext_getdatalen(ext) == DESSERT_MSG_TRACE_IFACE) {
++ _dessert_msg_trace_dump_append("\t\t received on %02x:%02x:%02x:%02x:%02x:%02x\n",
++ ext->data[6], ext->data[7], ext->data[8],
++ ext->data[9], ext->data[10], ext->data[11]);
++ _dessert_msg_trace_dump_append("\t\t l2.5 src %02x:%02x:%02x:%02x:%02x:%02x\n",
++ ext->data[12], ext->data[13], ext->data[14],
++ ext->data[15], ext->data[16], ext->data[17]);
++ }
++
++ for (i = 1; i < x; i++) {
++ dessert_msg_getext(msg, &ext, DESSERT_EXT_TRACE, i);
++ _dessert_msg_trace_dump_append("\t\t#%3d %02x:%02x:%02x:%02x:%02x:%02x\n", i,
++ ext->data[0], ext->data[1], ext->data[2],
++ ext->data[3], ext->data[4], ext->data[5]);
++
++ if (dessert_ext_getdatalen(ext) == DESSERT_MSG_TRACE_IFACE) {
++ _dessert_msg_trace_dump_append("\t\t received from %02x:%02x:%02x:%02x:%02x:%02x\n",
++ ext->data[12], ext->data[13], ext->data[14],
++ ext->data[15], ext->data[16], ext->data[17]);
++ _dessert_msg_trace_dump_append("\t\t receiving iface %02x:%02x:%02x:%02x:%02x:%02x\n",
++ ext->data[6], ext->data[7], ext->data[8],
++ ext->data[9], ext->data[10], ext->data[11]);
++ }
++ }
++
++ return strlen(buf);
++
++}
++
++/** callback that checks whether a dessert_msg is consistent
++ * @arg *msg dessert_msg_t frame received
++ * @arg len length of ethernet frame received
++ * @arg *iface interface received packet on
++ * @return DESSERT_MSG_KEEP if message is valid, DESSERT_MSG_DROP otherwise
++ **/
++int dessert_msg_check_cb(dessert_msg_t* msg, size_t len,
++ dessert_msg_proc_t *proc, const dessert_meshif_t *iface,
++ dessert_frameid_t id) {
++ if (dessert_msg_check(msg, len)) {
++ dessert_debug("invalid package - discarding");
++ return DESSERT_MSG_DROP;
++ }
++ return DESSERT_MSG_KEEP;
++}
++
++/** dump a dessert_msg_t to debug log
++ * @arg *msg dessert_msg_t frame received
++ * @arg len length of ethernet frame received
++ * @arg *iface interface received packet on
++ * ®return DESSERT_MSG_KEEP always
++ **/
++int dessert_msg_dump_cb(dessert_msg_t* msg, size_t len,
++ dessert_msg_proc_t *proc, const dessert_meshif_t *iface,
++ dessert_frameid_t id) {
++ char buf[1024];
++
++ dessert_msg_proc_dump(msg, len, proc, buf, 1024);
++ dessert_debug("received frame #%lu on interface %s - dump:\n%s", (unsigned long) id, iface->if_name, buf);
++
++ return DESSERT_MSG_KEEP;
++}
++
++/** check if the message carries a trace extension and add the current trace info
++ * if iface is NULL, the packet is ignored
++ * @arg *msg dessert_msg_t frame received
++ * @arg len length of ethernet frame received
++ * @arg *iface interface received packet on
++ * ®return DESSERT_MSG_KEEP always
++ **/
++int dessert_msg_trace_cb(dessert_msg_t* msg, size_t len,
++ dessert_msg_proc_t *proc, const dessert_meshif_t *iface,
++ dessert_frameid_t id) {
++ dessert_ext_t *ext;
++
++ /* abort if message has no trace extension */
++ if (dessert_msg_getext(msg, &ext, DESSERT_EXT_TRACE, 0) == 0)
++ return DESSERT_MSG_KEEP;
++
++ /* abort if iface is NULL */
++ if (iface == NULL)
++ return DESSERT_MSG_KEEP;
++
++ /* we cannot add header to sparse messages */
++ if (msg->flags & DESSERT_FLAG_SPARSE)
++ return DESSERT_MSG_NEEDNOSPARSE;
++
++ /* get the trace mode (hop vs interface) */
++ if (dessert_ext_getdatalen(ext) == DESSERT_MSG_TRACE_HOST) {
++ dessert_msg_addext(msg, &ext, DESSERT_EXT_TRACE, DESSERT_MSG_TRACE_HOST);
++ memcpy((ext->data), dessert_l25_defsrc, ETHER_ADDR_LEN);
++ } else if (dessert_ext_getdatalen(ext) == DESSERT_MSG_TRACE_IFACE) {
++ dessert_msg_addext(msg, &ext, DESSERT_EXT_TRACE,
++ DESSERT_MSG_TRACE_IFACE);
++ memcpy((ext->data), dessert_l25_defsrc, ETHER_ADDR_LEN);
++ memcpy((ext->data) + ETHER_ADDR_LEN, iface->hwaddr, ETHER_ADDR_LEN);
++ memcpy((ext->data) + ETHER_ADDR_LEN * 2, msg->l2h.ether_shost,
++ ETHER_ADDR_LEN);
++ } else {
++ dessert_warn("got packet with %d bytes trace extension - ignoring");
++ }
++ return DESSERT_MSG_KEEP;
++}
++
++/** callback to set the local processing flags in dessert_msg_proc_t on an arriving dessert_msg_t
++ * @arg *msg dessert_msg_t frame received
++ * @arg len length of ethernet frame received
++ * @arg *iface interface received packet on
++ * ®return DESSERT_MSG_KEEP or DESSERT_MSG_NEEDMSGPROC
++ **/
++int dessert_msg_ifaceflags_cb(dessert_msg_t* msg, size_t len,
++ dessert_msg_proc_t *proc, const dessert_meshif_t *riface,
++ dessert_frameid_t id) {
++
++ dessert_meshif_t *iface;
++ struct ether_header *l25h;
++
++ /* check if we have an processing header */
++ if (proc == NULL)
++ return DESSERT_MSG_NEEDMSGPROC;
++
++ /* get l2.5 header if possible */
++ l25h = dessert_msg_getl25ether(msg);
++
++ /* clear flags */
++ proc->lflags &= ~(DESSERT_LFLAG_DST_SELF | DESSERT_LFLAG_SRC_SELF
++ | DESSERT_LFLAG_NEXTHOP_SELF | DESSERT_LFLAG_PREVHOP_SELF
++ | DESSERT_LFLAG_NEXTHOP_BROADCAST
++ | DESSERT_LFLAG_DST_SELF_OVERHEARD
++ | DESSERT_LFLAG_NEXTHOP_SELF_OVERHEARD);
++
++ /* checks against defaults */
++ if (l25h != NULL && memcmp(l25h->ether_dhost, ether_broadcast,
++ ETHER_ADDR_LEN) == 0) {
++ proc->lflags |= DESSERT_LFLAG_DST_BROADCAST;
++ } else if (l25h != NULL && l25h->ether_dhost[0] & 0x01) { /* broadcast also has this bit set */
++ proc->lflags |= DESSERT_LFLAG_DST_MULTICAST;
++ }
++
++ if (l25h != NULL && memcmp(l25h->ether_dhost, dessert_l25_defsrc,
++ ETHER_ADDR_LEN) == 0) {
++ proc->lflags |= DESSERT_LFLAG_DST_SELF;
++ }
++ if (l25h != NULL && memcmp(l25h->ether_shost, dessert_l25_defsrc,
++ ETHER_ADDR_LEN) == 0) {
++ proc->lflags |= DESSERT_LFLAG_SRC_SELF;
++ }
++ if (memcmp(msg->l2h.ether_dhost, dessert_l25_defsrc, ETHER_ADDR_LEN) == 0) {
++ proc->lflags |= DESSERT_LFLAG_NEXTHOP_SELF;
++ }
++ if (memcmp(msg->l2h.ether_shost, dessert_l25_defsrc, ETHER_ADDR_LEN) == 0) {
++ proc->lflags |= DESSERT_LFLAG_PREVHOP_SELF;
++ }
++ if (memcmp(msg->l2h.ether_dhost, ether_broadcast, ETHER_ADDR_LEN) == 0) {
++ proc->lflags |= DESSERT_LFLAG_NEXTHOP_BROADCAST;
++ }
++
++ /* checks against interfaces in list */
++ pthread_rwlock_rdlock(&dessert_cfglock);
++ DL_FOREACH(dessert_meshiflist_get(), iface) {
++ if (l25h != NULL && memcmp(l25h->ether_dhost, iface->hwaddr,
++ ETHER_ADDR_LEN) == 0) {
++ proc->lflags |= DESSERT_LFLAG_DST_SELF;
++ if (memcmp(l25h->ether_dhost, riface->hwaddr, ETHER_ADDR_LEN) != 0) {
++ proc->lflags |= DESSERT_LFLAG_DST_SELF_OVERHEARD;
++ }
++ }
++ if (l25h != NULL && memcmp(l25h->ether_shost, iface->hwaddr,
++ ETHER_ADDR_LEN) == 0) {
++ proc->lflags |= DESSERT_LFLAG_SRC_SELF;
++ }
++ if (memcmp(msg->l2h.ether_dhost, iface->hwaddr, ETHER_ADDR_LEN) == 0) {
++ proc->lflags |= DESSERT_LFLAG_NEXTHOP_SELF;
++ if (memcmp(msg->l2h.ether_dhost, riface->hwaddr, ETHER_ADDR_LEN)
++ != 0) {
++ proc->lflags |= DESSERT_LFLAG_NEXTHOP_SELF_OVERHEARD;
++ }
++ }
++ if (memcmp(msg->l2h.ether_shost, iface->hwaddr, ETHER_ADDR_LEN) == 0) {
++ proc->lflags |= DESSERT_LFLAG_PREVHOP_SELF;
++ }
++ }
++ pthread_rwlock_unlock(&dessert_cfglock);
++
++ return DESSERT_MSG_KEEP;
++}
++
++/******************************************************************************
++ *
++ * INTERNAL / PRIVATE
++ *
++ * M E S S A G E H A N D L I N G
++ *
++ ******************************************************************************/
++
++/* nothing here - yet */
++
++/******************************************************************************
++ *
++ * LOCAL
++ *
++ * M E S S A G E H A N D L I N G
++ *
++ ******************************************************************************/
++
++/* nothing here - yet */
+Index: libdessert0.86-0.86.14/src/libdessert/dessert_periodic.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/libdessert/dessert_periodic.c 2009-12-09 16:38:27.312672556 +0100
+@@ -0,0 +1,326 @@
++/******************************************************************************
++ Copyright 2009, The DES-SERT Team, Freie Universitaet Berlin (FUB).
++ All rights reserved.
++
++ These sources were originally developed by Philipp Schmidt
++ at Freie Universitaet Berlin (http://www.fu-berlin.de/),
++ Computer Systems and Telematics / Distributed, Embedded Systems (DES) group
++ (http://cst.mi.fu-berlin.de/, http://www.des-testbed.net/)
++ ------------------------------------------------------------------------------
++ This program is free software: you can redistribute it and/or modify it under
++ the terms of the GNU General Public License as published by the Free Software
++ Foundation, either version 3 of the License, or (at your option) any later
++ version.
++
++ This program is distributed in the hope that it will be useful, but WITHOUT
++ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
++ FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License along with
++ this program. If not, see http://www.gnu.org/licenses/ .
++ ------------------------------------------------------------------------------
++ For further information and questions please use the web site
++ http://www.des-testbed.net/
++ *******************************************************************************/
++
++#include "dessert_internal.h"
++#include <dessert/dessert.h>
++
++/* global data storage // P U B L I C */
++
++/* global data storage // P R I V A T E */
++dessert_periodic_t *_tasklist = NULL;
++pthread_mutex_t _dessert_periodic_mutex = PTHREAD_MUTEX_INITIALIZER;
++pthread_cond_t _dessert_periodic_changed = PTHREAD_COND_INITIALIZER;
++pthread_t _dessert_periodic_worker;
++int _dessert_periodic_worker_running = 0;
++
++/* local data storage*/
++
++/* local functions forward declarations*/
++static int _dessert_periodic_add_periodic_t(dessert_periodic_t *task);
++static void *_dessert_periodic_thread(void* arg);
++
++/******************************************************************************
++ *
++ * EXTERNAL / PUBLIC
++ *
++ * P E R I O D I C T A S K S
++ *
++ ******************************************************************************/
++
++/** Adds a delayed/periodic task to the task list
++ *
++ * @param[in] c callback to call when task is scheduled
++ * @param[in] data data to give to the callback
++ * @param[in] scheduled when should the callback be called the first time
++ * @param[in] interval how often should it be called (set to NULL if only once)
++ *
++ * @retval pointer if the callback was added successfully
++ * @retval NULL otherwise
++ *
++ * @note The <a href="http://www.gnu.org/s/libc/manual/html_node/Elapsed-Time.html#Elapsed-Time">GNU C Library Documentation</a>
++ * states about the @c tv_usec member of the @c struct @c timeval: <em>This is the
++ * rest of the elapsed time (a fraction of a second), represented as the number
++ * of microseconds. It is always less than one @a million.</em> So, to make sure
++ * this invariant is always met, consider using the provided TIMEVAL_ADD() macro.
++ *
++ * @par Description:
++ *
++ * @par Examples:
++ * @li Register a callback function to be executed every 1.5 seconds - and
++ * delay the first call to it for another 1.5 seconds:
++ * @code
++ * struct timeval interval;
++ * interval.tv_sec = 1;
++ * interval.tv_usec = 500000;
++ *
++ * struct timeval schedule;
++ * gettimeofday(&schedule, NULL);
++ * TIMEVAL_ADD(&schedule, 1, 500000);
++ *
++ * dessert_periodic_add(callback, NULL, &schedule, &interval);
++ * @endcode
++ *
++ *
++ */
++dessert_periodic_t *dessert_periodic_add(dessert_periodiccallback_t* c,
++ void *data, const struct timeval *scheduled,
++ const struct timeval *interval) {
++ struct timeval now;
++ dessert_periodic_t *task;
++
++ if (scheduled == NULL) {
++ gettimeofday(&now, NULL);
++ scheduled = &now;
++ }
++ assert(scheduled != NULL);
++
++ /* sanity checks */
++ if (c == NULL) {
++ return (NULL);
++ }
++
++ /* get task memory */
++ task = malloc(sizeof(dessert_periodic_t));
++ if (task == NULL) {
++ return NULL;
++ }
++
++ /* copy data */
++ task->c = c;
++ task->data = data;
++ memcpy(&(task->scheduled), scheduled, sizeof(struct timeval));
++ if (interval == NULL) {
++ task->interval.tv_sec = 0;
++ task->interval.tv_usec = 0;
++ } else {
++ memcpy(&(task->interval), interval, sizeof(struct timeval));
++ }
++ task->next = NULL;
++
++ pthread_mutex_lock(&_dessert_periodic_mutex);
++ _dessert_periodic_add_periodic_t(task);
++ pthread_mutex_unlock(&_dessert_periodic_mutex);
++
++ return (task);
++}
++
++/** Adds a delayed task to the task list
++ *
++ * This is an easier version of dessert_periodic_add() taking a single delay as parameter.
++ *
++ * @param[in] c callback to call when task is scheduled
++ * @param[in] data data to give to the callback
++ * @param[in] delay the delay in seconds
++ *
++ * %DESCRIPTION: \n
++ */
++dessert_periodic_t *dessert_periodic_add_delayed(dessert_periodiccallback_t* c,
++ void *data, int delay) {
++ struct timeval at;
++ gettimeofday(&at, NULL);
++
++ at.tv_sec += delay;
++
++ return (dessert_periodic_add(c, data, &at, NULL));
++}
++
++/** Removes a delayed/periodic task from the task list.
++ *
++ * @param[in] p pointer to task description
++ *
++ * @return -1 on failure, 0 if the task was removed
++ *
++ * %DESCRIPTION: \n
++ */
++int dessert_periodic_del(dessert_periodic_t *p) {
++ dessert_periodic_t *i;
++ int x = -1;
++
++ assert(p != NULL);
++
++ pthread_mutex_lock(&_dessert_periodic_mutex);
++
++ if (p == _tasklist) {
++ _tasklist = _tasklist->next;
++ x++;
++ }
++
++ i = _tasklist;
++ while (i != NULL) {
++ if (i->next == p) {
++ i->next = p->next;
++ x++;
++ }
++ i = i->next;
++ }
++
++ pthread_mutex_unlock(&_dessert_periodic_mutex);
++
++ assert(x < 2);
++
++ free(p);
++ return (x);
++
++}
++
++/******************************************************************************
++ *
++ * INTERNAL / PRIVATE
++ *
++ * P E R I O D I C T A S K S
++ *
++ ******************************************************************************/
++
++/** internal function to start periodic worker */
++void _dessert_periodic_init() {
++ if (_dessert_periodic_worker_running == 0) {
++ _dessert_periodic_worker_running = 1;
++ pthread_create(&_dessert_periodic_worker, NULL,
++ _dessert_periodic_thread, NULL);
++ }
++}
++
++/******************************************************************************
++ *
++ * LOCAL / PRIVATE
++ *
++ * P E R I O D I C T A S K S
++ *
++ ******************************************************************************/
++
++/* internal task list modifier - only call while holding _dessert_periodic_mutex */
++static int _dessert_periodic_add_periodic_t(dessert_periodic_t *task) {
++
++ dessert_periodic_t *i;
++
++ /* first task? */
++ if (_tasklist == task) {
++ dessert_err("infinite loop in periodic tasklist requested - aborting!");
++ return (-1);
++ } else if (_tasklist == NULL) {
++ _tasklist = task;
++ pthread_cond_broadcast(&_dessert_periodic_changed);
++ }
++ /* is next task.... */
++ else if (task->scheduled.tv_sec < _tasklist->scheduled.tv_sec
++ || (task->scheduled.tv_sec == _tasklist->scheduled.tv_sec
++ && task->scheduled.tv_usec < _tasklist->scheduled.tv_usec)) {
++ task->next = _tasklist;
++ _tasklist = task;
++ pthread_cond_broadcast(&_dessert_periodic_changed);
++ }
++ /* search right place */
++ else {
++ i = _tasklist;
++ while (i->next != NULL && (i->next->scheduled.tv_sec
++ < task->scheduled.tv_sec || (i->next->scheduled.tv_sec
++ == task->scheduled.tv_sec && i->next->scheduled.tv_usec
++ <= task->scheduled.tv_usec))) {
++ i = i->next;
++ if (i->next == task) {
++ dessert_err("infinite loop in periodic tasklist requested - aborting!");
++ return (-1);
++ }
++ }
++ /* last or right place */
++ task->next = i->next;
++ i->next = task;
++ /* no need to tell periodic thread to check
++ again - next task has not changed */
++ }
++
++ return (0);
++
++}
++
++/* internal worker for the task list */
++static void *_dessert_periodic_thread(void* arg) {
++ dessert_periodic_t *next_task;
++ dessert_periodic_t task;
++ struct timeval now;
++ struct timespec ts;
++
++ pthread_mutex_lock(&_dessert_periodic_mutex);
++
++ while (1) {
++
++ gettimeofday(&now, NULL);
++
++ if (_tasklist == NULL) {
++ if (pthread_cond_wait(&_dessert_periodic_changed,
++ &_dessert_periodic_mutex) == EINVAL) {
++ dessert_err("sleeping failed in periodic scheduler - scheduler died");
++ break;
++ }
++ continue;
++ } else if (now.tv_sec < _tasklist->scheduled.tv_sec || (now.tv_sec
++ == _tasklist->scheduled.tv_sec && now.tv_usec
++ < _tasklist->scheduled.tv_usec)) {
++ ts.tv_sec = _tasklist->scheduled.tv_sec;
++ ts.tv_nsec = _tasklist->scheduled.tv_usec * 1000;
++ if (pthread_cond_timedwait(&_dessert_periodic_changed,
++ &_dessert_periodic_mutex, &ts) == EINVAL) {
++ dessert_err("sleeping failed in periodic scheduler - scheduler died");
++ break;
++ }
++ continue;
++ }
++
++ /* run next task */
++ next_task = _tasklist;
++ _tasklist = next_task->next;
++
++ /* safe task to local variable */
++ memcpy(&task, next_task, sizeof(dessert_periodic_t));
++
++ /* periodic task - re-add */
++ if (next_task->interval.tv_sec != 0 || next_task->interval.tv_usec != 0) {
++ next_task->scheduled.tv_sec += next_task->interval.tv_sec;
++ next_task->scheduled.tv_usec += next_task->interval.tv_usec;
++ if (next_task->scheduled.tv_usec >= 1000000) {
++ next_task->scheduled.tv_sec += 1;
++ next_task->scheduled.tv_usec -= 1000000;
++ }
++ _dessert_periodic_add_periodic_t(next_task);
++ }
++ /* otherwise free memory */
++ else {
++ free(next_task);
++ }
++
++ /* run the callback */
++ pthread_mutex_unlock(&_dessert_periodic_mutex);
++ /* call the callback - remove it from list if exits with nonzero code */
++ if (task.c(task.data, &(task.scheduled), &(task.interval))) {
++ dessert_periodic_del(next_task);
++ }
++ pthread_mutex_lock(&_dessert_periodic_mutex);
++ }
++
++ pthread_mutex_unlock(&_dessert_periodic_mutex);
++ _dessert_periodic_worker_running = 0;
++
++ return (NULL);
++}
+Index: libdessert0.86-0.86.14/src/libdessert/dessert_sysiface.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/libdessert/dessert_sysiface.c 2009-12-09 16:38:27.312672556 +0100
+@@ -0,0 +1,487 @@
++/******************************************************************************
++ Copyright 2009, The DES-SERT Team, Freie Universitaet Berlin (FUB).
++ All rights reserved.
++
++ These sources were originally developed by Philipp Schmidt
++ at Freie Universitaet Berlin (http://www.fu-berlin.de/),
++ Computer Systems and Telematics / Distributed, Embedded Systems (DES) group
++ (http://cst.mi.fu-berlin.de/, http://www.des-testbed.net/)
++ ------------------------------------------------------------------------------
++ This program is free software: you can redistribute it and/or modify it under
++ the terms of the GNU General Public License as published by the Free Software
++ Foundation, either version 3 of the License, or (at your option) any later
++ version.
++
++ This program is distributed in the hope that it will be useful, but WITHOUT
++ ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
++ FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
++
++ You should have received a copy of the GNU General Public License along with
++ this program. If not, see http://www.gnu.org/licenses/ .
++ ------------------------------------------------------------------------------
++ For further information and questions please use the web site
++ http://www.des-testbed.net/
++ *******************************************************************************/
++
++#include "dessert_internal.h"
++#include <dessert/dessert.h>
++
++#ifdef __DARWIN__
++#define TUNSIFHEAD _IOW('t', 96, int)
++#define TUNGIFHEAD _IOR('t', 97, int)
++#endif
++
++#ifdef __FreeBSD__
++#include <net/if_tun.h>
++#endif
++
++#ifdef __linux__
++#include <linux/if_tun.h>
++#endif
++
++uint8_t dessert_sysif_hwaddr[ETHER_ADDR_LEN]; // TODO unused! to be removed ??!?
++
++/* global data storage // P U B L I C */
++/* nothing here - yet */
++
++/* global data storage // P R I V A T E */
++dessert_sysif_t *_dessert_sysif = NULL;
++
++/* local data storage*/
++dessert_sysrxcbe_t *_dessert_sysrxcblist = NULL;
++int _dessert_sysrxcblistver = 0;
++
++/* internal functions forward declarations*/
++static void *_dessert_sysif_init_thread(void* arg);
++static int _dessert_sysif_init_getmachack(dessert_msg_t *msg, size_t len,
++ dessert_msg_proc_t *proc, dessert_sysif_t *sysif, dessert_frameid_t id);
++
++/******************************************************************************
++ *
++ * EXTERNAL / PUBLIC
++ *
++ * S Y S - I N T E R F A C E S
++ *
++ ******************************************************************************/
++
++/** Initializes the tun/tap Interface dev for des-sert.
++ * @arg *device interface name
++ * @arg flags @see DESSERT_TUN @see DESSERT_TAP @see DESSERT_MAKE_DEFSRC
++ * @return 0 -- on success
++ * @return EINVAL -- if message is broken
++ * @return EFAULT -- if interface not specified and not guessed
++ **/
++int dessert_sysif_init(char* device, uint8_t flags) {
++
++ char *buf;
++
++#ifdef __linux__
++ struct ifreq ifr;
++#endif
++
++ /* initialize _dessert_sysif */
++ _dessert_sysif = malloc(sizeof(dessert_sysif_t));
++ if (_dessert_sysif == NULL)
++ return (-errno);
++ memset((void *) _dessert_sysif, 0, sizeof(dessert_sysif_t));
++ _dessert_sysif->flags = flags;
++ strncpy(_dessert_sysif->if_name, device, IF_NAMESIZE);
++ _dessert_sysif->if_name[IF_NAMESIZE - 1] = '\0';
++ pthread_mutex_init(&(_dessert_sysif->cnt_mutex), NULL);
++
++#ifdef __FreeBSD__
++
++ /* open device */
++ buf = malloc(IF_NAMESIZE+6);
++ snprintf(buf, IF_NAMESIZE+6, "/dev/%s", device);
++ _dessert_sysif->fd = open(buf, O_RDWR);
++ if(_dessert_sysif->fd < 0) {
++ dessert_err("could not open interface %s using %s: %s", device, buf, strerror(errno));
++ free(buf);
++ return (-errno);
++ }
++ free(buf);
++
++ /* set header mode on for mode tun */
++ if(flags & DESSERT_TUN) {
++ const int one = 1;
++ if(ioctl(_dessert_sysif->fd, TUNSIFHEAD, &one, sizeof one) == -1) {
++ dessert_err("setting TUNSIFHEAD failed: %s",strerror(errno));
++ goto dessert_sysif_init_err;
++ return (-errno);
++ }
++ }
++
++#elif __linux__
++
++ /* open device */
++ buf = "/dev/net/tun";
++ _dessert_sysif->fd = open(buf, O_RDWR);
++ memset(&ifr, 0, sizeof(ifr));
++ if (flags & DESSERT_TUN) {
++ ifr.ifr_flags = IFF_TUN; /* we want the service flag - no IFF_NO_PI */
++ } else {
++ ifr.ifr_flags = IFF_TAP | IFF_NO_PI; /* we want the service flag and IFF_NO_PI */
++ }
++ strcpy(ifr.ifr_name, _dessert_sysif->if_name);
++ if (ioctl(_dessert_sysif->fd, TUNSETIFF, (void *) &ifr) < 0) {
++ dessert_err("ioctl(TUNSETIFF) failed: %s", strerror(errno));
++ goto dessert_sysif_init_err;
++ return (-errno);
++ }
++ strcpy(_dessert_sysif->if_name, ifr.ifr_name);
++
++#else
++
++ goto not_implemented;
++
++#endif
++
++ /* check interface - abusing dessert_meshif methods */
++ _dessert_sysif->if_index = if_nametoindex(device);
++ if (!_dessert_sysif->if_index) {
++ dessert_err("interface %s - no such interface", _dessert_sysif->if_name);
++ goto dessert_sysif_init_err;
++ }
++
++ /* do ifconfig to set the interface up - strange things happen otherwise */
++ buf = malloc(IF_NAMESIZE + 16);
++ snprintf(buf, IF_NAMESIZE + 15, "ifconfig %s up", _dessert_sysif->if_name);
++ system(buf);
++ free(buf);
++
++ /* get hardware address in tap mode if possible */
++ if (flags & DESSERT_TAP) {
++ if (_dessert_meshif_gethwaddr((dessert_meshif_t *) _dessert_sysif) != 0) {
++ dessert_err("failed to get hwaddr of interface %s(%d) - hope src of first packet received from is it",
++ _dessert_sysif->if_name, _dessert_sysif->if_index, _dessert_sysif);
++ _dessert_sysif->flags |= _DESSERT_TAP_NOMAC;
++ dessert_sysrxcb_add(_dessert_sysif_init_getmachack, 0);
++ } else {
++ /* check whether we need to set defsrc */
++ if ((flags & DESSERT_MAKE_DEFSRC) || memcmp(dessert_l25_defsrc,
++ ether_null, ETHER_ADDR_LEN) == 0) {
++ memcpy(dessert_l25_defsrc, _dessert_sysif->hwaddr,
++ ETHER_ADDR_LEN);
++ dessert_info("set dessert_l25_defsrc to hwaddr %02x:%02x:%02x:%02x:%02x:%02x",
++ dessert_l25_defsrc[0], dessert_l25_defsrc[1],dessert_l25_defsrc[2],
++ dessert_l25_defsrc[3], dessert_l25_defsrc[4], dessert_l25_defsrc[5]);
++ }
++ }
++ }
++
++ /* info message */
++ if (flags & DESSERT_TAP) {
++ dessert_info("starting worker thread for tap interface %s(%d) hwaddr %02x:%02x:%02x:%02x:%02x:%02x",
++ _dessert_sysif->if_name, _dessert_sysif->if_index,
++ _dessert_sysif->hwaddr[0], _dessert_sysif->hwaddr[1], _dessert_sysif->hwaddr[2],
++ _dessert_sysif->hwaddr[3], _dessert_sysif->hwaddr[4], _dessert_sysif->hwaddr[5]);
++ } else {
++ dessert_info("starting worker thread for tap interface %s(%d) fd %d",
++ _dessert_sysif->if_name, _dessert_sysif->if_index, _dessert_sysif->fd);
++ }
++
++ /* start worker thread */
++ if (pthread_create(&(_dessert_sysif->worker), NULL,
++ _dessert_sysif_init_thread, (void *) _dessert_sysif)) {
++ dessert_err("creating worker thread failed for interface %s(%d)",
++ _dessert_sysif->if_name, _dessert_sysif->if_index);
++ goto dessert_sysif_init_err;
++ }
++
++ /* done */
++ return (DESSERT_OK);
++
++ dessert_sysif_init_err: close(_dessert_sysif->fd);
++
++ return (-errno);
++}
++
++/** adds a callback function to call if a packet should be injected into dessert via a tun/tap interface
++ * @arg *c callback function
++ * @arg prio priority of the function - lower first!
++ * @return DESSERT_OK on success
++ * @return -errno on error
++ **/
++int dessert_sysrxcb_add(dessert_sysrxcb_t* c, int prio) {
++ dessert_sysrxcbe_t *cb, *i;
++
++ cb = (struct dessert_sysrxcbe*) malloc(sizeof(struct dessert_sysrxcbe));
++ if (cb == NULL) {
++ dessert_err("failed to allocate memory for registering sys callback: %s", strerror(errno));
++ return (-errno);
++ }
++
++ if (c == NULL) {
++ dessert_err("tried to add a null pointer as dessert_sysrxcb");
++ return (-EINVAL);
++ }
++
++ pthread_rwlock_wrlock(&dessert_cfglock);
++
++ cb->c = c;
++ cb->prio = prio;
++ cb->next = NULL;
++
++ if (_dessert_sysrxcblist == NULL) {
++ _dessert_sysrxcblist = cb;
++ _dessert_sysrxcblistver++;
++
++ pthread_rwlock_unlock(&dessert_cfglock);
++ return DESSERT_OK;
++ }
++
++ if (_dessert_sysrxcblist->prio > cb->prio) {
++ cb->next = _dessert_sysrxcblist;
++ _dessert_sysrxcblist = cb;
++ _dessert_sysrxcblistver++;
++
++ pthread_rwlock_unlock(&dessert_cfglock);
++ return DESSERT_OK;
++ }
++
++ /* find right place for callback */
++ for (i = _dessert_sysrxcblist; i->next != NULL && i->next->prio <= cb->prio; i
++ = i->next)
++ ;
++
++ /* insert it */
++ cb->next = i->next;
++ i->next = cb;
++ _dessert_sysrxcblistver++;
++
++ pthread_rwlock_unlock(&dessert_cfglock);
++ return DESSERT_OK;
++}
++
++/** removes all occurrences of the callback function from the list of callbacks.
++ * @arg c callback function
++ * @return DESSERT_OK on success, DESSERT_ERR on error
++ **/
++int dessert_sysrxcb_del(dessert_sysrxcb_t* c) {
++ int count = 0;
++ dessert_sysrxcbe_t *i, *last;
++
++ pthread_rwlock_wrlock(&dessert_cfglock);
++
++ if (_dessert_sysrxcblist == NULL) {
++ goto dessert_sysrxcb_del_out;
++ }
++
++ while (_dessert_sysrxcblist->c == c) {
++ count++;
++ i = _dessert_sysrxcblist;
++ _dessert_sysrxcblist = _dessert_sysrxcblist->next;
++ free(i);
++ if (_dessert_sysrxcblist == NULL) {
++ goto dessert_sysrxcb_del_out;
++ }
++ }
++
++ for (i = _dessert_sysrxcblist; i->next != NULL; i = i->next) {
++ if (i->c == c) {
++ count++;
++ last->next = i->next;
++ free(i);
++ i = last;
++ }
++ last = i;
++ }
++
++ dessert_sysrxcb_del_out: _dessert_sysrxcblistver++;
++ pthread_rwlock_unlock(&dessert_cfglock);
++ return ((count > 0) ? DESSERT_OK : DESSERT_ERR);
++
++}
++
++/** sends a packet via tun/tap interface to the kernel
++ * @arg *msg message to send
++ * @return DESSERT_OK on success
++ * @return -EIO if message failed to be sent
++ **/
++int dessert_syssend_msg(dessert_msg_t *msg) {
++ struct ether_header *eth;
++ size_t eth_len;
++
++ eth_len = dessert_msg_ethdecap(msg, &eth);
++ if (eth_len == -1) {
++ return (-EIO);
++ }
++ dessert_syssend(eth, eth_len);
++ free(eth);
++
++ return DESSERT_OK;
++}
++
++/** sends a packet via tun/tap interface to the kernel
++ * @arg *eth message to send
++ * @arg len length of message to send
++ * @return DESSERT_OK on success
++ * @return -EIO if message failed to be sent
++ **/
++int dessert_syssend(const struct ether_header *eth, size_t len) {
++ ssize_t res = 0;
++
++ if (_dessert_sysif == NULL)
++ return (-EIO);
++
++ if (_dessert_sysif->flags & DESSERT_TUN) {
++ eth
++ = (struct ether_header *) (((uint8_t *) eth) + (ETHER_ADDR_LEN
++ * 2));
++ len -= (ETHER_ADDR_LEN * 2);
++ }
++
++ res = write(_dessert_sysif->fd, (const void *) eth, len);
++
++ if (res == len) {
++ pthread_mutex_lock(&(_dessert_sysif->cnt_mutex));
++ _dessert_sysif->opkts++;
++ _dessert_sysif->obytes += res;
++ pthread_mutex_unlock(&(_dessert_sysif->cnt_mutex));
++ return (DESSERT_OK);
++ } else {
++
++ return (-EIO);
++ }
++}
++
++/******************************************************************************
++ *
++ * INTERNAL / PRIVATE
++ *
++ * S Y S - I N T E R F A C E S
++ *
++ ******************************************************************************/
++
++/* nothing here - yet */
++
++/******************************************************************************
++ *
++ * LOCAL
++ *
++ * S Y S - I N T E R F A C E S
++ *
++ ******************************************************************************/
++
++/** internal callback which gets registered if we can't find out mac address of tap interface */
++static int _dessert_sysif_init_getmachack(dessert_msg_t *msg, size_t len,
++ dessert_msg_proc_t *proc, dessert_sysif_t *sysif, dessert_frameid_t id) {
++
++ struct ether_header *eth;
++ dessert_msg_ethdecap(msg, &eth);
++
++ /* hack to get the hardware address */
++ if (sysif->flags & _DESSERT_TAP_NOMAC) {
++ /* copy from first packet received */
++ memcpy(sysif->hwaddr, eth->ether_shost, ETHER_ADDR_LEN);
++ dessert_info("guessed hwaddr for %s: %02x:%02x:%02x:%02x:%02x:%02x", sysif->if_name,
++ sysif->hwaddr[0], sysif->hwaddr[1], sysif->hwaddr[2],
++ sysif->hwaddr[3], sysif->hwaddr[4], sysif->hwaddr[5]);
++ /* check whether we need to set defsrc */
++ if ((sysif->flags & DESSERT_MAKE_DEFSRC) || memcmp(dessert_l25_defsrc,
++ ether_null, ETHER_ADDR_LEN) == 0) {
++ memcpy(dessert_l25_defsrc, sysif->hwaddr, ETHER_ADDR_LEN);
++ dessert_info("set dessert_l25_defsrc to hwaddr %02x:%02x:%02x:%02x:%02x:%02x",
++ dessert_l25_defsrc[0], dessert_l25_defsrc[1],dessert_l25_defsrc[2],
++ dessert_l25_defsrc[3], dessert_l25_defsrc[4], dessert_l25_defsrc[5]);
++ }
++ sysif->flags &= ~_DESSERT_TAP_NOMAC;
++ }
++
++ /* unregister me */
++ dessert_sysrxcb_del(_dessert_sysif_init_getmachack);
++
++ return DESSERT_MSG_KEEP;
++}
++
++/** internal packet processing thread body */
++static void *_dessert_sysif_init_thread(void* arg) {
++
++ dessert_sysif_t *sysif = (dessert_sysif_t *) arg;
++ size_t len;
++ size_t buflen = ETHER_MAX_LEN;
++ char buf[buflen];
++ dessert_msg_proc_t proc;
++ dessert_frameid_t id;
++ dessert_sysrxcbe_t *cb;
++ int res;
++ int ex = 0;
++ dessert_sysrxcb_t **cbl = NULL;
++ int cbllen = 0;
++ int cblcur = -1;
++ int cblver = -1;
++
++ while (!ex) {
++
++ memset(buf, 0, buflen);
++
++ if (sysif->flags & DESSERT_TUN) {
++ len = read((sysif->fd), buf + (ETHER_ADDR_LEN * 2), buflen
++ - (ETHER_ADDR_LEN * 2));
++ } else {
++ len = read((sysif->fd), buf, buflen);
++ }
++
++ if (len == -1) {
++ dessert_debug("got %s while reading on %s (fd %d) - is the sys (tun/tap) interface up?", strerror(errno), sysif->if_name, sysif->fd);
++ sleep(1);
++ continue;
++ }
++ if (sysif->flags & DESSERT_TUN) {
++ len += (ETHER_ADDR_LEN * 2);
++ }
++
++ /* copy callbacks to internal list to release dessert_cfglock before invoking callbacks*/
++ pthread_rwlock_rdlock(&dessert_cfglock);
++ if (cblver < _dessert_sysrxcblistver) {
++ /* callback list changed - rebuild it */
++ cbllen = 0;
++ for (cb = _dessert_sysrxcblist; cb != NULL; cb = cb->next)
++ cbllen++;
++ cbl = realloc(cbl, cbllen * sizeof(dessert_sysrxcb_t *));
++ if (cbl == NULL) {
++ dessert_err("failed to allocate memory for internal callback list");
++ pthread_rwlock_unlock(&dessert_cfglock);
++ return (NULL);
++ }
++
++ cblcur = 0;
++ for (cb = _dessert_sysrxcblist; cb != NULL; cb = cb->next)
++ cbl[cblcur++] = cb->c;
++
++ cblver = _dessert_sysrxcblistver;
++ }
++ pthread_rwlock_unlock(&dessert_cfglock);
++
++ /* generate frame id */
++ id = _dessert_newframeid();
++
++ /* count packet */
++ pthread_mutex_lock(&(sysif->cnt_mutex));
++ sysif->ipkts++;
++ sysif->ibytes += len;
++ pthread_mutex_unlock(&(sysif->cnt_mutex));
++
++ /* call the interested */
++ res = 0;
++ cblcur = 0;
++ memset(&proc, 0, DESSERT_MSGPROCLEN);
++ dessert_msg_t *msg;
++ while (res > DESSERT_MSG_DROP && cblcur < cbllen) {
++ if (dessert_msg_ethencap((struct ether_header *) buf, len, &msg)
++ < 0) {
++ dessert_err("failed to encapsulate ethernet frame on host-to-network-pipeline: %s", errno);
++ };
++ res = cbl[cblcur++](msg, len, &proc, sysif, id);
++ }
++ dessert_msg_destroy(msg);
++
++ }
++ dessert_info("stopped reading on %s (fd %d): %s", sysif->if_name, sysif->fd, strerror(errno));
++
++ free(cbl);
++ close(sysif->fd);
++
++ return (NULL);
++}
+Index: libdessert0.86-0.86.14/src/snmp/Makefile.am
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/Makefile.am 2009-12-09 16:38:27.312672556 +0100
+@@ -0,0 +1,60 @@
++
++AM_CPPFLAGS = -I$(top_srcdir)/include \
++ -I../libdessert \
++ @SNMP_CFLAGS@
++
++noinst_LTLIBRARIES = libdessertsnmp.la
++
++libdessertsnmp_la_SOURCES = \
++ dessertAppParamsTable.c \
++ dessertAppParamsTable.h \
++ dessertAppParamsTable_oids.h \
++ dessertAppParamsTable_data_access.c \
++ dessertAppParamsTable_data_access.h \
++ dessertAppParamsTable_data_get.c \
++ dessertAppParamsTable_data_get.h \
++ dessertAppParamsTable_data_set.c \
++ dessertAppParamsTable_data_set.h \
++ dessertAppParamsTable_interface.c \
++ dessertAppParamsTable_interface.h \
++ dessertAppStatsTable.c \
++ dessertAppStatsTable.h \
++ dessertAppStatsTable_enums.h \
++ dessertAppStatsTable_oids.h \
++ dessertAppStatsTable_data_access.c \
++ dessertAppStatsTable_data_access.h \
++ dessertAppStatsTable_data_get.c \
++ dessertAppStatsTable_data_get.h \
++ dessertAppStatsTable_data_set.c \
++ dessertAppStatsTable_data_set.h \
++ dessertAppStatsTable_interface.c \
++ dessertAppStatsTable_interface.h \
++ dessertMeshifTable.c \
++ dessertMeshifTable.h \
++ dessertMeshifTable_enums.h \
++ dessertMeshifTable_oids.h \
++ dessertMeshifTable_data_access.c \
++ dessertMeshifTable_data_access.h \
++ dessertMeshifTable_data_get.c \
++ dessertMeshifTable_data_get.h \
++ dessertMeshifTable_data_set.c \
++ dessertMeshifTable_data_set.h \
++ dessertMeshifTable_interface.c \
++ dessertMeshifTable_interface.h \
++ dessertObjects.c \
++ dessertObjects.h \
++ dessertSysifTable.c \
++ dessertSysifTable.h \
++ dessertSysifTable_enums.h \
++ dessertSysifTable_oids.h \
++ dessertSysifTable_interface.h \
++ dessertSysifTable_data_access.c \
++ dessertSysifTable_data_access.h \
++ dessertSysifTable_data_get.c \
++ dessertSysifTable_data_get.h \
++ dessertSysifTable_data_set.c \
++ dessertSysifTable_data_set.h \
++ dessertSysifTable_interface.c \
++ dessertSysifTable_subagent.c
++
++libdessertsnmp_la_LDFLAGS = -avoid-version
+Index: libdessert0.86-0.86.14/src/snmp/Makefile.in
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/Makefile.in 2009-12-09 16:38:51.198503063 +0100
+@@ -0,0 +1,598 @@
++# Makefile.in generated by automake 1.11 from Makefile.am.
++# @configure_input@
++
++# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
++# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
++# Inc.
++# This Makefile.in is free software; the Free Software Foundation
++# gives unlimited permission to copy and/or distribute it,
++# with or without modifications, as long as this notice is preserved.
++
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
++# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
++# PARTICULAR PURPOSE.
++
++@SET_MAKE@
++
++VPATH = @srcdir@
++pkgdatadir = $(datadir)/@PACKAGE@
++pkgincludedir = $(includedir)/@PACKAGE@
++pkglibdir = $(libdir)/@PACKAGE@
++pkglibexecdir = $(libexecdir)/@PACKAGE@
++am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
++install_sh_DATA = $(install_sh) -c -m 644
++install_sh_PROGRAM = $(install_sh) -c
++install_sh_SCRIPT = $(install_sh) -c
++INSTALL_HEADER = $(INSTALL_DATA)
++transform = $(program_transform_name)
++NORMAL_INSTALL = :
++PRE_INSTALL = :
++POST_INSTALL = :
++NORMAL_UNINSTALL = :
++PRE_UNINSTALL = :
++POST_UNINSTALL = :
++build_triplet = @build@
++host_triplet = @host@
++subdir = src/snmp
++DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
++ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
++am__aclocal_m4_deps = $(top_srcdir)/m4/ac_doxygen.m4 \
++ $(top_srcdir)/m4/ax_pthread.m4 $(top_srcdir)/m4/libtool.m4 \
++ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
++ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
++ $(top_srcdir)/m4/net-snmp.m4 $(top_srcdir)/m4/pcap.m4 \
++ $(top_srcdir)/configure.ac
++am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
++ $(ACLOCAL_M4)
++mkinstalldirs = $(install_sh) -d
++CONFIG_HEADER = $(top_builddir)/config.h
++CONFIG_CLEAN_FILES =
++CONFIG_CLEAN_VPATH_FILES =
++LTLIBRARIES = $(noinst_LTLIBRARIES)
++libdessertsnmp_la_LIBADD =
++am_libdessertsnmp_la_OBJECTS = dessertAppParamsTable.lo \
++ dessertAppParamsTable_data_access.lo \
++ dessertAppParamsTable_data_get.lo \
++ dessertAppParamsTable_data_set.lo \
++ dessertAppParamsTable_interface.lo dessertAppStatsTable.lo \
++ dessertAppStatsTable_data_access.lo \
++ dessertAppStatsTable_data_get.lo \
++ dessertAppStatsTable_data_set.lo \
++ dessertAppStatsTable_interface.lo dessertMeshifTable.lo \
++ dessertMeshifTable_data_access.lo \
++ dessertMeshifTable_data_get.lo dessertMeshifTable_data_set.lo \
++ dessertMeshifTable_interface.lo dessertObjects.lo \
++ dessertSysifTable.lo dessertSysifTable_data_access.lo \
++ dessertSysifTable_data_get.lo dessertSysifTable_data_set.lo \
++ dessertSysifTable_interface.lo dessertSysifTable_subagent.lo
++libdessertsnmp_la_OBJECTS = $(am_libdessertsnmp_la_OBJECTS)
++libdessertsnmp_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
++ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
++ $(libdessertsnmp_la_LDFLAGS) $(LDFLAGS) -o $@
++DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
++depcomp = $(SHELL) $(top_srcdir)/depcomp
++am__depfiles_maybe = depfiles
++am__mv = mv -f
++COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
++ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
++LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
++ --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
++ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
++CCLD = $(CC)
++LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
++ --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
++ $(LDFLAGS) -o $@
++SOURCES = $(libdessertsnmp_la_SOURCES)
++DIST_SOURCES = $(libdessertsnmp_la_SOURCES)
++ETAGS = etags
++CTAGS = ctags
++DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
++ACLOCAL = @ACLOCAL@
++AMTAR = @AMTAR@
++AR = @AR@
++AUTOCONF = @AUTOCONF@
++AUTOHEADER = @AUTOHEADER@
++AUTOMAKE = @AUTOMAKE@
++AWK = @AWK@
++CC = @CC@
++CCDEPMODE = @CCDEPMODE@
++CFLAGS = @CFLAGS@
++CLI_LIBS = @CLI_LIBS@
++CPP = @CPP@
++CPPFLAGS = @CPPFLAGS@
++CYGPATH_W = @CYGPATH_W@
++DEFS = @DEFS@
++DEPDIR = @DEPDIR@
++DOXYGEN_PAPER_SIZE = @DOXYGEN_PAPER_SIZE@
++DSYMUTIL = @DSYMUTIL@
++DUMPBIN = @DUMPBIN@
++DX_CONFIG = @DX_CONFIG@
++DX_DOCDIR = @DX_DOCDIR@
++DX_DOT = @DX_DOT@
++DX_DOXYGEN = @DX_DOXYGEN@
++DX_DVIPS = @DX_DVIPS@
++DX_EGREP = @DX_EGREP@
++DX_ENV = @DX_ENV@
++DX_FLAG_chi = @DX_FLAG_chi@
++DX_FLAG_chm = @DX_FLAG_chm@
++DX_FLAG_doc = @DX_FLAG_doc@
++DX_FLAG_dot = @DX_FLAG_dot@
++DX_FLAG_html = @DX_FLAG_html@
++DX_FLAG_man = @DX_FLAG_man@
++DX_FLAG_pdf = @DX_FLAG_pdf@
++DX_FLAG_ps = @DX_FLAG_ps@
++DX_FLAG_rtf = @DX_FLAG_rtf@
++DX_FLAG_xml = @DX_FLAG_xml@
++DX_HHC = @DX_HHC@
++DX_LATEX = @DX_LATEX@
++DX_MAKEINDEX = @DX_MAKEINDEX@
++DX_PDFLATEX = @DX_PDFLATEX@
++DX_PERL = @DX_PERL@
++DX_PROJECT = @DX_PROJECT@
++ECHO_C = @ECHO_C@
++ECHO_N = @ECHO_N@
++ECHO_T = @ECHO_T@
++EGREP = @EGREP@
++EXEEXT = @EXEEXT@
++FGREP = @FGREP@
++GREP = @GREP@
++INSTALL = @INSTALL@
++INSTALL_DATA = @INSTALL_DATA@
++INSTALL_PROGRAM = @INSTALL_PROGRAM@
++INSTALL_SCRIPT = @INSTALL_SCRIPT@
++INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
++LD = @LD@
++LDFLAGS = @LDFLAGS@
++LIBDESSERT_LIBRARY_VERSION = @LIBDESSERT_LIBRARY_VERSION@
++LIBOBJS = @LIBOBJS@
++LIBS = @LIBS@
++LIBTOOL = @LIBTOOL@
++LIPO = @LIPO@
++LN_S = @LN_S@
++LTLIBOBJS = @LTLIBOBJS@
++MAKEINFO = @MAKEINFO@
++MKDIR_P = @MKDIR_P@
++NM = @NM@
++NMEDIT = @NMEDIT@
++OBJDUMP = @OBJDUMP@
++OBJEXT = @OBJEXT@
++OTOOL = @OTOOL@
++OTOOL64 = @OTOOL64@
++PACKAGE = @PACKAGE@
++PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
++PACKAGE_NAME = @PACKAGE_NAME@
++PACKAGE_STRING = @PACKAGE_STRING@
++PACKAGE_TARNAME = @PACKAGE_TARNAME@
++PACKAGE_URL = @PACKAGE_URL@
++PACKAGE_VERSION = @PACKAGE_VERSION@
++PATH_SEPARATOR = @PATH_SEPARATOR@
++PCAP_CFLAGS = @PCAP_CFLAGS@
++PCAP_CFLGAS = @PCAP_CFLGAS@
++PCAP_LIBS = @PCAP_LIBS@
++PTHREAD_CC = @PTHREAD_CC@
++PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
++PTHREAD_LIBS = @PTHREAD_LIBS@
++RANLIB = @RANLIB@
++SED = @SED@
++SET_MAKE = @SET_MAKE@
++SHELL = @SHELL@
++SNMP_CFLAGS = @SNMP_CFLAGS@
++SNMP_CFLGAS = @SNMP_CFLGAS@
++SNMP_LIBS = @SNMP_LIBS@
++STRIP = @STRIP@
++VERSION = @VERSION@
++abs_builddir = @abs_builddir@
++abs_srcdir = @abs_srcdir@
++abs_top_builddir = @abs_top_builddir@
++abs_top_srcdir = @abs_top_srcdir@
++ac_ct_CC = @ac_ct_CC@
++ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
++am__include = @am__include@
++am__leading_dot = @am__leading_dot@
++am__quote = @am__quote@
++am__tar = @am__tar@
++am__untar = @am__untar@
++ax_pthread_config = @ax_pthread_config@
++bindir = @bindir@
++build = @build@
++build_alias = @build_alias@
++build_cpu = @build_cpu@
++build_os = @build_os@
++build_vendor = @build_vendor@
++builddir = @builddir@
++datadir = @datadir@
++datarootdir = @datarootdir@
++docdir = @docdir@
++dvidir = @dvidir@
++exec_prefix = @exec_prefix@
++host = @host@
++host_alias = @host_alias@
++host_cpu = @host_cpu@
++host_os = @host_os@
++host_vendor = @host_vendor@
++htmldir = @htmldir@
++includedir = @includedir@
++infodir = @infodir@
++install_sh = @install_sh@
++libdir = @libdir@
++libexecdir = @libexecdir@
++localedir = @localedir@
++localstatedir = @localstatedir@
++lt_ECHO = @lt_ECHO@
++mandir = @mandir@
++mkdir_p = @mkdir_p@
++oldincludedir = @oldincludedir@
++pdfdir = @pdfdir@
++prefix = @prefix@
++program_transform_name = @program_transform_name@
++psdir = @psdir@
++sbindir = @sbindir@
++sharedstatedir = @sharedstatedir@
++srcdir = @srcdir@
++sysconfdir = @sysconfdir@
++target_alias = @target_alias@
++top_build_prefix = @top_build_prefix@
++top_builddir = @top_builddir@
++top_srcdir = @top_srcdir@
++AM_CPPFLAGS = -I$(top_srcdir)/include \
++ -I../libdessert \
++ @SNMP_CFLAGS@
++
++noinst_LTLIBRARIES = libdessertsnmp.la
++libdessertsnmp_la_SOURCES = \
++ dessertAppParamsTable.c \
++ dessertAppParamsTable.h \
++ dessertAppParamsTable_oids.h \
++ dessertAppParamsTable_data_access.c \
++ dessertAppParamsTable_data_access.h \
++ dessertAppParamsTable_data_get.c \
++ dessertAppParamsTable_data_get.h \
++ dessertAppParamsTable_data_set.c \
++ dessertAppParamsTable_data_set.h \
++ dessertAppParamsTable_interface.c \
++ dessertAppParamsTable_interface.h \
++ dessertAppStatsTable.c \
++ dessertAppStatsTable.h \
++ dessertAppStatsTable_enums.h \
++ dessertAppStatsTable_oids.h \
++ dessertAppStatsTable_data_access.c \
++ dessertAppStatsTable_data_access.h \
++ dessertAppStatsTable_data_get.c \
++ dessertAppStatsTable_data_get.h \
++ dessertAppStatsTable_data_set.c \
++ dessertAppStatsTable_data_set.h \
++ dessertAppStatsTable_interface.c \
++ dessertAppStatsTable_interface.h \
++ dessertMeshifTable.c \
++ dessertMeshifTable.h \
++ dessertMeshifTable_enums.h \
++ dessertMeshifTable_oids.h \
++ dessertMeshifTable_data_access.c \
++ dessertMeshifTable_data_access.h \
++ dessertMeshifTable_data_get.c \
++ dessertMeshifTable_data_get.h \
++ dessertMeshifTable_data_set.c \
++ dessertMeshifTable_data_set.h \
++ dessertMeshifTable_interface.c \
++ dessertMeshifTable_interface.h \
++ dessertObjects.c \
++ dessertObjects.h \
++ dessertSysifTable.c \
++ dessertSysifTable.h \
++ dessertSysifTable_enums.h \
++ dessertSysifTable_oids.h \
++ dessertSysifTable_interface.h \
++ dessertSysifTable_data_access.c \
++ dessertSysifTable_data_access.h \
++ dessertSysifTable_data_get.c \
++ dessertSysifTable_data_get.h \
++ dessertSysifTable_data_set.c \
++ dessertSysifTable_data_set.h \
++ dessertSysifTable_interface.c \
++ dessertSysifTable_subagent.c
++
++libdessertsnmp_la_LDFLAGS = -avoid-version
++all: all-am
++
++.SUFFIXES:
++.SUFFIXES: .c .lo .o .obj
++$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
++ @for dep in $?; do \
++ case '$(am__configure_deps)' in \
++ *$$dep*) \
++ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
++ && { if test -f $@; then exit 0; else break; fi; }; \
++ exit 1;; \
++ esac; \
++ done; \
++ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/snmp/Makefile'; \
++ $(am__cd) $(top_srcdir) && \
++ $(AUTOMAKE) --gnu src/snmp/Makefile
++.PRECIOUS: Makefile
++Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
++ @case '$?' in \
++ *config.status*) \
++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
++ *) \
++ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
++ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
++ esac;
++
++$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
++
++$(top_srcdir)/configure: $(am__configure_deps)
++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
++$(ACLOCAL_M4): $(am__aclocal_m4_deps)
++ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
++$(am__aclocal_m4_deps):
++
++clean-noinstLTLIBRARIES:
++ -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
++ @list='$(noinst_LTLIBRARIES)'; for p in $$list; do \
++ dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
++ test "$$dir" != "$$p" || dir=.; \
++ echo "rm -f \"$${dir}/so_locations\""; \
++ rm -f "$${dir}/so_locations"; \
++ done
++libdessertsnmp.la: $(libdessertsnmp_la_OBJECTS) $(libdessertsnmp_la_DEPENDENCIES)
++ $(libdessertsnmp_la_LINK) $(libdessertsnmp_la_OBJECTS) $(libdessertsnmp_la_LIBADD) $(LIBS)
++
++mostlyclean-compile:
++ -rm -f *.$(OBJEXT)
++
++distclean-compile:
++ -rm -f *.tab.c
++
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dessertAppParamsTable.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dessertAppParamsTable_data_access.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dessertAppParamsTable_data_get.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dessertAppParamsTable_data_set.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dessertAppParamsTable_interface.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dessertAppStatsTable.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dessertAppStatsTable_data_access.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dessertAppStatsTable_data_get.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dessertAppStatsTable_data_set.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dessertAppStatsTable_interface.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dessertMeshifTable.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dessertMeshifTable_data_access.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dessertMeshifTable_data_get.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dessertMeshifTable_data_set.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dessertMeshifTable_interface.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dessertObjects.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dessertSysifTable.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dessertSysifTable_data_access.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dessertSysifTable_data_get.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dessertSysifTable_data_set.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dessertSysifTable_interface.Plo@am__quote@
++@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dessertSysifTable_subagent.Plo@am__quote@
++
++.c.o:
++@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
++@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCC_FALSE@ $(COMPILE) -c $<
++
++.c.obj:
++@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
++@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
++
++.c.lo:
++@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
++@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
++@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
++@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
++
++mostlyclean-libtool:
++ -rm -f *.lo
++
++clean-libtool:
++ -rm -rf .libs _libs
++
++ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
++ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
++ unique=`for i in $$list; do \
++ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
++ done | \
++ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
++ END { if (nonempty) { for (i in files) print i; }; }'`; \
++ mkid -fID $$unique
++tags: TAGS
++
++TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
++ $(TAGS_FILES) $(LISP)
++ set x; \
++ here=`pwd`; \
++ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
++ unique=`for i in $$list; do \
++ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
++ done | \
++ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
++ END { if (nonempty) { for (i in files) print i; }; }'`; \
++ shift; \
++ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
++ test -n "$$unique" || unique=$$empty_fix; \
++ if test $$# -gt 0; then \
++ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
++ "$$@" $$unique; \
++ else \
++ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
++ $$unique; \
++ fi; \
++ fi
++ctags: CTAGS
++CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \
++ $(TAGS_FILES) $(LISP)
++ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
++ unique=`for i in $$list; do \
++ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
++ done | \
++ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
++ END { if (nonempty) { for (i in files) print i; }; }'`; \
++ test -z "$(CTAGS_ARGS)$$unique" \
++ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
++ $$unique
++
++GTAGS:
++ here=`$(am__cd) $(top_builddir) && pwd` \
++ && $(am__cd) $(top_srcdir) \
++ && gtags -i $(GTAGS_ARGS) "$$here"
++
++distclean-tags:
++ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
++
++distdir: $(DISTFILES)
++ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
++ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
++ list='$(DISTFILES)'; \
++ dist_files=`for file in $$list; do echo $$file; done | \
++ sed -e "s|^$$srcdirstrip/||;t" \
++ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
++ case $$dist_files in \
++ */*) $(MKDIR_P) `echo "$$dist_files" | \
++ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
++ sort -u` ;; \
++ esac; \
++ for file in $$dist_files; do \
++ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
++ if test -d $$d/$$file; then \
++ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
++ if test -d "$(distdir)/$$file"; then \
++ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
++ fi; \
++ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
++ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
++ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
++ fi; \
++ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
++ else \
++ test -f "$(distdir)/$$file" \
++ || cp -p $$d/$$file "$(distdir)/$$file" \
++ || exit 1; \
++ fi; \
++ done
++check-am: all-am
++check: check-am
++all-am: Makefile $(LTLIBRARIES)
++installdirs:
++install: install-am
++install-exec: install-exec-am
++install-data: install-data-am
++uninstall: uninstall-am
++
++install-am: all-am
++ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
++
++installcheck: installcheck-am
++install-strip:
++ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
++ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
++ `test -z '$(STRIP)' || \
++ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
++mostlyclean-generic:
++
++clean-generic:
++
++distclean-generic:
++ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
++ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
++
++maintainer-clean-generic:
++ @echo "This command is intended for maintainers to use"
++ @echo "it deletes files that may require special tools to rebuild."
++clean: clean-am
++
++clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \
++ mostlyclean-am
++
++distclean: distclean-am
++ -rm -rf ./$(DEPDIR)
++ -rm -f Makefile
++distclean-am: clean-am distclean-compile distclean-generic \
++ distclean-tags
++
++dvi: dvi-am
++
++dvi-am:
++
++html: html-am
++
++html-am:
++
++info: info-am
++
++info-am:
++
++install-data-am:
++
++install-dvi: install-dvi-am
++
++install-dvi-am:
++
++install-exec-am:
++
++install-html: install-html-am
++
++install-html-am:
++
++install-info: install-info-am
++
++install-info-am:
++
++install-man:
++
++install-pdf: install-pdf-am
++
++install-pdf-am:
++
++install-ps: install-ps-am
++
++install-ps-am:
++
++installcheck-am:
++
++maintainer-clean: maintainer-clean-am
++ -rm -rf ./$(DEPDIR)
++ -rm -f Makefile
++maintainer-clean-am: distclean-am maintainer-clean-generic
++
++mostlyclean: mostlyclean-am
++
++mostlyclean-am: mostlyclean-compile mostlyclean-generic \
++ mostlyclean-libtool
++
++pdf: pdf-am
++
++pdf-am:
++
++ps: ps-am
++
++ps-am:
++
++uninstall-am:
++
++.MAKE: install-am install-strip
++
++.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \
++ clean-libtool clean-noinstLTLIBRARIES ctags distclean \
++ distclean-compile distclean-generic distclean-libtool \
++ distclean-tags distdir dvi dvi-am html html-am info info-am \
++ install install-am install-data install-data-am install-dvi \
++ install-dvi-am install-exec install-exec-am install-html \
++ install-html-am install-info install-info-am install-man \
++ install-pdf install-pdf-am install-ps install-ps-am \
++ install-strip installcheck installcheck-am installdirs \
++ maintainer-clean maintainer-clean-generic mostlyclean \
++ mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
++ pdf pdf-am ps ps-am tags uninstall uninstall-am
++
++
++# Tell versions [3.59,3.63) of GNU make to not export all variables.
++# Otherwise a system limit (for SysV at least) may be exceeded.
++.NOEXPORT:
+Index: libdessert0.86-0.86.14/src/snmp/dessertAppParamsTable.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertAppParamsTable.c 2009-12-09 16:38:27.312672556 +0100
+@@ -0,0 +1,231 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * version : 14170 $ of $
++ *
++ * $Id:$
++ */
++/** \page MFD helper for dessertAppParamsTable
++ *
++ * \section intro Introduction
++ * Introductory text.
++ *
++ */
++/*
++ * standard Net-SNMP includes
++ */
++#include <net-snmp/net-snmp-config.h>
++#include <net-snmp/net-snmp-includes.h>
++#include <net-snmp/agent/net-snmp-agent-includes.h>
++
++/*
++ * include our parent header
++ */
++#include "dessertAppParamsTable.h"
++
++#include <net-snmp/agent/mib_modules.h>
++
++#include "dessertAppParamsTable_interface.h"
++
++oid dessertAppParamsTable_oid[] =
++ { DESSERTAPPPARAMSTABLE_OID };
++int dessertAppParamsTable_oid_size =
++OID_LENGTH(dessertAppParamsTable_oid);
++
++dessertAppParamsTable_registration dessertAppParamsTable_user_context;
++
++void initialize_table_dessertAppParamsTable(void);
++void shutdown_table_dessertAppParamsTable(void);
++
++
++/**
++ * Initializes the dessertAppParamsTable module
++ */
++void
++init_dessertAppParamsTable(void)
++{
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:init_dessertAppParamsTable",
++ "called\n"));
++
++ /*
++ * TODO:300:o: Perform dessertAppParamsTable one-time module initialization.
++ */
++
++ /*
++ * here we initialize all the tables we're planning on supporting
++ */
++ if (should_init("dessertAppParamsTable"))
++ initialize_table_dessertAppParamsTable();
++
++} /* init_dessertAppParamsTable */
++
++/**
++ * Shut-down the dessertAppParamsTable module (agent is exiting)
++ */
++void
++shutdown_dessertAppParamsTable(void)
++{
++ if (should_init("dessertAppParamsTable"))
++ shutdown_table_dessertAppParamsTable();
++
++}
++
++/**
++ * Initialize the table dessertAppParamsTable
++ * (Define its contents and how it's structured)
++ */
++void
++initialize_table_dessertAppParamsTable(void)
++{
++ dessertAppParamsTable_registration *user_context;
++ u_long flags;
++
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:initialize_table_dessertAppParamsTable", "called\n"));
++
++ /*
++ * TODO:301:o: Perform dessertAppParamsTable one-time table initialization.
++ */
++
++ /*
++ * TODO:302:o: |->Initialize dessertAppParamsTable user context
++ * if you'd like to pass in a pointer to some data for this
++ * table, allocate or set it up here.
++ */
++ /*
++ * a netsnmp_data_list is a simple way to store void pointers. A simple
++ * string token is used to add, find or remove pointers.
++ */
++ user_context =
++ netsnmp_create_data_list("dessertAppParamsTable", NULL, NULL);
++
++ /*
++ * No support for any flags yet, but in the future you would
++ * set any flags here.
++ */
++ flags = 0;
++
++ /*
++ * call interface initialization code
++ */
++ _dessertAppParamsTable_initialize_interface(user_context, flags);
++} /* initialize_table_dessertAppParamsTable */
++
++/**
++ * Shutdown the table dessertAppParamsTable
++ */
++void
++shutdown_table_dessertAppParamsTable(void)
++{
++ /*
++ * call interface shutdown code
++ */
++ _dessertAppParamsTable_shutdown_interface
++ (&dessertAppParamsTable_user_context);
++}
++
++/**
++ * extra context initialization (eg default values)
++ *
++ * @param rowreq_ctx : row request context
++ * @param user_init_ctx : void pointer for user (parameter to rowreq_ctx_allocate)
++ *
++ * @retval MFD_SUCCESS : no errors
++ * @retval MFD_ERROR : error (context allocate will fail)
++ */
++int
++dessertAppParamsTable_rowreq_ctx_init(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx, void *user_init_ctx)
++{
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:dessertAppParamsTable_rowreq_ctx_init", "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:210:o: |-> Perform extra dessertAppParamsTable rowreq initialization. (eg DEFVALS)
++ */
++
++ return MFD_SUCCESS;
++} /* dessertAppParamsTable_rowreq_ctx_init */
++
++/**
++ * extra context cleanup
++ *
++ */
++void
++dessertAppParamsTable_rowreq_ctx_cleanup(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx)
++{
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:dessertAppParamsTable_rowreq_ctx_cleanup", "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:211:o: |-> Perform extra dessertAppParamsTable rowreq cleanup.
++ */
++} /* dessertAppParamsTable_rowreq_ctx_cleanup */
++
++/**
++ * pre-request callback
++ *
++ *
++ * @retval MFD_SUCCESS : success.
++ * @retval MFD_ERROR : other error
++ */
++int
++dessertAppParamsTable_pre_request(dessertAppParamsTable_registration *
++ user_context)
++{
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:dessertAppParamsTable_pre_request", "called\n"));
++
++ /*
++ * TODO:510:o: Perform dessertAppParamsTable pre-request actions.
++ */
++
++ return MFD_SUCCESS;
++} /* dessertAppParamsTable_pre_request */
++
++/**
++ * post-request callback
++ *
++ * Note:
++ * New rows have been inserted into the container, and
++ * deleted rows have been removed from the container and
++ * released.
++ *
++ * @param user_context
++ * @param rc : MFD_SUCCESS if all requests succeeded
++ *
++ * @retval MFD_SUCCESS : success.
++ * @retval MFD_ERROR : other error (ignored)
++ */
++int
++dessertAppParamsTable_post_request(dessertAppParamsTable_registration *
++ user_context, int rc)
++{
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:dessertAppParamsTable_post_request", "called\n"));
++
++ /*
++ * TODO:511:o: Perform dessertAppParamsTable post-request actions.
++ */
++
++ /*
++ * check to set if any rows were changed.
++ */
++ if (dessertAppParamsTable_dirty_get()) {
++ /*
++ * check if request was successful. If so, this would be
++ * a good place to save data to its persistent store.
++ */
++ if (MFD_SUCCESS == rc) {
++ /*
++ * save changed rows, if you haven't already
++ */
++ }
++
++ dessertAppParamsTable_dirty_set(0); /* clear table dirty flag */
++ }
++
++ return MFD_SUCCESS;
++} /* dessertAppParamsTable_post_request */
++
++
++/** @{ */
+Index: libdessert0.86-0.86.14/src/snmp/dessertAppParamsTable.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertAppParamsTable.h 2009-12-09 16:38:27.312672556 +0100
+@@ -0,0 +1,252 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * version : 14170 $ of $
++ *
++ * $Id:$
++ */
++#ifndef DESSERTAPPPARAMSTABLE_H
++#define DESSERTAPPPARAMSTABLE_H
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++
++/** @addtogroup misc misc: Miscellaneous routines
++ *
++ * @{
++ */
++#include <net-snmp/library/asn1.h>
++
++ /*
++ * other required module components
++ */
++ /* *INDENT-OFF* */
++config_add_mib(DESSERT-MIB)
++config_require(DESSERT-MIB/dessertAppParamsTable/dessertAppParamsTable_interface)
++config_require(DESSERT-MIB/dessertAppParamsTable/dessertAppParamsTable_data_access)
++config_require(DESSERT-MIB/dessertAppParamsTable/dessertAppParamsTable_data_get)
++config_require(DESSERT-MIB/dessertAppParamsTable/dessertAppParamsTable_data_set)
++ /* *INDENT-ON* */
++
++ /*
++ * OID and column number definitions for dessertAppParamsTable
++ */
++#include "dessertAppParamsTable_oids.h"
++
++ /*
++ * enum definions
++ */
++#include "dessertAppParamsTable_enums.h"
++
++ /*
++ *********************************************************************
++ * function declarations
++ */
++ void init_dessertAppParamsTable(void);
++ void shutdown_dessertAppParamsTable(void);
++
++ /*
++ *********************************************************************
++ * Table declarations
++ */
++/**********************************************************************
++ **********************************************************************
++ ***
++ *** Table dessertAppParamsTable
++ ***
++ **********************************************************************
++ **********************************************************************/
++ /*
++ * DESSERT-MIB::dessertAppParamsTable is subid 11 of dessertObjects.
++ * Its status is Current.
++ * OID: .1.3.6.1.4.1.18898.0.19.10.1.1.11, length: 13
++ */
++ /*
++ *********************************************************************
++ * When you register your mib, you get to provide a generic
++ * pointer that will be passed back to you for most of the
++ * functions calls.
++ *
++ * TODO:100:r: Review all context structures
++ */
++ /*
++ * TODO:101:o: |-> Review dessertAppParamsTable registration context.
++ */
++ typedef netsnmp_data_list dessertAppParamsTable_registration;
++
++/**********************************************************************/
++ /*
++ * TODO:110:r: |-> Review dessertAppParamsTable data context structure.
++ * This structure is used to represent the data for dessertAppParamsTable.
++ */
++ /*
++ * This structure contains storage for all the columns defined in the
++ * dessertAppParamsTable.
++ */
++ typedef struct dessertAppParamsTable_data_s {
++
++ /*
++ * appParamsName(2)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
++ */
++ char appParamsName[255];
++ size_t appParamsName_len; /* # of char elements, not bytes */
++
++ /*
++ * appParamsDesc(3)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
++ */
++ char appParamsDesc[255];
++ size_t appParamsDesc_len; /* # of char elements, not bytes */
++
++ /*
++ * appParamsValueType(4)/DessertAppValueType/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h
++ */
++ u_long appParamsValueType;
++
++ /*
++ * appParamsTruthValue(5)/TruthValue/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
++ */
++ u_long appParamsTruthValue;
++
++ /*
++ * appParamsInteger32(6)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/r/d/h
++ */
++ long appParamsInteger32;
++
++ /*
++ * appParamsUnsigned32(7)/UNSIGNED32/ASN_UNSIGNED/u_long(u_long)//l/A/W/e/r/d/h
++ */
++ u_long appParamsUnsigned32;
++
++ /*
++ * appParamsOctetString(9)/DessertApplicationOctetString/ASN_OCTET_STR/char(char)//L/A/W/e/R/d/H
++ */
++ char appParamsOctetString[1024];
++ size_t appParamsOctetString_len; /* # of char elements, not bytes */
++
++ } dessertAppParamsTable_data;
++
++
++ /*
++ *********************************************************************
++ * TODO:115:o: |-> Review dessertAppParamsTable undo context.
++ * We're just going to use the same data structure for our
++ * undo_context. If you want to do something more efficent,
++ * define your typedef here.
++ */
++ typedef dessertAppParamsTable_data dessertAppParamsTable_undo_data;
++
++ /*
++ * TODO:120:r: |-> Review dessertAppParamsTable mib index.
++ * This structure is used to represent the index for dessertAppParamsTable.
++ */
++ typedef struct dessertAppParamsTable_mib_index_s {
++
++ /*
++ * appParamsIndex(1)/DessertAppParamsIndex/ASN_INTEGER/long(long)//l/a/w/e/R/d/H
++ */
++ long appParamsIndex;
++
++
++ } dessertAppParamsTable_mib_index;
++
++ /*
++ * TODO:121:r: | |-> Review dessertAppParamsTable max index length.
++ * If you KNOW that your indexes will never exceed a certain
++ * length, update this macro to that length.
++ */
++#define MAX_dessertAppParamsTable_IDX_LEN 1
++
++
++ /*
++ *********************************************************************
++ * TODO:130:o: |-> Review dessertAppParamsTable Row request (rowreq) context.
++ * When your functions are called, you will be passed a
++ * dessertAppParamsTable_rowreq_ctx pointer.
++ */
++ typedef struct dessertAppParamsTable_rowreq_ctx_s {
++
++ /** this must be first for container compare to work */
++ netsnmp_index oid_idx;
++ oid oid_tmp[MAX_dessertAppParamsTable_IDX_LEN];
++
++ dessertAppParamsTable_mib_index tbl_idx;
++
++ dessertAppParamsTable_data data;
++ unsigned int column_exists_flags; /* flags for existence */
++ dessertAppParamsTable_undo_data *undo;
++ unsigned int column_set_flags; /* flags for set columns */
++
++
++ /*
++ * flags per row. Currently, the first (lower) 8 bits are reserved
++ * for the user. See mfd.h for other flags.
++ */
++ u_int rowreq_flags;
++
++ /*
++ * TODO:131:o: | |-> Add useful data to dessertAppParamsTable rowreq context.
++ */
++
++ /*
++ * storage for future expansion
++ */
++ netsnmp_data_list *dessertAppParamsTable_data_list;
++
++ } dessertAppParamsTable_rowreq_ctx;
++
++ typedef struct dessertAppParamsTable_ref_rowreq_ctx_s {
++ dessertAppParamsTable_rowreq_ctx *rowreq_ctx;
++ } dessertAppParamsTable_ref_rowreq_ctx;
++
++ /*
++ *********************************************************************
++ * function prototypes
++ */
++ int
++ dessertAppParamsTable_pre_request
++ (dessertAppParamsTable_registration * user_context);
++ int
++ dessertAppParamsTable_post_request
++ (dessertAppParamsTable_registration * user_context, int rc);
++
++ int
++ dessertAppParamsTable_rowreq_ctx_init
++ (dessertAppParamsTable_rowreq_ctx * rowreq_ctx,
++ void *user_init_ctx);
++ void
++ dessertAppParamsTable_rowreq_ctx_cleanup
++ (dessertAppParamsTable_rowreq_ctx * rowreq_ctx);
++
++ int
++ dessertAppParamsTable_commit(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx);
++
++ dessertAppParamsTable_rowreq_ctx
++ *dessertAppParamsTable_row_find_by_mib_index
++ (dessertAppParamsTable_mib_index * mib_idx);
++
++ extern oid dessertAppParamsTable_oid[];
++ extern int dessertAppParamsTable_oid_size;
++
++
++#include "dessertAppParamsTable_interface.h"
++#include "dessertAppParamsTable_data_access.h"
++#include "dessertAppParamsTable_data_get.h"
++#include "dessertAppParamsTable_data_set.h"
++
++ /*
++ * DUMMY markers, ignore
++ *
++ * TODO:099:x: *************************************************************
++ * TODO:199:x: *************************************************************
++ * TODO:299:x: *************************************************************
++ * TODO:399:x: *************************************************************
++ * TODO:499:x: *************************************************************
++ */
++
++#ifdef __cplusplus
++}
++#endif
++#endif /* DESSERTAPPPARAMSTABLE_H */
++/** @} */
+Index: libdessert0.86-0.86.14/src/snmp/dessertAppParamsTable_data_access.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertAppParamsTable_data_access.c 2009-12-09 16:38:27.312672556 +0100
+@@ -0,0 +1,352 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * version : 14170 $ of $
++ *
++ * $Id:$
++ */
++/*
++ * standard Net-SNMP includes
++ */
++#include <net-snmp/net-snmp-config.h>
++#include <net-snmp/net-snmp-includes.h>
++#include <net-snmp/agent/net-snmp-agent-includes.h>
++
++/*
++ * include our parent header
++ */
++#include "dessertAppParamsTable.h"
++#include "dessertAppParamsTable_data_access.h"
++#include <dessert/dessert.h>
++#include "dessert_internal.h"
++
++
++/** @ingroup interface
++ * @addtogroup data_access data_access: Routines to access data
++ *
++ * These routines are used to locate the data used to satisfy
++ * requests.
++ *
++ * @{
++ */
++/**********************************************************************
++ **********************************************************************
++ ***
++ *** Table dessertAppParamsTable
++ ***
++ **********************************************************************
++ **********************************************************************/
++/*
++ * DESSERT-MIB::dessertAppParamsTable is subid 11 of dessertObjects.
++ * Its status is Current.
++ * OID: .1.3.6.1.4.1.18898.0.19.10.1.1.11, length: 13
++ */
++
++/**
++ * initialization for dessertAppParamsTable data access
++ *
++ * This function is called during startup to allow you to
++ * allocate any resources you need for the data table.
++ *
++ * @param dessertAppParamsTable_reg
++ * Pointer to dessertAppParamsTable_registration
++ *
++ * @retval MFD_SUCCESS : success.
++ * @retval MFD_ERROR : unrecoverable error.
++ */
++int
++dessertAppParamsTable_init_data(dessertAppParamsTable_registration *
++ dessertAppParamsTable_reg)
++{
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:dessertAppParamsTable_init_data", "called\n"));
++
++ /*
++ * TODO:303:o: Initialize dessertAppParamsTable data.
++ */
++
++
++ return MFD_SUCCESS;
++} /* dessertAppParamsTable_init_data */
++
++/**
++ * container overview
++ *
++ */
++
++/**
++ * container initialization
++ *
++ * @param container_ptr_ptr A pointer to a container pointer. If you
++ * create a custom container, use this parameter to return it
++ * to the MFD helper. If set to NULL, the MFD helper will
++ * allocate a container for you.
++ *
++ * This function is called at startup to allow you to customize certain
++ * aspects of the access method. For the most part, it is for advanced
++ * users. The default code should suffice for most cases. If no custom
++ * container is allocated, the MFD code will create one for your.
++ *
++ * @remark
++ * This would also be a good place to do any initialization needed
++ * for you data source. For example, opening a connection to another
++ * process that will supply the data, opening a database, etc.
++ */
++void
++dessertAppParamsTable_container_init(netsnmp_container **
++ container_ptr_ptr, netsnmp_cache * cache)
++{
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:dessertAppParamsTable_container_init", "called\n"));
++
++ if (NULL == container_ptr_ptr) {
++ snmp_log(LOG_ERR,
++ "bad container param to dessertAppParamsTable_container_init\n");
++ return;
++ }
++
++ /*
++ * For advanced users, you can use a custom container. If you
++ * do not create one, one will be created for you.
++ */
++ *container_ptr_ptr = NULL;
++ if (NULL == cache) {
++ snmp_log(LOG_ERR,
++ "bad cache param to dessertAppParamsTable_container_init\n");
++ return;
++ }
++
++ /*
++ * TODO:345:A: Set up dessertAppStatsTable cache properties.
++ *
++ * Also for advanced users, you can set parameters for the
++ * cache. Do not change the magic pointer, as it is used
++ * by the MFD helper. To completely disable caching, set
++ * cache->enabled to 0.
++ */
++ cache->timeout = DESSERTAPPPARAMSTABLE_CACHE_TIMEOUT; /* seconds */
++} /* dessertAppParamsTable_container_init */
++
++/**
++ * container shutdown
++ *
++ * @param container_ptr A pointer to the container.
++ *
++ * This function is called at shutdown to allow you to customize certain
++ * aspects of the access method. For the most part, it is for advanced
++ * users. The default code should suffice for most cases.
++ *
++ * This function is called before dessertAppParamsTable_container_free().
++ *
++ * @remark
++ * This would also be a good place to do any cleanup needed
++ * for you data source. For example, closing a connection to another
++ * process that supplied the data, closing a database, etc.
++ */
++void
++dessertAppParamsTable_container_shutdown(netsnmp_container * container_ptr)
++{
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:dessertAppParamsTable_container_shutdown", "called\n"));
++
++ if (NULL == container_ptr) {
++ snmp_log(LOG_ERR,
++ "bad params to dessertAppParamsTable_container_shutdown\n");
++ return;
++ }
++
++} /* dessertAppParamsTable_container_shutdown */
++
++/**
++ * load initial data
++ *
++ * TODO:350:M: Implement dessertAppParamsTable data load
++ *
++ * @param container container to which items should be inserted
++ *
++ * @retval MFD_SUCCESS : success.
++ * @retval MFD_RESOURCE_UNAVAILABLE : Can't access data source
++ * @retval MFD_ERROR : other error.
++ *
++ * This function is called to load the index(es) (and data, optionally)
++ * for the every row in the data set.
++ *
++ * @remark
++ * While loading the data, the only important thing is the indexes.
++ * If access to your data is cheap/fast (e.g. you have a pointer to a
++ * structure in memory), it would make sense to update the data here.
++ * If, however, the accessing the data invovles more work (e.g. parsing
++ * some other existing data, or peforming calculations to derive the data),
++ * then you can limit yourself to setting the indexes and saving any
++ * information you will need later. Then use the saved information in
++ * dessertAppParamsTable_row_prep() for populating data.
++ *
++ * @note
++ * If you need consistency between rows (like you want statistics
++ * for each row to be from the same time frame), you should set all
++ * data here.
++ *
++ */
++int
++dessertAppParamsTable_container_load(netsnmp_container * container)
++{
++ dessertAppParamsTable_rowreq_ctx *rowreq_ctx;
++ size_t count = 0;
++
++ dessert_agentx_appparams_t *appparams_list = NULL;
++ dessert_agentx_appparams_t *appparam;
++
++ /*
++ * temporary storage for index values
++ */
++ long appParamsIndex;
++
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:dessertAppParamsTable_container_load", "called\n"));
++ dessert_debug("dessertAppParamsTable_container_load called");
++
++ /* harvest the appparams from the getter callbacks registered via *dessert_agentx_appparams_add* */
++ if (_dessert_agentx_appparams_harvest_callbacks(&appparams_list)
++ == DESSERT_ERR) {
++ return MFD_RESOURCE_UNAVAILABLE;
++ }
++
++ /*
++ * TODO:351:M: |-> Load/update data in the dessertAppParamsTable container.
++ * loop over your dessertAppParamsTable data, allocate a rowreq context,
++ * set the index(es) [and data, optionally] and insert into
++ * the container.
++ */
++ DL_FOREACH(appparams_list, appparam) {
++
++ appParamsIndex = appparam->index;
++
++ /*
++ * TODO:352:M: | |-> set indexes in new dessertAppParamsTable rowreq context.
++ * data context will be set from the param (unless NULL,
++ * in which case a new data context will be allocated)
++ */
++ rowreq_ctx = dessertAppParamsTable_allocate_rowreq_ctx();
++ if (NULL == rowreq_ctx) {
++ snmp_log(LOG_ERR, "memory allocation failed\n");
++ return MFD_RESOURCE_UNAVAILABLE;
++ }
++ if (MFD_SUCCESS !=
++ dessertAppParamsTable_indexes_set(rowreq_ctx,
++ appParamsIndex)) {
++ snmp_log(LOG_ERR,
++ "error setting index while loading "
++ "dessertAppParamsTable data.\n");
++ dessertAppParamsTable_release_rowreq_ctx(rowreq_ctx);
++ continue;
++ }
++
++ /* clear all column flags */
++ rowreq_ctx->column_exists_flags = 0;
++
++ /* these columns are always present*/
++ rowreq_ctx->column_exists_flags |= COLUMN_APPPARAMSNAME_FLAG
++ | COLUMN_APPPARAMSDESC_FLAG | COLUMN_APPPARAMSVALUETYPE_FLAG;
++
++ rowreq_ctx->data.appParamsName_len = strlen(appparam->name);
++ strcpy(rowreq_ctx->data.appParamsName, appparam->name);
++
++ rowreq_ctx->data.appParamsDesc_len = strlen(appparam->desc);
++ strcpy(rowreq_ctx->data.appParamsDesc, appparam->desc);
++
++ appParamsValueType_map(&(rowreq_ctx->data.appParamsValueType), appparam->value_type);
++
++ /* which of the 'value'-columns is actually present? */
++ switch (appparam->value_type) {
++
++ case DESSERT_APPPARAMS_VALUETYPE_BOOL:
++ rowreq_ctx->column_exists_flags |= COLUMN_APPPARAMSTRUTHVALUE_FLAG;
++ appParamsTruthValue_map(&(rowreq_ctx->data.appParamsTruthValue) , appparam->bool);
++
++ break;
++
++ case DESSERT_APPPARAMS_VALUETYPE_INT32:
++ rowreq_ctx->column_exists_flags |= COLUMN_APPPARAMSINTEGER32_FLAG;
++ rowreq_ctx->data.appParamsInteger32 = appparam->int32;
++
++ break;
++
++ case DESSERT_APPPARAMS_VALUETYPE_UINT32:
++ rowreq_ctx->column_exists_flags |= COLUMN_APPPARAMSUNSIGNED32_FLAG;
++ rowreq_ctx->data.appParamsUnsigned32 = appparam->uint32;
++
++ break;
++
++ case DESSERT_APPPARAMS_VALUETYPE_OCTETSTRING:
++ rowreq_ctx->column_exists_flags |= COLUMN_APPPARAMSOCTETSTRING_FLAG;
++ rowreq_ctx->data.appParamsOctetString_len = appparam->octetstring_len;
++ memcpy(&(rowreq_ctx->data.appParamsOctetString), appparam->octetstring, appparam->octetstring_len);
++
++ break;
++
++ default:
++ dessert_err("appparam->value_type not valid!");
++ }
++
++ /*
++ * insert into table container
++ */
++ CONTAINER_INSERT(container, rowreq_ctx);
++ }
++
++ _dessert_agentx_appparams_free_list(&appparams_list);
++
++ DEBUGMSGT(("verbose:dessertAppParamsTable:dessertAppParamsTable_container_load", "inserted %d records\n", count));
++
++ return MFD_SUCCESS;
++} /* dessertAppParamsTable_container_load */
++
++/**
++ * container clean up
++ *
++ * @param container container with all current items
++ *
++ * This optional callback is called prior to all
++ * item's being removed from the container. If you
++ * need to do any processing before that, do it here.
++ *
++ * @note
++ * The MFD helper will take care of releasing all the row contexts.
++ *
++ */
++void
++dessertAppParamsTable_container_free(netsnmp_container * container)
++{
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:dessertAppParamsTable_container_free", "called\n"));
++
++ /*
++ * TODO:380:M: Free dessertAppParamsTable container data.
++ */
++} /* dessertAppParamsTable_container_free */
++
++/**
++ * prepare row for processing.
++ *
++ * When the agent has located the row for a request, this function is
++ * called to prepare the row for processing. If you fully populated
++ * the data context during the index setup phase, you may not need to
++ * do anything.
++ *
++ * @param rowreq_ctx pointer to a context.
++ *
++ * @retval MFD_SUCCESS : success.
++ * @retval MFD_ERROR : other error.
++ */
++int
++dessertAppParamsTable_row_prep(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx)
++{
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:dessertAppParamsTable_row_prep", "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:390:o: Prepare row for request.
++ * If populating row data was delayed, this is the place to
++ * fill in the row for this request.
++ */
++
++ return MFD_SUCCESS;
++} /* dessertAppParamsTable_row_prep */
++
++/** @} */
+Index: libdessert0.86-0.86.14/src/snmp/dessertAppParamsTable_data_access.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertAppParamsTable_data_access.h 2009-12-09 16:38:27.312672556 +0100
+@@ -0,0 +1,93 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * version : 14170 $ of $
++ *
++ * $Id:$
++ */
++#ifndef DESSERTAPPPARAMSTABLE_DATA_ACCESS_H
++#define DESSERTAPPPARAMSTABLE_DATA_ACCESS_H
++
++#include "dessert_internal.h"
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++
++ /*
++ *********************************************************************
++ * function declarations
++ */
++
++ /*
++ *********************************************************************
++ * Table declarations
++ */
++/**********************************************************************
++ **********************************************************************
++ ***
++ *** Table dessertAppParamsTable
++ ***
++ **********************************************************************
++ **********************************************************************/
++ /*
++ * DESSERT-MIB::dessertAppParamsTable is subid 11 of dessertObjects.
++ * Its status is Current.
++ * OID: .1.3.6.1.4.1.18898.0.19.10.1.1.11, length: 13
++ */
++
++
++ int
++ dessertAppParamsTable_init_data(dessertAppParamsTable_registration
++ * dessertAppParamsTable_reg);
++
++
++ /*
++ * TODO:180:o: Review dessertAppParamsTable cache timeout.
++ * The number of seconds before the cache times out
++ */
++#define DESSERTAPPPARAMSTABLE_CACHE_TIMEOUT DESSERT_AGENTX_APPPARAMTABLE_CACHE_TIMEOUT
++
++ void dessertAppParamsTable_container_init(netsnmp_container
++ **
++ container_ptr_ptr,
++ netsnmp_cache *
++ cache);
++ void
++ dessertAppParamsTable_container_shutdown(netsnmp_container *
++ container_ptr);
++
++ int dessertAppParamsTable_container_load(netsnmp_container
++ * container);
++ void dessertAppParamsTable_container_free(netsnmp_container
++ * container);
++
++ int dessertAppParamsTable_cache_load(netsnmp_container *
++ container);
++ void dessertAppParamsTable_cache_free(netsnmp_container *
++ container);
++
++ /*
++ ***************************************************
++ *** START EXAMPLE CODE ***
++ ***---------------------------------------------***/
++ /*
++ *********************************************************************
++ * Since we have no idea how you really access your data, we'll go with
++ * a worst case example: a flat text file.
++ */
++#define MAX_LINE_SIZE 256
++ /*
++ ***---------------------------------------------***
++ *** END EXAMPLE CODE ***
++ ***************************************************/
++ int
++ dessertAppParamsTable_row_prep(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx);
++
++
++
++#ifdef __cplusplus
++}
++#endif
++#endif /* DESSERTAPPPARAMSTABLE_DATA_ACCESS_H */
+Index: libdessert0.86-0.86.14/src/snmp/dessertAppParamsTable_data_get.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertAppParamsTable_data_get.c 2009-12-09 16:38:27.316005903 +0100
+@@ -0,0 +1,731 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * version : 12088 $ of $
++ *
++ * $Id:$
++ */
++/*
++ * standard Net-SNMP includes
++ */
++#include <net-snmp/net-snmp-config.h>
++#include <net-snmp/net-snmp-includes.h>
++#include <net-snmp/agent/net-snmp-agent-includes.h>
++
++/*
++ * include our parent header
++ */
++#include "dessertAppParamsTable.h"
++
++
++/** @defgroup data_get data_get: Routines to get data
++ *
++ * TODO:230:M: Implement dessertAppParamsTable get routines.
++ * TODO:240:M: Implement dessertAppParamsTable mapping routines (if any).
++ *
++ * These routine are used to get the value for individual objects. The
++ * row context is passed, along with a pointer to the memory where the
++ * value should be copied.
++ *
++ * @{
++ */
++/**********************************************************************
++ **********************************************************************
++ ***
++ *** Table dessertAppParamsTable
++ ***
++ **********************************************************************
++ **********************************************************************/
++/*
++ * DESSERT-MIB::dessertAppParamsTable is subid 11 of dessertObjects.
++ * Its status is Current.
++ * OID: .1.3.6.1.4.1.18898.0.19.10.1.1.11, length: 13
++ */
++
++/*
++ * ---------------------------------------------------------------------
++ * * TODO:200:r: Implement dessertAppParamsTable data context functions.
++ */
++
++
++/**
++ * set mib index(es)
++ *
++ * @param tbl_idx mib index structure
++ * @param appParamsIndex_val
++ *
++ * @retval MFD_SUCCESS : success.
++ * @retval MFD_ERROR : other error.
++ *
++ * @remark
++ * This convenience function is useful for setting all the MIB index
++ * components with a single function call. It is assume that the C values
++ * have already been mapped from their native/rawformat to the MIB format.
++ */
++int
++dessertAppParamsTable_indexes_set_tbl_idx(dessertAppParamsTable_mib_index *
++ tbl_idx, long appParamsIndex_val)
++{
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:dessertAppParamsTable_indexes_set_tbl_idx", "called\n"));
++
++ /*
++ * appParamsIndex(1)/DessertAppParamsIndex/ASN_INTEGER/long(long)//l/a/w/e/R/d/H
++ */
++ tbl_idx->appParamsIndex = appParamsIndex_val;
++
++
++ return MFD_SUCCESS;
++} /* dessertAppParamsTable_indexes_set_tbl_idx */
++
++/**
++ * @internal
++ * set row context indexes
++ *
++ * @param reqreq_ctx the row context that needs updated indexes
++ *
++ * @retval MFD_SUCCESS : success.
++ * @retval MFD_ERROR : other error.
++ *
++ * @remark
++ * This function sets the mib indexs, then updates the oid indexs
++ * from the mib index.
++ */
++int
++dessertAppParamsTable_indexes_set(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx, long appParamsIndex_val)
++{
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:dessertAppParamsTable_indexes_set", "called\n"));
++
++ if (MFD_SUCCESS !=
++ dessertAppParamsTable_indexes_set_tbl_idx(&rowreq_ctx->tbl_idx,
++ appParamsIndex_val))
++ return MFD_ERROR;
++
++ /*
++ * convert mib index to oid index
++ */
++ rowreq_ctx->oid_idx.len = sizeof(rowreq_ctx->oid_tmp) / sizeof(oid);
++ if (0 != dessertAppParamsTable_index_to_oid(&rowreq_ctx->oid_idx,
++ &rowreq_ctx->tbl_idx)) {
++ return MFD_ERROR;
++ }
++
++ return MFD_SUCCESS;
++} /* dessertAppParamsTable_indexes_set */
++
++
++/*---------------------------------------------------------------------
++ * DESSERT-MIB::dessertAppParamsEntry.appParamsName
++ * appParamsName is subid 2 of dessertAppParamsEntry.
++ * Its status is Current, and its access level is ReadOnly.
++ * OID: .1.3.6.1.4.1.18898.0.19.10.1.1.11.1.2
++ * Description:
++The name of the parameter.
++ *
++ * Attributes:
++ * accessible 1 isscalar 0 enums 0 hasdefval 0
++ * readable 1 iscolumn 1 ranges 1 hashint 1
++ * settable 0
++ * hint: 255a
++ *
++ * Ranges: 0 - 255;
++ *
++ * Its syntax is DisplayString (based on perltype OCTETSTR)
++ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
++ * This data type requires a length. (Max 255)
++ */
++/**
++ * Extract the current value of the appParamsName data.
++ *
++ * Set a value using the data context for the row.
++ *
++ * @param rowreq_ctx
++ * Pointer to the row request context.
++ * @param appParamsName_val_ptr_ptr
++ * Pointer to storage for a char variable
++ * @param appParamsName_val_ptr_len_ptr
++ * Pointer to a size_t. On entry, it will contain the size (in bytes)
++ * pointed to by appParamsName.
++ * On exit, this value should contain the data size (in bytes).
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_SKIP : skip this node (no value for now)
++ * @retval MFD_ERROR : Any other error
++*
++ * @note If you need more than (*appParamsName_val_ptr_len_ptr) bytes of memory,
++ * allocate it using malloc() and update appParamsName_val_ptr_ptr.
++ * <b>DO NOT</b> free the previous pointer.
++ * The MFD helper will release the memory you allocate.
++ *
++ * @remark If you call this function yourself, you are responsible
++ * for checking if the pointer changed, and freeing any
++ * previously allocated memory. (Not necessary if you pass
++ * in a pointer to static memory, obviously.)
++ */
++int
++appParamsName_get(dessertAppParamsTable_rowreq_ctx * rowreq_ctx,
++ char **appParamsName_val_ptr_ptr,
++ size_t *appParamsName_val_ptr_len_ptr)
++{
++ /** we should have a non-NULL pointer and enough storage */
++ netsnmp_assert((NULL != appParamsName_val_ptr_ptr)
++ && (NULL != *appParamsName_val_ptr_ptr));
++ netsnmp_assert(NULL != appParamsName_val_ptr_len_ptr);
++
++
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsName_get",
++ "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:231:o: |-> Extract the current value of the appParamsName data.
++ * copy (* appParamsName_val_ptr_ptr ) data and (* appParamsName_val_ptr_len_ptr ) from rowreq_ctx->data
++ */
++ /*
++ * make sure there is enough space for appParamsName data
++ */
++ if ((NULL == (*appParamsName_val_ptr_ptr)) ||
++ ((*appParamsName_val_ptr_len_ptr) <
++ (rowreq_ctx->data.appParamsName_len *
++ sizeof(rowreq_ctx->data.appParamsName[0])))) {
++ /*
++ * allocate space for appParamsName data
++ */
++ (*appParamsName_val_ptr_ptr) =
++ malloc(rowreq_ctx->data.appParamsName_len *
++ sizeof(rowreq_ctx->data.appParamsName[0]));
++ if (NULL == (*appParamsName_val_ptr_ptr)) {
++ snmp_log(LOG_ERR, "could not allocate memory\n");
++ return MFD_ERROR;
++ }
++ }
++ (*appParamsName_val_ptr_len_ptr) =
++ rowreq_ctx->data.appParamsName_len *
++ sizeof(rowreq_ctx->data.appParamsName[0]);
++ memcpy((*appParamsName_val_ptr_ptr), rowreq_ctx->data.appParamsName,
++ rowreq_ctx->data.appParamsName_len *
++ sizeof(rowreq_ctx->data.appParamsName[0]));
++
++ return MFD_SUCCESS;
++} /* appParamsName_get */
++
++/*---------------------------------------------------------------------
++ * DESSERT-MIB::dessertAppParamsEntry.appParamsDesc
++ * appParamsDesc is subid 3 of dessertAppParamsEntry.
++ * Its status is Current, and its access level is ReadOnly.
++ * OID: .1.3.6.1.4.1.18898.0.19.10.1.1.11.1.3
++ * Description:
++A short description of the parameter
++ *
++ * Attributes:
++ * accessible 1 isscalar 0 enums 0 hasdefval 0
++ * readable 1 iscolumn 1 ranges 1 hashint 1
++ * settable 0
++ * hint: 255a
++ *
++ * Ranges: 0 - 255;
++ *
++ * Its syntax is DisplayString (based on perltype OCTETSTR)
++ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
++ * This data type requires a length. (Max 255)
++ */
++/**
++ * Extract the current value of the appParamsDesc data.
++ *
++ * Set a value using the data context for the row.
++ *
++ * @param rowreq_ctx
++ * Pointer to the row request context.
++ * @param appParamsDesc_val_ptr_ptr
++ * Pointer to storage for a char variable
++ * @param appParamsDesc_val_ptr_len_ptr
++ * Pointer to a size_t. On entry, it will contain the size (in bytes)
++ * pointed to by appParamsDesc.
++ * On exit, this value should contain the data size (in bytes).
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_SKIP : skip this node (no value for now)
++ * @retval MFD_ERROR : Any other error
++*
++ * @note If you need more than (*appParamsDesc_val_ptr_len_ptr) bytes of memory,
++ * allocate it using malloc() and update appParamsDesc_val_ptr_ptr.
++ * <b>DO NOT</b> free the previous pointer.
++ * The MFD helper will release the memory you allocate.
++ *
++ * @remark If you call this function yourself, you are responsible
++ * for checking if the pointer changed, and freeing any
++ * previously allocated memory. (Not necessary if you pass
++ * in a pointer to static memory, obviously.)
++ */
++int
++appParamsDesc_get(dessertAppParamsTable_rowreq_ctx * rowreq_ctx,
++ char **appParamsDesc_val_ptr_ptr,
++ size_t *appParamsDesc_val_ptr_len_ptr)
++{
++ /** we should have a non-NULL pointer and enough storage */
++ netsnmp_assert((NULL != appParamsDesc_val_ptr_ptr)
++ && (NULL != *appParamsDesc_val_ptr_ptr));
++ netsnmp_assert(NULL != appParamsDesc_val_ptr_len_ptr);
++
++
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsDesc_get",
++ "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:231:o: |-> Extract the current value of the appParamsDesc data.
++ * copy (* appParamsDesc_val_ptr_ptr ) data and (* appParamsDesc_val_ptr_len_ptr ) from rowreq_ctx->data
++ */
++ /*
++ * make sure there is enough space for appParamsDesc data
++ */
++ if ((NULL == (*appParamsDesc_val_ptr_ptr)) ||
++ ((*appParamsDesc_val_ptr_len_ptr) <
++ (rowreq_ctx->data.appParamsDesc_len *
++ sizeof(rowreq_ctx->data.appParamsDesc[0])))) {
++ /*
++ * allocate space for appParamsDesc data
++ */
++ (*appParamsDesc_val_ptr_ptr) =
++ malloc(rowreq_ctx->data.appParamsDesc_len *
++ sizeof(rowreq_ctx->data.appParamsDesc[0]));
++ if (NULL == (*appParamsDesc_val_ptr_ptr)) {
++ snmp_log(LOG_ERR, "could not allocate memory\n");
++ return MFD_ERROR;
++ }
++ }
++ (*appParamsDesc_val_ptr_len_ptr) =
++ rowreq_ctx->data.appParamsDesc_len *
++ sizeof(rowreq_ctx->data.appParamsDesc[0]);
++ memcpy((*appParamsDesc_val_ptr_ptr), rowreq_ctx->data.appParamsDesc,
++ rowreq_ctx->data.appParamsDesc_len *
++ sizeof(rowreq_ctx->data.appParamsDesc[0]));
++
++ return MFD_SUCCESS;
++} /* appParamsDesc_get */
++
++/*---------------------------------------------------------------------
++ * DESSERT-MIB::dessertAppParamsEntry.appParamsValueType
++ * appParamsValueType is subid 4 of dessertAppParamsEntry.
++ * Its status is Current, and its access level is ReadOnly.
++ * OID: .1.3.6.1.4.1.18898.0.19.10.1.1.11.1.4
++ * Description:
++Indicates which of the columns (appParamsTruthValue,
++ appParamsInterger32, appParamsUInteger32, appParamsOctetString) in the
++ dessertAppParamsTable is actually valid.
++ *
++ * Attributes:
++ * accessible 1 isscalar 0 enums 1 hasdefval 0
++ * readable 1 iscolumn 1 ranges 0 hashint 0
++ * settable 0
++ *
++ * Enum range: 3/8. Values: bool(0), int32(1), uint32(2), counter64(3), octetstring(4)
++ *
++ * Its syntax is DessertAppValueType (based on perltype INTEGER)
++ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
++ */
++/**
++ * map a value from its original native format to the MIB format.
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_ERROR : Any other error
++ *
++ * @note parameters follow the memset convention (dest, src).
++ *
++ * @note generation and use of this function can be turned off by re-running
++ * mib2c after adding the following line to the file
++ * defaults/node-appParamsValueType.m2d :
++ * @eval $m2c_node_skip_mapping = 1@
++ *
++ * @remark
++ * If the values for your data type don't exactly match the
++ * possible values defined by the mib, you should map them here.
++ * Otherwise, just do a direct copy.
++ */
++int
++appParamsValueType_map(u_long * mib_appParamsValueType_val_ptr,
++ u_long raw_appParamsValueType_val)
++{
++ netsnmp_assert(NULL != mib_appParamsValueType_val_ptr);
++
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsValueType_map",
++ "called\n"));
++
++ /*
++ * TODO:241:o: |-> Implement appParamsValueType enum mapping.
++ * uses INTERNAL_* macros defined in the header files
++ */
++ switch (raw_appParamsValueType_val) {
++ case INTERNAL_DESSERTAPPPARAMSTABLE_APPPARAMSVALUETYPE_BOOL:
++ *mib_appParamsValueType_val_ptr = DESSERTAPPVALUETYPE_BOOL;
++ break;
++
++ case INTERNAL_DESSERTAPPPARAMSTABLE_APPPARAMSVALUETYPE_INT32:
++ *mib_appParamsValueType_val_ptr = DESSERTAPPVALUETYPE_INT32;
++ break;
++
++ case INTERNAL_DESSERTAPPPARAMSTABLE_APPPARAMSVALUETYPE_UINT32:
++ *mib_appParamsValueType_val_ptr = DESSERTAPPVALUETYPE_UINT32;
++ break;
++
++ case INTERNAL_DESSERTAPPPARAMSTABLE_APPPARAMSVALUETYPE_OCTETSTRING:
++ *mib_appParamsValueType_val_ptr = DESSERTAPPVALUETYPE_OCTETSTRING;
++ break;
++
++ default:
++ snmp_log(LOG_ERR,
++ "couldn't map value %ld for appParamsValueType\n",
++ raw_appParamsValueType_val);
++ return MFD_ERROR;
++ }
++
++ return MFD_SUCCESS;
++} /* appParamsValueType_map */
++
++/**
++ * Extract the current value of the appParamsValueType data.
++ *
++ * Set a value using the data context for the row.
++ *
++ * @param rowreq_ctx
++ * Pointer to the row request context.
++ * @param appParamsValueType_val_ptr
++ * Pointer to storage for a long variable
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_SKIP : skip this node (no value for now)
++ * @retval MFD_ERROR : Any other error
++ */
++int
++appParamsValueType_get(dessertAppParamsTable_rowreq_ctx * rowreq_ctx,
++ u_long * appParamsValueType_val_ptr)
++{
++ /** we should have a non-NULL pointer */
++ netsnmp_assert(NULL != appParamsValueType_val_ptr);
++
++
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsValueType_get",
++ "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:231:o: |-> Extract the current value of the appParamsValueType data.
++ * copy (* appParamsValueType_val_ptr ) from rowreq_ctx->data
++ */
++ (*appParamsValueType_val_ptr) = rowreq_ctx->data.appParamsValueType;
++
++ return MFD_SUCCESS;
++} /* appParamsValueType_get */
++
++/*---------------------------------------------------------------------
++ * DESSERT-MIB::dessertAppParamsEntry.appParamsTruthValue
++ * appParamsTruthValue is subid 5 of dessertAppParamsEntry.
++ * Its status is Current, and its access level is ReadWrite.
++ * OID: .1.3.6.1.4.1.18898.0.19.10.1.1.11.1.5
++ * Description:
++A parameter with TruthValue semantics.
++ *
++ * Attributes:
++ * accessible 1 isscalar 0 enums 1 hasdefval 0
++ * readable 1 iscolumn 1 ranges 0 hashint 0
++ * settable 1
++ *
++ * Enum range: 2/8. Values: true(1), false(2)
++ *
++ * Its syntax is TruthValue (based on perltype INTEGER)
++ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
++ */
++/**
++ * map a value from its original native format to the MIB format.
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_ERROR : Any other error
++ *
++ * @note parameters follow the memset convention (dest, src).
++ *
++ * @note generation and use of this function can be turned off by re-running
++ * mib2c after adding the following line to the file
++ * defaults/node-appParamsTruthValue.m2d :
++ * @eval $m2c_node_skip_mapping = 1@
++ *
++ * @remark
++ * If the values for your data type don't exactly match the
++ * possible values defined by the mib, you should map them here.
++ * Otherwise, just do a direct copy.
++ */
++int
++appParamsTruthValue_map(u_long * mib_appParamsTruthValue_val_ptr,
++ u_long raw_appParamsTruthValue_val)
++{
++ netsnmp_assert(NULL != mib_appParamsTruthValue_val_ptr);
++
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsTruthValue_map",
++ "called\n"));
++
++ /*
++ * TODO:241:o: |-> Implement appParamsTruthValue enum mapping.
++ * uses INTERNAL_* macros defined in the header files
++ */
++ switch (raw_appParamsTruthValue_val) {
++ case INTERNAL_DESSERTAPPPARAMSTABLE_APPPARAMSTRUTHVALUE_TRUE:
++ *mib_appParamsTruthValue_val_ptr = TRUTHVALUE_TRUE;
++ break;
++
++ case INTERNAL_DESSERTAPPPARAMSTABLE_APPPARAMSTRUTHVALUE_FALSE:
++ *mib_appParamsTruthValue_val_ptr = TRUTHVALUE_FALSE;
++ break;
++
++ default:
++ snmp_log(LOG_ERR,
++ "couldn't map value %ld for appParamsTruthValue\n",
++ raw_appParamsTruthValue_val);
++ return MFD_ERROR;
++ }
++
++ return MFD_SUCCESS;
++} /* appParamsTruthValue_map */
++
++/**
++ * Extract the current value of the appParamsTruthValue data.
++ *
++ * Set a value using the data context for the row.
++ *
++ * @param rowreq_ctx
++ * Pointer to the row request context.
++ * @param appParamsTruthValue_val_ptr
++ * Pointer to storage for a long variable
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_SKIP : skip this node (no value for now)
++ * @retval MFD_ERROR : Any other error
++ */
++int
++appParamsTruthValue_get(dessertAppParamsTable_rowreq_ctx * rowreq_ctx,
++ u_long * appParamsTruthValue_val_ptr)
++{
++ /** we should have a non-NULL pointer */
++ netsnmp_assert(NULL != appParamsTruthValue_val_ptr);
++
++
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsTruthValue_get",
++ "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:231:o: |-> Extract the current value of the appParamsTruthValue data.
++ * copy (* appParamsTruthValue_val_ptr ) from rowreq_ctx->data
++ */
++ (*appParamsTruthValue_val_ptr) = rowreq_ctx->data.appParamsTruthValue;
++
++ return MFD_SUCCESS;
++} /* appParamsTruthValue_get */
++
++/*---------------------------------------------------------------------
++ * DESSERT-MIB::dessertAppParamsEntry.appParamsInteger32
++ * appParamsInteger32 is subid 6 of dessertAppParamsEntry.
++ * Its status is Current, and its access level is ReadWrite.
++ * OID: .1.3.6.1.4.1.18898.0.19.10.1.1.11.1.6
++ * Description:
++A parameter with Integer32 semantics.
++ *
++ * Attributes:
++ * accessible 1 isscalar 0 enums 0 hasdefval 0
++ * readable 1 iscolumn 1 ranges 0 hashint 0
++ * settable 1
++ *
++ *
++ * Its syntax is INTEGER32 (based on perltype INTEGER32)
++ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
++ */
++/**
++ * Extract the current value of the appParamsInteger32 data.
++ *
++ * Set a value using the data context for the row.
++ *
++ * @param rowreq_ctx
++ * Pointer to the row request context.
++ * @param appParamsInteger32_val_ptr
++ * Pointer to storage for a long variable
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_SKIP : skip this node (no value for now)
++ * @retval MFD_ERROR : Any other error
++ */
++int
++appParamsInteger32_get(dessertAppParamsTable_rowreq_ctx * rowreq_ctx,
++ long *appParamsInteger32_val_ptr)
++{
++ /** we should have a non-NULL pointer */
++ netsnmp_assert(NULL != appParamsInteger32_val_ptr);
++
++
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsInteger32_get",
++ "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:231:o: |-> Extract the current value of the appParamsInteger32 data.
++ * copy (* appParamsInteger32_val_ptr ) from rowreq_ctx->data
++ */
++ (*appParamsInteger32_val_ptr) = rowreq_ctx->data.appParamsInteger32;
++
++ return MFD_SUCCESS;
++} /* appParamsInteger32_get */
++
++/*---------------------------------------------------------------------
++ * DESSERT-MIB::dessertAppParamsEntry.appParamsUnsigned32
++ * appParamsUnsigned32 is subid 7 of dessertAppParamsEntry.
++ * Its status is Current, and its access level is ReadWrite.
++ * OID: .1.3.6.1.4.1.18898.0.19.10.1.1.11.1.7
++ * Description:
++A parameter with Unsigned32 semantics.
++ *
++ * Attributes:
++ * accessible 1 isscalar 0 enums 0 hasdefval 0
++ * readable 1 iscolumn 1 ranges 0 hashint 0
++ * settable 1
++ *
++ *
++ * Its syntax is UNSIGNED32 (based on perltype UNSIGNED32)
++ * The net-snmp type is ASN_UNSIGNED. The C type decl is u_long (u_long)
++ */
++/**
++ * Extract the current value of the appParamsUnsigned32 data.
++ *
++ * Set a value using the data context for the row.
++ *
++ * @param rowreq_ctx
++ * Pointer to the row request context.
++ * @param appParamsUnsigned32_val_ptr
++ * Pointer to storage for a u_long variable
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_SKIP : skip this node (no value for now)
++ * @retval MFD_ERROR : Any other error
++ */
++int
++appParamsUnsigned32_get(dessertAppParamsTable_rowreq_ctx * rowreq_ctx,
++ u_long * appParamsUnsigned32_val_ptr)
++{
++ /** we should have a non-NULL pointer */
++ netsnmp_assert(NULL != appParamsUnsigned32_val_ptr);
++
++
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsUnsigned32_get",
++ "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:231:o: |-> Extract the current value of the appParamsUnsigned32 data.
++ * copy (* appParamsUnsigned32_val_ptr ) from rowreq_ctx->data
++ */
++ (*appParamsUnsigned32_val_ptr) = rowreq_ctx->data.appParamsUnsigned32;
++
++ return MFD_SUCCESS;
++} /* appParamsUnsigned32_get */
++
++/*---------------------------------------------------------------------
++ * DESSERT-MIB::dessertAppParamsEntry.appParamsOctetString
++ * appParamsOctetString is subid 9 of dessertAppParamsEntry.
++ * Its status is Current, and its access level is ReadWrite.
++ * OID: .1.3.6.1.4.1.18898.0.19.10.1.1.11.1.9
++ * Description:
++A parameter containing of up to 1024 octets.
++ *
++ * Attributes:
++ * accessible 1 isscalar 0 enums 0 hasdefval 0
++ * readable 1 iscolumn 1 ranges 1 hashint 1
++ * settable 1
++ * hint: 1024a
++ *
++ * Ranges: 0 - 1024;
++ *
++ * Its syntax is DessertApplicationOctetString (based on perltype OCTETSTR)
++ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
++ * This data type requires a length. (Max 1024)
++ */
++/**
++ * Extract the current value of the appParamsOctetString data.
++ *
++ * Set a value using the data context for the row.
++ *
++ * @param rowreq_ctx
++ * Pointer to the row request context.
++ * @param appParamsOctetString_val_ptr_ptr
++ * Pointer to storage for a char variable
++ * @param appParamsOctetString_val_ptr_len_ptr
++ * Pointer to a size_t. On entry, it will contain the size (in bytes)
++ * pointed to by appParamsOctetString.
++ * On exit, this value should contain the data size (in bytes).
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_SKIP : skip this node (no value for now)
++ * @retval MFD_ERROR : Any other error
++*
++ * @note If you need more than (*appParamsOctetString_val_ptr_len_ptr) bytes of memory,
++ * allocate it using malloc() and update appParamsOctetString_val_ptr_ptr.
++ * <b>DO NOT</b> free the previous pointer.
++ * The MFD helper will release the memory you allocate.
++ *
++ * @remark If you call this function yourself, you are responsible
++ * for checking if the pointer changed, and freeing any
++ * previously allocated memory. (Not necessary if you pass
++ * in a pointer to static memory, obviously.)
++ */
++int
++appParamsOctetString_get(dessertAppParamsTable_rowreq_ctx * rowreq_ctx,
++ char **appParamsOctetString_val_ptr_ptr,
++ size_t *appParamsOctetString_val_ptr_len_ptr)
++{
++ /** we should have a non-NULL pointer and enough storage */
++ netsnmp_assert((NULL != appParamsOctetString_val_ptr_ptr)
++ && (NULL != *appParamsOctetString_val_ptr_ptr));
++ netsnmp_assert(NULL != appParamsOctetString_val_ptr_len_ptr);
++
++
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsOctetString_get",
++ "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:231:o: |-> Extract the current value of the appParamsOctetString data.
++ * copy (* appParamsOctetString_val_ptr_ptr ) data and (* appParamsOctetString_val_ptr_len_ptr ) from rowreq_ctx->data
++ */
++ /*
++ * make sure there is enough space for appParamsOctetString data
++ */
++ if ((NULL == (*appParamsOctetString_val_ptr_ptr)) ||
++ ((*appParamsOctetString_val_ptr_len_ptr) <
++ (rowreq_ctx->data.appParamsOctetString_len *
++ sizeof(rowreq_ctx->data.appParamsOctetString[0])))) {
++ /*
++ * allocate space for appParamsOctetString data
++ */
++ (*appParamsOctetString_val_ptr_ptr) =
++ malloc(rowreq_ctx->data.appParamsOctetString_len *
++ sizeof(rowreq_ctx->data.appParamsOctetString[0]));
++ if (NULL == (*appParamsOctetString_val_ptr_ptr)) {
++ snmp_log(LOG_ERR, "could not allocate memory\n");
++ return MFD_ERROR;
++ }
++ }
++ (*appParamsOctetString_val_ptr_len_ptr) =
++ rowreq_ctx->data.appParamsOctetString_len *
++ sizeof(rowreq_ctx->data.appParamsOctetString[0]);
++ memcpy((*appParamsOctetString_val_ptr_ptr),
++ rowreq_ctx->data.appParamsOctetString,
++ rowreq_ctx->data.appParamsOctetString_len *
++ sizeof(rowreq_ctx->data.appParamsOctetString[0]));
++
++ return MFD_SUCCESS;
++} /* appParamsOctetString_get */
++
++
++
++/** @} */
+Index: libdessert0.86-0.86.14/src/snmp/dessertAppParamsTable_data_get.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertAppParamsTable_data_get.h 2009-12-09 16:38:27.316005903 +0100
+@@ -0,0 +1,136 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * version : 12088 $ of $
++ *
++ * $Id:$
++ *
++ * @file dessertAppParamsTable_data_get.h
++ *
++ * @addtogroup get
++ *
++ * Prototypes for get functions
++ *
++ * @{
++ */
++#ifndef DESSERTAPPPARAMSTABLE_DATA_GET_H
++#define DESSERTAPPPARAMSTABLE_DATA_GET_H
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++ /*
++ *********************************************************************
++ * GET function declarations
++ */
++
++ /*
++ *********************************************************************
++ * GET Table declarations
++ */
++/**********************************************************************
++ **********************************************************************
++ ***
++ *** Table dessertAppParamsTable
++ ***
++ **********************************************************************
++ **********************************************************************/
++ /*
++ * DESSERT-MIB::dessertAppParamsTable is subid 11 of dessertObjects.
++ * Its status is Current.
++ * OID: .1.3.6.1.4.1.18898.0.19.10.1.1.11, length: 13
++ */
++ /*
++ * indexes
++ */
++ int appParamsIndex_map(long *mib_appParamsIndex_val_ptr,
++ long raw_appParamsIndex_val);
++
++ int appParamsName_map(char **mib_appParamsName_val_ptr_ptr,
++ size_t
++ *mib_appParamsName_val_ptr_len_ptr,
++ char *raw_appParamsName_val_ptr,
++ size_t raw_appParamsName_val_ptr_len,
++ int allow_realloc);
++ int appParamsName_get(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx,
++ char **appParamsName_val_ptr_ptr,
++ size_t
++ *appParamsName_val_ptr_len_ptr);
++ int appParamsDesc_map(char **mib_appParamsDesc_val_ptr_ptr,
++ size_t
++ *mib_appParamsDesc_val_ptr_len_ptr,
++ char *raw_appParamsDesc_val_ptr,
++ size_t raw_appParamsDesc_val_ptr_len,
++ int allow_realloc);
++ int appParamsDesc_get(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx,
++ char **appParamsDesc_val_ptr_ptr,
++ size_t
++ *appParamsDesc_val_ptr_len_ptr);
++ int appParamsValueType_map(u_long *
++ mib_appParamsValueType_val_ptr,
++ u_long
++ raw_appParamsValueType_val);
++ int appParamsValueType_get(dessertAppParamsTable_rowreq_ctx
++ * rowreq_ctx,
++ u_long *
++ appParamsValueType_val_ptr);
++ int appParamsTruthValue_map(u_long *
++ mib_appParamsTruthValue_val_ptr,
++ u_long
++ raw_appParamsTruthValue_val);
++ int
++ appParamsTruthValue_get(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx,
++ u_long * appParamsTruthValue_val_ptr);
++ int appParamsInteger32_map(long
++ *mib_appParamsInteger32_val_ptr,
++ long
++ raw_appParamsInteger32_val);
++ int appParamsInteger32_get(dessertAppParamsTable_rowreq_ctx
++ * rowreq_ctx,
++ long
++ *appParamsInteger32_val_ptr);
++ int appParamsUnsigned32_map(u_long *
++ mib_appParamsUnsigned32_val_ptr,
++ u_long
++ raw_appParamsUnsigned32_val);
++ int
++ appParamsUnsigned32_get(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx,
++ u_long * appParamsUnsigned32_val_ptr);
++ int appParamsOctetString_map(char
++ **mib_appParamsOctetString_val_ptr_ptr,
++ size_t
++ *mib_appParamsOctetString_val_ptr_len_ptr,
++ char
++ *raw_appParamsOctetString_val_ptr,
++ size_t
++ raw_appParamsOctetString_val_ptr_len,
++ int allow_realloc);
++ int
++ appParamsOctetString_get(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx,
++ char **appParamsOctetString_val_ptr_ptr,
++ size_t
++ *appParamsOctetString_val_ptr_len_ptr);
++
++
++ int
++ dessertAppParamsTable_indexes_set_tbl_idx
++ (dessertAppParamsTable_mib_index * tbl_idx,
++ long appParamsIndex_val);
++ int
++ dessertAppParamsTable_indexes_set(dessertAppParamsTable_rowreq_ctx
++ * rowreq_ctx,
++ long appParamsIndex_val);
++
++
++
++
++#ifdef __cplusplus
++}
++#endif
++#endif /* DESSERTAPPPARAMSTABLE_DATA_GET_H */
++/** @} */
+Index: libdessert0.86-0.86.14/src/snmp/dessertAppParamsTable_data_set.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertAppParamsTable_data_set.c 2009-12-09 16:38:27.316005903 +0100
+@@ -0,0 +1,1241 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * version : 12077 $ of $
++ *
++ * $Id:$
++ *
++ */
++/*
++ * standard Net-SNMP includes
++ */
++#include <net-snmp/net-snmp-config.h>
++#include <net-snmp/net-snmp-includes.h>
++#include <net-snmp/agent/net-snmp-agent-includes.h>
++
++/*
++ * include our parent header
++ */
++#include "dessertAppParamsTable.h"
++#include "dessertAppParamsTable_enums.h"
++#include "dessert_internal.h"
++
++
++/** @defgroup data_set data_set: Routines to set data
++ *
++ * These routines are used to set the value for individual objects. The
++ * row context is passed, along with the new value.
++ *
++ * @{
++ */
++/**********************************************************************
++ **********************************************************************
++ ***
++ *** Table dessertAppParamsTable
++ ***
++ **********************************************************************
++ **********************************************************************/
++/*
++ * DESSERT-MIB::dessertAppParamsTable is subid 11 of dessertObjects.
++ * Its status is Current.
++ * OID: .1.3.6.1.4.1.18898.0.19.10.1.1.11, length: 13
++ */
++ /*
++ * NOTE: if you update this chart, please update the versions in
++ * local/mib2c-conf.d/parent-set.m2i
++ * agent/mibgroup/helpers/baby_steps.c
++ * while you're at it.
++ */
++ /*
++ ***********************************************************************
++ * Baby Steps Flow Chart (2004.06.05) *
++ * *
++ * +--------------+ +================+ U = unconditional path *
++ * |optional state| ||required state|| S = path for success *
++ * +--------------+ +================+ E = path for error *
++ ***********************************************************************
++ *
++ * +--------------+
++ * | pre |
++ * | request |
++ * +--------------+
++ * | U
++ * +==============+
++ * +----------------|| object ||
++ * | E || lookup ||
++ * | +==============+
++ * | | S
++ * | +==============+
++ * | E || check ||
++ * |<---------------|| values ||
++ * | +==============+
++ * | | S
++ * | +==============+
++ * | +<-------|| undo ||
++ * | | E || setup ||
++ * | | +==============+
++ * | | | S
++ * | | +==============+
++ * | | || set ||-------------------------->+
++ * | | || value || E |
++ * | | +==============+ |
++ * | | | S |
++ * | | +--------------+ |
++ * | | | check |-------------------------->|
++ * | | | consistency | E |
++ * | | +--------------+ |
++ * | | | S |
++ * | | +==============+ +==============+ |
++ * | | || commit ||-------->|| undo || |
++ * | | || || E || commit || |
++ * | | +==============+ +==============+ |
++ * | | | S U |<--------+
++ * | | +--------------+ +==============+
++ * | | | irreversible | || undo ||
++ * | | | commit | || set ||
++ * | | +--------------+ +==============+
++ * | | | U U |
++ * | +-------------->|<------------------------+
++ * | +==============+
++ * | || undo ||
++ * | || cleanup ||
++ * | +==============+
++ * +---------------------->| U
++ * +--------------+
++ * | post |
++ * | request |
++ * +--------------+
++ *
++ */
++
++/**
++ * Setup up context with information needed to undo a set request.
++ *
++ * This function will be called before the individual node undo setup
++ * functions are called. If you need to do any undo setup that is not
++ * related to a specific column, you can do it here.
++ *
++ * Note that the undo context has been allocated with
++ * dessertAppParamsTable_allocate_data(), but may need extra
++ * initialization similar to what you may have done in
++ * dessertAppParamsTable_rowreq_ctx_init().
++ * Note that an individual node's undo_setup function will only be called
++ * if that node is being set to a new value.
++ *
++ * If there is any setup specific to a particular column (e.g. allocating
++ * memory for a string), you should do that setup in the node's undo_setup
++ * function, so it won't be done unless it is necessary.
++ *
++ * @param rowreq_ctx
++ * Pointer to the table context (dessertAppParamsTable_rowreq_ctx)
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_ERROR : error. set will fail.
++ */
++int
++dessertAppParamsTable_undo_setup(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx)
++{
++ int rc = MFD_SUCCESS;
++
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:dessertAppParamsTable_undo_setup", "called\n"));
++
++ /** we should have a non-NULL pointer */
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:451:M: |-> Setup dessertAppParamsTable undo.
++ * set up dessertAppParamsTable undo information, in preparation for a set.
++ * Undo storage is in (* appParamsOctetString_val_ptr_ptr )*
++ */
++
++ return rc;
++} /* dessertAppParamsTable_undo_setup */
++
++/**
++ * Undo a set request.
++ *
++ * This function will be called before the individual node undo
++ * functions are called. If you need to do any undo that is not
++ * related to a specific column, you can do it here.
++ *
++ * Note that an individual node's undo function will only be called
++ * if that node is being set to a new value.
++ *
++ * If there is anything specific to a particular column (e.g. releasing
++ * memory for a string), you should do that setup in the node's undo
++ * function, so it won't be done unless it is necessary.
++ *
++ * @param rowreq_ctx
++ * Pointer to the table context (dessertAppParamsTable_rowreq_ctx)
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_ERROR : error. set will fail.
++ */
++int
++dessertAppParamsTable_undo(dessertAppParamsTable_rowreq_ctx * rowreq_ctx)
++{
++ int rc = MFD_SUCCESS;
++
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:dessertAppParamsTable_undo",
++ "called\n"));
++
++ /** we should have a non-NULL pointer */
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:451:M: |-> dessertAppParamsTable undo.
++ * dessertAppParamsTable undo information, in response to a failed set.
++ * Undo storage is in (* appParamsOctetString_val_ptr_ptr )*
++ */
++
++ return rc;
++} /* dessertAppParamsTable_undo_setup */
++
++/**
++ * Cleanup up context undo information.
++ *
++ * This function will be called after set/commit processing. If you
++ * allocated any resources in undo_setup, this is the place to release
++ * those resources.
++ *
++ * This function is called regardless of the success or failure of the set
++ * request. If you need to perform different steps for cleanup depending
++ * on success or failure, you can add a flag to the rowreq_ctx.
++ *
++ * @param rowreq_ctx
++ * Pointer to the table context (dessertAppParamsTable_rowreq_ctx)
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_ERROR : error
++ */
++int
++dessertAppParamsTable_undo_cleanup(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx)
++{
++ int rc = MFD_SUCCESS;
++
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:dessertAppParamsTable_undo_cleanup", "called\n"));
++
++ /** we should have a non-NULL pointer */
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:452:M: |-> Cleanup dessertAppParamsTable undo.
++ * Undo storage is in (* appParamsOctetString_val_ptr_ptr )*
++ */
++
++ return rc;
++} /* dessertAppParamsTable_undo_cleanup */
++
++/**
++ * commit new values.
++ *
++ * At this point, you should have done everything you can to ensure that
++ * this commit will not fail.
++ *
++ * Should you need different behavior depending on which columns were
++ * set, rowreq_ctx->column_set_flags will indicate which writeable columns were
++ * set. The definitions for the COLUMN_*_FLAG bits can be found in
++ * dessertAppParamsTable_oids.h.
++ * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags.
++ *
++ * @param dessertAppParamsTable_rowreq_ctx
++ * Pointer to the users context.
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_ERROR : error
++ */
++int
++dessertAppParamsTable_commit(dessertAppParamsTable_rowreq_ctx * rowreq_ctx)
++{
++ int rc = MFD_SUCCESS;
++ int save_flags;
++ dessert_agentx_appparams_t *appparam;
++ dessert_agentx_appparamscb_set_t *set;
++
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:dessertAppParamsTable_commit", "called\n"));
++
++ /** we should have a non-NULL pointer */
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ set = _dessert_agentx_appparams_getsettercbforindex(rowreq_ctx->tbl_idx.appParamsIndex);
++
++ if (set == NULL) {
++ snmp_log(
++ LOG_ERR,
++ "dessertAppParamsTable commit failed, no setter for index %ld!\n",
++ rowreq_ctx->tbl_idx.appParamsIndex);
++ return MFD_ERROR;
++ }
++
++ /*
++ * save flags, then clear until we actually do something
++ */
++ save_flags = rowreq_ctx->column_set_flags;
++ rowreq_ctx->column_set_flags = 0;
++
++ appparam = malloc(sizeof(dessert_agentx_appparams_t));
++
++ appparam->index = rowreq_ctx->tbl_idx.appParamsIndex;
++ appparam->value_type = rowreq_ctx->data.appParamsValueType;
++
++ dessert_debug("commit\n"
++ "\n\t\trowreq_ctx->tbl_idx \t[%u]"
++ "\n\t\trowreq_ctx->data.appParamsValueType \t[%u]"
++ "\n\t\trowreq_ctx->data.appParamsTruthValue \t[%u]"
++ "\n\t\trowreq_ctx->data.appParamsInteger32 \t[%d]"
++ "\n\t\trowreq_ctx->data.appParamsUnsigned32 \t[%u]"
++ "\n\t\trowreq_ctx->data.appParamsOctetString_len \t[%u]"
++
++ "\n",rowreq_ctx->tbl_idx,
++ rowreq_ctx->data.appParamsValueType,
++ rowreq_ctx->data.appParamsTruthValue,
++ rowreq_ctx->data.appParamsInteger32,
++ rowreq_ctx->data.appParamsUnsigned32,
++ rowreq_ctx->data.appParamsOctetString_len
++ );
++
++ /*
++ * commit dessertAppParamsTable data
++ * 1) check the column's flag in save_flags to see if it was set.
++ * 2) clear the flag when you handle that column
++ * 3) set the column's flag in column_set_flags if it needs undo
++ * processing in case of a failure.
++ */
++ if (save_flags & COLUMN_APPPARAMSTRUTHVALUE_FLAG) {
++ /* clear appParamsTruthValue */
++ save_flags &= ~COLUMN_APPPARAMSTRUTHVALUE_FLAG;
++ /*
++ * commit column appParamsTruthValue.
++ */
++
++ appparam->bool = rowreq_ctx->data.appParamsTruthValue;
++
++ rc = set(appparam);
++ if (DESSERT_ERR == rc) {
++ snmp_log(LOG_ERR,
++ "dessertAppParamsTable column appParamsTruthValue commit failed\n");
++ } else {
++ /*
++ * set flag, in case we need to undo appParamsTruthValue
++ */
++ rowreq_ctx->column_set_flags |=
++ COLUMN_APPPARAMSTRUTHVALUE_FLAG;
++ }
++ }
++
++ if (save_flags & COLUMN_APPPARAMSINTEGER32_FLAG) {
++ /* clear appParamsInteger32 */
++ save_flags &= ~COLUMN_APPPARAMSINTEGER32_FLAG;
++ /*
++ * commit column appParamsInteger32.
++ */
++
++ appparam->int32 = rowreq_ctx->data.appParamsInteger32;
++
++ rc = set(appparam);
++ if (DESSERT_ERR == rc) {
++ snmp_log(LOG_ERR,
++ "dessertAppParamsTable column appParamsInteger32 commit failed\n");
++ } else {
++ /*
++ * set flag, in case we need to undo appParamsInteger32
++ */
++ rowreq_ctx->column_set_flags |= COLUMN_APPPARAMSINTEGER32_FLAG;
++ }
++ }
++
++ if (save_flags & COLUMN_APPPARAMSUNSIGNED32_FLAG) {
++ /* clear appParamsUnsigned32 */
++ save_flags &= ~COLUMN_APPPARAMSUNSIGNED32_FLAG;
++ /*
++ * commit column appParamsUnsigned32.
++ */
++
++ appparam->uint32 = rowreq_ctx->data.appParamsUnsigned32;
++
++ rc = set(appparam);
++ if (DESSERT_ERR == rc) {
++ snmp_log(LOG_ERR,
++ "dessertAppParamsTable column appParamsUnsigned32 commit failed\n");
++ } else {
++ /*
++ * set flag, in case we need to undo appParamsUnsigned32
++ */
++ rowreq_ctx->column_set_flags |=
++ COLUMN_APPPARAMSUNSIGNED32_FLAG;
++ }
++ }
++
++ if (save_flags & COLUMN_APPPARAMSOCTETSTRING_FLAG) {
++ /* clear appParamsOctetString */
++ save_flags &= ~COLUMN_APPPARAMSOCTETSTRING_FLAG;
++ /*
++ * TODO:482:o: |-> commit column appParamsOctetString.
++ */
++
++ appparam->octetstring_len = rowreq_ctx->data.appParamsOctetString_len;
++ appparam->octetstring = malloc(sizeof(char) * appparam->octetstring_len);
++ memcpy(appparam->octetstring, rowreq_ctx->data.appParamsOctetString, rowreq_ctx->data.appParamsOctetString_len * sizeof(rowreq_ctx->data.appParamsOctetString[0]));
++
++ rc = set(appparam);
++ if (DESSERT_ERR == rc) {
++ snmp_log(LOG_ERR,
++ "dessertAppParamsTable column appParamsOctetString commit failed\n");
++ } else {
++ /*
++ * set flag, in case we need to undo appParamsOctetString
++ */
++ dessert_debug("dessertAppParamsTable column appParamsOctetString commited");
++ rowreq_ctx->column_set_flags |=
++ COLUMN_APPPARAMSOCTETSTRING_FLAG;
++ }
++ }
++
++ if (rc == DESSERT_ERR) rc = -1; else {rc = MFD_SUCCESS;}
++
++ /*
++ * if we successfully committed this row, set the dirty flag.
++ */
++ if (MFD_SUCCESS == rc) {
++ rowreq_ctx->rowreq_flags |= MFD_ROW_DIRTY;
++ }
++
++ if (save_flags) {
++ snmp_log(LOG_ERR, "unhandled columns (0x%x) in commit\n",
++ save_flags);
++ return MFD_ERROR;
++ }
++
++ _dessert_agentx_appparams_free(appparam);
++
++ return rc;
++} /* dessertAppParamsTable_commit */
++
++/**
++ * undo commit new values.
++ *
++ * Should you need different behavior depending on which columns were
++ * set, rowreq_ctx->column_set_flags will indicate which writeable columns were
++ * set. The definitions for the COLUMN_*_FLAG bits can be found in
++ * dessertAppParamsTable_oids.h.
++ * A new row will have the MFD_ROW_CREATED bit set in rowreq_flags.
++ *
++ * @param dessertAppParamsTable_rowreq_ctx
++ * Pointer to the users context.
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_ERROR : error
++ */
++int
++dessertAppParamsTable_undo_commit(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx)
++{
++ int rc = MFD_SUCCESS;
++
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:dessertAppParamsTable_undo_commit", "called\n"));
++
++ /** we should have a non-NULL pointer */
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:485:M: |-> Undo dessertAppParamsTable commit.
++ * check the column's flag in rowreq_ctx->column_set_flags to see
++ * if it was set during commit, then undo it.
++ *
++ * eg: if (rowreq_ctx->column_set_flags & COLUMN__FLAG) {}
++ */
++
++
++ /*
++ * if we successfully un-commited this row, clear the dirty flag.
++ */
++ if (MFD_SUCCESS == rc) {
++ rowreq_ctx->rowreq_flags &= ~MFD_ROW_DIRTY;
++ }
++
++ return rc;
++} /* dessertAppParamsTable_undo_commit */
++
++/*
++ * TODO:440:M: Implement dessertAppParamsTable node value checks.
++ * TODO:450:M: Implement dessertAppParamsTable undo functions.
++ * TODO:460:M: Implement dessertAppParamsTable set functions.
++ * TODO:480:M: Implement dessertAppParamsTable commit functions.
++ */
++/*---------------------------------------------------------------------
++ * DESSERT-MIB::dessertAppParamsEntry.appParamsTruthValue
++ * appParamsTruthValue is subid 5 of dessertAppParamsEntry.
++ * Its status is Current, and its access level is ReadWrite.
++ * OID: .1.3.6.1.4.1.18898.0.19.10.1.1.11.1.5
++ * Description:
++A parameter with TruthValue semantics.
++ *
++ * Attributes:
++ * accessible 1 isscalar 0 enums 1 hasdefval 0
++ * readable 1 iscolumn 1 ranges 0 hashint 0
++ * settable 1
++ *
++ * Enum range: 2/8. Values: true(1), false(2)
++ *
++ * Its syntax is TruthValue (based on perltype INTEGER)
++ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
++ */
++/**
++ * Check that the proposed new value is potentially valid.
++ *
++ * @param rowreq_ctx
++ * Pointer to the row request context.
++ * @param appParamsTruthValue_val
++ * A long containing the new value.
++ *
++ * @retval MFD_SUCCESS : incoming value is legal
++ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
++ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
++ *
++ * This is the place to check for requirements that are not
++ * expressed in the mib syntax (for example, a requirement that
++ * is detailed in the description for an object).
++ *
++ * You should check that the requested change between the undo value and the
++ * new value is legal (ie, the transistion from one value to another
++ * is legal).
++ *
++ *@note
++ * This check is only to determine if the new value
++ * is \b potentially valid. This is the first check of many, and
++ * is one of the simplest ones.
++ *
++ *@note
++ * this is not the place to do any checks for values
++ * which depend on some other value in the mib. Those
++ * types of checks should be done in the
++ * dessertAppParamsTable_check_dependencies() function.
++ *
++ * The following checks have already been done for you:
++ * The syntax is ASN_INTEGER
++ * The value is one of true(1), false(2)
++ *
++ * If there a no other checks you need to do, simply return MFD_SUCCESS.
++ *
++ */
++int
++appParamsTruthValue_check_value(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx, u_long appParamsTruthValue_val)
++{
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsTruthValue_check_value", "called\n"));
++
++ /** should never get a NULL pointer */
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * Check for valid appParamsTruthValue value.
++ */
++
++ if (rowreq_ctx->data.appParamsValueType != DESSERT_APPPARAMS_VALUETYPE_BOOL) {
++
++ return MFD_NOT_VALID_EVER;
++ } else {
++
++ return MFD_SUCCESS; /* appParamsTruthValue value not illegal */
++ }
++} /* appParamsTruthValue_check_value */
++
++/**
++ * Save old value information
++ *
++ * @param rowreq_ctx
++ * Pointer to the table context (dessertAppParamsTable_rowreq_ctx)
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_ERROR : error. set will fail.
++ *
++ * This function will be called after the table level undo setup function
++ * dessertAppParamsTable_undo_setup has been called.
++ *
++ *@note
++ * this function will only be called if a new value is set for this column.
++ *
++ * If there is any setup specific to a particular column (e.g. allocating
++ * memory for a string), you should do that setup in this function, so it
++ * won't be done unless it is necessary.
++ */
++int
++appParamsTruthValue_undo_setup(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx)
++{
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsTruthValue_undo_setup", "called\n"));
++
++ /** should never get a NULL pointer */
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:455:o: |-> Setup appParamsTruthValue undo.
++ */
++ /*
++ * copy appParamsTruthValue data
++ * set rowreq_ctx->undo->appParamsTruthValue from rowreq_ctx->data.appParamsTruthValue
++ */
++ rowreq_ctx->undo->appParamsTruthValue =
++ rowreq_ctx->data.appParamsTruthValue;
++
++
++ return MFD_SUCCESS;
++} /* appParamsTruthValue_undo_setup */
++
++/**
++ * Set the new value.
++ *
++ * @param rowreq_ctx
++ * Pointer to the users context. You should know how to
++ * manipulate the value from this object.
++ * @param appParamsTruthValue_val
++ * A long containing the new value.
++ */
++int
++appParamsTruthValue_set(dessertAppParamsTable_rowreq_ctx * rowreq_ctx,
++ u_long appParamsTruthValue_val)
++{
++
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsTruthValue_set",
++ "called\n"));
++
++ /** should never get a NULL pointer */
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:245:o: |-> Implement appParamsTruthValue reverse mapping.
++ * If the values for your data type don't exactly match the
++ * possible values defined by the mib, you should map them here.
++ */
++ /*
++ ***************************************************
++ *** START EXAMPLE CODE ***
++ ***---------------------------------------------***/
++ switch (appParamsTruthValue_val) {
++ case TRUTHVALUE_TRUE:
++ rowreq_ctx->data.appParamsTruthValue =
++ INTERNAL_DESSERTAPPPARAMSTABLE_APPPARAMSTRUTHVALUE_TRUE;
++ break;
++
++ case TRUTHVALUE_FALSE:
++ rowreq_ctx->data.appParamsTruthValue =
++ INTERNAL_DESSERTAPPPARAMSTABLE_APPPARAMSTRUTHVALUE_FALSE;
++ break;
++
++ default:
++ snmp_log(LOG_ERR,
++ "couldn't reverse map value %ld for appParamsTruthValue\n",
++ appParamsTruthValue_val);
++ return SNMP_ERR_GENERR;
++ }
++ /*
++ ***---------------------------------------------***
++ *** END EXAMPLE CODE ***
++ ***************************************************/
++
++ return MFD_SUCCESS;
++} /* appParamsTruthValue_set */
++
++/**
++ * undo the previous set.
++ *
++ * @param rowreq_ctx
++ * Pointer to the users context.
++ */
++int
++appParamsTruthValue_undo(dessertAppParamsTable_rowreq_ctx * rowreq_ctx)
++{
++
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsTruthValue_undo",
++ "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:456:o: |-> Clean up appParamsTruthValue undo.
++ */
++ /*
++ * copy appParamsTruthValue data
++ * set rowreq_ctx->data.appParamsTruthValue from rowreq_ctx->undo->appParamsTruthValue
++ */
++ rowreq_ctx->data.appParamsTruthValue =
++ rowreq_ctx->undo->appParamsTruthValue;
++
++
++ return MFD_SUCCESS;
++} /* appParamsTruthValue_undo */
++
++/*---------------------------------------------------------------------
++ * DESSERT-MIB::dessertAppParamsEntry.appParamsInteger32
++ * appParamsInteger32 is subid 6 of dessertAppParamsEntry.
++ * Its status is Current, and its access level is ReadWrite.
++ * OID: .1.3.6.1.4.1.18898.0.19.10.1.1.11.1.6
++ * Description:
++A parameter with Integer32 semantics.
++ *
++ * Attributes:
++ * accessible 1 isscalar 0 enums 0 hasdefval 0
++ * readable 1 iscolumn 1 ranges 0 hashint 0
++ * settable 1
++ *
++ *
++ * Its syntax is INTEGER32 (based on perltype INTEGER32)
++ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
++ */
++/**
++ * Check that the proposed new value is potentially valid.
++ *
++ * @param rowreq_ctx
++ * Pointer to the row request context.
++ * @param appParamsInteger32_val
++ * A long containing the new value.
++ *
++ * @retval MFD_SUCCESS : incoming value is legal
++ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
++ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
++ *
++ * This is the place to check for requirements that are not
++ * expressed in the mib syntax (for example, a requirement that
++ * is detailed in the description for an object).
++ *
++ * You should check that the requested change between the undo value and the
++ * new value is legal (ie, the transistion from one value to another
++ * is legal).
++ *
++ *@note
++ * This check is only to determine if the new value
++ * is \b potentially valid. This is the first check of many, and
++ * is one of the simplest ones.
++ *
++ *@note
++ * this is not the place to do any checks for values
++ * which depend on some other value in the mib. Those
++ * types of checks should be done in the
++ * dessertAppParamsTable_check_dependencies() function.
++ *
++ * The following checks have already been done for you:
++ * The syntax is ASN_INTEGER
++ *
++ * If there a no other checks you need to do, simply return MFD_SUCCESS.
++ *
++ */
++int
++appParamsInteger32_check_value(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx, long appParamsInteger32_val)
++{
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsInteger32_check_value", "called\n"));
++
++ /** should never get a NULL pointer */
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * Check for valid appParamsInteger32 value.
++ */
++
++ dessert_debug("check_value\n\t\trowreq_ctx->data.appParamsValueType [%d]",rowreq_ctx->data.appParamsValueType);
++ if (rowreq_ctx->data.appParamsValueType != DESSERT_APPPARAMS_VALUETYPE_INT32) {
++
++ return MFD_NOT_VALID_EVER;
++ } else {
++
++ return MFD_SUCCESS; /* appParamsInteger32 value not illegal */
++ }
++} /* appParamsInteger32_check_value */
++
++/**
++ * Save old value information
++ *
++ * @param rowreq_ctx
++ * Pointer to the table context (dessertAppParamsTable_rowreq_ctx)
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_ERROR : error. set will fail.
++ *
++ * This function will be called after the table level undo setup function
++ * dessertAppParamsTable_undo_setup has been called.
++ *
++ *@note
++ * this function will only be called if a new value is set for this column.
++ *
++ * If there is any setup specific to a particular column (e.g. allocating
++ * memory for a string), you should do that setup in this function, so it
++ * won't be done unless it is necessary.
++ */
++int
++appParamsInteger32_undo_setup(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx)
++{
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsInteger32_undo_setup", "called\n"));
++
++ /** should never get a NULL pointer */
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:455:o: |-> Setup appParamsInteger32 undo.
++ */
++ /*
++ * copy appParamsInteger32 data
++ * set rowreq_ctx->undo->appParamsInteger32 from rowreq_ctx->data.appParamsInteger32
++ */
++ rowreq_ctx->undo->appParamsInteger32 =
++ rowreq_ctx->data.appParamsInteger32;
++
++
++ return MFD_SUCCESS;
++} /* appParamsInteger32_undo_setup */
++
++/**
++ * Set the new value.
++ *
++ * @param rowreq_ctx
++ * Pointer to the users context. You should know how to
++ * manipulate the value from this object.
++ * @param appParamsInteger32_val
++ * A long containing the new value.
++ */
++int
++appParamsInteger32_set(dessertAppParamsTable_rowreq_ctx * rowreq_ctx,
++ long appParamsInteger32_val)
++{
++
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsInteger32_set",
++ "called\n"));
++
++ /** should never get a NULL pointer */
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:245:o: |-> Implement appParamsInteger32 reverse mapping.
++ * If the values for your data type don't exactly match the
++ * possible values defined by the mib, you should map them here.
++ */
++ /*
++ * TODO:461:M: |-> Set appParamsInteger32 value.
++ * set appParamsInteger32 value in rowreq_ctx->data
++ */
++ rowreq_ctx->data.appParamsInteger32 = appParamsInteger32_val;
++
++
++ return MFD_SUCCESS;
++} /* appParamsInteger32_set */
++
++/**
++ * undo the previous set.
++ *
++ * @param rowreq_ctx
++ * Pointer to the users context.
++ */
++int
++appParamsInteger32_undo(dessertAppParamsTable_rowreq_ctx * rowreq_ctx)
++{
++
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsInteger32_undo",
++ "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:456:o: |-> Clean up appParamsInteger32 undo.
++ */
++ /*
++ * copy appParamsInteger32 data
++ * set rowreq_ctx->data.appParamsInteger32 from rowreq_ctx->undo->appParamsInteger32
++ */
++ rowreq_ctx->data.appParamsInteger32 =
++ rowreq_ctx->undo->appParamsInteger32;
++
++
++ return MFD_SUCCESS;
++} /* appParamsInteger32_undo */
++
++/*---------------------------------------------------------------------
++ * DESSERT-MIB::dessertAppParamsEntry.appParamsUnsigned32
++ * appParamsUnsigned32 is subid 7 of dessertAppParamsEntry.
++ * Its status is Current, and its access level is ReadWrite.
++ * OID: .1.3.6.1.4.1.18898.0.19.10.1.1.11.1.7
++ * Description:
++A parameter with Unsigned32 semantics.
++ *
++ * Attributes:
++ * accessible 1 isscalar 0 enums 0 hasdefval 0
++ * readable 1 iscolumn 1 ranges 0 hashint 0
++ * settable 1
++ *
++ *
++ * Its syntax is UNSIGNED32 (based on perltype UNSIGNED32)
++ * The net-snmp type is ASN_UNSIGNED. The C type decl is u_long (u_long)
++ */
++/**
++ * Check that the proposed new value is potentially valid.
++ *
++ * @param rowreq_ctx
++ * Pointer to the row request context.
++ * @param appParamsUnsigned32_val
++ * A u_long containing the new value.
++ *
++ * @retval MFD_SUCCESS : incoming value is legal
++ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
++ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
++ *
++ * This is the place to check for requirements that are not
++ * expressed in the mib syntax (for example, a requirement that
++ * is detailed in the description for an object).
++ *
++ * You should check that the requested change between the undo value and the
++ * new value is legal (ie, the transistion from one value to another
++ * is legal).
++ *
++ *@note
++ * This check is only to determine if the new value
++ * is \b potentially valid. This is the first check of many, and
++ * is one of the simplest ones.
++ *
++ *@note
++ * this is not the place to do any checks for values
++ * which depend on some other value in the mib. Those
++ * types of checks should be done in the
++ * dessertAppParamsTable_check_dependencies() function.
++ *
++ * The following checks have already been done for you:
++ * The syntax is ASN_UNSIGNED
++ *
++ * If there a no other checks you need to do, simply return MFD_SUCCESS.
++ *
++ */
++int
++appParamsUnsigned32_check_value(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx, u_long appParamsUnsigned32_val)
++{
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsUnsigned32_check_value", "called\n"));
++
++ /** should never get a NULL pointer */
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:441:o: |-> Check for valid appParamsUnsigned32 value.
++ */
++ if (rowreq_ctx->data.appParamsValueType != DESSERT_APPPARAMS_VALUETYPE_UINT32) {
++
++ return MFD_NOT_VALID_EVER;
++ } else {
++
++ return MFD_SUCCESS; /* appParamsUnsigned32 value not illegal */
++ }
++} /* appParamsUnsigned32_check_value */
++
++/**
++ * Save old value information
++ *
++ * @param rowreq_ctx
++ * Pointer to the table context (dessertAppParamsTable_rowreq_ctx)
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_ERROR : error. set will fail.
++ *
++ * This function will be called after the table level undo setup function
++ * dessertAppParamsTable_undo_setup has been called.
++ *
++ *@note
++ * this function will only be called if a new value is set for this column.
++ *
++ * If there is any setup specific to a particular column (e.g. allocating
++ * memory for a string), you should do that setup in this function, so it
++ * won't be done unless it is necessary.
++ */
++int
++appParamsUnsigned32_undo_setup(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx)
++{
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsUnsigned32_undo_setup", "called\n"));
++
++ /** should never get a NULL pointer */
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:455:o: |-> Setup appParamsUnsigned32 undo.
++ */
++ /*
++ * copy appParamsUnsigned32 data
++ * set rowreq_ctx->undo->appParamsUnsigned32 from rowreq_ctx->data.appParamsUnsigned32
++ */
++ rowreq_ctx->undo->appParamsUnsigned32 =
++ rowreq_ctx->data.appParamsUnsigned32;
++
++
++ return MFD_SUCCESS;
++} /* appParamsUnsigned32_undo_setup */
++
++/**
++ * Set the new value.
++ *
++ * @param rowreq_ctx
++ * Pointer to the users context. You should know how to
++ * manipulate the value from this object.
++ * @param appParamsUnsigned32_val
++ * A u_long containing the new value.
++ */
++int
++appParamsUnsigned32_set(dessertAppParamsTable_rowreq_ctx * rowreq_ctx,
++ u_long appParamsUnsigned32_val)
++{
++
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsUnsigned32_set",
++ "called\n"));
++
++ /** should never get a NULL pointer */
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:245:o: |-> Implement appParamsUnsigned32 reverse mapping.
++ * If the values for your data type don't exactly match the
++ * possible values defined by the mib, you should map them here.
++ */
++ /*
++ * TODO:461:M: |-> Set appParamsUnsigned32 value.
++ * set appParamsUnsigned32 value in rowreq_ctx->data
++ */
++ rowreq_ctx->data.appParamsUnsigned32 = appParamsUnsigned32_val;
++
++
++ return MFD_SUCCESS;
++} /* appParamsUnsigned32_set */
++
++/**
++ * undo the previous set.
++ *
++ * @param rowreq_ctx
++ * Pointer to the users context.
++ */
++int
++appParamsUnsigned32_undo(dessertAppParamsTable_rowreq_ctx * rowreq_ctx)
++{
++
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsUnsigned32_undo",
++ "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:456:o: |-> Clean up appParamsUnsigned32 undo.
++ */
++ /*
++ * copy appParamsUnsigned32 data
++ * set rowreq_ctx->data.appParamsUnsigned32 from rowreq_ctx->undo->appParamsUnsigned32
++ */
++ rowreq_ctx->data.appParamsUnsigned32 =
++ rowreq_ctx->undo->appParamsUnsigned32;
++
++
++ return MFD_SUCCESS;
++} /* appParamsUnsigned32_undo */
++
++/*---------------------------------------------------------------------
++ * DESSERT-MIB::dessertAppParamsEntry.appParamsOctetString
++ * appParamsOctetString is subid 9 of dessertAppParamsEntry.
++ * Its status is Current, and its access level is ReadWrite.
++ * OID: .1.3.6.1.4.1.18898.0.19.10.1.1.11.1.9
++ * Description:
++A parameter containing of up to 1024 octets.
++ *
++ * Attributes:
++ * accessible 1 isscalar 0 enums 0 hasdefval 0
++ * readable 1 iscolumn 1 ranges 1 hashint 1
++ * settable 1
++ * hint: 1024a
++ *
++ * Ranges: 0 - 1024;
++ *
++ * Its syntax is DessertApplicationOctetString (based on perltype OCTETSTR)
++ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
++ * This data type requires a length. (Max 1024)
++ */
++/**
++ * Check that the proposed new value is potentially valid.
++ *
++ * @param rowreq_ctx
++ * Pointer to the row request context.
++ * @param appParamsOctetString_val_ptr
++ * A char containing the new value.
++ * @param appParamsOctetString_val_ptr_len
++ * The size (in bytes) of the data pointed to by appParamsOctetString_val_ptr
++ *
++ * @retval MFD_SUCCESS : incoming value is legal
++ * @retval MFD_NOT_VALID_NOW : incoming value is not valid now
++ * @retval MFD_NOT_VALID_EVER : incoming value is never valid
++ *
++ * This is the place to check for requirements that are not
++ * expressed in the mib syntax (for example, a requirement that
++ * is detailed in the description for an object).
++ *
++ * You should check that the requested change between the undo value and the
++ * new value is legal (ie, the transistion from one value to another
++ * is legal).
++ *
++ *@note
++ * This check is only to determine if the new value
++ * is \b potentially valid. This is the first check of many, and
++ * is one of the simplest ones.
++ *
++ *@note
++ * this is not the place to do any checks for values
++ * which depend on some other value in the mib. Those
++ * types of checks should be done in the
++ * dessertAppParamsTable_check_dependencies() function.
++ *
++ * The following checks have already been done for you:
++ * The syntax is ASN_OCTET_STR
++ * The length is < sizeof(rowreq_ctx->data.appParamsOctetString).
++ * The length is in (one of) the range set(s): 0 - 1024
++ *
++ * If there a no other checks you need to do, simply return MFD_SUCCESS.
++ *
++ */
++int
++appParamsOctetString_check_value(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx,
++ char *appParamsOctetString_val_ptr,
++ size_t appParamsOctetString_val_ptr_len)
++{
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsOctetString_check_value", "called\n"));
++
++ /** should never get a NULL pointer */
++ netsnmp_assert(NULL != rowreq_ctx);
++ netsnmp_assert(NULL != appParamsOctetString_val_ptr);
++
++ /*
++ * TODO:441:o: |-> Check for valid appParamsOctetString value.
++ */
++ if (rowreq_ctx->data.appParamsValueType != DESSERT_APPPARAMS_VALUETYPE_OCTETSTRING) {
++
++ return MFD_NOT_VALID_EVER;
++ } else {
++
++ return MFD_SUCCESS; /* appParamsOctetString value not illegal */
++ }
++} /* appParamsOctetString_check_value */
++
++/**
++ * Save old value information
++ *
++ * @param rowreq_ctx
++ * Pointer to the table context (dessertAppParamsTable_rowreq_ctx)
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_ERROR : error. set will fail.
++ *
++ * This function will be called after the table level undo setup function
++ * dessertAppParamsTable_undo_setup has been called.
++ *
++ *@note
++ * this function will only be called if a new value is set for this column.
++ *
++ * If there is any setup specific to a particular column (e.g. allocating
++ * memory for a string), you should do that setup in this function, so it
++ * won't be done unless it is necessary.
++ */
++int
++appParamsOctetString_undo_setup(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx)
++{
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsOctetString_undo_setup", "called\n"));
++
++ /** should never get a NULL pointer */
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:455:o: |-> Setup appParamsOctetString undo.
++ */
++ /*
++ * copy appParamsOctetString and appParamsOctetString_len data
++ * set rowreq_ctx->undo->appParamsOctetString from rowreq_ctx->data.appParamsOctetString
++ */
++ memcpy(rowreq_ctx->undo->appParamsOctetString,
++ rowreq_ctx->data.appParamsOctetString,
++ (rowreq_ctx->data.appParamsOctetString_len *
++ sizeof(rowreq_ctx->undo->appParamsOctetString[0])));
++ rowreq_ctx->undo->appParamsOctetString_len =
++ rowreq_ctx->data.appParamsOctetString_len;
++
++
++ return MFD_SUCCESS;
++} /* appParamsOctetString_undo_setup */
++
++/**
++ * Set the new value.
++ *
++ * @param rowreq_ctx
++ * Pointer to the users context. You should know how to
++ * manipulate the value from this object.
++ * @param appParamsOctetString_val_ptr
++ * A char containing the new value.
++ * @param appParamsOctetString_val_ptr_len
++ * The size (in bytes) of the data pointed to by appParamsOctetString_val_ptr
++ */
++int
++appParamsOctetString_set(dessertAppParamsTable_rowreq_ctx * rowreq_ctx,
++ char *appParamsOctetString_val_ptr,
++ size_t appParamsOctetString_val_ptr_len)
++{
++
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsOctetString_set",
++ "called\n"));
++
++ /** should never get a NULL pointer */
++ netsnmp_assert(NULL != rowreq_ctx);
++ netsnmp_assert(NULL != appParamsOctetString_val_ptr);
++
++ /*
++ * TODO:245:o: |-> Implement appParamsOctetString reverse mapping.
++ * If the values for your data type don't exactly match the
++ * possible values defined by the mib, you should map them here.
++ */
++ /*
++ * TODO:461:M: |-> Set appParamsOctetString value.
++ * set appParamsOctetString value in rowreq_ctx->data
++ */
++ memcpy(rowreq_ctx->data.appParamsOctetString,
++ appParamsOctetString_val_ptr, appParamsOctetString_val_ptr_len);
++ /** convert bytes to number of char */
++ rowreq_ctx->data.appParamsOctetString_len =
++ appParamsOctetString_val_ptr_len /
++ sizeof(appParamsOctetString_val_ptr[0]);
++
++
++ return MFD_SUCCESS;
++} /* appParamsOctetString_set */
++
++/**
++ * undo the previous set.
++ *
++ * @param rowreq_ctx
++ * Pointer to the users context.
++ */
++int
++appParamsOctetString_undo(dessertAppParamsTable_rowreq_ctx * rowreq_ctx)
++{
++
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:appParamsOctetString_undo",
++ "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:456:o: |-> Clean up appParamsOctetString undo.
++ */
++ /*
++ * copy appParamsOctetString and appParamsOctetString_len data
++ * set rowreq_ctx->data.appParamsOctetString from rowreq_ctx->undo->appParamsOctetString
++ */
++ memcpy(rowreq_ctx->data.appParamsOctetString,
++ rowreq_ctx->undo->appParamsOctetString,
++ (rowreq_ctx->undo->appParamsOctetString_len *
++ sizeof(rowreq_ctx->data.appParamsOctetString[0])));
++ rowreq_ctx->data.appParamsOctetString_len =
++ rowreq_ctx->undo->appParamsOctetString_len;
++
++
++ return MFD_SUCCESS;
++} /* appParamsOctetString_undo */
++
++/** @} */
+Index: libdessert0.86-0.86.14/src/snmp/dessertAppParamsTable_data_set.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertAppParamsTable_data_set.h 2009-12-09 16:38:27.316005903 +0100
+@@ -0,0 +1,168 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * version : 12077 $ of $
++ *
++ * $Id:$
++ */
++#ifndef DESSERTAPPPARAMSTABLE_DATA_SET_H
++#define DESSERTAPPPARAMSTABLE_DATA_SET_H
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++ /*
++ *********************************************************************
++ * SET function declarations
++ */
++
++ /*
++ *********************************************************************
++ * SET Table declarations
++ */
++/**********************************************************************
++ **********************************************************************
++ ***
++ *** Table dessertAppParamsTable
++ ***
++ **********************************************************************
++ **********************************************************************/
++ /*
++ * DESSERT-MIB::dessertAppParamsTable is subid 11 of dessertObjects.
++ * Its status is Current.
++ * OID: .1.3.6.1.4.1.18898.0.19.10.1.1.11, length: 13
++ */
++
++
++ int
++ dessertAppParamsTable_undo_setup(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx);
++ int
++ dessertAppParamsTable_undo_cleanup(dessertAppParamsTable_rowreq_ctx
++ * rowreq_ctx);
++ int
++ dessertAppParamsTable_undo(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx);
++ int
++ dessertAppParamsTable_commit(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx);
++ int
++ dessertAppParamsTable_undo_commit(dessertAppParamsTable_rowreq_ctx
++ * rowreq_ctx);
++
++
++ int
++ appParamsName_check_value(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx, char *appParamsName_val_ptr,
++ size_t appParamsName_val_ptr_len);
++ int
++ appParamsName_undo_setup(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx);
++ int appParamsName_set(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx,
++ char *appParamsName_val_ptr,
++ size_t appParamsName_val_ptr_len);
++ int appParamsName_undo(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx);
++
++ int
++ appParamsDesc_check_value(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx, char *appParamsDesc_val_ptr,
++ size_t appParamsDesc_val_ptr_len);
++ int
++ appParamsDesc_undo_setup(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx);
++ int appParamsDesc_set(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx,
++ char *appParamsDesc_val_ptr,
++ size_t appParamsDesc_val_ptr_len);
++ int appParamsDesc_undo(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx);
++
++ int
++ appParamsValueType_check_value(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx,
++ u_long appParamsValueType_val);
++ int
++ appParamsValueType_undo_setup(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx);
++ int appParamsValueType_set(dessertAppParamsTable_rowreq_ctx
++ * rowreq_ctx,
++ u_long appParamsValueType_val);
++ int
++ appParamsValueType_undo(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx);
++
++ int
++ appParamsTruthValue_check_value(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx,
++ u_long appParamsTruthValue_val);
++ int
++ appParamsTruthValue_undo_setup(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx);
++ int
++ appParamsTruthValue_set(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx,
++ u_long appParamsTruthValue_val);
++ int
++ appParamsTruthValue_undo(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx);
++
++ int
++ appParamsInteger32_check_value(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx,
++ long appParamsInteger32_val);
++ int
++ appParamsInteger32_undo_setup(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx);
++ int appParamsInteger32_set(dessertAppParamsTable_rowreq_ctx
++ * rowreq_ctx,
++ long appParamsInteger32_val);
++ int
++ appParamsInteger32_undo(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx);
++
++ int
++ appParamsUnsigned32_check_value(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx,
++ u_long appParamsUnsigned32_val);
++ int
++ appParamsUnsigned32_undo_setup(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx);
++ int
++ appParamsUnsigned32_set(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx,
++ u_long appParamsUnsigned32_val);
++ int
++ appParamsUnsigned32_undo(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx);
++
++ int
++ appParamsOctetString_check_value(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx,
++ char
++ *appParamsOctetString_val_ptr,
++ size_t
++ appParamsOctetString_val_ptr_len);
++ int
++ appParamsOctetString_undo_setup(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx);
++ int
++ appParamsOctetString_set(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx,
++ char *appParamsOctetString_val_ptr,
++ size_t appParamsOctetString_val_ptr_len);
++ int
++ appParamsOctetString_undo(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx);
++
++
++ int
++ dessertAppParamsTable_check_dependencies
++ (dessertAppParamsTable_rowreq_ctx * ctx);
++
++
++#ifdef __cplusplus
++}
++#endif
++#endif /* DESSERTAPPPARAMSTABLE_DATA_SET_H */
+Index: libdessert0.86-0.86.14/src/snmp/dessertAppParamsTable_enums.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertAppParamsTable_enums.h 2009-12-09 16:38:27.316005903 +0100
+@@ -0,0 +1,93 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * : generic-table-enums.m2c 12526 2005-07-15 22:41:16Z rstory $
++ *
++ * $Id:$
++ */
++#ifndef DESSERTAPPPARAMSTABLE_ENUMS_H
++#define DESSERTAPPPARAMSTABLE_ENUMS_H
++
++#include <dessert/dessert.h>
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++ /*
++ * NOTES on enums
++ * ==============
++ *
++ * Value Mapping
++ * -------------
++ * If the values for your data type don't exactly match the
++ * possible values defined by the mib, you should map them
++ * below. For example, a boolean flag (1/0) is usually represented
++ * as a TruthValue in a MIB, which maps to the values (1/2).
++ *
++ */
++/*************************************************************************
++ *************************************************************************
++ *
++ * enum definitions for table dessertAppParamsTable
++ *
++ *************************************************************************
++ *************************************************************************/
++
++/*************************************************************
++ * constants for enums for the MIB node
++ * appParamsValueType (DessertAppValueType / ASN_INTEGER)
++ *
++ * since a Textual Convention may be referenced more than once in a
++ * MIB, protect againt redefinitions of the enum values.
++ */
++#ifndef DESSERTAPPVALUETYPE_ENUMS
++#define DESSERTAPPVALUETYPE_ENUMS
++
++#define DESSERTAPPVALUETYPE_BOOL 0
++#define DESSERTAPPVALUETYPE_INT32 1
++#define DESSERTAPPVALUETYPE_UINT32 2
++#define DESSERTAPPVALUETYPE_COUNTER64 3
++#define DESSERTAPPVALUETYPE_OCTETSTRING 4
++
++#endif /* DESSERTAPPVALUETYPE_ENUMS */
++
++ /*
++ * TODO:140:o: Define your interal representation of appParamsValueType enums.
++ * (used for value mapping; see notes at top of file)
++ */
++#define INTERNAL_DESSERTAPPPARAMSTABLE_APPPARAMSVALUETYPE_BOOL DESSERT_APPPARAMS_VALUETYPE_BOOL
++#define INTERNAL_DESSERTAPPPARAMSTABLE_APPPARAMSVALUETYPE_INT32 DESSERT_APPPARAMS_VALUETYPE_INT32
++#define INTERNAL_DESSERTAPPPARAMSTABLE_APPPARAMSVALUETYPE_UINT32 DESSERT_APPPARAMS_VALUETYPE_UINT32
++#define INTERNAL_DESSERTAPPPARAMSTABLE_APPPARAMSVALUETYPE_COUNTER64 DESSERT_APPPARAMS_VALUETYPE_COUNTER64
++#define INTERNAL_DESSERTAPPPARAMSTABLE_APPPARAMSVALUETYPE_OCTETSTRING DESSERT_APPPARAMS_VALUETYPE_OCTETSTRING
++
++
++/*************************************************************
++ * constants for enums for the MIB node
++ * appParamsTruthValue (TruthValue / ASN_INTEGER)
++ *
++ * since a Textual Convention may be referenced more than once in a
++ * MIB, protect againt redefinitions of the enum values.
++ */
++#ifndef TRUTHVALUE_ENUMS
++#define TRUTHVALUE_ENUMS
++
++#define TRUTHVALUE_TRUE 1
++#define TRUTHVALUE_FALSE 2
++
++#endif /* TRUTHVALUE_ENUMS */
++
++ /*
++ * TODO:140:o: Define your interal representation of appParamsTruthValue enums.
++ * (used for value mapping; see notes at top of file)
++ */
++#define INTERNAL_DESSERTAPPPARAMSTABLE_APPPARAMSTRUTHVALUE_TRUE DESSERT_APPPARAMS_BOOL_TRUE
++#define INTERNAL_DESSERTAPPPARAMSTABLE_APPPARAMSTRUTHVALUE_FALSE DESSERT_APPPARAMS_BOOL_FALSE
++
++
++
++
++#ifdef __cplusplus
++}
++#endif
++#endif /* DESSERTAPPPARAMSTABLE_ENUMS_H */
+Index: libdessert0.86-0.86.14/src/snmp/dessertAppParamsTable_interface.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertAppParamsTable_interface.c 2009-12-09 16:38:27.318667257 +0100
+@@ -0,0 +1,1843 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * version : 15899 $ of $
++ *
++ * $Id:$
++ */
++/*
++ * *********************************************************************
++ * *********************************************************************
++ * *********************************************************************
++ * *** ***
++ * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
++ * *** ***
++ * *** ***
++ * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
++ * *** ***
++ * *** ***
++ * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
++ * *** ***
++ * *** ***
++ * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
++ * *** ***
++ * *** ***
++ * *********************************************************************
++ * *********************************************************************
++ * *********************************************************************
++ */
++
++/*
++ * standard Net-SNMP includes
++ */
++#include <net-snmp/net-snmp-config.h>
++#include <net-snmp/net-snmp-includes.h>
++#include <net-snmp/agent/net-snmp-agent-includes.h>
++
++/*
++ * include our parent header
++ */
++#include "dessertAppParamsTable.h"
++
++
++#include <net-snmp/agent/table_container.h>
++#include <net-snmp/library/container.h>
++
++#include "dessertAppParamsTable_interface.h"
++
++#include <ctype.h>
++
++/**********************************************************************
++ **********************************************************************
++ ***
++ *** Table dessertAppParamsTable
++ ***
++ **********************************************************************
++ **********************************************************************/
++/*
++ * DESSERT-MIB::dessertAppParamsTable is subid 11 of dessertObjects.
++ * Its status is Current.
++ * OID: .1.3.6.1.4.1.18898.0.19.10.1.1.11, length: 13
++ */
++typedef struct dessertAppParamsTable_interface_ctx_s {
++
++ netsnmp_container *container;
++ netsnmp_cache *cache;
++
++ dessertAppParamsTable_registration *user_ctx;
++
++ netsnmp_table_registration_info tbl_info;
++
++ netsnmp_baby_steps_access_methods access_multiplexer;
++
++ u_int table_dirty;
++
++} dessertAppParamsTable_interface_ctx;
++
++static dessertAppParamsTable_interface_ctx dessertAppParamsTable_if_ctx;
++
++static void
++_dessertAppParamsTable_container_init(dessertAppParamsTable_interface_ctx *
++ if_ctx);
++static void
++_dessertAppParamsTable_container_shutdown
++(dessertAppParamsTable_interface_ctx * if_ctx);
++
++
++netsnmp_container *
++dessertAppParamsTable_container_get(void)
++{
++ return dessertAppParamsTable_if_ctx.container;
++}
++
++dessertAppParamsTable_registration *
++dessertAppParamsTable_registration_get(void)
++{
++ return dessertAppParamsTable_if_ctx.user_ctx;
++}
++
++dessertAppParamsTable_registration *
++dessertAppParamsTable_registration_set(dessertAppParamsTable_registration *
++ newreg)
++{
++ dessertAppParamsTable_registration *old =
++ dessertAppParamsTable_if_ctx.user_ctx;
++ dessertAppParamsTable_if_ctx.user_ctx = newreg;
++ return old;
++}
++
++int
++dessertAppParamsTable_container_size(void)
++{
++ return CONTAINER_SIZE(dessertAppParamsTable_if_ctx.container);
++}
++
++u_int
++dessertAppParamsTable_dirty_get(void)
++{
++ return dessertAppParamsTable_if_ctx.table_dirty;
++}
++
++void
++dessertAppParamsTable_dirty_set(u_int status)
++{
++ DEBUGMSGTL(("dessertAppParamsTable:dessertAppParamsTable_dirty_set",
++ "called. was %d, now %d\n",
++ dessertAppParamsTable_if_ctx.table_dirty, status));
++ dessertAppParamsTable_if_ctx.table_dirty = status;
++}
++
++/*
++ * mfd multiplexer modes
++ */
++static Netsnmp_Node_Handler _mfd_dessertAppParamsTable_pre_request;
++static Netsnmp_Node_Handler _mfd_dessertAppParamsTable_post_request;
++static Netsnmp_Node_Handler _mfd_dessertAppParamsTable_object_lookup;
++static Netsnmp_Node_Handler _mfd_dessertAppParamsTable_get_values;
++static Netsnmp_Node_Handler _mfd_dessertAppParamsTable_check_objects;
++static Netsnmp_Node_Handler _mfd_dessertAppParamsTable_undo_setup;
++static Netsnmp_Node_Handler _mfd_dessertAppParamsTable_set_values;
++static Netsnmp_Node_Handler _mfd_dessertAppParamsTable_undo_cleanup;
++static Netsnmp_Node_Handler _mfd_dessertAppParamsTable_undo_values;
++static Netsnmp_Node_Handler _mfd_dessertAppParamsTable_commit;
++static Netsnmp_Node_Handler _mfd_dessertAppParamsTable_undo_commit;
++static Netsnmp_Node_Handler _mfd_dessertAppParamsTable_irreversible_commit;
++
++NETSNMP_STATIC_INLINE int
++_dessertAppParamsTable_undo_column(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx, netsnmp_variable_list * var,
++ int column);
++
++dessertAppParamsTable_data *dessertAppParamsTable_allocate_data(void);
++
++/**
++ * @internal
++ * Initialize the table dessertAppParamsTable
++ * (Define its contents and how it's structured)
++ */
++void
++_dessertAppParamsTable_initialize_interface
++ (dessertAppParamsTable_registration * reg_ptr, u_long flags)
++{
++ netsnmp_baby_steps_access_methods *access_multiplexer =
++ &dessertAppParamsTable_if_ctx.access_multiplexer;
++ netsnmp_table_registration_info *tbl_info =
++ &dessertAppParamsTable_if_ctx.tbl_info;
++ netsnmp_handler_registration *reginfo;
++ netsnmp_mib_handler *handler;
++ int mfd_modes = 0;
++
++ DEBUGMSGTL(("internal:dessertAppParamsTable:_dessertAppParamsTable_initialize_interface", "called\n"));
++
++
++ /*************************************************
++ *
++ * save interface context for dessertAppParamsTable
++ */
++ /*
++ * Setting up the table's definition
++ */
++ netsnmp_table_helper_add_indexes(tbl_info, ASN_INTEGER,
++ /** index: appParamsIndex */
++ 0);
++
++ /*
++ * Define the minimum and maximum accessible columns. This
++ * optimizes retrival.
++ */
++ tbl_info->min_column = DESSERTAPPPARAMSTABLE_MIN_COL;
++ tbl_info->max_column = DESSERTAPPPARAMSTABLE_MAX_COL;
++
++ /*
++ * save users context
++ */
++ dessertAppParamsTable_if_ctx.user_ctx = reg_ptr;
++
++ /*
++ * call data access initialization code
++ */
++ dessertAppParamsTable_init_data(reg_ptr);
++
++ /*
++ * set up the container
++ */
++ _dessertAppParamsTable_container_init(&dessertAppParamsTable_if_ctx);
++ if (NULL == dessertAppParamsTable_if_ctx.container) {
++ snmp_log(LOG_ERR,
++ "could not initialize container for dessertAppParamsTable\n");
++ return;
++ }
++
++ /*
++ * access_multiplexer: REQUIRED wrapper for get request handling
++ */
++ access_multiplexer->object_lookup =
++ _mfd_dessertAppParamsTable_object_lookup;
++ access_multiplexer->get_values = _mfd_dessertAppParamsTable_get_values;
++
++ /*
++ * no wrappers yet
++ */
++ access_multiplexer->pre_request =
++ _mfd_dessertAppParamsTable_pre_request;
++ access_multiplexer->post_request =
++ _mfd_dessertAppParamsTable_post_request;
++
++
++ /*
++ * REQUIRED wrappers for set request handling
++ */
++ access_multiplexer->object_syntax_checks =
++ _mfd_dessertAppParamsTable_check_objects;
++ access_multiplexer->undo_setup = _mfd_dessertAppParamsTable_undo_setup;
++ access_multiplexer->undo_cleanup =
++ _mfd_dessertAppParamsTable_undo_cleanup;
++ access_multiplexer->set_values = _mfd_dessertAppParamsTable_set_values;
++ access_multiplexer->undo_sets = _mfd_dessertAppParamsTable_undo_values;
++
++ /*
++ * no wrappers yet
++ */
++ access_multiplexer->commit = _mfd_dessertAppParamsTable_commit;
++ access_multiplexer->undo_commit =
++ _mfd_dessertAppParamsTable_undo_commit;
++ access_multiplexer->irreversible_commit =
++ _mfd_dessertAppParamsTable_irreversible_commit;
++
++ /*************************************************
++ *
++ * Create a registration, save our reg data, register table.
++ */
++ DEBUGMSGTL(("dessertAppParamsTable:init_dessertAppParamsTable",
++ "Registering dessertAppParamsTable as a mibs-for-dummies table.\n"));
++ handler =
++ netsnmp_baby_steps_access_multiplexer_get(access_multiplexer);
++ reginfo =
++ netsnmp_handler_registration_create("dessertAppParamsTable",
++ handler,
++ dessertAppParamsTable_oid,
++ dessertAppParamsTable_oid_size,
++ HANDLER_CAN_BABY_STEP |
++ HANDLER_CAN_RWRITE);
++ if (NULL == reginfo) {
++ snmp_log(LOG_ERR,
++ "error registering table dessertAppParamsTable\n");
++ return;
++ }
++ reginfo->my_reg_void = &dessertAppParamsTable_if_ctx;
++
++ /*************************************************
++ *
++ * set up baby steps handler, create it and inject it
++ */
++ if (access_multiplexer->object_lookup)
++ mfd_modes |= BABY_STEP_OBJECT_LOOKUP;
++ if (access_multiplexer->set_values)
++ mfd_modes |= BABY_STEP_SET_VALUES;
++ if (access_multiplexer->irreversible_commit)
++ mfd_modes |= BABY_STEP_IRREVERSIBLE_COMMIT;
++ if (access_multiplexer->object_syntax_checks)
++ mfd_modes |= BABY_STEP_CHECK_OBJECT;
++
++ if (access_multiplexer->pre_request)
++ mfd_modes |= BABY_STEP_PRE_REQUEST;
++ if (access_multiplexer->post_request)
++ mfd_modes |= BABY_STEP_POST_REQUEST;
++
++ if (access_multiplexer->undo_setup)
++ mfd_modes |= BABY_STEP_UNDO_SETUP;
++ if (access_multiplexer->undo_cleanup)
++ mfd_modes |= BABY_STEP_UNDO_CLEANUP;
++ if (access_multiplexer->undo_sets)
++ mfd_modes |= BABY_STEP_UNDO_SETS;
++
++ if (access_multiplexer->row_creation)
++ mfd_modes |= BABY_STEP_ROW_CREATE;
++ if (access_multiplexer->consistency_checks)
++ mfd_modes |= BABY_STEP_CHECK_CONSISTENCY;
++ if (access_multiplexer->commit)
++ mfd_modes |= BABY_STEP_COMMIT;
++ if (access_multiplexer->undo_commit)
++ mfd_modes |= BABY_STEP_UNDO_COMMIT;
++
++ handler = netsnmp_baby_steps_handler_get(mfd_modes);
++ netsnmp_inject_handler(reginfo, handler);
++
++ /*************************************************
++ *
++ * inject row_merge helper with prefix rootoid_len + 2 (entry.col)
++ */
++ handler = netsnmp_get_row_merge_handler(reginfo->rootoid_len + 2);
++ netsnmp_inject_handler(reginfo, handler);
++
++ /*************************************************
++ *
++ * inject container_table helper
++ */
++ handler =
++ netsnmp_container_table_handler_get(tbl_info,
++ dessertAppParamsTable_if_ctx.
++ container,
++ TABLE_CONTAINER_KEY_NETSNMP_INDEX);
++ netsnmp_inject_handler(reginfo, handler);
++
++ /*************************************************
++ *
++ * inject cache helper
++ */
++ if (NULL != dessertAppParamsTable_if_ctx.cache) {
++ handler =
++ netsnmp_cache_handler_get(dessertAppParamsTable_if_ctx.cache);
++ netsnmp_inject_handler(reginfo, handler);
++ }
++
++ /*
++ * register table
++ */
++ netsnmp_register_table(reginfo, tbl_info);
++
++} /* _dessertAppParamsTable_initialize_interface */
++
++/**
++ * @internal
++ * Shutdown the table dessertAppParamsTable
++ */
++void
++_dessertAppParamsTable_shutdown_interface
++ (dessertAppParamsTable_registration * reg_ptr)
++{
++ /*
++ * shutdown the container
++ */
++ _dessertAppParamsTable_container_shutdown
++ (&dessertAppParamsTable_if_ctx);
++}
++
++void
++dessertAppParamsTable_valid_columns_set(netsnmp_column_info *vc)
++{
++ dessertAppParamsTable_if_ctx.tbl_info.valid_columns = vc;
++} /* dessertAppParamsTable_valid_columns_set */
++
++/**
++ * @internal
++ * convert the index component stored in the context to an oid
++ */
++int
++dessertAppParamsTable_index_to_oid(netsnmp_index * oid_idx,
++ dessertAppParamsTable_mib_index *
++ mib_idx)
++{
++ int err = SNMP_ERR_NOERROR;
++
++ /*
++ * temp storage for parsing indexes
++ */
++ /*
++ * appParamsIndex(1)/DessertAppParamsIndex/ASN_INTEGER/long(long)//l/a/w/e/R/d/H
++ */
++ netsnmp_variable_list var_appParamsIndex;
++
++ /*
++ * set up varbinds
++ */
++ memset(&var_appParamsIndex, 0x00, sizeof(var_appParamsIndex));
++ var_appParamsIndex.type = ASN_INTEGER;
++
++ /*
++ * chain temp index varbinds together
++ */
++ var_appParamsIndex.next_variable = NULL;
++
++
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:dessertAppParamsTable_index_to_oid", "called\n"));
++
++ /*
++ * appParamsIndex(1)/DessertAppParamsIndex/ASN_INTEGER/long(long)//l/a/w/e/R/d/H
++ */
++ snmp_set_var_value(&var_appParamsIndex,
++ (u_char *) & mib_idx->appParamsIndex,
++ sizeof(mib_idx->appParamsIndex));
++
++
++ err = build_oid_noalloc(oid_idx->oids, oid_idx->len, &oid_idx->len,
++ NULL, 0, &var_appParamsIndex);
++ if (err)
++ snmp_log(LOG_ERR, "error %d converting index to oid\n", err);
++
++ /*
++ * parsing may have allocated memory. free it.
++ */
++ snmp_reset_var_buffers(&var_appParamsIndex);
++
++ return err;
++} /* dessertAppParamsTable_index_to_oid */
++
++/**
++ * extract dessertAppParamsTable indexes from a netsnmp_index
++ *
++ * @retval SNMP_ERR_NOERROR : no error
++ * @retval SNMP_ERR_GENERR : error
++ */
++int
++dessertAppParamsTable_index_from_oid(netsnmp_index * oid_idx,
++ dessertAppParamsTable_mib_index *
++ mib_idx)
++{
++ int err = SNMP_ERR_NOERROR;
++
++ /*
++ * temp storage for parsing indexes
++ */
++ /*
++ * appParamsIndex(1)/DessertAppParamsIndex/ASN_INTEGER/long(long)//l/a/w/e/R/d/H
++ */
++ netsnmp_variable_list var_appParamsIndex;
++
++ /*
++ * set up varbinds
++ */
++ memset(&var_appParamsIndex, 0x00, sizeof(var_appParamsIndex));
++ var_appParamsIndex.type = ASN_INTEGER;
++
++ /*
++ * chain temp index varbinds together
++ */
++ var_appParamsIndex.next_variable = NULL;
++
++
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:dessertAppParamsTable_index_from_oid", "called\n"));
++
++ /*
++ * parse the oid into the individual index components
++ */
++ err = parse_oid_indexes(oid_idx->oids, oid_idx->len,
++ &var_appParamsIndex);
++ if (err == SNMP_ERR_NOERROR) {
++ /*
++ * copy out values
++ */
++ mib_idx->appParamsIndex =
++ *((long *) var_appParamsIndex.val.string);
++
++
++ }
++
++ /*
++ * parsing may have allocated memory. free it.
++ */
++ snmp_reset_var_buffers(&var_appParamsIndex);
++
++ return err;
++} /* dessertAppParamsTable_index_from_oid */
++
++
++/*
++ * dessertAppParamsTable_allocate_data
++ *
++ * Purpose: create new dessertAppParamsTable_data.
++ */
++dessertAppParamsTable_data *
++dessertAppParamsTable_allocate_data(void)
++{
++ dessertAppParamsTable_data *rtn =
++ SNMP_MALLOC_TYPEDEF(dessertAppParamsTable_data);
++
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:dessertAppParamsTable_allocate_data", "called\n"));
++
++ if (NULL == rtn) {
++ snmp_log(LOG_ERR, "unable to malloc memory for new "
++ "dessertAppParamsTable_data.\n");
++ }
++
++ return rtn;
++} /* dessertAppParamsTable_allocate_data */
++
++/*
++ * dessertAppParamsTable_release_data
++ *
++ * Purpose: release dessertAppParamsTable data.
++ */
++void
++dessertAppParamsTable_release_data(dessertAppParamsTable_data * data)
++{
++ DEBUGMSGTL(("verbose:dessertAppParamsTable:dessertAppParamsTable_release_data", "called\n"));
++
++ free(data);
++} /* dessertAppParamsTable_release_data */
++
++/*
++ *********************************************************************
++ * @internal
++ * allocate resources for a dessertAppParamsTable_rowreq_ctx
++ */
++dessertAppParamsTable_rowreq_ctx *
++dessertAppParamsTable_allocate_rowreq_ctx(void)
++{
++ dessertAppParamsTable_rowreq_ctx *rowreq_ctx =
++ SNMP_MALLOC_TYPEDEF(dessertAppParamsTable_rowreq_ctx);
++
++ DEBUGMSGTL(("internal:dessertAppParamsTable:dessertAppParamsTable_allocate_rowreq_ctx", "called\n"));
++
++ if (NULL == rowreq_ctx) {
++ snmp_log(LOG_ERR, "Couldn't allocate memory for a "
++ "dessertAppParamsTable_rowreq_ctx.\n");
++ return NULL;
++ }
++
++ rowreq_ctx->oid_idx.oids = rowreq_ctx->oid_tmp;
++
++ rowreq_ctx->dessertAppParamsTable_data_list = NULL;
++
++
++ return rowreq_ctx;
++} /* dessertAppParamsTable_allocate_rowreq_ctx */
++
++/*
++ * @internal
++ * release resources for a dessertAppParamsTable_rowreq_ctx
++ */
++void
++dessertAppParamsTable_release_rowreq_ctx(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx)
++{
++ DEBUGMSGTL(("internal:dessertAppParamsTable:dessertAppParamsTable_release_rowreq_ctx", "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++
++ if (rowreq_ctx->undo)
++ dessertAppParamsTable_release_data(rowreq_ctx->undo);
++
++ /*
++ * free index oid pointer
++ */
++ if (rowreq_ctx->oid_idx.oids != rowreq_ctx->oid_tmp)
++ free(rowreq_ctx->oid_idx.oids);
++
++ SNMP_FREE(rowreq_ctx);
++} /* dessertAppParamsTable_release_rowreq_ctx */
++
++/**
++ * @internal
++ * wrapper
++ */
++static int
++_mfd_dessertAppParamsTable_pre_request(netsnmp_mib_handler *handler,
++ netsnmp_handler_registration
++ *reginfo,
++ netsnmp_agent_request_info
++ *agtreq_info,
++ netsnmp_request_info *requests)
++{
++ int rc;
++
++ DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_dessertAppParamsTable_pre_request", "called\n"));
++
++ if (1 != netsnmp_row_merge_status_first(reginfo, agtreq_info)) {
++ DEBUGMSGTL(("internal:dessertAppParamsTable",
++ "skipping additional pre_request\n"));
++ return SNMP_ERR_NOERROR;
++ }
++
++ rc = dessertAppParamsTable_pre_request(dessertAppParamsTable_if_ctx.
++ user_ctx);
++ if (MFD_SUCCESS != rc) {
++ /*
++ * nothing we can do about it but log it
++ */
++ DEBUGMSGTL(("dessertAppParamsTable", "error %d from "
++ "dessertAppParamsTable_pre_request\n", rc));
++ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
++ }
++
++ return SNMP_ERR_NOERROR;
++} /* _mfd_dessertAppParamsTable_pre_request */
++
++/**
++ * @internal
++ * wrapper
++ */
++static int
++_mfd_dessertAppParamsTable_post_request(netsnmp_mib_handler *handler,
++ netsnmp_handler_registration
++ *reginfo,
++ netsnmp_agent_request_info
++ *agtreq_info,
++ netsnmp_request_info *requests)
++{
++ dessertAppParamsTable_rowreq_ctx *rowreq_ctx =
++ netsnmp_container_table_row_extract(requests);
++ int rc, packet_rc;
++
++ DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_dessertAppParamsTable_post_request", "called\n"));
++
++ /*
++ * release row context, if deleted
++ */
++ if (rowreq_ctx && (rowreq_ctx->rowreq_flags & MFD_ROW_DELETED))
++ dessertAppParamsTable_release_rowreq_ctx(rowreq_ctx);
++
++ /*
++ * wait for last call before calling user
++ */
++ if (1 != netsnmp_row_merge_status_last(reginfo, agtreq_info)) {
++ DEBUGMSGTL(("internal:dessertAppParamsTable",
++ "waiting for last post_request\n"));
++ return SNMP_ERR_NOERROR;
++ }
++
++ packet_rc = netsnmp_check_all_requests_error(agtreq_info->asp, 0);
++ if ((MFD_SUCCESS != packet_rc) && dessertAppParamsTable_dirty_get()) {
++ /*
++ * we shouldn't get here. the undo steps should also clear
++ * the dirty flags.
++ */
++ snmp_log(LOG_WARNING,
++ "dessertAppParamsTable dirty flag set in post_request "
++ "but status != SUCCESS.\n");
++ }
++
++ rc = dessertAppParamsTable_post_request(dessertAppParamsTable_if_ctx.
++ user_ctx, packet_rc);
++ if (MFD_SUCCESS != rc) {
++ /*
++ * nothing we can do about it but log it
++ */
++ DEBUGMSGTL(("dessertAppParamsTable", "error %d from "
++ "dessertAppParamsTable_post_request\n", rc));
++ }
++
++ return SNMP_ERR_NOERROR;
++} /* _mfd_dessertAppParamsTable_post_request */
++
++/**
++ * @internal
++ * wrapper
++ */
++static int
++_mfd_dessertAppParamsTable_object_lookup(netsnmp_mib_handler *handler,
++ netsnmp_handler_registration
++ *reginfo,
++ netsnmp_agent_request_info
++ *agtreq_info,
++ netsnmp_request_info *requests)
++{
++ int rc = SNMP_ERR_NOERROR;
++ dessertAppParamsTable_rowreq_ctx *rowreq_ctx =
++ netsnmp_container_table_row_extract(requests);
++
++ DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_dessertAppParamsTable_object_lookup", "called\n"));
++
++ /*
++ * get our context from mfd
++ * dessertAppParamsTable_interface_ctx *if_ctx =
++ * (dessertAppParamsTable_interface_ctx *)reginfo->my_reg_void;
++ */
++
++ if (NULL == rowreq_ctx) {
++ rc = SNMP_ERR_NOCREATION;
++ }
++
++ if (MFD_SUCCESS != rc)
++ netsnmp_request_set_error_all(requests, rc);
++ else
++ dessertAppParamsTable_row_prep(rowreq_ctx);
++
++ return SNMP_VALIDATE_ERR(rc);
++} /* _mfd_dessertAppParamsTable_object_lookup */
++
++/***********************************************************************
++ *
++ * GET processing
++ *
++ ***********************************************************************/
++/*
++ * @internal
++ * Retrieve the value for a particular column
++ */
++NETSNMP_STATIC_INLINE int
++_dessertAppParamsTable_get_column(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx, netsnmp_variable_list * var,
++ int column)
++{
++ int rc = SNMPERR_SUCCESS;
++
++ DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_dessertAppParamsTable_get_column", "called for %d\n", column));
++
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ switch (column) {
++
++ /*
++ * appParamsName(2)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
++ */
++ case COLUMN_APPPARAMSNAME:
++ if (!(COLUMN_APPPARAMSNAME_FLAG & rowreq_ctx->column_exists_flags)) {
++ DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_dessertAppParamsTable_get_column", "column %d (appParamsName) doesn't exist\n", column));
++ return MFD_SKIP;
++ }
++
++ var->type = ASN_OCTET_STR;
++ rc = appParamsName_get(rowreq_ctx, (char **) &var->val.string,
++ &var->val_len);
++ break;
++
++ /*
++ * appParamsDesc(3)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
++ */
++ case COLUMN_APPPARAMSDESC:
++ if (!(COLUMN_APPPARAMSDESC_FLAG & rowreq_ctx->column_exists_flags)) {
++ DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_dessertAppParamsTable_get_column", "column %d (appParamsDesc) doesn't exist\n", column));
++ return MFD_SKIP;
++ }
++
++ var->type = ASN_OCTET_STR;
++ rc = appParamsDesc_get(rowreq_ctx, (char **) &var->val.string,
++ &var->val_len);
++ break;
++
++ /*
++ * appParamsValueType(4)/DessertAppValueType/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h
++ */
++ case COLUMN_APPPARAMSVALUETYPE:
++ if (!
++ (COLUMN_APPPARAMSVALUETYPE_FLAG & rowreq_ctx->
++ column_exists_flags)) {
++ DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_dessertAppParamsTable_get_column", "column %d (appParamsValueType) doesn't exist\n", column));
++ return MFD_SKIP;
++ }
++
++ var->val_len = sizeof(u_long);
++ var->type = ASN_INTEGER;
++ rc = appParamsValueType_get(rowreq_ctx,
++ (u_long *) var->val.string);
++ break;
++
++ /*
++ * appParamsTruthValue(5)/TruthValue/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
++ */
++ case COLUMN_APPPARAMSTRUTHVALUE:
++ if (!
++ (COLUMN_APPPARAMSTRUTHVALUE_FLAG & rowreq_ctx->
++ column_exists_flags)) {
++ DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_dessertAppParamsTable_get_column", "column %d (appParamsTruthValue) doesn't exist\n", column));
++ return MFD_SKIP;
++ }
++
++ var->val_len = sizeof(u_long);
++ var->type = ASN_INTEGER;
++ rc = appParamsTruthValue_get(rowreq_ctx,
++ (u_long *) var->val.string);
++ break;
++
++ /*
++ * appParamsInteger32(6)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/r/d/h
++ */
++ case COLUMN_APPPARAMSINTEGER32:
++ if (!
++ (COLUMN_APPPARAMSINTEGER32_FLAG & rowreq_ctx->
++ column_exists_flags)) {
++ DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_dessertAppParamsTable_get_column", "column %d (appParamsInteger32) doesn't exist\n", column));
++ return MFD_SKIP;
++ }
++
++ var->val_len = sizeof(long);
++ var->type = ASN_INTEGER;
++ rc = appParamsInteger32_get(rowreq_ctx, (long *) var->val.string);
++ break;
++
++ /*
++ * appParamsUnsigned32(7)/UNSIGNED32/ASN_UNSIGNED/u_long(u_long)//l/A/W/e/r/d/h
++ */
++ case COLUMN_APPPARAMSUNSIGNED32:
++ if (!
++ (COLUMN_APPPARAMSUNSIGNED32_FLAG & rowreq_ctx->
++ column_exists_flags)) {
++ DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_dessertAppParamsTable_get_column", "column %d (appParamsUnsigned32) doesn't exist\n", column));
++ return MFD_SKIP;
++ }
++
++ var->val_len = sizeof(u_long);
++ var->type = ASN_UNSIGNED;
++ rc = appParamsUnsigned32_get(rowreq_ctx,
++ (u_long *) var->val.string);
++ break;
++
++ /*
++ * appParamsOctetString(9)/DessertApplicationOctetString/ASN_OCTET_STR/char(char)//L/A/W/e/R/d/H
++ */
++ case COLUMN_APPPARAMSOCTETSTRING:
++ if (!
++ (COLUMN_APPPARAMSOCTETSTRING_FLAG & rowreq_ctx->
++ column_exists_flags)) {
++ DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_dessertAppParamsTable_get_column", "column %d (appParamsOctetString) doesn't exist\n", column));
++ return MFD_SKIP;
++ }
++
++ var->type = ASN_OCTET_STR;
++ rc = appParamsOctetString_get(rowreq_ctx,
++ (char **) &var->val.string,
++ &var->val_len);
++ break;
++
++ default:
++ if (DESSERTAPPPARAMSTABLE_MIN_COL <= column
++ && column <= DESSERTAPPPARAMSTABLE_MAX_COL) {
++ DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_dessertAppParamsTable_get_column", "assume column %d is reserved\n", column));
++ rc = MFD_SKIP;
++ } else {
++ snmp_log(LOG_ERR,
++ "unknown column %d in _dessertAppParamsTable_get_column\n",
++ column);
++ }
++ break;
++ }
++
++ return rc;
++} /* _dessertAppParamsTable_get_column */
++
++int
++_mfd_dessertAppParamsTable_get_values(netsnmp_mib_handler *handler,
++ netsnmp_handler_registration
++ *reginfo,
++ netsnmp_agent_request_info
++ *agtreq_info,
++ netsnmp_request_info *requests)
++{
++ dessertAppParamsTable_rowreq_ctx *rowreq_ctx =
++ netsnmp_container_table_row_extract(requests);
++ netsnmp_table_request_info *tri;
++ u_char *old_string;
++ void (*dataFreeHook) (void *);
++ int rc;
++
++ DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_dessertAppParamsTable_get_values", "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ DEBUGMSGTL(("9:dessertAppParamsTable:_mfd_dessertAppParamsTable_get_values", "exists %p\n", rowreq_ctx->column_exists_flags));
++
++ for (; requests; requests = requests->next) {
++ /*
++ * save old pointer, so we can free it if replaced
++ */
++ old_string = requests->requestvb->val.string;
++ dataFreeHook = requests->requestvb->dataFreeHook;
++ if (NULL == requests->requestvb->val.string) {
++ requests->requestvb->val.string = requests->requestvb->buf;
++ requests->requestvb->val_len =
++ sizeof(requests->requestvb->buf);
++ } else if (requests->requestvb->buf ==
++ requests->requestvb->val.string) {
++ if (requests->requestvb->val_len !=
++ sizeof(requests->requestvb->buf))
++ requests->requestvb->val_len =
++ sizeof(requests->requestvb->buf);
++ }
++
++ /*
++ * get column data
++ */
++ tri = netsnmp_extract_table_info(requests);
++ if (NULL == tri)
++ continue;
++
++ rc = _dessertAppParamsTable_get_column(rowreq_ctx,
++ requests->requestvb,
++ tri->colnum);
++ if (rc) {
++ if (MFD_SKIP == rc) {
++ requests->requestvb->type = SNMP_NOSUCHINSTANCE;
++ rc = SNMP_ERR_NOERROR;
++ }
++ } else if (NULL == requests->requestvb->val.string) {
++ snmp_log(LOG_ERR, "NULL varbind data pointer!\n");
++ rc = SNMP_ERR_GENERR;
++ }
++ if (rc)
++ netsnmp_request_set_error(requests, SNMP_VALIDATE_ERR(rc));
++
++ /*
++ * if the buffer wasn't used previously for the old data (i.e. it
++ * was allcoated memory) and the get routine replaced the pointer,
++ * we need to free the previous pointer.
++ */
++ if (old_string && (old_string != requests->requestvb->buf) &&
++ (requests->requestvb->val.string != old_string)) {
++ if (dataFreeHook)
++ (*dataFreeHook) (old_string);
++ else
++ free(old_string);
++ }
++ } /* for results */
++
++ return SNMP_ERR_NOERROR;
++} /* _mfd_dessertAppParamsTable_get_values */
++
++
++/***********************************************************************
++ *
++ * SET processing
++ *
++ ***********************************************************************/
++
++/*----------------------------------------------------------------------
++ *
++ * SET: Syntax checks
++ *
++ *---------------------------------------------------------------------*/
++/*
++ * @internal
++ * Check the syntax for a particular column
++ */
++NETSNMP_STATIC_INLINE int
++_dessertAppParamsTable_check_column(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx,
++ netsnmp_variable_list * var,
++ int column)
++{
++ int rc = SNMPERR_SUCCESS;
++
++ DEBUGMSGTL(("internal:dessertAppParamsTable:_dessertAppParamsTable_check_column", "called for %d\n", column));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ switch (column) {
++ /*
++ * (INDEX) appParamsIndex(1)/DessertAppParamsIndex/ASN_INTEGER/long(long)//l/a/w/e/R/d/H
++ */
++ case COLUMN_APPPARAMSINDEX:
++ rc = SNMP_ERR_NOTWRITABLE; /* can not change index of active row */
++ break;
++
++ /*
++ * appParamsName(2)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
++ */
++ case COLUMN_APPPARAMSNAME:
++ rc = SNMP_ERR_NOTWRITABLE;
++ break;
++
++ /*
++ * appParamsDesc(3)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
++ */
++ case COLUMN_APPPARAMSDESC:
++ rc = SNMP_ERR_NOTWRITABLE;
++ break;
++
++ /*
++ * appParamsValueType(4)/DessertAppValueType/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h
++ */
++ case COLUMN_APPPARAMSVALUETYPE:
++ rc = SNMP_ERR_NOTWRITABLE;
++ break;
++
++ /*
++ * appParamsTruthValue(5)/TruthValue/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
++ */
++ case COLUMN_APPPARAMSTRUTHVALUE:
++ rc = netsnmp_check_vb_type_and_size(var, ASN_INTEGER,
++ sizeof(rowreq_ctx->data.
++ appParamsTruthValue));
++ /*
++ * check that the value is one of defined enums
++ */
++ if ((SNMPERR_SUCCESS == rc)
++ && (*var->val.integer != TRUTHVALUE_TRUE)
++ && (*var->val.integer != TRUTHVALUE_FALSE)
++ ) {
++ rc = SNMP_ERR_WRONGVALUE;
++ }
++ if (SNMPERR_SUCCESS != rc) {
++ DEBUGMSGTL(("dessertAppParamsTable:_dessertAppParamsTable_check_column:appParamsTruthValue", "varbind validation failed (eg bad type or size)\n"));
++ } else {
++ rc = appParamsTruthValue_check_value(rowreq_ctx,
++ *((u_long *) var->val.
++ string));
++ if ((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc)
++ && (MFD_NOT_VALID_NOW != rc)) {
++ snmp_log(LOG_ERR,
++ "bad rc %d from appParamsTruthValue_check_value\n",
++ rc);
++ rc = SNMP_ERR_GENERR;
++ }
++ }
++ break;
++
++ /*
++ * appParamsInteger32(6)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/r/d/h
++ */
++ case COLUMN_APPPARAMSINTEGER32:
++ rc = netsnmp_check_vb_type_and_size(var, ASN_INTEGER,
++ sizeof(rowreq_ctx->data.
++ appParamsInteger32));
++ if (SNMPERR_SUCCESS != rc) {
++ DEBUGMSGTL(("dessertAppParamsTable:_dessertAppParamsTable_check_column:appParamsInteger32", "varbind validation failed (eg bad type or size)\n"));
++ } else {
++ rc = appParamsInteger32_check_value(rowreq_ctx,
++ *((long *) var->val.
++ string));
++ if ((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc)
++ && (MFD_NOT_VALID_NOW != rc)) {
++ snmp_log(LOG_ERR,
++ "bad rc %d from appParamsInteger32_check_value\n",
++ rc);
++ rc = SNMP_ERR_GENERR;
++ }
++ }
++ break;
++
++ /*
++ * appParamsUnsigned32(7)/UNSIGNED32/ASN_UNSIGNED/u_long(u_long)//l/A/W/e/r/d/h
++ */
++ case COLUMN_APPPARAMSUNSIGNED32:
++ rc = netsnmp_check_vb_type_and_size(var, ASN_UNSIGNED,
++ sizeof(rowreq_ctx->data.
++ appParamsUnsigned32));
++ if (SNMPERR_SUCCESS != rc) {
++ DEBUGMSGTL(("dessertAppParamsTable:_dessertAppParamsTable_check_column:appParamsUnsigned32", "varbind validation failed (eg bad type or size)\n"));
++ } else {
++ rc = appParamsUnsigned32_check_value(rowreq_ctx,
++ *((u_long *) var->val.
++ string));
++ if ((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc)
++ && (MFD_NOT_VALID_NOW != rc)) {
++ snmp_log(LOG_ERR,
++ "bad rc %d from appParamsUnsigned32_check_value\n",
++ rc);
++ rc = SNMP_ERR_GENERR;
++ }
++ }
++ break;
++
++ /*
++ * appParamsOctetString(9)/DessertApplicationOctetString/ASN_OCTET_STR/char(char)//L/A/W/e/R/d/H
++ */
++ case COLUMN_APPPARAMSOCTETSTRING:
++ rc = netsnmp_check_vb_type_and_max_size(var, ASN_OCTET_STR,
++ sizeof(rowreq_ctx->data.
++ appParamsOctetString));
++ /*
++ * check defined range(s).
++ */
++ if ((SNMPERR_SUCCESS == rc)
++ && ((var->val_len < 0) || (var->val_len > 1024))
++ ) {
++ rc = SNMP_ERR_WRONGLENGTH;
++ }
++ if (SNMPERR_SUCCESS != rc) {
++ DEBUGMSGTL(("dessertAppParamsTable:_dessertAppParamsTable_check_column:appParamsOctetString", "varbind validation failed (eg bad type or size)\n"));
++ } else {
++ rc = appParamsOctetString_check_value(rowreq_ctx,
++ (char *) var->val.string,
++ var->val_len);
++ if ((MFD_SUCCESS != rc) && (MFD_NOT_VALID_EVER != rc)
++ && (MFD_NOT_VALID_NOW != rc)) {
++ snmp_log(LOG_ERR,
++ "bad rc %d from appParamsOctetString_check_value\n",
++ rc);
++ rc = SNMP_ERR_GENERR;
++ }
++ }
++ break;
++
++ default: /** We shouldn't get here */
++ rc = SNMP_ERR_GENERR;
++ snmp_log(LOG_ERR,
++ "unknown column %d in _dessertAppParamsTable_check_column\n",
++ column);
++ }
++
++ return rc;
++} /* _dessertAppParamsTable_check_column */
++
++int
++_mfd_dessertAppParamsTable_check_objects(netsnmp_mib_handler *handler,
++ netsnmp_handler_registration
++ *reginfo,
++ netsnmp_agent_request_info
++ *agtreq_info,
++ netsnmp_request_info *requests)
++{
++ dessertAppParamsTable_rowreq_ctx *rowreq_ctx =
++ netsnmp_container_table_row_extract(requests);
++ netsnmp_table_request_info *tri;
++ int rc;
++
++ DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_dessertAppParamsTable_check_objects", "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ for (; requests; requests = requests->next) {
++
++ /*
++ * get column number from table request info, and check that column
++ */
++ tri = netsnmp_extract_table_info(requests);
++ if (NULL == tri)
++ continue;
++
++ rc = _dessertAppParamsTable_check_column(rowreq_ctx,
++ requests->requestvb,
++ tri->colnum);
++ if (rc) {
++ netsnmp_request_set_error(requests, SNMP_VALIDATE_ERR(rc));
++ break;
++ }
++
++ } /* for results */
++
++ return SNMP_ERR_NOERROR;
++} /* _mfd_dessertAppParamsTable_check_objects */
++
++
++/*----------------------------------------------------------------------
++ *
++ * SET: Undo setup
++ *
++ *---------------------------------------------------------------------*/
++/*
++ * @internal
++ * Set the value for a particular column
++ */
++NETSNMP_STATIC_INLINE int
++_dessertAppParamsTable_undo_setup_column(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx, int column)
++{
++ int rc = SNMPERR_SUCCESS;
++
++ DEBUGMSGTL(("internal:dessertAppParamsTable:_dessertAppParamsTable_undo_setup_column", "called for %d\n", column));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ switch (column) {
++
++ /*
++ * appParamsTruthValue(5)/TruthValue/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
++ */
++ case COLUMN_APPPARAMSTRUTHVALUE:
++ rowreq_ctx->column_set_flags |= COLUMN_APPPARAMSTRUTHVALUE_FLAG;
++ rc = appParamsTruthValue_undo_setup(rowreq_ctx);
++ break;
++
++ /*
++ * appParamsInteger32(6)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/r/d/h
++ */
++ case COLUMN_APPPARAMSINTEGER32:
++ rowreq_ctx->column_set_flags |= COLUMN_APPPARAMSINTEGER32_FLAG;
++ rc = appParamsInteger32_undo_setup(rowreq_ctx);
++ break;
++
++ /*
++ * appParamsUnsigned32(7)/UNSIGNED32/ASN_UNSIGNED/u_long(u_long)//l/A/W/e/r/d/h
++ */
++ case COLUMN_APPPARAMSUNSIGNED32:
++ rowreq_ctx->column_set_flags |= COLUMN_APPPARAMSUNSIGNED32_FLAG;
++ rc = appParamsUnsigned32_undo_setup(rowreq_ctx);
++ break;
++
++ /*
++ * appParamsOctetString(9)/DessertApplicationOctetString/ASN_OCTET_STR/char(char)//L/A/W/e/R/d/H
++ */
++ case COLUMN_APPPARAMSOCTETSTRING:
++ rowreq_ctx->column_set_flags |= COLUMN_APPPARAMSOCTETSTRING_FLAG;
++ rc = appParamsOctetString_undo_setup(rowreq_ctx);
++ break;
++
++ default:
++ snmp_log(LOG_ERR,
++ "unknown column %d in _dessertAppParamsTable_undo_setup_column\n",
++ column);
++ break;
++ }
++
++ return rc;
++} /* _dessertAppParamsTable_undo_setup_column */
++
++
++/**
++ * @internal
++ * undo setup
++ */
++int
++_mfd_dessertAppParamsTable_undo_setup(netsnmp_mib_handler *handler,
++ netsnmp_handler_registration
++ *reginfo,
++ netsnmp_agent_request_info
++ *agtreq_info,
++ netsnmp_request_info *requests)
++{
++ int rc;
++ dessertAppParamsTable_rowreq_ctx *rowreq_ctx =
++ netsnmp_container_table_row_extract(requests);
++
++ DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_dessertAppParamsTable_undo_setup", "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * allocate undo context
++ */
++ rowreq_ctx->undo = dessertAppParamsTable_allocate_data();
++ if (NULL == rowreq_ctx->undo) {
++ /** msg already logged */
++ netsnmp_request_set_error_all(requests,
++ SNMP_ERR_RESOURCEUNAVAILABLE);
++ return SNMP_ERR_NOERROR;
++ }
++
++ /*
++ * row undo setup
++ */
++ rowreq_ctx->column_set_flags = 0;
++ rc = dessertAppParamsTable_undo_setup(rowreq_ctx);
++ if (MFD_SUCCESS != rc) {
++ DEBUGMSGTL(("dessertAppParamsTable:mfd", "error %d from "
++ "dessertAppParamsTable_undo_setup\n", rc));
++ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
++ } else {
++ /*
++ * column undo setup
++ */
++ netsnmp_table_request_info *tri;
++ for (; requests; requests = requests->next) {
++ /*
++ * set column data
++ */
++ tri = netsnmp_extract_table_info(requests);
++ if (NULL == tri)
++ continue;
++
++ rc = _dessertAppParamsTable_undo_setup_column(rowreq_ctx,
++ tri->colnum);
++ if (MFD_SUCCESS != rc) {
++ DEBUGMSGTL(("dessertAppParamsTable:mfd", "error %d from "
++ "dessertAppParamsTable_undo_setup_column\n",
++ rc));
++ netsnmp_set_request_error(agtreq_info, requests,
++ SNMP_VALIDATE_ERR(rc));
++ }
++ } /* for results */
++ }
++
++ return SNMP_ERR_NOERROR;
++} /* _mfd_dessertAppParamsTable_undo_setup */
++
++/**
++ * @internal
++ * undo setup
++ */
++int
++_mfd_dessertAppParamsTable_undo_cleanup(netsnmp_mib_handler *handler,
++ netsnmp_handler_registration
++ *reginfo,
++ netsnmp_agent_request_info
++ *agtreq_info,
++ netsnmp_request_info *requests)
++{
++ dessertAppParamsTable_rowreq_ctx *rowreq_ctx =
++ netsnmp_container_table_row_extract(requests);
++ int rc;
++
++ DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_dessertAppParamsTable_undo_cleanup", "called\n"));
++
++ /*
++ * failed row create in early stages has no rowreq_ctx
++ */
++ if (NULL == rowreq_ctx)
++ return MFD_SUCCESS;
++
++ /*
++ * call user cleanup
++ */
++ rc = dessertAppParamsTable_undo_cleanup(rowreq_ctx);
++ if (MFD_SUCCESS != rc) {
++ /*
++ * nothing we can do about it but log it
++ */
++ DEBUGMSGTL(("dessertAppParamsTable:mfd", "error %d from "
++ "dessertAppParamsTable_undo_cleanup\n", rc));
++ }
++
++ /*
++ * release undo context, if needed
++ */
++ if (rowreq_ctx->undo) {
++ dessertAppParamsTable_release_data(rowreq_ctx->undo);
++ rowreq_ctx->undo = NULL;
++ }
++
++
++ return SNMP_ERR_NOERROR;
++} /* _mfd_dessertAppParamsTable_undo_cleanup */
++
++/*----------------------------------------------------------------------
++ *
++ * SET: Set values
++ *
++ *---------------------------------------------------------------------*/
++/*
++ * @internal
++ * Set the value for a particular column
++ */
++NETSNMP_STATIC_INLINE int
++_dessertAppParamsTable_set_column(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx, netsnmp_variable_list * var,
++ int column)
++{
++ int rc = SNMPERR_SUCCESS;
++
++ DEBUGMSGTL(("internal:dessertAppParamsTable:_dessertAppParamsTable_set_column", "called for %d\n", column));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ switch (column) {
++
++ /*
++ * appParamsTruthValue(5)/TruthValue/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
++ */
++ case COLUMN_APPPARAMSTRUTHVALUE:
++ rowreq_ctx->column_set_flags |= COLUMN_APPPARAMSTRUTHVALUE_FLAG;
++ rc = appParamsTruthValue_set(rowreq_ctx,
++ *((u_long *) var->val.string));
++ break;
++
++ /*
++ * appParamsInteger32(6)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/r/d/h
++ */
++ case COLUMN_APPPARAMSINTEGER32:
++ rowreq_ctx->column_set_flags |= COLUMN_APPPARAMSINTEGER32_FLAG;
++ rc = appParamsInteger32_set(rowreq_ctx,
++ *((long *) var->val.string));
++ break;
++
++ /*
++ * appParamsUnsigned32(7)/UNSIGNED32/ASN_UNSIGNED/u_long(u_long)//l/A/W/e/r/d/h
++ */
++ case COLUMN_APPPARAMSUNSIGNED32:
++ rowreq_ctx->column_set_flags |= COLUMN_APPPARAMSUNSIGNED32_FLAG;
++ rc = appParamsUnsigned32_set(rowreq_ctx,
++ *((u_long *) var->val.string));
++ break;
++
++ /*
++ * appParamsOctetString(9)/DessertApplicationOctetString/ASN_OCTET_STR/char(char)//L/A/W/e/R/d/H
++ */
++ case COLUMN_APPPARAMSOCTETSTRING:
++ rowreq_ctx->column_set_flags |= COLUMN_APPPARAMSOCTETSTRING_FLAG;
++ rc = appParamsOctetString_set(rowreq_ctx, (char *) var->val.string,
++ var->val_len);
++ break;
++
++ default:
++ snmp_log(LOG_ERR,
++ "unknown column %d in _dessertAppParamsTable_set_column\n",
++ column);
++ rc = SNMP_ERR_GENERR;
++ break;
++ }
++
++ return rc;
++} /* _dessertAppParamsTable_set_column */
++
++int
++_mfd_dessertAppParamsTable_set_values(netsnmp_mib_handler *handler,
++ netsnmp_handler_registration
++ *reginfo,
++ netsnmp_agent_request_info
++ *agtreq_info,
++ netsnmp_request_info *requests)
++{
++ dessertAppParamsTable_rowreq_ctx *rowreq_ctx =
++ netsnmp_container_table_row_extract(requests);
++ netsnmp_table_request_info *tri;
++ int rc = SNMP_ERR_NOERROR;
++
++ DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_dessertAppParamsTable_set_values", "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ rowreq_ctx->column_set_flags = 0;
++ for (; requests; requests = requests->next) {
++ /*
++ * set column data
++ */
++ tri = netsnmp_extract_table_info(requests);
++ if (NULL == tri)
++ continue;
++
++ rc = _dessertAppParamsTable_set_column(rowreq_ctx,
++ requests->requestvb,
++ tri->colnum);
++ if (MFD_SUCCESS != rc) {
++ DEBUGMSGTL(("dessertAppParamsTable:mfd", "error %d from "
++ "dessertAppParamsTable_set_column\n", rc));
++ netsnmp_set_request_error(agtreq_info, requests,
++ SNMP_VALIDATE_ERR(rc));
++ }
++ } /* for results */
++
++ return SNMP_ERR_NOERROR;
++} /* _mfd_dessertAppParamsTable_set_values */
++
++/*----------------------------------------------------------------------
++ *
++ * SET: commit
++ *
++ *---------------------------------------------------------------------*/
++/**
++ * @internal
++ * commit the values
++ */
++int
++_mfd_dessertAppParamsTable_commit(netsnmp_mib_handler *handler,
++ netsnmp_handler_registration *reginfo,
++ netsnmp_agent_request_info *agtreq_info,
++ netsnmp_request_info *requests)
++{
++ int rc;
++ dessertAppParamsTable_rowreq_ctx *rowreq_ctx =
++ netsnmp_container_table_row_extract(requests);
++
++ DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_dessertAppParamsTable_commit", "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ rc = dessertAppParamsTable_commit(rowreq_ctx);
++ if (MFD_SUCCESS != rc) {
++ DEBUGMSGTL(("dessertAppParamsTable:mfd", "error %d from "
++ "dessertAppParamsTable_commit\n", rc));
++ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
++ }
++
++ if (rowreq_ctx->rowreq_flags & MFD_ROW_DIRTY) {
++ /*
++ * if we successfully commited this row, set the dirty flag. Use the
++ * current value + 1 (i.e. dirty = # rows changed).
++ * this is checked in post_request...
++ */
++ dessertAppParamsTable_dirty_set(dessertAppParamsTable_dirty_get() + 1); /* set table dirty flag */
++ }
++
++ return SNMP_ERR_NOERROR;
++}
++
++int
++_mfd_dessertAppParamsTable_undo_commit(netsnmp_mib_handler *handler,
++ netsnmp_handler_registration
++ *reginfo,
++ netsnmp_agent_request_info
++ *agtreq_info,
++ netsnmp_request_info *requests)
++{
++ int rc;
++ dessertAppParamsTable_rowreq_ctx *rowreq_ctx =
++ netsnmp_container_table_row_extract(requests);
++
++ DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_dessertAppParamsTable_undo_commit", "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ if (rowreq_ctx->rowreq_flags & MFD_ROW_DIRTY) {
++ u_int d = dessertAppParamsTable_dirty_get();
++
++ netsnmp_assert(d != 0);
++ if (d)
++ dessertAppParamsTable_dirty_set(d - 1);
++ }
++
++ rc = dessertAppParamsTable_undo_commit(rowreq_ctx);
++ if (MFD_SUCCESS != rc) {
++ /*
++ * nothing we can do about it but log it
++ */
++ DEBUGMSGTL(("dessertAppParamsTable:mfd", "error %d from "
++ "dessertAppParamsTable_undo_commit\n", rc));
++ }
++
++ if (rowreq_ctx->rowreq_flags & MFD_ROW_DIRTY) {
++ snmp_log(LOG_WARNING,
++ "dessertAppParamsTable row dirty flag still set after undo_commit\n");
++ rowreq_ctx->rowreq_flags &= ~MFD_ROW_DIRTY;
++ }
++
++ return SNMP_ERR_NOERROR;
++} /* _mfd_dessertAppParamsTable_commit */
++
++/*----------------------------------------------------------------------
++ *
++ * SET: Undo
++ *
++ *---------------------------------------------------------------------*/
++/**
++ * @internal
++ * undo the value for a particular column
++ */
++NETSNMP_STATIC_INLINE int
++_dessertAppParamsTable_undo_column(dessertAppParamsTable_rowreq_ctx *
++ rowreq_ctx, netsnmp_variable_list * var,
++ int column)
++{
++ int rc = SNMPERR_SUCCESS;
++
++ DEBUGMSGTL(("internal:dessertAppParamsTable:_dessertAppParamsTable_undo_column", "called for %d\n", column));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ switch (column) {
++
++ /*
++ * appParamsTruthValue(5)/TruthValue/ASN_INTEGER/long(u_long)//l/A/W/E/r/d/h
++ */
++ case COLUMN_APPPARAMSTRUTHVALUE:
++ rc = appParamsTruthValue_undo(rowreq_ctx);
++ break;
++
++ /*
++ * appParamsInteger32(6)/INTEGER32/ASN_INTEGER/long(long)//l/A/W/e/r/d/h
++ */
++ case COLUMN_APPPARAMSINTEGER32:
++ rc = appParamsInteger32_undo(rowreq_ctx);
++ break;
++
++ /*
++ * appParamsUnsigned32(7)/UNSIGNED32/ASN_UNSIGNED/u_long(u_long)//l/A/W/e/r/d/h
++ */
++ case COLUMN_APPPARAMSUNSIGNED32:
++ rc = appParamsUnsigned32_undo(rowreq_ctx);
++ break;
++
++ /*
++ * appParamsOctetString(9)/DessertApplicationOctetString/ASN_OCTET_STR/char(char)//L/A/W/e/R/d/H
++ */
++ case COLUMN_APPPARAMSOCTETSTRING:
++ rc = appParamsOctetString_undo(rowreq_ctx);
++ break;
++
++ default:
++ snmp_log(LOG_ERR,
++ "unknown column %d in _dessertAppParamsTable_undo_column\n",
++ column);
++ break;
++ }
++
++ return rc;
++} /* _dessertAppParamsTable_undo_column */
++
++int
++_mfd_dessertAppParamsTable_undo_values(netsnmp_mib_handler *handler,
++ netsnmp_handler_registration
++ *reginfo,
++ netsnmp_agent_request_info
++ *agtreq_info,
++ netsnmp_request_info *requests)
++{
++ int rc;
++ dessertAppParamsTable_rowreq_ctx *rowreq_ctx =
++ netsnmp_container_table_row_extract(requests);
++ netsnmp_table_request_info *tri;
++
++ DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_dessertAppParamsTable_undo_values", "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ rc = dessertAppParamsTable_undo(rowreq_ctx);
++ if (MFD_SUCCESS != rc) {
++ /*
++ * nothing we can do about it but log it
++ */
++ DEBUGMSGTL(("dessertAppParamsTable:mfd", "error %d from "
++ "dessertAppParamsTable_undo\n", rc));
++ }
++
++ for (; requests; requests = requests->next) {
++ /*
++ * set column data
++ */
++ tri = netsnmp_extract_table_info(requests);
++ if (NULL == tri)
++ continue;
++
++ rc = _dessertAppParamsTable_undo_column(rowreq_ctx,
++ requests->requestvb,
++ tri->colnum);
++ if (MFD_SUCCESS != rc) {
++ /*
++ * nothing we can do about it but log it
++ */
++ DEBUGMSGTL(("dessertAppParamsTable:mfd", "error %d from "
++ "dessertAppParamsTable_undo_column\n", rc));
++ }
++ } /* for results */
++
++ return SNMP_ERR_NOERROR;
++} /* _mfd_dessertAppParamsTable_undo_values */
++
++/*----------------------------------------------------------------------
++ *
++ * SET: irreversible commit
++ *
++ *---------------------------------------------------------------------*/
++/**
++ * @internal
++ * commit irreversible actions
++ */
++int
++_mfd_dessertAppParamsTable_irreversible_commit(netsnmp_mib_handler
++ *handler,
++ netsnmp_handler_registration
++ *reginfo,
++ netsnmp_agent_request_info
++ *agtreq_info,
++ netsnmp_request_info
++ *requests)
++{
++ dessertAppParamsTable_rowreq_ctx *rowreq_ctx =
++ netsnmp_container_table_row_extract(requests);
++
++ DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_dessertAppParamsTable_irreversible:commit", "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * check for and handle row creation/deletion
++ * and update column exist flags...
++ */
++ if (rowreq_ctx->rowreq_flags & MFD_ROW_DELETED) {
++ if (!(rowreq_ctx->rowreq_flags & MFD_ROW_CREATED))
++ CONTAINER_REMOVE(dessertAppParamsTable_if_ctx.container,
++ rowreq_ctx);
++ } else {
++ if (rowreq_ctx->column_set_flags) {
++ DEBUGMSGTL(("internal:dessertAppParamsTable:_mfd_irreversible_commit", "updating exists (%p) w/set (%p) = %p\n", rowreq_ctx->column_exists_flags, rowreq_ctx->column_set_flags, (rowreq_ctx->column_exists_flags | rowreq_ctx->column_set_flags)));
++ rowreq_ctx->column_exists_flags |=
++ rowreq_ctx->column_set_flags;
++ rowreq_ctx->column_set_flags = 0;
++ }
++ }
++
++ return SNMP_ERR_NOERROR;
++} /* _mfd_dessertAppParamsTable_irreversible_commit */
++
++/***********************************************************************
++ *
++ * DATA ACCESS
++ *
++ ***********************************************************************/
++static void _container_free(netsnmp_container * container);
++
++/**
++ * @internal
++ */
++static int
++_cache_load(netsnmp_cache * cache, void *vmagic)
++{
++ DEBUGMSGTL(("internal:dessertAppParamsTable:_cache_load", "called\n"));
++
++ if ((NULL == cache) || (NULL == cache->magic)) {
++ snmp_log(LOG_ERR,
++ "invalid cache for dessertAppParamsTable_cache_load\n");
++ return -1;
++ }
++
++ /** should only be called for an invalid or expired cache */
++ netsnmp_assert((0 == cache->valid) || (1 == cache->expired));
++
++ /*
++ * call user code
++ */
++ return dessertAppParamsTable_container_load((netsnmp_container *)
++ cache->magic);
++} /* _cache_load */
++
++/**
++ * @internal
++ */
++static void
++_cache_free(netsnmp_cache * cache, void *magic)
++{
++ netsnmp_container *container;
++
++ DEBUGMSGTL(("internal:dessertAppParamsTable:_cache_free", "called\n"));
++
++ if ((NULL == cache) || (NULL == cache->magic)) {
++ snmp_log(LOG_ERR,
++ "invalid cache in dessertAppParamsTable_cache_free\n");
++ return;
++ }
++
++ container = (netsnmp_container *) cache->magic;
++
++ _container_free(container);
++} /* _cache_free */
++
++/**
++ * @internal
++ */
++static void
++_container_item_free(dessertAppParamsTable_rowreq_ctx * rowreq_ctx,
++ void *context)
++{
++ DEBUGMSGTL(("internal:dessertAppParamsTable:_container_item_free",
++ "called\n"));
++
++ if (NULL == rowreq_ctx)
++ return;
++
++ dessertAppParamsTable_release_rowreq_ctx(rowreq_ctx);
++} /* _container_item_free */
++
++/**
++ * @internal
++ */
++static void
++_container_free(netsnmp_container * container)
++{
++ DEBUGMSGTL(("internal:dessertAppParamsTable:_container_free",
++ "called\n"));
++
++ if (NULL == container) {
++ snmp_log(LOG_ERR,
++ "invalid container in dessertAppParamsTable_container_free\n");
++ return;
++ }
++
++ /*
++ * call user code
++ */
++ dessertAppParamsTable_container_free(container);
++
++ /*
++ * free all items. inefficient, but easy.
++ */
++ CONTAINER_CLEAR(container,
++ (netsnmp_container_obj_func *) _container_item_free,
++ NULL);
++} /* _container_free */
++
++/**
++ * @internal
++ * initialize the container with functions or wrappers
++ */
++void
++_dessertAppParamsTable_container_init(dessertAppParamsTable_interface_ctx *
++ if_ctx)
++{
++ DEBUGMSGTL(("internal:dessertAppParamsTable:_dessertAppParamsTable_container_init", "called\n"));
++
++ /*
++ * cache init
++ */
++ if_ctx->cache = netsnmp_cache_create(30, /* timeout in seconds */
++ _cache_load, _cache_free,
++ dessertAppParamsTable_oid,
++ dessertAppParamsTable_oid_size);
++
++ if (NULL == if_ctx->cache) {
++ snmp_log(LOG_ERR,
++ "error creating cache for dessertAppParamsTable\n");
++ return;
++ }
++
++ if_ctx->cache->flags = NETSNMP_CACHE_DONT_INVALIDATE_ON_SET;
++
++ dessertAppParamsTable_container_init(&if_ctx->container,
++ if_ctx->cache);
++ if (NULL == if_ctx->container)
++ if_ctx->container =
++ netsnmp_container_find
++ ("dessertAppParamsTable:table_container");
++ if (NULL == if_ctx->container) {
++ snmp_log(LOG_ERR, "error creating container in "
++ "dessertAppParamsTable_container_init\n");
++ return;
++ }
++
++ if (NULL != if_ctx->cache)
++ if_ctx->cache->magic = (void *) if_ctx->container;
++} /* _dessertAppParamsTable_container_init */
++
++/**
++ * @internal
++ * shutdown the container with functions or wrappers
++ */
++void
++_dessertAppParamsTable_container_shutdown
++ (dessertAppParamsTable_interface_ctx * if_ctx)
++{
++ DEBUGMSGTL(("internal:dessertAppParamsTable:_dessertAppParamsTable_container_shutdown", "called\n"));
++
++ dessertAppParamsTable_container_shutdown(if_ctx->container);
++
++ _container_free(if_ctx->container);
++
++} /* _dessertAppParamsTable_container_shutdown */
++
++
++dessertAppParamsTable_rowreq_ctx *
++dessertAppParamsTable_row_find_by_mib_index(dessertAppParamsTable_mib_index
++ * mib_idx)
++{
++ dessertAppParamsTable_rowreq_ctx *rowreq_ctx;
++ oid oid_tmp[MAX_OID_LEN];
++ netsnmp_index oid_idx;
++ int rc;
++
++ /*
++ * set up storage for OID
++ */
++ oid_idx.oids = oid_tmp;
++ oid_idx.len = sizeof(oid_tmp) / sizeof(oid);
++
++ /*
++ * convert
++ */
++ rc = dessertAppParamsTable_index_to_oid(&oid_idx, mib_idx);
++ if (MFD_SUCCESS != rc)
++ return NULL;
++
++ rowreq_ctx =
++ CONTAINER_FIND(dessertAppParamsTable_if_ctx.container, &oid_idx);
++
++ return rowreq_ctx;
++}
+Index: libdessert0.86-0.86.14/src/snmp/dessertAppParamsTable_interface.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertAppParamsTable_interface.h 2009-12-09 16:38:27.318667257 +0100
+@@ -0,0 +1,101 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * version : 15899 $ of $
++ *
++ * $Id:$
++ */
++/** @ingroup interface: Routines to interface to Net-SNMP
++ *
++ * \warning This code should not be modified, called directly,
++ * or used to interpret functionality. It is subject to
++ * change at any time.
++ *
++ * @{
++ */
++/*
++ * *********************************************************************
++ * *********************************************************************
++ * *********************************************************************
++ * *** ***
++ * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
++ * *** ***
++ * *** ***
++ * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
++ * *** ***
++ * *** ***
++ * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
++ * *** ***
++ * *** ***
++ * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
++ * *** ***
++ * *** ***
++ * *********************************************************************
++ * *********************************************************************
++ * *********************************************************************
++ */
++#ifndef DESSERTAPPPARAMSTABLE_INTERFACE_H
++#define DESSERTAPPPARAMSTABLE_INTERFACE_H
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++
++#include "dessertAppParamsTable.h"
++
++
++ /*
++ ********************************************************************
++ * Table declarations
++ */
++
++ /*
++ * PUBLIC interface initialization routine
++ */
++ void
++ _dessertAppParamsTable_initialize_interface
++ (dessertAppParamsTable_registration * user_ctx, u_long flags);
++ void
++ _dessertAppParamsTable_shutdown_interface
++ (dessertAppParamsTable_registration * user_ctx);
++
++ dessertAppParamsTable_registration
++ *dessertAppParamsTable_registration_get(void);
++
++ dessertAppParamsTable_registration
++ *dessertAppParamsTable_registration_set
++ (dessertAppParamsTable_registration * newreg);
++
++ netsnmp_container *dessertAppParamsTable_container_get(void);
++ int dessertAppParamsTable_container_size(void);
++
++ u_int dessertAppParamsTable_dirty_get(void);
++ void dessertAppParamsTable_dirty_set(u_int status);
++
++ dessertAppParamsTable_rowreq_ctx
++ *dessertAppParamsTable_allocate_rowreq_ctx(void);
++ void
++ dessertAppParamsTable_release_rowreq_ctx
++ (dessertAppParamsTable_rowreq_ctx * rowreq_ctx);
++
++ int dessertAppParamsTable_index_to_oid(netsnmp_index *
++ oid_idx,
++ dessertAppParamsTable_mib_index
++ * mib_idx);
++ int dessertAppParamsTable_index_from_oid(netsnmp_index *
++ oid_idx,
++ dessertAppParamsTable_mib_index
++ * mib_idx);
++
++ /*
++ * access to certain internals. use with caution!
++ */
++ void
++ dessertAppParamsTable_valid_columns_set(netsnmp_column_info *vc);
++
++
++#ifdef __cplusplus
++}
++#endif
++#endif /* DESSERTAPPPARAMSTABLE_INTERFACE_H */
++/** @} */
+Index: libdessert0.86-0.86.14/src/snmp/dessertAppParamsTable_oids.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertAppParamsTable_oids.h 2009-12-09 16:38:27.318667257 +0100
+@@ -0,0 +1,56 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * : generic-table-oids.m2c 12855 2005-09-27 15:56:08Z rstory $
++ *
++ * $Id:$
++ */
++#ifndef DESSERTAPPPARAMSTABLE_OIDS_H
++#define DESSERTAPPPARAMSTABLE_OIDS_H
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++
++ /*
++ * column number definitions for table dessertAppParamsTable
++ */
++#define DESSERTAPPPARAMSTABLE_OID 1,3,6,1,4,1,18898,0,19,10,1,1,9
++
++#define COLUMN_APPPARAMSINDEX 1
++
++#define COLUMN_APPPARAMSNAME 2
++#define COLUMN_APPPARAMSNAME_FLAG (0x1 << 1)
++
++#define COLUMN_APPPARAMSDESC 3
++#define COLUMN_APPPARAMSDESC_FLAG (0x1 << 2)
++
++#define COLUMN_APPPARAMSVALUETYPE 4
++#define COLUMN_APPPARAMSVALUETYPE_FLAG (0x1 << 3)
++
++#define COLUMN_APPPARAMSTRUTHVALUE 5
++#define COLUMN_APPPARAMSTRUTHVALUE_FLAG (0x1 << 4)
++
++#define COLUMN_APPPARAMSINTEGER32 6
++#define COLUMN_APPPARAMSINTEGER32_FLAG (0x1 << 5)
++
++#define COLUMN_APPPARAMSUNSIGNED32 7
++#define COLUMN_APPPARAMSUNSIGNED32_FLAG (0x1 << 6)
++
++#define COLUMN_APPPARAMSOCTETSTRING 9
++#define COLUMN_APPPARAMSOCTETSTRING_FLAG (0x1 << 8)
++
++
++#define DESSERTAPPPARAMSTABLE_MIN_COL COLUMN_APPPARAMSNAME
++#define DESSERTAPPPARAMSTABLE_MAX_COL COLUMN_APPPARAMSOCTETSTRING
++
++
++ /*
++ * OR together all the writable cols.
++ */
++#define DESSERTAPPPARAMSTABLE_SETTABLE_COLS (COLUMN_APPPARAMSTRUTHVALUE_FLAG | COLUMN_APPPARAMSINTEGER32_FLAG | COLUMN_APPPARAMSUNSIGNED32_FLAG | COLUMN_APPPARAMSOCTETSTRING_FLAG)
++
++#ifdef __cplusplus
++}
++#endif
++#endif /* DESSERTAPPPARAMSTABLE_OIDS_H */
+Index: libdessert0.86-0.86.14/src/snmp/dessertAppStatsTable.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertAppStatsTable.c 2009-12-09 16:38:27.318667257 +0100
+@@ -0,0 +1,173 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * version : 14170 $ of $
++ *
++ * $Id:$
++ */
++/** \page MFD helper for dessertAppStatsTable
++ *
++ * \section intro Introduction
++ * Introductory text.
++ *
++ */
++/*
++ * standard Net-SNMP includes
++ */
++#include <net-snmp/net-snmp-config.h>
++#include <net-snmp/net-snmp-includes.h>
++#include <net-snmp/agent/net-snmp-agent-includes.h>
++
++/*
++ * include our parent header
++ */
++#include "dessertAppStatsTable.h"
++
++#include <net-snmp/agent/mib_modules.h>
++
++#include "dessertAppStatsTable_interface.h"
++
++oid dessertAppStatsTable_oid[] = { DESSERTAPPSTATSTABLE_OID };
++
++int dessertAppStatsTable_oid_size =
++OID_LENGTH(dessertAppStatsTable_oid);
++
++dessertAppStatsTable_registration dessertAppStatsTable_user_context;
++
++void initialize_table_dessertAppStatsTable(void);
++void shutdown_table_dessertAppStatsTable(void);
++
++
++/**
++ * Initializes the dessertAppStatsTable module
++ */
++void
++init_dessertAppStatsTable(void)
++{
++ DEBUGMSGTL(("verbose:dessertAppStatsTable:init_dessertAppStatsTable",
++ "called\n"));
++
++ /*
++ * TODO:300:o: Perform dessertAppStatsTable one-time module initialization.
++ */
++
++ /*
++ * here we initialize all the tables we're planning on supporting
++ */
++ if (should_init("dessertAppStatsTable"))
++ initialize_table_dessertAppStatsTable();
++
++} /* init_dessertAppStatsTable */
++
++/**
++ * Shut-down the dessertAppStatsTable module (agent is exiting)
++ */
++void
++shutdown_dessertAppStatsTable(void)
++{
++ if (should_init("dessertAppStatsTable"))
++ shutdown_table_dessertAppStatsTable();
++
++}
++
++/**
++ * Initialize the table dessertAppStatsTable
++ * (Define its contents and how it's structured)
++ */
++void
++initialize_table_dessertAppStatsTable(void)
++{
++ dessertAppStatsTable_registration *user_context;
++ u_long flags;
++
++ DEBUGMSGTL(("verbose:dessertAppStatsTable:initialize_table_dessertAppStatsTable", "called\n"));
++
++ /*
++ * TODO:301:o: Perform dessertAppStatsTable one-time table initialization.
++ */
++
++ /*
++ * TODO:302:o: |->Initialize dessertAppStatsTable user context
++ * if you'd like to pass in a pointer to some data for this
++ * table, allocate or set it up here.
++ */
++ /*
++ * a netsnmp_data_list is a simple way to store void pointers. A simple
++ * string token is used to add, find or remove pointers.
++ */
++ user_context =
++ netsnmp_create_data_list("dessertAppStatsTable", NULL, NULL);
++
++ /*
++ * No support for any flags yet, but in the future you would
++ * set any flags here.
++ */
++ flags = 0;
++
++ /*
++ * call interface initialization code
++ */
++ _dessertAppStatsTable_initialize_interface(user_context, flags);
++} /* initialize_table_dessertAppStatsTable */
++
++/**
++ * Shutdown the table dessertAppStatsTable
++ */
++void
++shutdown_table_dessertAppStatsTable(void)
++{
++ /*
++ * call interface shutdown code
++ */
++ _dessertAppStatsTable_shutdown_interface
++ (&dessertAppStatsTable_user_context);
++}
++
++/**
++ * pre-request callback
++ *
++ *
++ * @retval MFD_SUCCESS : success.
++ * @retval MFD_ERROR : other error
++ */
++int
++dessertAppStatsTable_pre_request(dessertAppStatsTable_registration *
++ user_context)
++{
++ DEBUGMSGTL(("verbose:dessertAppStatsTable:dessertAppStatsTable_pre_request", "called\n"));
++
++ /*
++ * TODO:510:o: Perform dessertAppStatsTable pre-request actions.
++ */
++
++ return MFD_SUCCESS;
++} /* dessertAppStatsTable_pre_request */
++
++/**
++ * post-request callback
++ *
++ * Note:
++ * New rows have been inserted into the container, and
++ * deleted rows have been removed from the container and
++ * released.
++ *
++ * @param user_context
++ * @param rc : MFD_SUCCESS if all requests succeeded
++ *
++ * @retval MFD_SUCCESS : success.
++ * @retval MFD_ERROR : other error (ignored)
++ */
++int
++dessertAppStatsTable_post_request(dessertAppStatsTable_registration *
++ user_context, int rc)
++{
++ DEBUGMSGTL(("verbose:dessertAppStatsTable:dessertAppStatsTable_post_request", "called\n"));
++
++ /*
++ * TODO:511:o: Perform dessertAppStatsTable post-request actions.
++ */
++
++ return MFD_SUCCESS;
++} /* dessertAppStatsTable_post_request */
++
++
++/** @{ */
+Index: libdessert0.86-0.86.14/src/snmp/dessertAppStatsTable.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertAppStatsTable.h 2009-12-09 16:38:27.318667257 +0100
+@@ -0,0 +1,251 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * version : 14170 $ of $
++ *
++ * $Id:$
++ */
++#ifndef DESSERTAPPSTATSTABLE_H
++#define DESSERTAPPSTATSTABLE_H
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++
++/** @addtogroup misc misc: Miscellaneous routines
++ *
++ * @{
++ */
++#include <net-snmp/library/asn1.h>
++
++ /*
++ * other required module components
++ */
++ /* *INDENT-OFF* */
++config_add_mib(DESSERT-MIB)
++config_require(DESSERT-MIB/dessertAppStatsTable/dessertAppStatsTable_interface)
++config_require(DESSERT-MIB/dessertAppStatsTable/dessertAppStatsTable_data_access)
++config_require(DESSERT-MIB/dessertAppStatsTable/dessertAppStatsTable_data_get)
++config_require(DESSERT-MIB/dessertAppStatsTable/dessertAppStatsTable_data_set)
++ /* *INDENT-ON* */
++
++ /*
++ * OID and column number definitions for dessertAppStatsTable
++ */
++#include "dessertAppStatsTable_oids.h"
++
++ /*
++ * enum definions
++ */
++#include "dessertAppStatsTable_enums.h"
++
++ /*
++ *********************************************************************
++ * function declarations
++ */
++ void init_dessertAppStatsTable(void);
++ void shutdown_dessertAppStatsTable(void);
++
++ /*
++ *********************************************************************
++ * Table declarations
++ */
++/**********************************************************************
++ **********************************************************************
++ ***
++ *** Table dessertAppStatsTable
++ ***
++ **********************************************************************
++ **********************************************************************/
++ /*
++ * DESSERT-MIB::dessertAppStatsTable is subid 9 of dessertObjects.
++ * Its status is Current.
++ * OID: .1.3.6.1.4.1.18898.0.19.42.1.9, length: 12
++ */
++ /*
++ *********************************************************************
++ * When you register your mib, you get to provide a generic
++ * pointer that will be passed back to you for most of the
++ * functions calls.
++ *
++ * TODO:100:r: Review all context structures
++ */
++ /*
++ * TODO:101:o: |-> Review dessertAppStatsTable registration context.
++ */
++ typedef netsnmp_data_list dessertAppStatsTable_registration;
++
++/**********************************************************************/
++ /*
++ * TODO:110:r: |-> Review dessertAppStatsTable data context structure.
++ * This structure is used to represent the data for dessertAppStatsTable.
++ */
++ /*
++ * This structure contains storage for all the columns defined in the
++ * dessertAppStatsTable.
++ */
++ typedef struct dessertAppStatsTable_data_s {
++
++ /*
++ * appStatsName(2)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
++ */
++ char appStatsName[255];
++ size_t appStatsName_len; /* # of char elements, not bytes */
++
++ /*
++ * appStatsDesc(3)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
++ */
++ char appStatsDesc[255];
++ size_t appStatsDesc_len; /* # of char elements, not bytes */
++
++ /*
++ * appStatsNodeOrLink(4)/INTEGER/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h
++ */
++ u_long appStatsNodeOrLink;
++
++ /*
++ * appStatsValueType(5)/INTEGER/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h
++ */
++ u_long appStatsValueType;
++
++ /*
++ * appStatsMacAddress1(6)/MacAddress/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
++ */
++ char appStatsMacAddress1[6];
++ size_t appStatsMacAddress1_len; /* # of char elements, not bytes */
++
++ /*
++ * appStatsMacAddress2(7)/MacAddress/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
++ */
++ char appStatsMacAddress2[6];
++ size_t appStatsMacAddress2_len; /* # of char elements, not bytes */
++
++ /*
++ * appStatsTruthValue(8)/TruthValue/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h
++ */
++ u_long appStatsTruthValue;
++
++ /*
++ * appStatsInteger32(9)/INTEGER32/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
++ */
++ long appStatsInteger32;
++
++ /*
++ * appStatsUnsigned32(10)/UNSIGNED32/ASN_UNSIGNED/u_long(u_long)//l/A/w/e/r/d/h
++ */
++ u_long appStatsUnsigned32;
++
++ /*
++ * appStatsCounter64(11)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
++ */
++ U64 appStatsCounter64;
++
++ /*
++ * appStatsOctetString(12)/OCTETSTR/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/h
++ */
++ char appStatsOctetString[1024];
++ size_t appStatsOctetString_len; /* # of char elements, not bytes */
++
++ } dessertAppStatsTable_data;
++
++
++ /*
++ * TODO:120:r: |-> Review dessertAppStatsTable mib index.
++ * This structure is used to represent the index for dessertAppStatsTable.
++ */
++ typedef struct dessertAppStatsTable_mib_index_s {
++
++ /*
++ * appStatsIndex(1)///()//L/a/w/e/r/d/h
++ */
++ long appStatsIndex;
++
++
++ } dessertAppStatsTable_mib_index;
++
++ /*
++ * TODO:121:r: | |-> Review dessertAppStatsTable max index length.
++ * If you KNOW that your indexes will never exceed a certain
++ * length, update this macro to that length.
++ */
++#define MAX_dessertAppStatsTable_IDX_LEN 1
++
++
++ /*
++ *********************************************************************
++ * TODO:130:o: |-> Review dessertAppStatsTable Row request (rowreq) context.
++ * When your functions are called, you will be passed a
++ * dessertAppStatsTable_rowreq_ctx pointer.
++ */
++ typedef struct dessertAppStatsTable_rowreq_ctx_s {
++
++ /** this must be first for container compare to work */
++ netsnmp_index oid_idx;
++ oid oid_tmp[MAX_dessertAppStatsTable_IDX_LEN];
++
++ dessertAppStatsTable_mib_index tbl_idx;
++
++ dessertAppStatsTable_data data;
++ unsigned int column_exists_flags; /* flags for existence */
++
++ /*
++ * flags per row. Currently, the first (lower) 8 bits are reserved
++ * for the user. See mfd.h for other flags.
++ */
++ u_int rowreq_flags;
++
++ /*
++ * TODO:131:o: | |-> Add useful data to dessertAppStatsTable rowreq context.
++ */
++
++ /*
++ * storage for future expansion
++ */
++ netsnmp_data_list *dessertAppStatsTable_data_list;
++
++ } dessertAppStatsTable_rowreq_ctx;
++
++ typedef struct dessertAppStatsTable_ref_rowreq_ctx_s {
++ dessertAppStatsTable_rowreq_ctx *rowreq_ctx;
++ } dessertAppStatsTable_ref_rowreq_ctx;
++
++ /*
++ *********************************************************************
++ * function prototypes
++ */
++ int
++ dessertAppStatsTable_pre_request(dessertAppStatsTable_registration
++ * user_context);
++ int
++ dessertAppStatsTable_post_request(dessertAppStatsTable_registration
++ * user_context, int rc);
++
++
++ dessertAppStatsTable_rowreq_ctx
++ *dessertAppStatsTable_row_find_by_mib_index
++ (dessertAppStatsTable_mib_index * mib_idx);
++
++ extern oid dessertAppStatsTable_oid[];
++ extern int dessertAppStatsTable_oid_size;
++
++
++#include "dessertAppStatsTable_interface.h"
++#include "dessertAppStatsTable_data_access.h"
++#include "dessertAppStatsTable_data_get.h"
++#include "dessertAppStatsTable_data_set.h"
++
++ /*
++ * DUMMY markers, ignore
++ *
++ * TODO:099:x: *************************************************************
++ * TODO:199:x: *************************************************************
++ * TODO:299:x: *************************************************************
++ * TODO:399:x: *************************************************************
++ * TODO:499:x: *************************************************************
++ */
++
++#ifdef __cplusplus
++}
++#endif
++#endif /* DESSERTAPPSTATSTABLE_H */
++/** @} */
+Index: libdessert0.86-0.86.14/src/snmp/dessertAppStatsTable_data_access.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertAppStatsTable_data_access.c 2009-12-09 16:38:27.318667257 +0100
+@@ -0,0 +1,407 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * version : 14170 $ of $
++ *
++ * $Id:$
++ */
++/*
++ * standard Net-SNMP includes
++ */
++#include <net-snmp/net-snmp-config.h>
++#include <net-snmp/net-snmp-includes.h>
++#include <net-snmp/agent/net-snmp-agent-includes.h>
++
++/*
++ * include our parent header
++ */
++#include "dessertAppStatsTable.h"
++#include "dessertAppStatsTable_data_access.h"
++#include <dessert/dessert.h>
++#include "dessert_internal.h"
++
++/** @ingroup interface
++ * @addtogroup data_access data_access: Routines to access data
++ *
++ * These routines are used to locate the data used to satisfy
++ * requests.
++ *
++ * @{
++ */
++/**********************************************************************
++ **********************************************************************
++ ***
++ *** Table dessertAppStatsTable
++ ***
++ **********************************************************************
++ **********************************************************************/
++/*
++ * DESSERT-MIB::dessertAppStatsTable is subid 9 of dessertObjects.
++ * Its status is Current.
++ * OID: .1.3.6.1.4.1.18898.0.19.42.1.9, length: 12
++ */
++
++/**
++ * initialization for dessertAppStatsTable data access
++ *
++ * This function is called during startup to allow you to
++ * allocate any resources you need for the data table.
++ *
++ * @param dessertAppStatsTable_reg
++ * Pointer to dessertAppStatsTable_registration
++ *
++ * @retval MFD_SUCCESS : success.
++ * @retval MFD_ERROR : unrecoverable error.
++ */
++int
++dessertAppStatsTable_init_data(dessertAppStatsTable_registration *
++ dessertAppStatsTable_reg)
++{
++ DEBUGMSGTL(("verbose:dessertAppStatsTable:dessertAppStatsTable_init_data", "called\n"));
++
++ /*
++ * TODO:303:o: Initialize dessertAppStatsTable data.
++ */
++ /*
++ ***************************************************
++ *** START EXAMPLE CODE ***
++ ***---------------------------------------------***/
++ /*
++ * if you are the sole writer for the file, you could
++ * open it here. However, as stated earlier, we are assuming
++ * the worst case, which in this case means that the file is
++ * written to by someone else, and might not even exist when
++ * we start up. So we can't do anything here.
++ */
++ /*
++ ***---------------------------------------------***
++ *** END EXAMPLE CODE ***
++ ***************************************************/
++
++ return MFD_SUCCESS;
++} /* dessertAppStatsTable_init_data */
++
++/**
++ * container overview
++ *
++ */
++
++/**
++ * container initialization
++ *
++ * @param container_ptr_ptr A pointer to a container pointer. If you
++ * create a custom container, use this parameter to return it
++ * to the MFD helper. If set to NULL, the MFD helper will
++ * allocate a container for you.
++ * @param cache A pointer to a cache structure. You can set the timeout
++ * and other cache flags using this pointer.
++ *
++ * This function is called at startup to allow you to customize certain
++ * aspects of the access method. For the most part, it is for advanced
++ * users. The default code should suffice for most cases. If no custom
++ * container is allocated, the MFD code will create one for your.
++ *
++ * This is also the place to set up cache behavior. The default, to
++ * simply set the cache timeout, will work well with the default
++ * container. If you are using a custom container, you may want to
++ * look at the cache helper documentation to see if there are any
++ * flags you want to set.
++ *
++ * @remark
++ * This would also be a good place to do any initialization needed
++ * for you data source. For example, opening a connection to another
++ * process that will supply the data, opening a database, etc.
++ */
++void
++dessertAppStatsTable_container_init(netsnmp_container ** container_ptr_ptr,
++ netsnmp_cache * cache)
++{
++ DEBUGMSGTL(("verbose:dessertAppStatsTable:dessertAppStatsTable_container_init", "called\n"));
++
++ if (NULL == container_ptr_ptr) {
++ snmp_log(LOG_ERR,
++ "bad container param to dessertAppStatsTable_container_init\n");
++ return;
++ }
++
++ /*
++ * For advanced users, you can use a custom container. If you
++ * do not create one, one will be created for you.
++ */
++ *container_ptr_ptr = NULL;
++
++ if (NULL == cache) {
++ snmp_log(LOG_ERR,
++ "bad cache param to dessertAppStatsTable_container_init\n");
++ return;
++ }
++
++ /*
++ * TODO:345:A: Set up dessertAppStatsTable cache properties.
++ *
++ * Also for advanced users, you can set parameters for the
++ * cache. Do not change the magic pointer, as it is used
++ * by the MFD helper. To completely disable caching, set
++ * cache->enabled to 0.
++ */
++ cache->timeout = DESSERTAPPSTATSTABLE_CACHE_TIMEOUT; /* seconds */
++} /* dessertAppStatsTable_container_init */
++
++/**
++ * container shutdown
++ *
++ * @param container_ptr A pointer to the container.
++ *
++ * This function is called at shutdown to allow you to customize certain
++ * aspects of the access method. For the most part, it is for advanced
++ * users. The default code should suffice for most cases.
++ *
++ * This function is called before dessertAppStatsTable_container_free().
++ *
++ * @remark
++ * This would also be a good place to do any cleanup needed
++ * for you data source. For example, closing a connection to another
++ * process that supplied the data, closing a database, etc.
++ */
++void
++dessertAppStatsTable_container_shutdown(netsnmp_container * container_ptr)
++{
++ DEBUGMSGTL(("verbose:dessertAppStatsTable:dessertAppStatsTable_container_shutdown", "called\n"));
++
++ if (NULL == container_ptr) {
++ snmp_log(LOG_ERR,
++ "bad params to dessertAppStatsTable_container_shutdown\n");
++ return;
++ }
++
++} /* dessertAppStatsTable_container_shutdown */
++
++/**
++ * load initial data
++ *
++ * This function will also be called by the cache helper to load
++ * the container again (after the container free function has been
++ * called to free the previous contents).
++ *
++ * @param container container to which items should be inserted
++ *
++ * @retval MFD_SUCCESS : success.
++ * @retval MFD_RESOURCE_UNAVAILABLE : Can't access data source
++ * @retval MFD_ERROR : other error.
++ *
++ * This function is called to load the index(es) (and data, optionally)
++ * for the every row in the data set.
++ *
++ * @remark
++ * While loading the data, the only important thing is the indexes.
++ * If access to your data is cheap/fast (e.g. you have a pointer to a
++ * structure in memory), it would make sense to update the data here.
++ * If, however, the accessing the data invovles more work (e.g. parsing
++ * some other existing data, or peforming calculations to derive the data),
++ * then you can limit yourself to setting the indexes and saving any
++ * information you will need later. Then use the saved information in
++ * dessertAppStatsTable_row_prep() for populating data.
++ *
++ * @note
++ * If you need consistency between rows (like you want statistics
++ * for each row to be from the same time frame), you should set all
++ * data here.
++ *
++ */
++int dessertAppStatsTable_container_load(netsnmp_container * container) {
++ dessertAppStatsTable_rowreq_ctx *rowreq_ctx;
++ size_t count = 0;
++
++ dessert_agentx_appstats_t *appstats_list = NULL;
++ dessert_agentx_appstats_t *appstat;
++
++ /*
++ * temporary storage for index values
++ */
++ long appStatsIndex;
++
++ DEBUGMSGTL(("verbose:dessertAppStatsTable:dessertAppStatsTable_container_load", "called\n"));
++ dessert_debug("dessertAppStatsTable_container_load called");
++
++ /* harvest the appstats from the callbacks registered via *dessert_agentx_appstats_add* */
++ if (_dessert_agentx_appstats_harvest_callbacks(&appstats_list)
++ == DESSERT_ERR)
++ return MFD_RESOURCE_UNAVAILABLE;
++
++ /*
++ * Load/update data in the dessertAppStatsTable container.
++ * loop over your dessertAppStatsTable data, allocate a rowreq context,
++ * set the index(es) [and data, optionally] and insert into
++ * the container.
++ */
++ DL_FOREACH(appstats_list, appstat) {
++
++ appStatsIndex = count++;
++
++ /*
++ * set indexes in new dessertAppStatsTable rowreq context.
++ */
++ rowreq_ctx = dessertAppStatsTable_allocate_rowreq_ctx();
++ if (NULL == rowreq_ctx) {
++ snmp_log(LOG_ERR, "memory allocation failed\n");
++ return MFD_RESOURCE_UNAVAILABLE;
++ }
++ if (MFD_SUCCESS != dessertAppStatsTable_indexes_set(rowreq_ctx,
++ appStatsIndex)) {
++ snmp_log(LOG_ERR, "error setting index while loading "
++ "dessertAppStatsTable data.\n");
++ dessertAppStatsTable_release_rowreq_ctx(rowreq_ctx);
++ continue;
++ }
++
++ /* clear all column flags */
++ rowreq_ctx->column_exists_flags = 0;
++
++ /* these columns are always present*/
++ rowreq_ctx->column_exists_flags |= COLUMN_APPSTATSNAME_FLAG
++ | COLUMN_APPSTATSDESC_FLAG | COLUMN_APPSTATSNODEORLINK_FLAG
++ | COLUMN_APPSTATSVALUETYPE_FLAG;
++
++ rowreq_ctx->data.appStatsName_len = strlen(appstat->name);
++ strcpy(rowreq_ctx->data.appStatsName, appstat->name);
++
++ rowreq_ctx->data.appStatsDesc_len = strlen(appstat->desc);
++ strcpy(rowreq_ctx->data.appStatsDesc, appstat->desc);
++
++ appStatsNodeOrLink_map(&(rowreq_ctx->data.appStatsNodeOrLink),appstat->node_or_link);
++ appStatsValueType_map(&(rowreq_ctx->data.appStatsValueType),appstat->value_type);
++
++ /* are the macaddress? columns present?*/
++ switch (appstat->node_or_link) {
++
++ case DESSERT_APPSTATS_NODEORLINK_NONE:
++ break;
++ case DESSERT_APPSTATS_NODEORLINK_NODE:
++ rowreq_ctx->column_exists_flags |= COLUMN_APPSTATSMACADDRESS1_FLAG;
++
++ rowreq_ctx->data.appStatsMacAddress1_len = ETHER_ADDR_LEN;
++ memcpy(rowreq_ctx->data.appStatsMacAddress1, appstat->macaddress1,
++ ETHER_ADDR_LEN);
++
++ break;
++ case DESSERT_APPSTATS_NODEORLINK_LINK:
++ rowreq_ctx->column_exists_flags |= COLUMN_APPSTATSMACADDRESS1_FLAG
++ | COLUMN_APPSTATSMACADDRESS2_FLAG;
++
++ rowreq_ctx->data.appStatsMacAddress1_len = ETHER_ADDR_LEN;
++ memcpy(rowreq_ctx->data.appStatsMacAddress1, appstat->macaddress1,
++ ETHER_ADDR_LEN);
++
++ rowreq_ctx->data.appStatsMacAddress2_len = ETHER_ADDR_LEN;
++ memcpy(rowreq_ctx->data.appStatsMacAddress2, appstat->macaddress2,
++ ETHER_ADDR_LEN);
++
++ break;
++ default:
++ dessert_err("appstats->node_or_link not valid!");
++ }
++
++ /* which of the 'value'-columns is actually present? */
++ switch (appstat->value_type) {
++
++ case DESSERT_APPSTATS_VALUETYPE_BOOL:
++ rowreq_ctx->column_exists_flags |= COLUMN_APPSTATSTRUTHVALUE_FLAG;
++ appStatsTruthValue_map(&(rowreq_ctx->data.appStatsTruthValue),appstat->bool);
++ break;
++
++ case DESSERT_APPSTATS_VALUETYPE_INT32:
++ rowreq_ctx->column_exists_flags |= COLUMN_APPSTATSINTEGER32_FLAG;
++ rowreq_ctx->data.appStatsInteger32 = appstat->int32;
++
++ break;
++
++ case DESSERT_APPSTATS_VALUETYPE_UINT32:
++ rowreq_ctx->column_exists_flags |= COLUMN_APPSTATSUNSIGNED32_FLAG;
++ rowreq_ctx->data.appStatsUnsigned32 = appstat->uint32;
++
++ break;
++
++ case DESSERT_APPSTATS_VALUETYPE_COUNTER64:
++ rowreq_ctx->column_exists_flags |= COLUMN_APPSTATSCOUNTER64_FLAG;
++ rowreq_ctx->data.appStatsCounter64.low = appstat->counter64
++ & 0xffffffff;
++ rowreq_ctx->data.appStatsCounter64.high = appstat->counter64 >> 32;
++
++ break;
++
++ case DESSERT_APPSTATS_VALUETYPE_OCTETSTRING:
++ rowreq_ctx->column_exists_flags |= COLUMN_APPSTATSOCTETSTRING_FLAG;
++ rowreq_ctx->data.appStatsOctetString_len = appstat->octetstring_len;
++ memcpy(&(rowreq_ctx->data.appStatsOctetString), appstat->octetstring, appstat->octetstring_len);
++
++ break;
++
++ default:
++ dessert_err("appstats->value_type not valid! [%s]", appstat->name);
++ }
++
++ /*
++ * insert into table container
++ */
++ CONTAINER_INSERT(container, rowreq_ctx);
++ }
++
++ _dessert_agentx_appstats_free_list(&appstats_list);
++
++ DEBUGMSGT(("verbose:dessertAppStatsTable:dessertAppStatsTable_container_load", "inserted %d records\n", count));
++
++ return MFD_SUCCESS;
++} /* dessertAppStatsTable_container_load */
++
++/**
++ * container clean up
++ *
++ * @param container container with all current items
++ *
++ * This optional callback is called prior to all
++ * item's being removed from the container. If you
++ * need to do any processing before that, do it here.
++ *
++ * @note
++ * The MFD helper will take care of releasing all the row contexts.
++ *
++ */
++void
++dessertAppStatsTable_container_free(netsnmp_container * container)
++{
++ DEBUGMSGTL(("verbose:dessertAppStatsTable:dessertAppStatsTable_container_free", "called\n"));
++
++ /*
++ * TODO:380:M: Free dessertAppStatsTable container data.
++ */
++} /* dessertAppStatsTable_container_free */
++
++/**
++ * prepare row for processing.
++ *
++ * When the agent has located the row for a request, this function is
++ * called to prepare the row for processing. If you fully populated
++ * the data context during the index setup phase, you may not need to
++ * do anything.
++ *
++ * @param rowreq_ctx pointer to a context.
++ *
++ * @retval MFD_SUCCESS : success.
++ * @retval MFD_ERROR : other error.
++ */
++int
++dessertAppStatsTable_row_prep(dessertAppStatsTable_rowreq_ctx * rowreq_ctx)
++{
++ DEBUGMSGTL(("verbose:dessertAppStatsTable:dessertAppStatsTable_row_prep", "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:390:o: Prepare row for request.
++ * If populating row data was delayed, this is the place to
++ * fill in the row for this request.
++ */
++
++ return MFD_SUCCESS;
++} /* dessertAppStatsTable_row_prep */
++
++/** @} */
+Index: libdessert0.86-0.86.14/src/snmp/dessertAppStatsTable_data_access.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertAppStatsTable_data_access.h 2009-12-09 16:38:27.318667257 +0100
+@@ -0,0 +1,93 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * version : 14170 $ of $
++ *
++ * $Id:$
++ */
++#ifndef DESSERTAPPSTATSTABLE_DATA_ACCESS_H
++#define DESSERTAPPSTATSTABLE_DATA_ACCESS_H
++
++#include "dessert_internal.h"
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++
++ /*
++ *********************************************************************
++ * function declarations
++ */
++
++ /*
++ *********************************************************************
++ * Table declarations
++ */
++/**********************************************************************
++ **********************************************************************
++ ***
++ *** Table dessertAppStatsTable
++ ***
++ **********************************************************************
++ **********************************************************************/
++ /*
++ * DESSERT-MIB::dessertAppStatsTable is subid 9 of dessertObjects.
++ * Its status is Current.
++ * OID: .1.3.6.1.4.1.18898.0.19.42.1.9, length: 12
++ */
++
++
++ int
++ dessertAppStatsTable_init_data(dessertAppStatsTable_registration *
++ dessertAppStatsTable_reg);
++
++
++ /*
++ * TODO:180:o: Review dessertAppStatsTable cache timeout.
++ * The number of seconds before the cache times out
++ */
++#define DESSERTAPPSTATSTABLE_CACHE_TIMEOUT DESSERT_AGENTX_APPSTATSTABLE_CACHE_TIMEOUT
++
++ void dessertAppStatsTable_container_init(netsnmp_container
++ **
++ container_ptr_ptr,
++ netsnmp_cache *
++ cache);
++ void
++ dessertAppStatsTable_container_shutdown(netsnmp_container *
++ container_ptr);
++
++ int dessertAppStatsTable_container_load(netsnmp_container *
++ container);
++ void dessertAppStatsTable_container_free(netsnmp_container *
++ container);
++
++ int dessertAppStatsTable_cache_load(netsnmp_container *
++ container);
++ void dessertAppStatsTable_cache_free(netsnmp_container *
++ container);
++
++ /*
++ ***************************************************
++ *** START EXAMPLE CODE ***
++ ***---------------------------------------------***/
++ /*
++ *********************************************************************
++ * Since we have no idea how you really access your data, we'll go with
++ * a worst case example: a flat text file.
++ */
++#define MAX_LINE_SIZE 256
++ /*
++ ***---------------------------------------------***
++ *** END EXAMPLE CODE ***
++ ***************************************************/
++ int
++ dessertAppStatsTable_row_prep(dessertAppStatsTable_rowreq_ctx *
++ rowreq_ctx);
++
++
++
++#ifdef __cplusplus
++}
++#endif
++#endif /* DESSERTAPPSTATSTABLE_DATA_ACCESS_H */
+Index: libdessert0.86-0.86.14/src/snmp/dessertAppStatsTable_data_get.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertAppStatsTable_data_get.c 2009-12-09 16:38:27.322458741 +0100
+@@ -0,0 +1,1088 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * version : 12088 $ of $
++ *
++ * $Id:$
++ */
++/*
++ * standard Net-SNMP includes
++ */
++#include <net-snmp/net-snmp-config.h>
++#include <net-snmp/net-snmp-includes.h>
++#include <net-snmp/agent/net-snmp-agent-includes.h>
++
++/*
++ * include our parent header
++ */
++#include "dessertAppStatsTable.h"
++
++
++/** @defgroup data_get data_get: Routines to get data
++ *
++ * TODO:230:M: Implement dessertAppStatsTable get routines.
++ * TODO:240:M: Implement dessertAppStatsTable mapping routines (if any).
++ *
++ * These routine are used to get the value for individual objects. The
++ * row context is passed, along with a pointer to the memory where the
++ * value should be copied.
++ *
++ * @{
++ */
++/**********************************************************************
++ **********************************************************************
++ ***
++ *** Table dessertAppStatsTable
++ ***
++ **********************************************************************
++ **********************************************************************/
++/*
++ * DESSERT-MIB::dessertAppStatsTable is subid 9 of dessertObjects.
++ * Its status is Current.
++ * OID: .1.3.6.1.4.1.18898.0.19.42.1.9, length: 12
++ */
++
++/*
++ * ---------------------------------------------------------------------
++ * * TODO:200:r: Implement dessertAppStatsTable data context functions.
++ */
++
++
++/**
++ * set mib index(es)
++ *
++ * @param tbl_idx mib index structure
++ * @param appStatsIndex_val
++ *
++ * @retval MFD_SUCCESS : success.
++ * @retval MFD_ERROR : other error.
++ *
++ * @remark
++ * This convenience function is useful for setting all the MIB index
++ * components with a single function call. It is assume that the C values
++ * have already been mapped from their native/rawformat to the MIB format.
++ */
++int
++dessertAppStatsTable_indexes_set_tbl_idx(dessertAppStatsTable_mib_index *
++ tbl_idx, long appStatsIndex_val)
++{
++ DEBUGMSGTL(("verbose:dessertAppStatsTable:dessertAppStatsTable_indexes_set_tbl_idx", "called\n"));
++
++ /*
++ * appStatsIndex(1)///()//L/a/w/e/r/d/h
++ */
++ tbl_idx->appStatsIndex = appStatsIndex_val;
++
++
++ return MFD_SUCCESS;
++} /* dessertAppStatsTable_indexes_set_tbl_idx */
++
++/**
++ * @internal
++ * set row context indexes
++ *
++ * @param reqreq_ctx the row context that needs updated indexes
++ *
++ * @retval MFD_SUCCESS : success.
++ * @retval MFD_ERROR : other error.
++ *
++ * @remark
++ * This function sets the mib indexs, then updates the oid indexs
++ * from the mib index.
++ */
++int
++dessertAppStatsTable_indexes_set(dessertAppStatsTable_rowreq_ctx *
++ rowreq_ctx, long appStatsIndex_val)
++{
++ DEBUGMSGTL(("verbose:dessertAppStatsTable:dessertAppStatsTable_indexes_set", "called\n"));
++
++ if (MFD_SUCCESS !=
++ dessertAppStatsTable_indexes_set_tbl_idx(&rowreq_ctx->tbl_idx,
++ appStatsIndex_val))
++ return MFD_ERROR;
++
++ /*
++ * convert mib index to oid index
++ */
++ rowreq_ctx->oid_idx.len = sizeof(rowreq_ctx->oid_tmp) / sizeof(oid);
++ if (0 != dessertAppStatsTable_index_to_oid(&rowreq_ctx->oid_idx,
++ &rowreq_ctx->tbl_idx)) {
++ return MFD_ERROR;
++ }
++
++ return MFD_SUCCESS;
++} /* dessertAppStatsTable_indexes_set */
++
++
++/*---------------------------------------------------------------------
++ * DESSERT-MIB::dessertAppStatsEntry.appStatsName
++ * appStatsName is subid 2 of dessertAppStatsEntry.
++ * Its status is Current, and its access level is ReadOnly.
++ * OID: .1.3.6.1.4.1.18898.0.19.42.1.9.1.2
++ * Description:
++The name of the statistical datum
++ *
++ * Attributes:
++ * accessible 1 isscalar 0 enums 0 hasdefval 0
++ * readable 1 iscolumn 1 ranges 1 hashint 1
++ * settable 0
++ * hint: 255a
++ *
++ * Ranges: 0 - 255;
++ *
++ * Its syntax is DisplayString (based on perltype OCTETSTR)
++ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
++ * This data type requires a length. (Max 255)
++ */
++/**
++ * Extract the current value of the appStatsName data.
++ *
++ * Set a value using the data context for the row.
++ *
++ * @param rowreq_ctx
++ * Pointer to the row request context.
++ * @param appStatsName_val_ptr_ptr
++ * Pointer to storage for a char variable
++ * @param appStatsName_val_ptr_len_ptr
++ * Pointer to a size_t. On entry, it will contain the size (in bytes)
++ * pointed to by appStatsName.
++ * On exit, this value should contain the data size (in bytes).
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_SKIP : skip this node (no value for now)
++ * @retval MFD_ERROR : Any other error
++*
++ * @note If you need more than (*appStatsName_val_ptr_len_ptr) bytes of memory,
++ * allocate it using malloc() and update appStatsName_val_ptr_ptr.
++ * <b>DO NOT</b> free the previous pointer.
++ * The MFD helper will release the memory you allocate.
++ *
++ * @remark If you call this function yourself, you are responsible
++ * for checking if the pointer changed, and freeing any
++ * previously allocated memory. (Not necessary if you pass
++ * in a pointer to static memory, obviously.)
++ */
++int
++appStatsName_get(dessertAppStatsTable_rowreq_ctx * rowreq_ctx,
++ char **appStatsName_val_ptr_ptr,
++ size_t *appStatsName_val_ptr_len_ptr)
++{
++ /** we should have a non-NULL pointer and enough storage */
++ netsnmp_assert((NULL != appStatsName_val_ptr_ptr)
++ && (NULL != *appStatsName_val_ptr_ptr));
++ netsnmp_assert(NULL != appStatsName_val_ptr_len_ptr);
++
++
++ DEBUGMSGTL(("verbose:dessertAppStatsTable:appStatsName_get",
++ "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:231:o: |-> Extract the current value of the appStatsName data.
++ * copy (* appStatsName_val_ptr_ptr ) data and (* appStatsName_val_ptr_len_ptr ) from rowreq_ctx->data
++ */
++ /*
++ * make sure there is enough space for appStatsName data
++ */
++ if ((NULL == (*appStatsName_val_ptr_ptr)) ||
++ ((*appStatsName_val_ptr_len_ptr) <
++ (rowreq_ctx->data.appStatsName_len *
++ sizeof(rowreq_ctx->data.appStatsName[0])))) {
++ /*
++ * allocate space for appStatsName data
++ */
++ (*appStatsName_val_ptr_ptr) =
++ malloc(rowreq_ctx->data.appStatsName_len *
++ sizeof(rowreq_ctx->data.appStatsName[0]));
++ if (NULL == (*appStatsName_val_ptr_ptr)) {
++ snmp_log(LOG_ERR, "could not allocate memory\n");
++ return MFD_ERROR;
++ }
++ }
++ (*appStatsName_val_ptr_len_ptr) =
++ rowreq_ctx->data.appStatsName_len *
++ sizeof(rowreq_ctx->data.appStatsName[0]);
++ memcpy((*appStatsName_val_ptr_ptr), rowreq_ctx->data.appStatsName,
++ rowreq_ctx->data.appStatsName_len *
++ sizeof(rowreq_ctx->data.appStatsName[0]));
++
++ return MFD_SUCCESS;
++} /* appStatsName_get */
++
++/*---------------------------------------------------------------------
++ * DESSERT-MIB::dessertAppStatsEntry.appStatsDesc
++ * appStatsDesc is subid 3 of dessertAppStatsEntry.
++ * Its status is Current, and its access level is ReadOnly.
++ * OID: .1.3.6.1.4.1.18898.0.19.42.1.9.1.3
++ * Description:
++A short description of the statistical datum
++ *
++ * Attributes:
++ * accessible 1 isscalar 0 enums 0 hasdefval 0
++ * readable 1 iscolumn 1 ranges 1 hashint 1
++ * settable 0
++ * hint: 255a
++ *
++ * Ranges: 0 - 255;
++ *
++ * Its syntax is DisplayString (based on perltype OCTETSTR)
++ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
++ * This data type requires a length. (Max 255)
++ */
++/**
++ * Extract the current value of the appStatsDesc data.
++ *
++ * Set a value using the data context for the row.
++ *
++ * @param rowreq_ctx
++ * Pointer to the row request context.
++ * @param appStatsDesc_val_ptr_ptr
++ * Pointer to storage for a char variable
++ * @param appStatsDesc_val_ptr_len_ptr
++ * Pointer to a size_t. On entry, it will contain the size (in bytes)
++ * pointed to by appStatsDesc.
++ * On exit, this value should contain the data size (in bytes).
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_SKIP : skip this node (no value for now)
++ * @retval MFD_ERROR : Any other error
++*
++ * @note If you need more than (*appStatsDesc_val_ptr_len_ptr) bytes of memory,
++ * allocate it using malloc() and update appStatsDesc_val_ptr_ptr.
++ * <b>DO NOT</b> free the previous pointer.
++ * The MFD helper will release the memory you allocate.
++ *
++ * @remark If you call this function yourself, you are responsible
++ * for checking if the pointer changed, and freeing any
++ * previously allocated memory. (Not necessary if you pass
++ * in a pointer to static memory, obviously.)
++ */
++int
++appStatsDesc_get(dessertAppStatsTable_rowreq_ctx * rowreq_ctx,
++ char **appStatsDesc_val_ptr_ptr,
++ size_t *appStatsDesc_val_ptr_len_ptr)
++{
++ /** we should have a non-NULL pointer and enough storage */
++ netsnmp_assert((NULL != appStatsDesc_val_ptr_ptr)
++ && (NULL != *appStatsDesc_val_ptr_ptr));
++ netsnmp_assert(NULL != appStatsDesc_val_ptr_len_ptr);
++
++
++ DEBUGMSGTL(("verbose:dessertAppStatsTable:appStatsDesc_get",
++ "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:231:o: |-> Extract the current value of the appStatsDesc data.
++ * copy (* appStatsDesc_val_ptr_ptr ) data and (* appStatsDesc_val_ptr_len_ptr ) from rowreq_ctx->data
++ */
++ /*
++ * make sure there is enough space for appStatsDesc data
++ */
++ if ((NULL == (*appStatsDesc_val_ptr_ptr)) ||
++ ((*appStatsDesc_val_ptr_len_ptr) <
++ (rowreq_ctx->data.appStatsDesc_len *
++ sizeof(rowreq_ctx->data.appStatsDesc[0])))) {
++ /*
++ * allocate space for appStatsDesc data
++ */
++ (*appStatsDesc_val_ptr_ptr) =
++ malloc(rowreq_ctx->data.appStatsDesc_len *
++ sizeof(rowreq_ctx->data.appStatsDesc[0]));
++ if (NULL == (*appStatsDesc_val_ptr_ptr)) {
++ snmp_log(LOG_ERR, "could not allocate memory\n");
++ return MFD_ERROR;
++ }
++ }
++ (*appStatsDesc_val_ptr_len_ptr) =
++ rowreq_ctx->data.appStatsDesc_len *
++ sizeof(rowreq_ctx->data.appStatsDesc[0]);
++ memcpy((*appStatsDesc_val_ptr_ptr), rowreq_ctx->data.appStatsDesc,
++ rowreq_ctx->data.appStatsDesc_len *
++ sizeof(rowreq_ctx->data.appStatsDesc[0]));
++
++ return MFD_SUCCESS;
++} /* appStatsDesc_get */
++
++/*---------------------------------------------------------------------
++ * DESSERT-MIB::dessertAppStatsEntry.appStatsNodeOrLink
++ * appStatsNodeOrLink is subid 4 of dessertAppStatsEntry.
++ * Its status is Current, and its access level is ReadOnly.
++ * OID: .1.3.6.1.4.1.18898.0.19.42.1.9.1.4
++ * Description:
++Determines which of the appStatsMacAddress{1,2} coloumns
++ is valid and therefore indicates whether the information provided
++ by this row relates to a node or a link.
++ *
++ * Attributes:
++ * accessible 1 isscalar 0 enums 1 hasdefval 0
++ * readable 1 iscolumn 1 ranges 0 hashint 0
++ * settable 0
++ *
++ * Enum range: 3/8. Values: none(0), node(1), link(2)
++ *
++ * Its syntax is INTEGER (based on perltype INTEGER)
++ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
++ */
++/**
++ * map a value from its original native format to the MIB format.
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_ERROR : Any other error
++ *
++ * @note parameters follow the memset convention (dest, src).
++ *
++ * @note generation and use of this function can be turned off by re-running
++ * mib2c after adding the following line to the file
++ * defaults/node-appStatsNodeOrLink.m2d :
++ * @eval $m2c_node_skip_mapping = 1@
++ *
++ * @remark
++ * If the values for your data type don't exactly match the
++ * possible values defined by the mib, you should map them here.
++ * Otherwise, just do a direct copy.
++ */
++int
++appStatsNodeOrLink_map(u_long * mib_appStatsNodeOrLink_val_ptr,
++ u_long raw_appStatsNodeOrLink_val)
++{
++ netsnmp_assert(NULL != mib_appStatsNodeOrLink_val_ptr);
++
++ DEBUGMSGTL(("verbose:dessertAppStatsTable:appStatsNodeOrLink_map",
++ "called\n"));
++
++ /*
++ * TODO:241:o: |-> Implement appStatsNodeOrLink enum mapping.
++ * uses INTERNAL_* macros defined in the header files
++ */
++ switch (raw_appStatsNodeOrLink_val) {
++ case INTERNAL_DESSERTAPPSTATSTABLE_APPSTATSNODEORLINK_NONE:
++ *mib_appStatsNodeOrLink_val_ptr = APPSTATSNODEORLINK_NONE;
++ break;
++
++ case INTERNAL_DESSERTAPPSTATSTABLE_APPSTATSNODEORLINK_NODE:
++ *mib_appStatsNodeOrLink_val_ptr = APPSTATSNODEORLINK_NODE;
++ break;
++
++ case INTERNAL_DESSERTAPPSTATSTABLE_APPSTATSNODEORLINK_LINK:
++ *mib_appStatsNodeOrLink_val_ptr = APPSTATSNODEORLINK_LINK;
++ break;
++
++ default:
++ snmp_log(LOG_ERR,
++ "couldn't map value %ld for appStatsNodeOrLink\n",
++ raw_appStatsNodeOrLink_val);
++ return MFD_ERROR;
++ }
++
++ return MFD_SUCCESS;
++} /* appStatsNodeOrLink_map */
++
++/**
++ * Extract the current value of the appStatsNodeOrLink data.
++ *
++ * Set a value using the data context for the row.
++ *
++ * @param rowreq_ctx
++ * Pointer to the row request context.
++ * @param appStatsNodeOrLink_val_ptr
++ * Pointer to storage for a long variable
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_SKIP : skip this node (no value for now)
++ * @retval MFD_ERROR : Any other error
++ */
++int
++appStatsNodeOrLink_get(dessertAppStatsTable_rowreq_ctx * rowreq_ctx,
++ u_long * appStatsNodeOrLink_val_ptr)
++{
++ /** we should have a non-NULL pointer */
++ netsnmp_assert(NULL != appStatsNodeOrLink_val_ptr);
++
++
++ DEBUGMSGTL(("verbose:dessertAppStatsTable:appStatsNodeOrLink_get",
++ "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:231:o: |-> Extract the current value of the appStatsNodeOrLink data.
++ * copy (* appStatsNodeOrLink_val_ptr ) from rowreq_ctx->data
++ */
++ (*appStatsNodeOrLink_val_ptr) = rowreq_ctx->data.appStatsNodeOrLink;
++
++ return MFD_SUCCESS;
++} /* appStatsNodeOrLink_get */
++
++/*---------------------------------------------------------------------
++ * DESSERT-MIB::dessertAppStatsEntry.appStatsValueType
++ * appStatsValueType is subid 5 of dessertAppStatsEntry.
++ * Its status is Current, and its access level is ReadOnly.
++ * OID: .1.3.6.1.4.1.18898.0.19.42.1.9.1.5
++ * Description:
++Indicates which of the coloumns (appStatsTruthValue,
++ appStatsInterger32, appStatsUInteger32, appStatsCounter64,
++ appStatsOctetString) in the dessertAppStatsTable is actually valid.
++ *
++ * Attributes:
++ * accessible 1 isscalar 0 enums 1 hasdefval 0
++ * readable 1 iscolumn 1 ranges 0 hashint 0
++ * settable 0
++ *
++ * Enum range: 3/8. Values: bool(0), int32(1), uint32(2), counter64(3), octetstring(4)
++ *
++ * Its syntax is INTEGER (based on perltype INTEGER)
++ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
++ */
++/**
++ * map a value from its original native format to the MIB format.
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_ERROR : Any other error
++ *
++ * @note parameters follow the memset convention (dest, src).
++ *
++ * @note generation and use of this function can be turned off by re-running
++ * mib2c after adding the following line to the file
++ * defaults/node-appStatsValueType.m2d :
++ * @eval $m2c_node_skip_mapping = 1@
++ *
++ * @remark
++ * If the values for your data type don't exactly match the
++ * possible values defined by the mib, you should map them here.
++ * Otherwise, just do a direct copy.
++ */
++int
++appStatsValueType_map(u_long * mib_appStatsValueType_val_ptr,
++ u_long raw_appStatsValueType_val)
++{
++ netsnmp_assert(NULL != mib_appStatsValueType_val_ptr);
++
++ DEBUGMSGTL(("verbose:dessertAppStatsTable:appStatsValueType_map",
++ "called\n"));
++
++ /*
++ * TODO:241:o: |-> Implement appStatsValueType enum mapping.
++ * uses INTERNAL_* macros defined in the header files
++ */
++ switch (raw_appStatsValueType_val) {
++ case INTERNAL_DESSERTAPPSTATSTABLE_APPSTATSVALUETYPE_BOOL:
++ *mib_appStatsValueType_val_ptr = APPSTATSVALUETYPE_BOOL;
++ break;
++
++ case INTERNAL_DESSERTAPPSTATSTABLE_APPSTATSVALUETYPE_INT32:
++ *mib_appStatsValueType_val_ptr = APPSTATSVALUETYPE_INT32;
++ break;
++
++ case INTERNAL_DESSERTAPPSTATSTABLE_APPSTATSVALUETYPE_UINT32:
++ *mib_appStatsValueType_val_ptr = APPSTATSVALUETYPE_UINT32;
++ break;
++
++ case INTERNAL_DESSERTAPPSTATSTABLE_APPSTATSVALUETYPE_COUNTER64:
++ *mib_appStatsValueType_val_ptr = APPSTATSVALUETYPE_COUNTER64;
++ break;
++
++ case INTERNAL_DESSERTAPPSTATSTABLE_APPSTATSVALUETYPE_OCTETSTRING:
++ *mib_appStatsValueType_val_ptr = APPSTATSVALUETYPE_OCTETSTRING;
++ break;
++
++ default:
++ snmp_log(LOG_ERR, "couldn't map value %ld for appStatsValueType\n",
++ raw_appStatsValueType_val);
++ return MFD_ERROR;
++ }
++
++ return MFD_SUCCESS;
++} /* appStatsValueType_map */
++
++/**
++ * Extract the current value of the appStatsValueType data.
++ *
++ * Set a value using the data context for the row.
++ *
++ * @param rowreq_ctx
++ * Pointer to the row request context.
++ * @param appStatsValueType_val_ptr
++ * Pointer to storage for a long variable
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_SKIP : skip this node (no value for now)
++ * @retval MFD_ERROR : Any other error
++ */
++int
++appStatsValueType_get(dessertAppStatsTable_rowreq_ctx * rowreq_ctx,
++ u_long * appStatsValueType_val_ptr)
++{
++ /** we should have a non-NULL pointer */
++ netsnmp_assert(NULL != appStatsValueType_val_ptr);
++
++
++ DEBUGMSGTL(("verbose:dessertAppStatsTable:appStatsValueType_get",
++ "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:231:o: |-> Extract the current value of the appStatsValueType data.
++ * copy (* appStatsValueType_val_ptr ) from rowreq_ctx->data
++ */
++ (*appStatsValueType_val_ptr) = rowreq_ctx->data.appStatsValueType;
++
++ return MFD_SUCCESS;
++} /* appStatsValueType_get */
++
++/*---------------------------------------------------------------------
++ * DESSERT-MIB::dessertAppStatsEntry.appStatsMacAddress1
++ * appStatsMacAddress1 is subid 6 of dessertAppStatsEntry.
++ * Its status is Current, and its access level is ReadOnly.
++ * OID: .1.3.6.1.4.1.18898.0.19.42.1.9.1.6
++ * Description:
++The hardware address of a node.
++ *
++ * Attributes:
++ * accessible 1 isscalar 0 enums 0 hasdefval 0
++ * readable 1 iscolumn 1 ranges 1 hashint 1
++ * settable 0
++ * hint: 1x:
++ *
++ * Ranges: 6;
++ *
++ * Its syntax is MacAddress (based on perltype OCTETSTR)
++ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
++ * This data type requires a length. (Max 6)
++ */
++/**
++ * Extract the current value of the appStatsMacAddress1 data.
++ *
++ * Set a value using the data context for the row.
++ *
++ * @param rowreq_ctx
++ * Pointer to the row request context.
++ * @param appStatsMacAddress1_val_ptr_ptr
++ * Pointer to storage for a char variable
++ * @param appStatsMacAddress1_val_ptr_len_ptr
++ * Pointer to a size_t. On entry, it will contain the size (in bytes)
++ * pointed to by appStatsMacAddress1.
++ * On exit, this value should contain the data size (in bytes).
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_SKIP : skip this node (no value for now)
++ * @retval MFD_ERROR : Any other error
++*
++ * @note If you need more than (*appStatsMacAddress1_val_ptr_len_ptr) bytes of memory,
++ * allocate it using malloc() and update appStatsMacAddress1_val_ptr_ptr.
++ * <b>DO NOT</b> free the previous pointer.
++ * The MFD helper will release the memory you allocate.
++ *
++ * @remark If you call this function yourself, you are responsible
++ * for checking if the pointer changed, and freeing any
++ * previously allocated memory. (Not necessary if you pass
++ * in a pointer to static memory, obviously.)
++ */
++int
++appStatsMacAddress1_get(dessertAppStatsTable_rowreq_ctx * rowreq_ctx,
++ char **appStatsMacAddress1_val_ptr_ptr,
++ size_t *appStatsMacAddress1_val_ptr_len_ptr)
++{
++ /** we should have a non-NULL pointer and enough storage */
++ netsnmp_assert((NULL != appStatsMacAddress1_val_ptr_ptr)
++ && (NULL != *appStatsMacAddress1_val_ptr_ptr));
++ netsnmp_assert(NULL != appStatsMacAddress1_val_ptr_len_ptr);
++
++
++ DEBUGMSGTL(("verbose:dessertAppStatsTable:appStatsMacAddress1_get",
++ "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:231:o: |-> Extract the current value of the appStatsMacAddress1 data.
++ * copy (* appStatsMacAddress1_val_ptr_ptr ) data and (* appStatsMacAddress1_val_ptr_len_ptr ) from rowreq_ctx->data
++ */
++ /*
++ * make sure there is enough space for appStatsMacAddress1 data
++ */
++ if ((NULL == (*appStatsMacAddress1_val_ptr_ptr)) ||
++ ((*appStatsMacAddress1_val_ptr_len_ptr) <
++ (rowreq_ctx->data.appStatsMacAddress1_len *
++ sizeof(rowreq_ctx->data.appStatsMacAddress1[0])))) {
++ /*
++ * allocate space for appStatsMacAddress1 data
++ */
++ (*appStatsMacAddress1_val_ptr_ptr) =
++ malloc(rowreq_ctx->data.appStatsMacAddress1_len *
++ sizeof(rowreq_ctx->data.appStatsMacAddress1[0]));
++ if (NULL == (*appStatsMacAddress1_val_ptr_ptr)) {
++ snmp_log(LOG_ERR, "could not allocate memory\n");
++ return MFD_ERROR;
++ }
++ }
++ (*appStatsMacAddress1_val_ptr_len_ptr) =
++ rowreq_ctx->data.appStatsMacAddress1_len *
++ sizeof(rowreq_ctx->data.appStatsMacAddress1[0]);
++ memcpy((*appStatsMacAddress1_val_ptr_ptr),
++ rowreq_ctx->data.appStatsMacAddress1,
++ rowreq_ctx->data.appStatsMacAddress1_len *
++ sizeof(rowreq_ctx->data.appStatsMacAddress1[0]));
++
++ return MFD_SUCCESS;
++} /* appStatsMacAddress1_get */
++
++/*---------------------------------------------------------------------
++ * DESSERT-MIB::dessertAppStatsEntry.appStatsMacAddress2
++ * appStatsMacAddress2 is subid 7 of dessertAppStatsEntry.
++ * Its status is Current, and its access level is ReadOnly.
++ * OID: .1.3.6.1.4.1.18898.0.19.42.1.9.1.7
++ * Description:
++The hardware address of a second node.
++ *
++ * Attributes:
++ * accessible 1 isscalar 0 enums 0 hasdefval 0
++ * readable 1 iscolumn 1 ranges 1 hashint 1
++ * settable 0
++ * hint: 1x:
++ *
++ * Ranges: 6;
++ *
++ * Its syntax is MacAddress (based on perltype OCTETSTR)
++ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
++ * This data type requires a length. (Max 6)
++ */
++/**
++ * Extract the current value of the appStatsMacAddress2 data.
++ *
++ * Set a value using the data context for the row.
++ *
++ * @param rowreq_ctx
++ * Pointer to the row request context.
++ * @param appStatsMacAddress2_val_ptr_ptr
++ * Pointer to storage for a char variable
++ * @param appStatsMacAddress2_val_ptr_len_ptr
++ * Pointer to a size_t. On entry, it will contain the size (in bytes)
++ * pointed to by appStatsMacAddress2.
++ * On exit, this value should contain the data size (in bytes).
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_SKIP : skip this node (no value for now)
++ * @retval MFD_ERROR : Any other error
++*
++ * @note If you need more than (*appStatsMacAddress2_val_ptr_len_ptr) bytes of memory,
++ * allocate it using malloc() and update appStatsMacAddress2_val_ptr_ptr.
++ * <b>DO NOT</b> free the previous pointer.
++ * The MFD helper will release the memory you allocate.
++ *
++ * @remark If you call this function yourself, you are responsible
++ * for checking if the pointer changed, and freeing any
++ * previously allocated memory. (Not necessary if you pass
++ * in a pointer to static memory, obviously.)
++ */
++int
++appStatsMacAddress2_get(dessertAppStatsTable_rowreq_ctx * rowreq_ctx,
++ char **appStatsMacAddress2_val_ptr_ptr,
++ size_t *appStatsMacAddress2_val_ptr_len_ptr)
++{
++ /** we should have a non-NULL pointer and enough storage */
++ netsnmp_assert((NULL != appStatsMacAddress2_val_ptr_ptr)
++ && (NULL != *appStatsMacAddress2_val_ptr_ptr));
++ netsnmp_assert(NULL != appStatsMacAddress2_val_ptr_len_ptr);
++
++
++ DEBUGMSGTL(("verbose:dessertAppStatsTable:appStatsMacAddress2_get",
++ "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:231:o: |-> Extract the current value of the appStatsMacAddress2 data.
++ * copy (* appStatsMacAddress2_val_ptr_ptr ) data and (* appStatsMacAddress2_val_ptr_len_ptr ) from rowreq_ctx->data
++ */
++ /*
++ * make sure there is enough space for appStatsMacAddress2 data
++ */
++ if ((NULL == (*appStatsMacAddress2_val_ptr_ptr)) ||
++ ((*appStatsMacAddress2_val_ptr_len_ptr) <
++ (rowreq_ctx->data.appStatsMacAddress2_len *
++ sizeof(rowreq_ctx->data.appStatsMacAddress2[0])))) {
++ /*
++ * allocate space for appStatsMacAddress2 data
++ */
++ (*appStatsMacAddress2_val_ptr_ptr) =
++ malloc(rowreq_ctx->data.appStatsMacAddress2_len *
++ sizeof(rowreq_ctx->data.appStatsMacAddress2[0]));
++ if (NULL == (*appStatsMacAddress2_val_ptr_ptr)) {
++ snmp_log(LOG_ERR, "could not allocate memory\n");
++ return MFD_ERROR;
++ }
++ }
++ (*appStatsMacAddress2_val_ptr_len_ptr) =
++ rowreq_ctx->data.appStatsMacAddress2_len *
++ sizeof(rowreq_ctx->data.appStatsMacAddress2[0]);
++ memcpy((*appStatsMacAddress2_val_ptr_ptr),
++ rowreq_ctx->data.appStatsMacAddress2,
++ rowreq_ctx->data.appStatsMacAddress2_len *
++ sizeof(rowreq_ctx->data.appStatsMacAddress2[0]));
++
++ return MFD_SUCCESS;
++} /* appStatsMacAddress2_get */
++
++/*---------------------------------------------------------------------
++ * DESSERT-MIB::dessertAppStatsEntry.appStatsTruthValue
++ * appStatsTruthValue is subid 8 of dessertAppStatsEntry.
++ * Its status is Current, and its access level is ReadOnly.
++ * OID: .1.3.6.1.4.1.18898.0.19.42.1.9.1.8
++ * Description:
++A statistical datum with TruthValue semantics.
++ *
++ * Attributes:
++ * accessible 1 isscalar 0 enums 1 hasdefval 0
++ * readable 1 iscolumn 1 ranges 0 hashint 0
++ * settable 0
++ *
++ * Enum range: 2/8. Values: true(1), false(2)
++ *
++ * Its syntax is TruthValue (based on perltype INTEGER)
++ * The net-snmp type is ASN_INTEGER. The C type decl is long (u_long)
++ */
++/**
++ * map a value from its original native format to the MIB format.
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_ERROR : Any other error
++ *
++ * @note parameters follow the memset convention (dest, src).
++ *
++ * @note generation and use of this function can be turned off by re-running
++ * mib2c after adding the following line to the file
++ * defaults/node-appStatsTruthValue.m2d :
++ * @eval $m2c_node_skip_mapping = 1@
++ *
++ * @remark
++ * If the values for your data type don't exactly match the
++ * possible values defined by the mib, you should map them here.
++ * Otherwise, just do a direct copy.
++ */
++int
++appStatsTruthValue_map(u_long * mib_appStatsTruthValue_val_ptr,
++ u_long raw_appStatsTruthValue_val)
++{
++ netsnmp_assert(NULL != mib_appStatsTruthValue_val_ptr);
++
++ DEBUGMSGTL(("verbose:dessertAppStatsTable:appStatsTruthValue_map",
++ "called\n"));
++
++ /*
++ * TODO:241:o: |-> Implement appStatsTruthValue enum mapping.
++ * uses INTERNAL_* macros defined in the header files
++ */
++ switch (raw_appStatsTruthValue_val) {
++ case INTERNAL_DESSERTAPPSTATSTABLE_APPSTATSTRUTHVALUE_TRUE:
++ *mib_appStatsTruthValue_val_ptr = TRUTHVALUE_TRUE;
++ break;
++
++ case INTERNAL_DESSERTAPPSTATSTABLE_APPSTATSTRUTHVALUE_FALSE:
++ *mib_appStatsTruthValue_val_ptr = TRUTHVALUE_FALSE;
++ break;
++
++ default:
++ snmp_log(LOG_ERR,
++ "couldn't map value %ld for appStatsTruthValue\n",
++ raw_appStatsTruthValue_val);
++ return MFD_ERROR;
++ }
++
++ return MFD_SUCCESS;
++} /* appStatsTruthValue_map */
++
++/**
++ * Extract the current value of the appStatsTruthValue data.
++ *
++ * Set a value using the data context for the row.
++ *
++ * @param rowreq_ctx
++ * Pointer to the row request context.
++ * @param appStatsTruthValue_val_ptr
++ * Pointer to storage for a long variable
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_SKIP : skip this node (no value for now)
++ * @retval MFD_ERROR : Any other error
++ */
++int
++appStatsTruthValue_get(dessertAppStatsTable_rowreq_ctx * rowreq_ctx,
++ u_long * appStatsTruthValue_val_ptr)
++{
++ /** we should have a non-NULL pointer */
++ netsnmp_assert(NULL != appStatsTruthValue_val_ptr);
++
++
++ DEBUGMSGTL(("verbose:dessertAppStatsTable:appStatsTruthValue_get",
++ "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:231:o: |-> Extract the current value of the appStatsTruthValue data.
++ * copy (* appStatsTruthValue_val_ptr ) from rowreq_ctx->data
++ */
++ (*appStatsTruthValue_val_ptr) = rowreq_ctx->data.appStatsTruthValue;
++
++ return MFD_SUCCESS;
++} /* appStatsTruthValue_get */
++
++/*---------------------------------------------------------------------
++ * DESSERT-MIB::dessertAppStatsEntry.appStatsInteger32
++ * appStatsInteger32 is subid 9 of dessertAppStatsEntry.
++ * Its status is Current, and its access level is ReadOnly.
++ * OID: .1.3.6.1.4.1.18898.0.19.42.1.9.1.9
++ * Description:
++A statistical datum with Integer32 semantics.
++ *
++ * Attributes:
++ * accessible 1 isscalar 0 enums 0 hasdefval 0
++ * readable 1 iscolumn 1 ranges 0 hashint 0
++ * settable 0
++ *
++ *
++ * Its syntax is INTEGER32 (based on perltype INTEGER32)
++ * The net-snmp type is ASN_INTEGER. The C type decl is long (long)
++ */
++/**
++ * Extract the current value of the appStatsInteger32 data.
++ *
++ * Set a value using the data context for the row.
++ *
++ * @param rowreq_ctx
++ * Pointer to the row request context.
++ * @param appStatsInteger32_val_ptr
++ * Pointer to storage for a long variable
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_SKIP : skip this node (no value for now)
++ * @retval MFD_ERROR : Any other error
++ */
++int
++appStatsInteger32_get(dessertAppStatsTable_rowreq_ctx * rowreq_ctx,
++ long *appStatsInteger32_val_ptr)
++{
++ /** we should have a non-NULL pointer */
++ netsnmp_assert(NULL != appStatsInteger32_val_ptr);
++
++
++ DEBUGMSGTL(("verbose:dessertAppStatsTable:appStatsInteger32_get",
++ "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:231:o: |-> Extract the current value of the appStatsInteger32 data.
++ * copy (* appStatsInteger32_val_ptr ) from rowreq_ctx->data
++ */
++ (*appStatsInteger32_val_ptr) = rowreq_ctx->data.appStatsInteger32;
++
++ return MFD_SUCCESS;
++} /* appStatsInteger32_get */
++
++/*---------------------------------------------------------------------
++ * DESSERT-MIB::dessertAppStatsEntry.appStatsUnsigned32
++ * appStatsUnsigned32 is subid 10 of dessertAppStatsEntry.
++ * Its status is Current, and its access level is ReadOnly.
++ * OID: .1.3.6.1.4.1.18898.0.19.42.1.9.1.10
++ * Description:
++A statistical datum with Unsigned32 semantics.
++ *
++ * Attributes:
++ * accessible 1 isscalar 0 enums 0 hasdefval 0
++ * readable 1 iscolumn 1 ranges 0 hashint 0
++ * settable 0
++ *
++ *
++ * Its syntax is UNSIGNED32 (based on perltype UNSIGNED32)
++ * The net-snmp type is ASN_UNSIGNED. The C type decl is u_long (u_long)
++ */
++/**
++ * Extract the current value of the appStatsUnsigned32 data.
++ *
++ * Set a value using the data context for the row.
++ *
++ * @param rowreq_ctx
++ * Pointer to the row request context.
++ * @param appStatsUnsigned32_val_ptr
++ * Pointer to storage for a u_long variable
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_SKIP : skip this node (no value for now)
++ * @retval MFD_ERROR : Any other error
++ */
++int
++appStatsUnsigned32_get(dessertAppStatsTable_rowreq_ctx * rowreq_ctx,
++ u_long * appStatsUnsigned32_val_ptr)
++{
++ /** we should have a non-NULL pointer */
++ netsnmp_assert(NULL != appStatsUnsigned32_val_ptr);
++
++
++ DEBUGMSGTL(("verbose:dessertAppStatsTable:appStatsUnsigned32_get",
++ "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:231:o: |-> Extract the current value of the appStatsUnsigned32 data.
++ * copy (* appStatsUnsigned32_val_ptr ) from rowreq_ctx->data
++ */
++ (*appStatsUnsigned32_val_ptr) = rowreq_ctx->data.appStatsUnsigned32;
++
++ return MFD_SUCCESS;
++} /* appStatsUnsigned32_get */
++
++/*---------------------------------------------------------------------
++ * DESSERT-MIB::dessertAppStatsEntry.appStatsCounter64
++ * appStatsCounter64 is subid 11 of dessertAppStatsEntry.
++ * Its status is Current, and its access level is ReadOnly.
++ * OID: .1.3.6.1.4.1.18898.0.19.42.1.9.1.11
++ * Description:
++A statistical datum with Counter64 semantics.
++ *
++ * Attributes:
++ * accessible 1 isscalar 0 enums 0 hasdefval 0
++ * readable 1 iscolumn 1 ranges 0 hashint 0
++ * settable 0
++ *
++ *
++ * Its syntax is COUNTER64 (based on perltype COUNTER64)
++ * The net-snmp type is ASN_COUNTER64. The C type decl is U64 (U64)
++ */
++/**
++ * Extract the current value of the appStatsCounter64 data.
++ *
++ * Set a value using the data context for the row.
++ *
++ * @param rowreq_ctx
++ * Pointer to the row request context.
++ * @param appStatsCounter64_val_ptr
++ * Pointer to storage for a U64 variable
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_SKIP : skip this node (no value for now)
++ * @retval MFD_ERROR : Any other error
++ */
++int
++appStatsCounter64_get(dessertAppStatsTable_rowreq_ctx * rowreq_ctx,
++ U64 * appStatsCounter64_val_ptr)
++{
++ /** we should have a non-NULL pointer */
++ netsnmp_assert(NULL != appStatsCounter64_val_ptr);
++
++ /*
++ * TODO:231:o: |-> copy appStatsCounter64 data.
++ * get (* appStatsCounter64_val_ptr ).low and (* appStatsCounter64_val_ptr ).high from rowreq_ctx->data
++ */
++ (*appStatsCounter64_val_ptr).high =
++ rowreq_ctx->data.appStatsCounter64.high;
++ (*appStatsCounter64_val_ptr).low =
++ rowreq_ctx->data.appStatsCounter64.low;
++
++
++ return MFD_SUCCESS;
++} /* appStatsCounter64_get */
++
++/*---------------------------------------------------------------------
++ * DESSERT-MIB::dessertAppStatsEntry.appStatsOctetString
++ * appStatsOctetString is subid 12 of dessertAppStatsEntry.
++ * Its status is Current, and its access level is ReadOnly.
++ * OID: .1.3.6.1.4.1.18898.0.19.42.1.9.1.12
++ * Description:
++A statistical datum containing of up to 1024 octets.
++ *
++ * Attributes:
++ * accessible 1 isscalar 0 enums 0 hasdefval 0
++ * readable 1 iscolumn 1 ranges 1 hashint 0
++ * settable 0
++ *
++ * Ranges: 0 - 1024;
++ *
++ * Its syntax is OCTETSTR (based on perltype OCTETSTR)
++ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
++ * This data type requires a length. (Max 1024)
++ */
++/**
++ * Extract the current value of the appStatsOctetString data.
++ *
++ * Set a value using the data context for the row.
++ *
++ * @param rowreq_ctx
++ * Pointer to the row request context.
++ * @param appStatsOctetString_val_ptr_ptr
++ * Pointer to storage for a char variable
++ * @param appStatsOctetString_val_ptr_len_ptr
++ * Pointer to a size_t. On entry, it will contain the size (in bytes)
++ * pointed to by appStatsOctetString.
++ * On exit, this value should contain the data size (in bytes).
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_SKIP : skip this node (no value for now)
++ * @retval MFD_ERROR : Any other error
++*
++ * @note If you need more than (*appStatsOctetString_val_ptr_len_ptr) bytes of memory,
++ * allocate it using malloc() and update appStatsOctetString_val_ptr_ptr.
++ * <b>DO NOT</b> free the previous pointer.
++ * The MFD helper will release the memory you allocate.
++ *
++ * @remark If you call this function yourself, you are responsible
++ * for checking if the pointer changed, and freeing any
++ * previously allocated memory. (Not necessary if you pass
++ * in a pointer to static memory, obviously.)
++ */
++int
++appStatsOctetString_get(dessertAppStatsTable_rowreq_ctx * rowreq_ctx,
++ char **appStatsOctetString_val_ptr_ptr,
++ size_t *appStatsOctetString_val_ptr_len_ptr)
++{
++ /** we should have a non-NULL pointer and enough storage */
++ netsnmp_assert((NULL != appStatsOctetString_val_ptr_ptr)
++ && (NULL != *appStatsOctetString_val_ptr_ptr));
++ netsnmp_assert(NULL != appStatsOctetString_val_ptr_len_ptr);
++
++
++ DEBUGMSGTL(("verbose:dessertAppStatsTable:appStatsOctetString_get",
++ "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:231:o: |-> Extract the current value of the appStatsOctetString data.
++ * copy (* appStatsOctetString_val_ptr_ptr ) data and (* appStatsOctetString_val_ptr_len_ptr ) from rowreq_ctx->data
++ */
++ /*
++ * make sure there is enough space for appStatsOctetString data
++ */
++ if ((NULL == (*appStatsOctetString_val_ptr_ptr)) ||
++ ((*appStatsOctetString_val_ptr_len_ptr) <
++ (rowreq_ctx->data.appStatsOctetString_len *
++ sizeof(rowreq_ctx->data.appStatsOctetString[0])))) {
++ /*
++ * allocate space for appStatsOctetString data
++ */
++ (*appStatsOctetString_val_ptr_ptr) =
++ malloc(rowreq_ctx->data.appStatsOctetString_len *
++ sizeof(rowreq_ctx->data.appStatsOctetString[0]));
++ if (NULL == (*appStatsOctetString_val_ptr_ptr)) {
++ snmp_log(LOG_ERR, "could not allocate memory\n");
++ return MFD_ERROR;
++ }
++ }
++ (*appStatsOctetString_val_ptr_len_ptr) =
++ rowreq_ctx->data.appStatsOctetString_len *
++ sizeof(rowreq_ctx->data.appStatsOctetString[0]);
++ memcpy((*appStatsOctetString_val_ptr_ptr),
++ rowreq_ctx->data.appStatsOctetString,
++ rowreq_ctx->data.appStatsOctetString_len *
++ sizeof(rowreq_ctx->data.appStatsOctetString[0]));
++
++ return MFD_SUCCESS;
++} /* appStatsOctetString_get */
++
++
++
++/** @} */
+Index: libdessert0.86-0.86.14/src/snmp/dessertAppStatsTable_data_get.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertAppStatsTable_data_get.h 2009-12-09 16:38:27.322458741 +0100
+@@ -0,0 +1,174 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * version : 12088 $ of $
++ *
++ * $Id:$
++ *
++ * @file dessertAppStatsTable_data_get.h
++ *
++ * @addtogroup get
++ *
++ * Prototypes for get functions
++ *
++ * @{
++ */
++#ifndef DESSERTAPPSTATSTABLE_DATA_GET_H
++#define DESSERTAPPSTATSTABLE_DATA_GET_H
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++ /*
++ *********************************************************************
++ * GET function declarations
++ */
++
++ /*
++ *********************************************************************
++ * GET Table declarations
++ */
++/**********************************************************************
++ **********************************************************************
++ ***
++ *** Table dessertAppStatsTable
++ ***
++ **********************************************************************
++ **********************************************************************/
++ /*
++ * DESSERT-MIB::dessertAppStatsTable is subid 9 of dessertObjects.
++ * Its status is Current.
++ * OID: .1.3.6.1.4.1.18898.0.19.42.1.9, length: 12
++ */
++ /*
++ * indexes
++ */
++ int appStatsIndex_map(uint *mib_appStatsIndex_val_ptr, uint
++ raw_appStatsIndex_val);
++
++ int appStatsName_map(char **mib_appStatsName_val_ptr_ptr,
++ size_t
++ *mib_appStatsName_val_ptr_len_ptr,
++ char *raw_appStatsName_val_ptr,
++ size_t raw_appStatsName_val_ptr_len,
++ int allow_realloc);
++ int appStatsName_get(dessertAppStatsTable_rowreq_ctx *
++ rowreq_ctx,
++ char **appStatsName_val_ptr_ptr,
++ size_t *appStatsName_val_ptr_len_ptr);
++ int appStatsDesc_map(char **mib_appStatsDesc_val_ptr_ptr,
++ size_t
++ *mib_appStatsDesc_val_ptr_len_ptr,
++ char *raw_appStatsDesc_val_ptr,
++ size_t raw_appStatsDesc_val_ptr_len,
++ int allow_realloc);
++ int appStatsDesc_get(dessertAppStatsTable_rowreq_ctx *
++ rowreq_ctx,
++ char **appStatsDesc_val_ptr_ptr,
++ size_t *appStatsDesc_val_ptr_len_ptr);
++ int appStatsNodeOrLink_map(u_long *
++ mib_appStatsNodeOrLink_val_ptr,
++ u_long
++ raw_appStatsNodeOrLink_val);
++ int appStatsNodeOrLink_get(dessertAppStatsTable_rowreq_ctx
++ * rowreq_ctx,
++ u_long *
++ appStatsNodeOrLink_val_ptr);
++ int appStatsValueType_map(u_long *
++ mib_appStatsValueType_val_ptr,
++ u_long
++ raw_appStatsValueType_val);
++ int appStatsValueType_get(dessertAppStatsTable_rowreq_ctx *
++ rowreq_ctx,
++ u_long *
++ appStatsValueType_val_ptr);
++ int appStatsMacAddress1_map(char
++ **mib_appStatsMacAddress1_val_ptr_ptr,
++ size_t
++ *mib_appStatsMacAddress1_val_ptr_len_ptr,
++ char
++ *raw_appStatsMacAddress1_val_ptr,
++ size_t
++ raw_appStatsMacAddress1_val_ptr_len,
++ int allow_realloc);
++ int appStatsMacAddress1_get(dessertAppStatsTable_rowreq_ctx
++ * rowreq_ctx,
++ char
++ **appStatsMacAddress1_val_ptr_ptr,
++ size_t
++ *appStatsMacAddress1_val_ptr_len_ptr);
++ int appStatsMacAddress2_map(char
++ **mib_appStatsMacAddress2_val_ptr_ptr,
++ size_t
++ *mib_appStatsMacAddress2_val_ptr_len_ptr,
++ char
++ *raw_appStatsMacAddress2_val_ptr,
++ size_t
++ raw_appStatsMacAddress2_val_ptr_len,
++ int allow_realloc);
++ int appStatsMacAddress2_get(dessertAppStatsTable_rowreq_ctx
++ * rowreq_ctx,
++ char
++ **appStatsMacAddress2_val_ptr_ptr,
++ size_t
++ *appStatsMacAddress2_val_ptr_len_ptr);
++ int appStatsTruthValue_map(u_long *
++ mib_appStatsTruthValue_val_ptr,
++ u_long
++ raw_appStatsTruthValue_val);
++ int appStatsTruthValue_get(dessertAppStatsTable_rowreq_ctx
++ * rowreq_ctx,
++ u_long *
++ appStatsTruthValue_val_ptr);
++ int appStatsInteger32_map(long
++ *mib_appStatsInteger32_val_ptr,
++ long raw_appStatsInteger32_val);
++ int appStatsInteger32_get(dessertAppStatsTable_rowreq_ctx *
++ rowreq_ctx,
++ long *appStatsInteger32_val_ptr);
++ int appStatsUnsigned32_map(u_long *
++ mib_appStatsUnsigned32_val_ptr,
++ u_long
++ raw_appStatsUnsigned32_val);
++ int appStatsUnsigned32_get(dessertAppStatsTable_rowreq_ctx
++ * rowreq_ctx,
++ u_long *
++ appStatsUnsigned32_val_ptr);
++ int appStatsCounter64_map(U64 *
++ mib_appStatsCounter64_val_ptr,
++ U64 raw_appStatsCounter64_val);
++ int appStatsCounter64_get(dessertAppStatsTable_rowreq_ctx *
++ rowreq_ctx,
++ U64 * appStatsCounter64_val_ptr);
++ int appStatsOctetString_map(char
++ **mib_appStatsOctetString_val_ptr_ptr,
++ size_t
++ *mib_appStatsOctetString_val_ptr_len_ptr,
++ char
++ *raw_appStatsOctetString_val_ptr,
++ size_t
++ raw_appStatsOctetString_val_ptr_len,
++ int allow_realloc);
++ int appStatsOctetString_get(dessertAppStatsTable_rowreq_ctx
++ * rowreq_ctx,
++ char
++ **appStatsOctetString_val_ptr_ptr,
++ size_t
++ *appStatsOctetString_val_ptr_len_ptr);
++
++
++ int
++ dessertAppStatsTable_indexes_set_tbl_idx
++ (dessertAppStatsTable_mib_index * tbl_idx, long appStatsIndex_val);
++ int
++ dessertAppStatsTable_indexes_set(dessertAppStatsTable_rowreq_ctx *
++ rowreq_ctx, long appStatsIndex_val);
++
++
++
++
++#ifdef __cplusplus
++}
++#endif
++#endif /* DESSERTAPPSTATSTABLE_DATA_GET_H */
++/** @} */
+Index: libdessert0.86-0.86.14/src/snmp/dessertAppStatsTable_data_set.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertAppStatsTable_data_set.c 2009-12-09 16:38:27.322458741 +0100
+@@ -0,0 +1,28 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * version : 12077 $ of $
++ *
++ * $Id:$
++ *
++ */
++/*
++ * standard Net-SNMP includes
++ */
++#include <net-snmp/net-snmp-config.h>
++#include <net-snmp/net-snmp-includes.h>
++#include <net-snmp/agent/net-snmp-agent-includes.h>
++
++/*
++ * include our parent header
++ */
++#include "dessertAppStatsTable.h"
++
++
++/** @defgroup data_set data_set: Routines to set data
++ *
++ * These routines are used to set the value for individual objects. The
++ * row context is passed, along with the new value.
++ *
++ * @{
++ */
++/** @} */
+Index: libdessert0.86-0.86.14/src/snmp/dessertAppStatsTable_data_set.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertAppStatsTable_data_set.h 2009-12-09 16:38:27.322458741 +0100
+@@ -0,0 +1,28 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * version : 12077 $ of $
++ *
++ * $Id:$
++ */
++#ifndef DESSERTAPPSTATSTABLE_DATA_SET_H
++#define DESSERTAPPSTATSTABLE_DATA_SET_H
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++ /*
++ *********************************************************************
++ * SET function declarations
++ */
++
++ /*
++ *********************************************************************
++ * SET Table declarations
++ */
++
++
++#ifdef __cplusplus
++}
++#endif
++#endif /* DESSERTAPPSTATSTABLE_DATA_SET_H */
+Index: libdessert0.86-0.86.14/src/snmp/dessertAppStatsTable_enums.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertAppStatsTable_enums.h 2009-12-09 16:38:27.322458741 +0100
+@@ -0,0 +1,118 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * : generic-table-enums.m2c 12526 2005-07-15 22:41:16Z rstory $
++ *
++ * $Id:$
++ */
++#ifndef DESSERTAPPSTATSTABLE_ENUMS_H
++#define DESSERTAPPSTATSTABLE_ENUMS_H
++
++#include <dessert/dessert.h>
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++ /*
++ * NOTES on enums
++ * ==============
++ *
++ * Value Mapping
++ * -------------
++ * If the values for your data type don't exactly match the
++ * possible values defined by the mib, you should map them
++ * below. For example, a boolean flag (1/0) is usually represented
++ * as a TruthValue in a MIB, which maps to the values (1/2).
++ *
++ */
++/*************************************************************************
++ *************************************************************************
++ *
++ * enum definitions for table dessertAppStatsTable
++ *
++ *************************************************************************
++ *************************************************************************/
++
++/*************************************************************
++ * constants for enums for the MIB node
++ * appStatsNodeOrLink (INTEGER / ASN_INTEGER)
++ *
++ * since a Textual Convention may be referenced more than once in a
++ * MIB, protect againt redefinitions of the enum values.
++ */
++#ifndef APPSTATSNODEORLINK_ENUMS
++#define APPSTATSNODEORLINK_ENUMS
++
++#define APPSTATSNODEORLINK_NONE 0
++#define APPSTATSNODEORLINK_NODE 1
++#define APPSTATSNODEORLINK_LINK 2
++
++#endif /* APPSTATSNODEORLINK_ENUMS */
++
++ /*
++ * TODO:140:o: Define your interal representation of appStatsNodeOrLink enums.
++ * (used for value mapping; see notes at top of file)
++ */
++#define INTERNAL_DESSERTAPPSTATSTABLE_APPSTATSNODEORLINK_NONE DESSERT_APPSTATS_NODEORLINK_NONE
++#define INTERNAL_DESSERTAPPSTATSTABLE_APPSTATSNODEORLINK_NODE DESSERT_APPSTATS_NODEORLINK_NODE
++#define INTERNAL_DESSERTAPPSTATSTABLE_APPSTATSNODEORLINK_LINK DESSERT_APPSTATS_NODEORLINK_LINK
++
++
++/*************************************************************
++ * constants for enums for the MIB node
++ * appStatsValueType (INTEGER / ASN_INTEGER)
++ *
++ * since a Textual Convention may be referenced more than once in a
++ * MIB, protect againt redefinitions of the enum values.
++ */
++#ifndef APPSTATSVALUETYPE_ENUMS
++#define APPSTATSVALUETYPE_ENUMS
++
++#define APPSTATSVALUETYPE_BOOL 0
++#define APPSTATSVALUETYPE_INT32 1
++#define APPSTATSVALUETYPE_UINT32 2
++#define APPSTATSVALUETYPE_COUNTER64 3
++#define APPSTATSVALUETYPE_OCTETSTRING 4
++
++#endif /* APPSTATSVALUETYPE_ENUMS */
++
++ /*
++ * TODO:140:o: Define your interal representation of appStatsValueType enums.
++ * (used for value mapping; see notes at top of file)
++ */
++#define INTERNAL_DESSERTAPPSTATSTABLE_APPSTATSVALUETYPE_BOOL DESSERT_APPSTATS_VALUETYPE_BOOL
++#define INTERNAL_DESSERTAPPSTATSTABLE_APPSTATSVALUETYPE_INT32 DESSERT_APPSTATS_VALUETYPE_INT32
++#define INTERNAL_DESSERTAPPSTATSTABLE_APPSTATSVALUETYPE_UINT32 DESSERT_APPSTATS_VALUETYPE_UINT32
++#define INTERNAL_DESSERTAPPSTATSTABLE_APPSTATSVALUETYPE_COUNTER64 DESSERT_APPSTATS_VALUETYPE_COUNTER64
++#define INTERNAL_DESSERTAPPSTATSTABLE_APPSTATSVALUETYPE_OCTETSTRING DESSERT_APPSTATS_VALUETYPE_OCTETSTRING
++
++
++/*************************************************************
++ * constants for enums for the MIB node
++ * appStatsTruthValue (TruthValue / ASN_INTEGER)
++ *
++ * since a Textual Convention may be referenced more than once in a
++ * MIB, protect againt redefinitions of the enum values.
++ */
++#ifndef TRUTHVALUE_ENUMS
++#define TRUTHVALUE_ENUMS
++
++#define TRUTHVALUE_TRUE 1
++#define TRUTHVALUE_FALSE 2
++
++#endif /* TRUTHVALUE_ENUMS */
++
++ /*
++ * TODO:140:o: Define your interal representation of appStatsTruthValue enums.
++ * (used for value mapping; see notes at top of file)
++ */
++#define INTERNAL_DESSERTAPPSTATSTABLE_APPSTATSTRUTHVALUE_TRUE DESSERT_APPSTATS_BOOL_TRUE
++#define INTERNAL_DESSERTAPPSTATSTABLE_APPSTATSTRUTHVALUE_FALSE DESSERT_APPSTATS_BOOL_FALSE
++
++
++
++
++#ifdef __cplusplus
++}
++#endif
++#endif /* DESSERTAPPSTATSTABLE_ENUMS_H */
+Index: libdessert0.86-0.86.14/src/snmp/dessertAppStatsTable_interface.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertAppStatsTable_interface.c 2009-12-09 16:38:27.322458741 +0100
+@@ -0,0 +1,1069 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * version : 15899 $ of $
++ *
++ * $Id:$
++ */
++/*
++ * *********************************************************************
++ * *********************************************************************
++ * *********************************************************************
++ * *** ***
++ * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
++ * *** ***
++ * *** ***
++ * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
++ * *** ***
++ * *** ***
++ * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
++ * *** ***
++ * *** ***
++ * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
++ * *** ***
++ * *** ***
++ * *********************************************************************
++ * *********************************************************************
++ * *********************************************************************
++ */
++
++/*
++ * standard Net-SNMP includes
++ */
++#include <net-snmp/net-snmp-config.h>
++#include <net-snmp/net-snmp-includes.h>
++#include <net-snmp/agent/net-snmp-agent-includes.h>
++
++/*
++ * include our parent header
++ */
++#include "dessertAppStatsTable.h"
++
++
++#include <net-snmp/agent/table_container.h>
++#include <net-snmp/library/container.h>
++
++#include "dessertAppStatsTable_interface.h"
++
++#include <ctype.h>
++
++/**********************************************************************
++ **********************************************************************
++ ***
++ *** Table dessertAppStatsTable
++ ***
++ **********************************************************************
++ **********************************************************************/
++/*
++ * DESSERT-MIB::dessertAppStatsTable is subid 9 of dessertObjects.
++ * Its status is Current.
++ * OID: .1.3.6.1.4.1.18898.0.19.42.1.9, length: 12
++ */
++typedef struct dessertAppStatsTable_interface_ctx_s {
++
++ netsnmp_container *container;
++ netsnmp_cache *cache;
++
++ dessertAppStatsTable_registration *user_ctx;
++
++ netsnmp_table_registration_info tbl_info;
++
++ netsnmp_baby_steps_access_methods access_multiplexer;
++
++} dessertAppStatsTable_interface_ctx;
++
++static dessertAppStatsTable_interface_ctx dessertAppStatsTable_if_ctx;
++
++static void
++_dessertAppStatsTable_container_init(dessertAppStatsTable_interface_ctx *
++ if_ctx);
++static void
++_dessertAppStatsTable_container_shutdown(dessertAppStatsTable_interface_ctx
++ * if_ctx);
++
++
++netsnmp_container *
++dessertAppStatsTable_container_get(void)
++{
++ return dessertAppStatsTable_if_ctx.container;
++}
++
++dessertAppStatsTable_registration *
++dessertAppStatsTable_registration_get(void)
++{
++ return dessertAppStatsTable_if_ctx.user_ctx;
++}
++
++dessertAppStatsTable_registration *
++dessertAppStatsTable_registration_set(dessertAppStatsTable_registration *
++ newreg)
++{
++ dessertAppStatsTable_registration *old =
++ dessertAppStatsTable_if_ctx.user_ctx;
++ dessertAppStatsTable_if_ctx.user_ctx = newreg;
++ return old;
++}
++
++int
++dessertAppStatsTable_container_size(void)
++{
++ return CONTAINER_SIZE(dessertAppStatsTable_if_ctx.container);
++}
++
++/*
++ * mfd multiplexer modes
++ */
++static Netsnmp_Node_Handler _mfd_dessertAppStatsTable_pre_request;
++static Netsnmp_Node_Handler _mfd_dessertAppStatsTable_post_request;
++static Netsnmp_Node_Handler _mfd_dessertAppStatsTable_object_lookup;
++static Netsnmp_Node_Handler _mfd_dessertAppStatsTable_get_values;
++/**
++ * @internal
++ * Initialize the table dessertAppStatsTable
++ * (Define its contents and how it's structured)
++ */
++void
++_dessertAppStatsTable_initialize_interface
++ (dessertAppStatsTable_registration * reg_ptr, u_long flags)
++{
++ netsnmp_baby_steps_access_methods *access_multiplexer =
++ &dessertAppStatsTable_if_ctx.access_multiplexer;
++ netsnmp_table_registration_info *tbl_info =
++ &dessertAppStatsTable_if_ctx.tbl_info;
++ netsnmp_handler_registration *reginfo;
++ netsnmp_mib_handler *handler;
++ int mfd_modes = 0;
++
++ DEBUGMSGTL(("internal:dessertAppStatsTable:_dessertAppStatsTable_initialize_interface", "called\n"));
++
++
++ /*************************************************
++ *
++ * save interface context for dessertAppStatsTable
++ */
++ /*
++ * Setting up the table's definition
++ */
++ netsnmp_table_helper_add_indexes(tbl_info,ASN_INTEGER,
++ /** index: appStatsIndex */
++ 0);
++
++ /*
++ * Define the minimum and maximum accessible columns. This
++ * optimizes retrival.
++ */
++ tbl_info->min_column = DESSERTAPPSTATSTABLE_MIN_COL;
++ tbl_info->max_column = DESSERTAPPSTATSTABLE_MAX_COL;
++
++ /*
++ * save users context
++ */
++ dessertAppStatsTable_if_ctx.user_ctx = reg_ptr;
++
++ /*
++ * call data access initialization code
++ */
++ dessertAppStatsTable_init_data(reg_ptr);
++
++ /*
++ * set up the container
++ */
++ _dessertAppStatsTable_container_init(&dessertAppStatsTable_if_ctx);
++ if (NULL == dessertAppStatsTable_if_ctx.container) {
++ snmp_log(LOG_ERR,
++ "could not initialize container for dessertAppStatsTable\n");
++ return;
++ }
++
++ /*
++ * access_multiplexer: REQUIRED wrapper for get request handling
++ */
++ access_multiplexer->object_lookup =
++ _mfd_dessertAppStatsTable_object_lookup;
++ access_multiplexer->get_values = _mfd_dessertAppStatsTable_get_values;
++
++ /*
++ * no wrappers yet
++ */
++ access_multiplexer->pre_request =
++ _mfd_dessertAppStatsTable_pre_request;
++ access_multiplexer->post_request =
++ _mfd_dessertAppStatsTable_post_request;
++
++
++ /*************************************************
++ *
++ * Create a registration, save our reg data, register table.
++ */
++ DEBUGMSGTL(("dessertAppStatsTable:init_dessertAppStatsTable",
++ "Registering dessertAppStatsTable as a mibs-for-dummies table.\n"));
++ handler =
++ netsnmp_baby_steps_access_multiplexer_get(access_multiplexer);
++ reginfo =
++ netsnmp_handler_registration_create("dessertAppStatsTable",
++ handler,
++ dessertAppStatsTable_oid,
++ dessertAppStatsTable_oid_size,
++ HANDLER_CAN_BABY_STEP |
++ HANDLER_CAN_RONLY);
++ if (NULL == reginfo) {
++ snmp_log(LOG_ERR,
++ "error registering table dessertAppStatsTable\n");
++ return;
++ }
++ reginfo->my_reg_void = &dessertAppStatsTable_if_ctx;
++
++ /*************************************************
++ *
++ * set up baby steps handler, create it and inject it
++ */
++ if (access_multiplexer->object_lookup)
++ mfd_modes |= BABY_STEP_OBJECT_LOOKUP;
++ if (access_multiplexer->set_values)
++ mfd_modes |= BABY_STEP_SET_VALUES;
++ if (access_multiplexer->irreversible_commit)
++ mfd_modes |= BABY_STEP_IRREVERSIBLE_COMMIT;
++ if (access_multiplexer->object_syntax_checks)
++ mfd_modes |= BABY_STEP_CHECK_OBJECT;
++
++ if (access_multiplexer->pre_request)
++ mfd_modes |= BABY_STEP_PRE_REQUEST;
++ if (access_multiplexer->post_request)
++ mfd_modes |= BABY_STEP_POST_REQUEST;
++
++ if (access_multiplexer->undo_setup)
++ mfd_modes |= BABY_STEP_UNDO_SETUP;
++ if (access_multiplexer->undo_cleanup)
++ mfd_modes |= BABY_STEP_UNDO_CLEANUP;
++ if (access_multiplexer->undo_sets)
++ mfd_modes |= BABY_STEP_UNDO_SETS;
++
++ if (access_multiplexer->row_creation)
++ mfd_modes |= BABY_STEP_ROW_CREATE;
++ if (access_multiplexer->consistency_checks)
++ mfd_modes |= BABY_STEP_CHECK_CONSISTENCY;
++ if (access_multiplexer->commit)
++ mfd_modes |= BABY_STEP_COMMIT;
++ if (access_multiplexer->undo_commit)
++ mfd_modes |= BABY_STEP_UNDO_COMMIT;
++
++ handler = netsnmp_baby_steps_handler_get(mfd_modes);
++ netsnmp_inject_handler(reginfo, handler);
++
++ /*************************************************
++ *
++ * inject row_merge helper with prefix rootoid_len + 2 (entry.col)
++ */
++ handler = netsnmp_get_row_merge_handler(reginfo->rootoid_len + 2);
++ netsnmp_inject_handler(reginfo, handler);
++
++ /*************************************************
++ *
++ * inject container_table helper
++ */
++ handler =
++ netsnmp_container_table_handler_get(tbl_info,
++ dessertAppStatsTable_if_ctx.
++ container,
++ TABLE_CONTAINER_KEY_NETSNMP_INDEX);
++ netsnmp_inject_handler(reginfo, handler);
++
++ /*************************************************
++ *
++ * inject cache helper
++ */
++ if (NULL != dessertAppStatsTable_if_ctx.cache) {
++ handler =
++ netsnmp_cache_handler_get(dessertAppStatsTable_if_ctx.cache);
++ netsnmp_inject_handler(reginfo, handler);
++ }
++
++ /*
++ * register table
++ */
++ netsnmp_register_table(reginfo, tbl_info);
++
++} /* _dessertAppStatsTable_initialize_interface */
++
++/**
++ * @internal
++ * Shutdown the table dessertAppStatsTable
++ */
++void
++_dessertAppStatsTable_shutdown_interface(dessertAppStatsTable_registration
++ * reg_ptr)
++{
++ /*
++ * shutdown the container
++ */
++ _dessertAppStatsTable_container_shutdown(&dessertAppStatsTable_if_ctx);
++}
++
++void
++dessertAppStatsTable_valid_columns_set(netsnmp_column_info *vc)
++{
++ dessertAppStatsTable_if_ctx.tbl_info.valid_columns = vc;
++} /* dessertAppStatsTable_valid_columns_set */
++
++/**
++ * @internal
++ * convert the index component stored in the context to an oid
++ */
++int
++dessertAppStatsTable_index_to_oid(netsnmp_index * oid_idx,
++ dessertAppStatsTable_mib_index * mib_idx)
++{
++ int err = SNMP_ERR_NOERROR;
++
++ /*
++ * temp storage for parsing indexes
++ */
++ /*
++ * appStatsIndex(1)///()//L/a/w/e/r/d/h
++ */
++ netsnmp_variable_list var_appStatsIndex;
++
++ /*
++ * set up varbinds
++ */
++ memset(&var_appStatsIndex, 0x00, sizeof(var_appStatsIndex));
++ var_appStatsIndex.type = ASN_INTEGER;
++
++ /*
++ * chain temp index varbinds together
++ */
++ var_appStatsIndex.next_variable = NULL;
++
++
++ DEBUGMSGTL(("verbose:dessertAppStatsTable:dessertAppStatsTable_index_to_oid", "called\n"));
++
++ /*
++ * appStatsIndex(1)///()//L/a/w/e/r/d/h
++ */
++ snmp_set_var_value(&var_appStatsIndex,
++ (u_char *) & mib_idx->appStatsIndex,
++ sizeof(mib_idx->appStatsIndex));
++
++
++ err = build_oid_noalloc(oid_idx->oids, oid_idx->len, &oid_idx->len,
++ NULL, 0, &var_appStatsIndex);
++ if (err)
++ snmp_log(LOG_ERR, "error %d converting index to oid\n", err);
++
++ /*
++ * parsing may have allocated memory. free it.
++ */
++ snmp_reset_var_buffers(&var_appStatsIndex);
++
++ return err;
++} /* dessertAppStatsTable_index_to_oid */
++
++/**
++ * extract dessertAppStatsTable indexes from a netsnmp_index
++ *
++ * @retval SNMP_ERR_NOERROR : no error
++ * @retval SNMP_ERR_GENERR : error
++ */
++int
++dessertAppStatsTable_index_from_oid(netsnmp_index * oid_idx,
++ dessertAppStatsTable_mib_index *
++ mib_idx)
++{
++ int err = SNMP_ERR_NOERROR;
++
++ /*
++ * temp storage for parsing indexes
++ */
++ /*
++ * appStatsIndex(1)///()//L/a/w/e/r/d/h
++ */
++ netsnmp_variable_list var_appStatsIndex;
++
++ /*
++ * set up varbinds
++ */
++ memset(&var_appStatsIndex, 0x00, sizeof(var_appStatsIndex));
++ var_appStatsIndex.type = ASN_INTEGER;
++
++ /*
++ * chain temp index varbinds together
++ */
++ var_appStatsIndex.next_variable = NULL;
++
++
++ DEBUGMSGTL(("verbose:dessertAppStatsTable:dessertAppStatsTable_index_from_oid", "called\n"));
++
++ /*
++ * parse the oid into the individual index components
++ */
++ err = parse_oid_indexes(oid_idx->oids, oid_idx->len,
++ &var_appStatsIndex);
++ if (err == SNMP_ERR_NOERROR) {
++ /*
++ * copy out values
++ */
++ mib_idx->appStatsIndex = *((long *)var_appStatsIndex.val.string);
++
++
++ }
++
++ /*
++ * parsing may have allocated memory. free it.
++ */
++ snmp_reset_var_buffers(&var_appStatsIndex);
++
++ return err;
++} /* dessertAppStatsTable_index_from_oid */
++
++
++/*
++ *********************************************************************
++ * @internal
++ * allocate resources for a dessertAppStatsTable_rowreq_ctx
++ */
++dessertAppStatsTable_rowreq_ctx *
++dessertAppStatsTable_allocate_rowreq_ctx(void)
++{
++ dessertAppStatsTable_rowreq_ctx *rowreq_ctx =
++ SNMP_MALLOC_TYPEDEF(dessertAppStatsTable_rowreq_ctx);
++
++ DEBUGMSGTL(("internal:dessertAppStatsTable:dessertAppStatsTable_allocate_rowreq_ctx", "called\n"));
++
++ if (NULL == rowreq_ctx) {
++ snmp_log(LOG_ERR, "Couldn't allocate memory for a "
++ "dessertAppStatsTable_rowreq_ctx.\n");
++ return NULL;
++ }
++
++ rowreq_ctx->oid_idx.oids = rowreq_ctx->oid_tmp;
++
++ rowreq_ctx->dessertAppStatsTable_data_list = NULL;
++
++
++ return rowreq_ctx;
++} /* dessertAppStatsTable_allocate_rowreq_ctx */
++
++/*
++ * @internal
++ * release resources for a dessertAppStatsTable_rowreq_ctx
++ */
++void
++dessertAppStatsTable_release_rowreq_ctx(dessertAppStatsTable_rowreq_ctx *
++ rowreq_ctx)
++{
++ DEBUGMSGTL(("internal:dessertAppStatsTable:dessertAppStatsTable_release_rowreq_ctx", "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++
++ /*
++ * free index oid pointer
++ */
++ if (rowreq_ctx->oid_idx.oids != rowreq_ctx->oid_tmp)
++ free(rowreq_ctx->oid_idx.oids);
++
++ SNMP_FREE(rowreq_ctx);
++} /* dessertAppStatsTable_release_rowreq_ctx */
++
++/**
++ * @internal
++ * wrapper
++ */
++static int
++_mfd_dessertAppStatsTable_pre_request(netsnmp_mib_handler *handler,
++ netsnmp_handler_registration
++ *reginfo,
++ netsnmp_agent_request_info
++ *agtreq_info,
++ netsnmp_request_info *requests)
++{
++ int rc;
++
++ DEBUGMSGTL(("internal:dessertAppStatsTable:_mfd_dessertAppStatsTable_pre_request", "called\n"));
++
++ if (1 != netsnmp_row_merge_status_first(reginfo, agtreq_info)) {
++ DEBUGMSGTL(("internal:dessertAppStatsTable",
++ "skipping additional pre_request\n"));
++ return SNMP_ERR_NOERROR;
++ }
++
++ rc = dessertAppStatsTable_pre_request(dessertAppStatsTable_if_ctx.
++ user_ctx);
++ if (MFD_SUCCESS != rc) {
++ /*
++ * nothing we can do about it but log it
++ */
++ DEBUGMSGTL(("dessertAppStatsTable", "error %d from "
++ "dessertAppStatsTable_pre_request\n", rc));
++ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
++ }
++
++ return SNMP_ERR_NOERROR;
++} /* _mfd_dessertAppStatsTable_pre_request */
++
++/**
++ * @internal
++ * wrapper
++ */
++static int
++_mfd_dessertAppStatsTable_post_request(netsnmp_mib_handler *handler,
++ netsnmp_handler_registration
++ *reginfo,
++ netsnmp_agent_request_info
++ *agtreq_info,
++ netsnmp_request_info *requests)
++{
++ dessertAppStatsTable_rowreq_ctx *rowreq_ctx =
++ netsnmp_container_table_row_extract(requests);
++ int rc, packet_rc;
++
++ DEBUGMSGTL(("internal:dessertAppStatsTable:_mfd_dessertAppStatsTable_post_request", "called\n"));
++
++ /*
++ * release row context, if deleted
++ */
++ if (rowreq_ctx && (rowreq_ctx->rowreq_flags & MFD_ROW_DELETED))
++ dessertAppStatsTable_release_rowreq_ctx(rowreq_ctx);
++
++ /*
++ * wait for last call before calling user
++ */
++ if (1 != netsnmp_row_merge_status_last(reginfo, agtreq_info)) {
++ DEBUGMSGTL(("internal:dessertAppStatsTable",
++ "waiting for last post_request\n"));
++ return SNMP_ERR_NOERROR;
++ }
++
++ packet_rc = netsnmp_check_all_requests_error(agtreq_info->asp, 0);
++ rc = dessertAppStatsTable_post_request(dessertAppStatsTable_if_ctx.
++ user_ctx, packet_rc);
++ if (MFD_SUCCESS != rc) {
++ /*
++ * nothing we can do about it but log it
++ */
++ DEBUGMSGTL(("dessertAppStatsTable", "error %d from "
++ "dessertAppStatsTable_post_request\n", rc));
++ }
++
++ return SNMP_ERR_NOERROR;
++} /* _mfd_dessertAppStatsTable_post_request */
++
++/**
++ * @internal
++ * wrapper
++ */
++static int
++_mfd_dessertAppStatsTable_object_lookup(netsnmp_mib_handler *handler,
++ netsnmp_handler_registration
++ *reginfo,
++ netsnmp_agent_request_info
++ *agtreq_info,
++ netsnmp_request_info *requests)
++{
++ int rc = SNMP_ERR_NOERROR;
++ dessertAppStatsTable_rowreq_ctx *rowreq_ctx =
++ netsnmp_container_table_row_extract(requests);
++
++ DEBUGMSGTL(("internal:dessertAppStatsTable:_mfd_dessertAppStatsTable_object_lookup", "called\n"));
++
++ /*
++ * get our context from mfd
++ * dessertAppStatsTable_interface_ctx *if_ctx =
++ * (dessertAppStatsTable_interface_ctx *)reginfo->my_reg_void;
++ */
++
++ if (NULL == rowreq_ctx) {
++ rc = SNMP_ERR_NOCREATION;
++ }
++
++ if (MFD_SUCCESS != rc)
++ netsnmp_request_set_error_all(requests, rc);
++ else
++ dessertAppStatsTable_row_prep(rowreq_ctx);
++
++ return SNMP_VALIDATE_ERR(rc);
++} /* _mfd_dessertAppStatsTable_object_lookup */
++
++/***********************************************************************
++ *
++ * GET processing
++ *
++ ***********************************************************************/
++/*
++ * @internal
++ * Retrieve the value for a particular column
++ */
++NETSNMP_STATIC_INLINE int
++_dessertAppStatsTable_get_column(dessertAppStatsTable_rowreq_ctx *
++ rowreq_ctx, netsnmp_variable_list * var,
++ int column)
++{
++ int rc = SNMPERR_SUCCESS;
++
++ DEBUGMSGTL(("internal:dessertAppStatsTable:_mfd_dessertAppStatsTable_get_column", "called for %d\n", column));
++
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ switch (column) {
++
++ /*
++ * appStatsName(2)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
++ */
++ case COLUMN_APPSTATSNAME:
++ if (!(COLUMN_APPSTATSNAME_FLAG & rowreq_ctx->column_exists_flags)) {
++ DEBUGMSGTL(("internal:dessertAppStatsTable:_mfd_dessertAppStatsTable_get_column", "column %d (appStatsName) doesn't exist\n", column));
++ return MFD_SKIP;
++ }
++
++ var->type = ASN_OCTET_STR;
++ rc = appStatsName_get(rowreq_ctx, (char **) &var->val.string,
++ &var->val_len);
++ break;
++
++ /*
++ * appStatsDesc(3)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
++ */
++ case COLUMN_APPSTATSDESC:
++ if (!(COLUMN_APPSTATSDESC_FLAG & rowreq_ctx->column_exists_flags)) {
++ DEBUGMSGTL(("internal:dessertAppStatsTable:_mfd_dessertAppStatsTable_get_column", "column %d (appStatsDesc) doesn't exist\n", column));
++ return MFD_SKIP;
++ }
++
++ var->type = ASN_OCTET_STR;
++ rc = appStatsDesc_get(rowreq_ctx, (char **) &var->val.string,
++ &var->val_len);
++ break;
++
++ /*
++ * appStatsNodeOrLink(4)/INTEGER/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h
++ */
++ case COLUMN_APPSTATSNODEORLINK:
++ if (!
++ (COLUMN_APPSTATSNODEORLINK_FLAG & rowreq_ctx->
++ column_exists_flags)) {
++ DEBUGMSGTL(("internal:dessertAppStatsTable:_mfd_dessertAppStatsTable_get_column", "column %d (appStatsNodeOrLink) doesn't exist\n", column));
++ return MFD_SKIP;
++ }
++
++ var->val_len = sizeof(u_long);
++ var->type = ASN_INTEGER;
++ rc = appStatsNodeOrLink_get(rowreq_ctx,
++ (u_long *) var->val.string);
++ break;
++
++ /*
++ * appStatsValueType(5)/INTEGER/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h
++ */
++ case COLUMN_APPSTATSVALUETYPE:
++ if (!
++ (COLUMN_APPSTATSVALUETYPE_FLAG & rowreq_ctx->
++ column_exists_flags)) {
++ DEBUGMSGTL(("internal:dessertAppStatsTable:_mfd_dessertAppStatsTable_get_column", "column %d (appStatsValueType) doesn't exist\n", column));
++ return MFD_SKIP;
++ }
++
++ var->val_len = sizeof(u_long);
++ var->type = ASN_INTEGER;
++ rc = appStatsValueType_get(rowreq_ctx, (u_long *) var->val.string);
++ break;
++
++ /*
++ * appStatsMacAddress1(6)/MacAddress/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
++ */
++ case COLUMN_APPSTATSMACADDRESS1:
++ if (!
++ (COLUMN_APPSTATSMACADDRESS1_FLAG & rowreq_ctx->
++ column_exists_flags)) {
++ DEBUGMSGTL(("internal:dessertAppStatsTable:_mfd_dessertAppStatsTable_get_column", "column %d (appStatsMacAddress1) doesn't exist\n", column));
++ return MFD_SKIP;
++ }
++
++ var->type = ASN_OCTET_STR;
++ rc = appStatsMacAddress1_get(rowreq_ctx,
++ (char **) &var->val.string,
++ &var->val_len);
++ break;
++
++ /*
++ * appStatsMacAddress2(7)/MacAddress/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
++ */
++ case COLUMN_APPSTATSMACADDRESS2:
++ if (!
++ (COLUMN_APPSTATSMACADDRESS2_FLAG & rowreq_ctx->
++ column_exists_flags)) {
++ DEBUGMSGTL(("internal:dessertAppStatsTable:_mfd_dessertAppStatsTable_get_column", "column %d (appStatsMacAddress2) doesn't exist\n", column));
++ return MFD_SKIP;
++ }
++
++ var->type = ASN_OCTET_STR;
++ rc = appStatsMacAddress2_get(rowreq_ctx,
++ (char **) &var->val.string,
++ &var->val_len);
++ break;
++
++ /*
++ * appStatsTruthValue(8)/TruthValue/ASN_INTEGER/long(u_long)//l/A/w/E/r/d/h
++ */
++ case COLUMN_APPSTATSTRUTHVALUE:
++ if (!
++ (COLUMN_APPSTATSTRUTHVALUE_FLAG & rowreq_ctx->
++ column_exists_flags)) {
++ DEBUGMSGTL(("internal:dessertAppStatsTable:_mfd_dessertAppStatsTable_get_column", "column %d (appStatsTruthValue) doesn't exist\n", column));
++ return MFD_SKIP;
++ }
++
++ var->val_len = sizeof(u_long);
++ var->type = ASN_INTEGER;
++ rc = appStatsTruthValue_get(rowreq_ctx,
++ (u_long *) var->val.string);
++ break;
++
++ /*
++ * appStatsInteger32(9)/INTEGER32/ASN_INTEGER/long(long)//l/A/w/e/r/d/h
++ */
++ case COLUMN_APPSTATSINTEGER32:
++ if (!
++ (COLUMN_APPSTATSINTEGER32_FLAG & rowreq_ctx->
++ column_exists_flags)) {
++ DEBUGMSGTL(("internal:dessertAppStatsTable:_mfd_dessertAppStatsTable_get_column", "column %d (appStatsInteger32) doesn't exist\n", column));
++ return MFD_SKIP;
++ }
++
++ var->val_len = sizeof(long);
++ var->type = ASN_INTEGER;
++ rc = appStatsInteger32_get(rowreq_ctx, (long *) var->val.string);
++ break;
++
++ /*
++ * appStatsUnsigned32(10)/UNSIGNED32/ASN_UNSIGNED/u_long(u_long)//l/A/w/e/r/d/h
++ */
++ case COLUMN_APPSTATSUNSIGNED32:
++ if (!
++ (COLUMN_APPSTATSUNSIGNED32_FLAG & rowreq_ctx->
++ column_exists_flags)) {
++ DEBUGMSGTL(("internal:dessertAppStatsTable:_mfd_dessertAppStatsTable_get_column", "column %d (appStatsUnsigned32) doesn't exist\n", column));
++ return MFD_SKIP;
++ }
++
++ var->val_len = sizeof(u_long);
++ var->type = ASN_UNSIGNED;
++ rc = appStatsUnsigned32_get(rowreq_ctx,
++ (u_long *) var->val.string);
++ break;
++
++ /*
++ * appStatsCounter64(11)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
++ */
++ case COLUMN_APPSTATSCOUNTER64:
++ if (!
++ (COLUMN_APPSTATSCOUNTER64_FLAG & rowreq_ctx->
++ column_exists_flags)) {
++ DEBUGMSGTL(("internal:dessertAppStatsTable:_mfd_dessertAppStatsTable_get_column", "column %d (appStatsCounter64) doesn't exist\n", column));
++ return MFD_SKIP;
++ }
++
++ var->val_len = sizeof(U64);
++ var->type = ASN_COUNTER64;
++ rc = appStatsCounter64_get(rowreq_ctx, (U64 *) var->val.string);
++ break;
++
++ /*
++ * appStatsOctetString(12)/OCTETSTR/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/h
++ */
++ case COLUMN_APPSTATSOCTETSTRING:
++ if (!
++ (COLUMN_APPSTATSOCTETSTRING_FLAG & rowreq_ctx->
++ column_exists_flags)) {
++ DEBUGMSGTL(("internal:dessertAppStatsTable:_mfd_dessertAppStatsTable_get_column", "column %d (appStatsOctetString) doesn't exist\n", column));
++ return MFD_SKIP;
++ }
++
++ var->type = ASN_OCTET_STR;
++ rc = appStatsOctetString_get(rowreq_ctx,
++ (char **) &var->val.string,
++ &var->val_len);
++ break;
++
++ default:
++ if (DESSERTAPPSTATSTABLE_MIN_COL <= column
++ && column <= DESSERTAPPSTATSTABLE_MAX_COL) {
++ DEBUGMSGTL(("internal:dessertAppStatsTable:_mfd_dessertAppStatsTable_get_column", "assume column %d is reserved\n", column));
++ rc = MFD_SKIP;
++ } else {
++ snmp_log(LOG_ERR,
++ "unknown column %d in _dessertAppStatsTable_get_column\n",
++ column);
++ }
++ break;
++ }
++
++ return rc;
++} /* _dessertAppStatsTable_get_column */
++
++int
++_mfd_dessertAppStatsTable_get_values(netsnmp_mib_handler *handler,
++ netsnmp_handler_registration *reginfo,
++ netsnmp_agent_request_info
++ *agtreq_info,
++ netsnmp_request_info *requests)
++{
++ dessertAppStatsTable_rowreq_ctx *rowreq_ctx =
++ netsnmp_container_table_row_extract(requests);
++ netsnmp_table_request_info *tri;
++ u_char *old_string;
++ void (*dataFreeHook) (void *);
++ int rc;
++
++ DEBUGMSGTL(("internal:dessertAppStatsTable:_mfd_dessertAppStatsTable_get_values", "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ DEBUGMSGTL(("9:dessertAppStatsTable:_mfd_dessertAppStatsTable_get_values", "exists %p\n", rowreq_ctx->column_exists_flags));
++
++ for (; requests; requests = requests->next) {
++ /*
++ * save old pointer, so we can free it if replaced
++ */
++ old_string = requests->requestvb->val.string;
++ dataFreeHook = requests->requestvb->dataFreeHook;
++ if (NULL == requests->requestvb->val.string) {
++ requests->requestvb->val.string = requests->requestvb->buf;
++ requests->requestvb->val_len =
++ sizeof(requests->requestvb->buf);
++ } else if (requests->requestvb->buf ==
++ requests->requestvb->val.string) {
++ if (requests->requestvb->val_len !=
++ sizeof(requests->requestvb->buf))
++ requests->requestvb->val_len =
++ sizeof(requests->requestvb->buf);
++ }
++
++ /*
++ * get column data
++ */
++ tri = netsnmp_extract_table_info(requests);
++ if (NULL == tri)
++ continue;
++
++ rc = _dessertAppStatsTable_get_column(rowreq_ctx,
++ requests->requestvb,
++ tri->colnum);
++ if (rc) {
++ if (MFD_SKIP == rc) {
++ requests->requestvb->type = SNMP_NOSUCHINSTANCE;
++ rc = SNMP_ERR_NOERROR;
++ }
++ } else if (NULL == requests->requestvb->val.string) {
++ snmp_log(LOG_ERR, "NULL varbind data pointer!\n");
++ rc = SNMP_ERR_GENERR;
++ }
++ if (rc)
++ netsnmp_request_set_error(requests, SNMP_VALIDATE_ERR(rc));
++
++ /*
++ * if the buffer wasn't used previously for the old data (i.e. it
++ * was allcoated memory) and the get routine replaced the pointer,
++ * we need to free the previous pointer.
++ */
++ if (old_string && (old_string != requests->requestvb->buf) &&
++ (requests->requestvb->val.string != old_string)) {
++ if (dataFreeHook)
++ (*dataFreeHook) (old_string);
++ else
++ free(old_string);
++ }
++ } /* for results */
++
++ return SNMP_ERR_NOERROR;
++} /* _mfd_dessertAppStatsTable_get_values */
++
++
++/***********************************************************************
++ *
++ * SET processing
++ *
++ ***********************************************************************/
++
++/*
++ * SET PROCESSING NOT APPLICABLE (per MIB or user setting)
++ */
++/***********************************************************************
++ *
++ * DATA ACCESS
++ *
++ ***********************************************************************/
++static void _container_free(netsnmp_container * container);
++
++/**
++ * @internal
++ */
++static int
++_cache_load(netsnmp_cache * cache, void *vmagic)
++{
++ DEBUGMSGTL(("internal:dessertAppStatsTable:_cache_load", "called\n"));
++
++ if ((NULL == cache) || (NULL == cache->magic)) {
++ snmp_log(LOG_ERR,
++ "invalid cache for dessertAppStatsTable_cache_load\n");
++ return -1;
++ }
++
++ /** should only be called for an invalid or expired cache */
++ netsnmp_assert((0 == cache->valid) || (1 == cache->expired));
++
++ /*
++ * call user code
++ */
++ return dessertAppStatsTable_container_load((netsnmp_container *)
++ cache->magic);
++} /* _cache_load */
++
++/**
++ * @internal
++ */
++static void
++_cache_free(netsnmp_cache * cache, void *magic)
++{
++ netsnmp_container *container;
++
++ DEBUGMSGTL(("internal:dessertAppStatsTable:_cache_free", "called\n"));
++
++ if ((NULL == cache) || (NULL == cache->magic)) {
++ snmp_log(LOG_ERR,
++ "invalid cache in dessertAppStatsTable_cache_free\n");
++ return;
++ }
++
++ container = (netsnmp_container *) cache->magic;
++
++ _container_free(container);
++} /* _cache_free */
++
++/**
++ * @internal
++ */
++static void
++_container_item_free(dessertAppStatsTable_rowreq_ctx * rowreq_ctx,
++ void *context)
++{
++ DEBUGMSGTL(("internal:dessertAppStatsTable:_container_item_free",
++ "called\n"));
++
++ if (NULL == rowreq_ctx)
++ return;
++
++ dessertAppStatsTable_release_rowreq_ctx(rowreq_ctx);
++} /* _container_item_free */
++
++/**
++ * @internal
++ */
++static void
++_container_free(netsnmp_container * container)
++{
++ DEBUGMSGTL(("internal:dessertAppStatsTable:_container_free",
++ "called\n"));
++
++ if (NULL == container) {
++ snmp_log(LOG_ERR,
++ "invalid container in dessertAppStatsTable_container_free\n");
++ return;
++ }
++
++ /*
++ * call user code
++ */
++ dessertAppStatsTable_container_free(container);
++
++ /*
++ * free all items. inefficient, but easy.
++ */
++ CONTAINER_CLEAR(container,
++ (netsnmp_container_obj_func *) _container_item_free,
++ NULL);
++} /* _container_free */
++
++/**
++ * @internal
++ * initialize the container with functions or wrappers
++ */
++void
++_dessertAppStatsTable_container_init(dessertAppStatsTable_interface_ctx *
++ if_ctx)
++{
++ DEBUGMSGTL(("internal:dessertAppStatsTable:_dessertAppStatsTable_container_init", "called\n"));
++
++ /*
++ * cache init
++ */
++ if_ctx->cache = netsnmp_cache_create(30, /* timeout in seconds */
++ _cache_load, _cache_free,
++ dessertAppStatsTable_oid,
++ dessertAppStatsTable_oid_size);
++
++ if (NULL == if_ctx->cache) {
++ snmp_log(LOG_ERR,
++ "error creating cache for dessertAppStatsTable\n");
++ return;
++ }
++
++ if_ctx->cache->flags = NETSNMP_CACHE_DONT_INVALIDATE_ON_SET;
++
++ dessertAppStatsTable_container_init(&if_ctx->container, if_ctx->cache);
++ if (NULL == if_ctx->container)
++ if_ctx->container =
++ netsnmp_container_find("dessertAppStatsTable:table_container");
++ if (NULL == if_ctx->container) {
++ snmp_log(LOG_ERR, "error creating container in "
++ "dessertAppStatsTable_container_init\n");
++ return;
++ }
++
++ if (NULL != if_ctx->cache)
++ if_ctx->cache->magic = (void *) if_ctx->container;
++} /* _dessertAppStatsTable_container_init */
++
++/**
++ * @internal
++ * shutdown the container with functions or wrappers
++ */
++void
++_dessertAppStatsTable_container_shutdown(dessertAppStatsTable_interface_ctx
++ * if_ctx)
++{
++ DEBUGMSGTL(("internal:dessertAppStatsTable:_dessertAppStatsTable_container_shutdown", "called\n"));
++
++ dessertAppStatsTable_container_shutdown(if_ctx->container);
++
++ _container_free(if_ctx->container);
++
++} /* _dessertAppStatsTable_container_shutdown */
++
++
++dessertAppStatsTable_rowreq_ctx *
++dessertAppStatsTable_row_find_by_mib_index(dessertAppStatsTable_mib_index *
++ mib_idx)
++{
++ dessertAppStatsTable_rowreq_ctx *rowreq_ctx;
++ oid oid_tmp[MAX_OID_LEN];
++ netsnmp_index oid_idx;
++ int rc;
++
++ /*
++ * set up storage for OID
++ */
++ oid_idx.oids = oid_tmp;
++ oid_idx.len = sizeof(oid_tmp) / sizeof(oid);
++
++ /*
++ * convert
++ */
++ rc = dessertAppStatsTable_index_to_oid(&oid_idx, mib_idx);
++ if (MFD_SUCCESS != rc)
++ return NULL;
++
++ rowreq_ctx =
++ CONTAINER_FIND(dessertAppStatsTable_if_ctx.container, &oid_idx);
++
++ return rowreq_ctx;
++}
+Index: libdessert0.86-0.86.14/src/snmp/dessertAppStatsTable_interface.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertAppStatsTable_interface.h 2009-12-09 16:38:27.322458741 +0100
+@@ -0,0 +1,98 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * version : 15899 $ of $
++ *
++ * $Id:$
++ */
++/** @ingroup interface: Routines to interface to Net-SNMP
++ *
++ * \warning This code should not be modified, called directly,
++ * or used to interpret functionality. It is subject to
++ * change at any time.
++ *
++ * @{
++ */
++/*
++ * *********************************************************************
++ * *********************************************************************
++ * *********************************************************************
++ * *** ***
++ * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
++ * *** ***
++ * *** ***
++ * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
++ * *** ***
++ * *** ***
++ * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
++ * *** ***
++ * *** ***
++ * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
++ * *** ***
++ * *** ***
++ * *********************************************************************
++ * *********************************************************************
++ * *********************************************************************
++ */
++#ifndef DESSERTAPPSTATSTABLE_INTERFACE_H
++#define DESSERTAPPSTATSTABLE_INTERFACE_H
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++
++#include "dessertAppStatsTable.h"
++
++
++ /*
++ ********************************************************************
++ * Table declarations
++ */
++
++ /*
++ * PUBLIC interface initialization routine
++ */
++ void
++ _dessertAppStatsTable_initialize_interface
++ (dessertAppStatsTable_registration * user_ctx, u_long flags);
++ void
++ _dessertAppStatsTable_shutdown_interface
++ (dessertAppStatsTable_registration * user_ctx);
++
++ dessertAppStatsTable_registration
++ *dessertAppStatsTable_registration_get(void);
++
++ dessertAppStatsTable_registration
++ *dessertAppStatsTable_registration_set
++ (dessertAppStatsTable_registration * newreg);
++
++ netsnmp_container *dessertAppStatsTable_container_get(void);
++ int dessertAppStatsTable_container_size(void);
++
++ dessertAppStatsTable_rowreq_ctx
++ *dessertAppStatsTable_allocate_rowreq_ctx(void);
++ void
++ dessertAppStatsTable_release_rowreq_ctx
++ (dessertAppStatsTable_rowreq_ctx * rowreq_ctx);
++
++ int dessertAppStatsTable_index_to_oid(netsnmp_index *
++ oid_idx,
++ dessertAppStatsTable_mib_index
++ * mib_idx);
++ int dessertAppStatsTable_index_from_oid(netsnmp_index *
++ oid_idx,
++ dessertAppStatsTable_mib_index
++ * mib_idx);
++
++ /*
++ * access to certain internals. use with caution!
++ */
++ void
++ dessertAppStatsTable_valid_columns_set(netsnmp_column_info *vc);
++
++
++#ifdef __cplusplus
++}
++#endif
++#endif /* DESSERTAPPSTATSTABLE_INTERFACE_H */
++/** @} */
+Index: libdessert0.86-0.86.14/src/snmp/dessertAppStatsTable_oids.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertAppStatsTable_oids.h 2009-12-09 16:38:27.322458741 +0100
+@@ -0,0 +1,64 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * : generic-table-oids.m2c 12855 2005-09-27 15:56:08Z rstory $
++ *
++ * $Id:$
++ */
++#ifndef DESSERTAPPSTATSTABLE_OIDS_H
++#define DESSERTAPPSTATSTABLE_OIDS_H
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++
++ /*
++ * column number definitions for table dessertAppStatsTable
++ */
++#define DESSERTAPPSTATSTABLE_OID 1,3,6,1,4,1,18898,0,19,10,1,1,8
++
++#define COLUMN_APPSTATSINDEX 1
++
++#define COLUMN_APPSTATSNAME 2
++#define COLUMN_APPSTATSNAME_FLAG (0x1 << 1)
++
++#define COLUMN_APPSTATSDESC 3
++#define COLUMN_APPSTATSDESC_FLAG (0x1 << 2)
++
++#define COLUMN_APPSTATSNODEORLINK 4
++#define COLUMN_APPSTATSNODEORLINK_FLAG (0x1 << 3)
++
++#define COLUMN_APPSTATSVALUETYPE 5
++#define COLUMN_APPSTATSVALUETYPE_FLAG (0x1 << 4)
++
++#define COLUMN_APPSTATSMACADDRESS1 6
++#define COLUMN_APPSTATSMACADDRESS1_FLAG (0x1 << 5)
++
++#define COLUMN_APPSTATSMACADDRESS2 7
++#define COLUMN_APPSTATSMACADDRESS2_FLAG (0x1 << 6)
++
++#define COLUMN_APPSTATSTRUTHVALUE 8
++#define COLUMN_APPSTATSTRUTHVALUE_FLAG (0x1 << 7)
++
++#define COLUMN_APPSTATSINTEGER32 9
++#define COLUMN_APPSTATSINTEGER32_FLAG (0x1 << 8)
++
++#define COLUMN_APPSTATSUNSIGNED32 10
++#define COLUMN_APPSTATSUNSIGNED32_FLAG (0x1 << 9)
++
++#define COLUMN_APPSTATSCOUNTER64 11
++#define COLUMN_APPSTATSCOUNTER64_FLAG (0x1 << 10)
++
++#define COLUMN_APPSTATSOCTETSTRING 12
++#define COLUMN_APPSTATSOCTETSTRING_FLAG (0x1 << 11)
++
++
++#define DESSERTAPPSTATSTABLE_MIN_COL COLUMN_APPSTATSNAME
++#define DESSERTAPPSTATSTABLE_MAX_COL COLUMN_APPSTATSOCTETSTRING
++
++
++
++#ifdef __cplusplus
++}
++#endif
++#endif /* DESSERTAPPSTATSTABLE_OIDS_H */
+Index: libdessert0.86-0.86.14/src/snmp/dessertMeshifTable.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertMeshifTable.c 2009-12-09 16:38:27.322458741 +0100
+@@ -0,0 +1,214 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * version : 14170 $ of $
++ *
++ * $Id:$
++ */
++/** \page MFD helper for dessertMeshifTable
++ *
++ * \section intro Introduction
++ * Introductory text.
++ *
++ */
++/*
++ * standard Net-SNMP includes
++ */
++#include <net-snmp/net-snmp-config.h>
++#include <net-snmp/net-snmp-includes.h>
++#include <net-snmp/agent/net-snmp-agent-includes.h>
++
++/*
++ * include our parent header
++ */
++#include "dessertMeshifTable.h"
++
++#include <net-snmp/agent/mib_modules.h>
++
++#include "dessertMeshifTable_interface.h"
++
++oid dessertMeshifTable_oid[] = { DESSERTMESHIFTABLE_OID };
++
++int dessertMeshifTable_oid_size =
++OID_LENGTH(dessertMeshifTable_oid);
++
++dessertMeshifTable_registration dessertMeshifTable_user_context;
++
++void initialize_table_dessertMeshifTable(void);
++void shutdown_table_dessertMeshifTable(void);
++
++
++/**
++ * Initializes the dessertMeshifTable module
++ */
++void
++init_dessertMeshifTable(void)
++{
++ DEBUGMSGTL(("verbose:dessertMeshifTable:init_dessertMeshifTable",
++ "called\n"));
++
++ /*
++ * TODO:300:o: Perform dessertMeshifTable one-time module initialization.
++ */
++
++ /*
++ * here we initialize all the tables we're planning on supporting
++ */
++ if (should_init("dessertMeshifTable"))
++ initialize_table_dessertMeshifTable();
++
++} /* init_dessertMeshifTable */
++
++/**
++ * Shut-down the dessertMeshifTable module (agent is exiting)
++ */
++void
++shutdown_dessertMeshifTable(void)
++{
++ if (should_init("dessertMeshifTable"))
++ shutdown_table_dessertMeshifTable();
++
++}
++
++/**
++ * Initialize the table dessertMeshifTable
++ * (Define its contents and how it's structured)
++ */
++void
++initialize_table_dessertMeshifTable(void)
++{
++ dessertMeshifTable_registration *user_context;
++ u_long flags;
++
++ DEBUGMSGTL(("verbose:dessertMeshifTable:initialize_table_dessertMeshifTable", "called\n"));
++
++ /*
++ * TODO:301:o: Perform dessertMeshifTable one-time table initialization.
++ */
++
++ /*
++ * TODO:302:o: |->Initialize dessertMeshifTable user context
++ * if you'd like to pass in a pointer to some data for this
++ * table, allocate or set it up here.
++ */
++ /*
++ * a netsnmp_data_list is a simple way to store void pointers. A simple
++ * string token is used to add, find or remove pointers.
++ */
++ user_context =
++ netsnmp_create_data_list("dessertMeshifTable", NULL, NULL);
++
++ /*
++ * No support for any flags yet, but in the future you would
++ * set any flags here.
++ */
++ flags = 0;
++
++ /*
++ * call interface initialization code
++ */
++ _dessertMeshifTable_initialize_interface(user_context, flags);
++} /* initialize_table_dessertMeshifTable */
++
++/**
++ * Shutdown the table dessertMeshifTable
++ */
++void
++shutdown_table_dessertMeshifTable(void)
++{
++ /*
++ * call interface shutdown code
++ */
++ _dessertMeshifTable_shutdown_interface
++ (&dessertMeshifTable_user_context);
++}
++
++/**
++ * extra context initialization (eg default values)
++ *
++ * @param rowreq_ctx : row request context
++ * @param user_init_ctx : void pointer for user (parameter to rowreq_ctx_allocate)
++ *
++ * @retval MFD_SUCCESS : no errors
++ * @retval MFD_ERROR : error (context allocate will fail)
++ */
++int
++dessertMeshifTable_rowreq_ctx_init(dessertMeshifTable_rowreq_ctx *
++ rowreq_ctx, void *user_init_ctx)
++{
++ DEBUGMSGTL(("verbose:dessertMeshifTable:dessertMeshifTable_rowreq_ctx_init", "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:210:o: |-> Perform extra dessertMeshifTable rowreq initialization. (eg DEFVALS)
++ */
++
++ return MFD_SUCCESS;
++} /* dessertMeshifTable_rowreq_ctx_init */
++
++/**
++ * extra context cleanup
++ *
++ */
++void
++dessertMeshifTable_rowreq_ctx_cleanup(dessertMeshifTable_rowreq_ctx *
++ rowreq_ctx)
++{
++ DEBUGMSGTL(("verbose:dessertMeshifTable:dessertMeshifTable_rowreq_ctx_cleanup", "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:211:o: |-> Perform extra dessertMeshifTable rowreq cleanup.
++ */
++} /* dessertMeshifTable_rowreq_ctx_cleanup */
++
++/**
++ * pre-request callback
++ *
++ *
++ * @retval MFD_SUCCESS : success.
++ * @retval MFD_ERROR : other error
++ */
++int
++dessertMeshifTable_pre_request(dessertMeshifTable_registration *
++ user_context)
++{
++ DEBUGMSGTL(("verbose:dessertMeshifTable:dessertMeshifTable_pre_request", "called\n"));
++
++ /*
++ * TODO:510:o: Perform dessertMeshifTable pre-request actions.
++ */
++
++ return MFD_SUCCESS;
++} /* dessertMeshifTable_pre_request */
++
++/**
++ * post-request callback
++ *
++ * Note:
++ * New rows have been inserted into the container, and
++ * deleted rows have been removed from the container and
++ * released.
++ *
++ * @param user_context
++ * @param rc : MFD_SUCCESS if all requests succeeded
++ *
++ * @retval MFD_SUCCESS : success.
++ * @retval MFD_ERROR : other error (ignored)
++ */
++int
++dessertMeshifTable_post_request(dessertMeshifTable_registration *
++ user_context, int rc)
++{
++ DEBUGMSGTL(("verbose:dessertMeshifTable:dessertMeshifTable_post_request", "called\n"));
++
++ /*
++ * TODO:511:o: Perform dessertMeshifTable post-request actions.
++ */
++
++ return MFD_SUCCESS;
++} /* dessertMeshifTable_post_request */
++
++
++/** @{ */
+Index: libdessert0.86-0.86.14/src/snmp/dessertMeshifTable.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertMeshifTable.h 2009-12-09 16:38:27.322458741 +0100
+@@ -0,0 +1,222 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * version : 14170 $ of $
++ *
++ * $Id:$
++ */
++#ifndef DESSERTMESHIFTABLE_H
++#define DESSERTMESHIFTABLE_H
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++/** @addtogroup misc misc: Miscellaneous routines
++ *
++ * @{
++ */
++#include <net-snmp/library/asn1.h>
++
++/*
++ * other required module components
++ */
++/* *INDENT-OFF* */
++config_add_mib(DESSERT-MIB)
++config_require(DESSERT-MIB/dessertMeshifTable/dessertMeshifTable_interface)
++config_require(DESSERT-MIB/dessertMeshifTable/dessertMeshifTable_data_access)
++config_require(DESSERT-MIB/dessertMeshifTable/dessertMeshifTable_data_get)
++config_require(DESSERT-MIB/dessertMeshifTable/dessertMeshifTable_data_set)
++/* *INDENT-ON* */
++
++/*
++ * OID and column number definitions for dessertMeshifTable
++ */
++#include "dessertMeshifTable_oids.h"
++
++/*
++ * enum definions
++ */
++#include "dessertMeshifTable_enums.h"
++
++/*
++ *********************************************************************
++ * function declarations
++ */
++void init_dessertMeshifTable(void);
++void shutdown_dessertMeshifTable(void);
++
++/*
++ *********************************************************************
++ * Table declarations
++ */
++/**********************************************************************
++ **********************************************************************
++ ***
++ *** Table dessertMeshifTable
++ ***
++ **********************************************************************
++ **********************************************************************/
++/*
++ * DESSERT-MIB::dessertMeshifTable is subid 5 of dessertObjects.
++ * Its status is Current.
++ * OID: .1.3.6.1.4.1.18898.0.19.42.1.5, length: 12
++ */
++/*
++ *********************************************************************
++ * When you register your mib, you get to provide a generic
++ * pointer that will be passed back to you for most of the
++ * functions calls.
++ *
++ * TODO:100:r: Review all context structures
++ */
++/*
++ * TODO:101:o: |-> Review dessertMeshifTable registration context.
++ */
++typedef netsnmp_data_list dessertMeshifTable_registration;
++
++/**********************************************************************/
++/*
++ * TODO:110:r: |-> Review dessertMeshifTable data context structure.
++ * This structure is used to represent the data for dessertMeshifTable.
++ */
++/*
++ * This structure contains storage for all the columns defined in the
++ * dessertMeshifTable.
++ */
++typedef struct dessertMeshifTable_data_s {
++
++ /*
++ * meshifName(2)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
++ */
++ char meshifName[255];
++ size_t meshifName_len; /* # of char elements, not bytes */
++
++ /*
++ * meshifMacAddress(3)/MacAddress/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
++ */
++ char meshifMacAddress[6];
++ size_t meshifMacAddress_len; /* # of char elements, not bytes */
++
++ /*
++ * meshifInPkts(4)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
++ */
++ U64 meshifInPkts;
++
++ /*
++ * meshifOutPkts(5)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
++ */
++ U64 meshifOutPkts;
++
++ /*
++ * meshifInOctets(6)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
++ */
++ U64 meshifInOctets;
++
++ /*
++ * meshifOutOctets(7)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
++ */
++ U64 meshifOutOctets;
++
++} dessertMeshifTable_data;
++
++/*
++ * TODO:120:r: |-> Review dessertMeshifTable mib index.
++ * This structure is used to represent the index for dessertMeshifTable.
++ */
++typedef struct dessertMeshifTable_mib_index_s {
++
++ /*
++ * meshifIndex(1)///()//L/a/w/e/r/d/h
++ */
++ long meshifIndex;
++
++} dessertMeshifTable_mib_index;
++
++/*
++ * TODO:121:r: | |-> Review dessertMeshifTable max index length.
++ * If you KNOW that your indexes will never exceed a certain
++ * length, update this macro to that length.
++ */
++#define MAX_dessertMeshifTable_IDX_LEN 1
++
++/*
++ *********************************************************************
++ * TODO:130:o: |-> Review dessertMeshifTable Row request (rowreq) context.
++ * When your functions are called, you will be passed a
++ * dessertMeshifTable_rowreq_ctx pointer.
++ */
++typedef struct dessertMeshifTable_rowreq_ctx_s {
++
++ /** this must be first for container compare to work */
++ netsnmp_index oid_idx;
++ oid oid_tmp[MAX_dessertMeshifTable_IDX_LEN];
++
++ dessertMeshifTable_mib_index tbl_idx;
++
++ dessertMeshifTable_data data;
++
++ /*
++ * flags per row. Currently, the first (lower) 8 bits are reserved
++ * for the user. See mfd.h for other flags.
++ */
++ u_int rowreq_flags;
++
++ /*
++ * TODO:131:o: | |-> Add useful data to dessertMeshifTable rowreq context.
++ */
++
++ /*
++ * storage for future expansion
++ */
++ netsnmp_data_list *dessertMeshifTable_data_list;
++
++} dessertMeshifTable_rowreq_ctx;
++
++typedef struct dessertMeshifTable_ref_rowreq_ctx_s {
++ dessertMeshifTable_rowreq_ctx *rowreq_ctx;
++} dessertMeshifTable_ref_rowreq_ctx;
++
++/*
++ *********************************************************************
++ * function prototypes
++ */
++int
++dessertMeshifTable_pre_request(dessertMeshifTable_registration * user_context);
++int
++dessertMeshifTable_post_request(dessertMeshifTable_registration * user_context,
++ int rc);
++
++int
++dessertMeshifTable_rowreq_ctx_init(dessertMeshifTable_rowreq_ctx * rowreq_ctx,
++ void *user_init_ctx);
++void
++dessertMeshifTable_rowreq_ctx_cleanup(
++ dessertMeshifTable_rowreq_ctx * rowreq_ctx);
++
++dessertMeshifTable_rowreq_ctx
++*dessertMeshifTable_row_find_by_mib_index(
++ dessertMeshifTable_mib_index * mib_idx);
++
++extern oid dessertMeshifTable_oid[];
++extern int dessertMeshifTable_oid_size;
++
++#include "dessertMeshifTable_interface.h"
++#include "dessertMeshifTable_data_access.h"
++#include "dessertMeshifTable_data_get.h"
++#include "dessertMeshifTable_data_set.h"
++
++/*
++ * DUMMY markers, ignore
++ *
++ * TODO:099:x: *************************************************************
++ * TODO:199:x: *************************************************************
++ * TODO:299:x: *************************************************************
++ * TODO:399:x: *************************************************************
++ * TODO:499:x: *************************************************************
++ */
++
++#ifdef __cplusplus
++}
++#endif
++#endif /* DESSERTMESHIFTABLE_H */
++/** @} */
+Index: libdessert0.86-0.86.14/src/snmp/dessertMeshifTable_data_access.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertMeshifTable_data_access.c 2009-12-09 16:38:27.326005968 +0100
+@@ -0,0 +1,371 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * version : 14170 $ of $
++ *
++ * $Id:$
++ */
++/*
++ * standard Net-SNMP includes
++ */
++#include <net-snmp/net-snmp-config.h>
++#include <net-snmp/net-snmp-includes.h>
++#include <net-snmp/agent/net-snmp-agent-includes.h>
++
++#include "dessertMeshifTable_data_access.h"
++
++/** @ingroup interface
++ * @addtogroup data_access data_access: Routines to access data
++ *
++ * These routines are used to locate the data used to satisfy
++ * requests.
++ *
++ * @{
++ */
++/**********************************************************************
++ **********************************************************************
++ ***
++ *** Table dessertMeshifTable
++ ***
++ **********************************************************************
++ **********************************************************************/
++/*
++ * DESSERT-MIB::dessertMeshifTable is subid 5 of dessertObjects.
++ * Its status is Current.
++ * OID: .1.3.6.1.4.1.18898.0.19.42.1.5, length: 12
++ */
++
++/**
++ * initialization for dessertMeshifTable data access
++ *
++ * This function is called during startup to allow you to
++ * allocate any resources you need for the data table.
++ *
++ * @param dessertMeshifTable_reg
++ * Pointer to dessertMeshifTable_registration
++ *
++ * @retval MFD_SUCCESS : success.
++ * @retval MFD_ERROR : unrecoverable error.
++ */
++int
++dessertMeshifTable_init_data(dessertMeshifTable_registration *
++ dessertMeshifTable_reg)
++{
++ DEBUGMSGTL(("verbose:dessertMeshifTable:dessertMeshifTable_init_data",
++ "called\n"));
++ dessert_debug("dessertMeshifTable_container_load called");
++ /*
++ * TODO:303:o: Initialize dessertMeshifTable data.
++ */
++ /*
++ ***************************************************
++ *** START EXAMPLE CODE ***
++ ***---------------------------------------------***/
++ /*
++ * if you are the sole writer for the file, you could
++ * open it here. However, as stated earlier, we are assuming
++ * the worst case, which in this case means that the file is
++ * written to by someone else, and might not even exist when
++ * we start up. So we can't do anything here.
++ */
++ /*
++ ***---------------------------------------------***
++ *** END EXAMPLE CODE ***
++ ***************************************************/
++
++ return MFD_SUCCESS;
++} /* dessertMeshifTable_init_data */
++
++/**
++ * container overview
++ *
++ */
++
++/**
++ * container initialization
++ *
++ * @param container_ptr_ptr A pointer to a container pointer. If you
++ * create a custom container, use this parameter to return it
++ * to the MFD helper. If set to NULL, the MFD helper will
++ * allocate a container for you.
++ * @param cache A pointer to a cache structure. You can set the timeout
++ * and other cache flags using this pointer.
++ *
++ * This function is called at startup to allow you to customize certain
++ * aspects of the access method. For the most part, it is for advanced
++ * users. The default code should suffice for most cases. If no custom
++ * container is allocated, the MFD code will create one for your.
++ *
++ * This is also the place to set up cache behavior. The default, to
++ * simply set the cache timeout, will work well with the default
++ * container. If you are using a custom container, you may want to
++ * look at the cache helper documentation to see if there are any
++ * flags you want to set.
++ *
++ * @remark
++ * This would also be a good place to do any initialization needed
++ * for you data source. For example, opening a connection to another
++ * process that will supply the data, opening a database, etc.
++ */
++void
++dessertMeshifTable_container_init(netsnmp_container ** container_ptr_ptr,
++ netsnmp_cache * cache)
++{
++ DEBUGMSGTL(("verbose:dessertMeshifTable:dessertMeshifTable_container_init", "called\n"));
++
++ if (NULL == container_ptr_ptr) {
++ snmp_log(LOG_ERR,
++ "bad container param to dessertMeshifTable_container_init\n");
++ return;
++ }
++
++ /*
++ * For advanced users, you can use a custom container. If you
++ * do not create one, one will be created for you.
++ */
++ *container_ptr_ptr = NULL;
++
++ if (NULL == cache) {
++ snmp_log(LOG_ERR,
++ "bad cache param to dessertMeshifTable_container_init\n");
++ return;
++ }
++
++ /*
++ * TODO:345:A: Set up dessertMeshifTable cache properties.
++ *
++ * Also for advanced users, you can set parameters for the
++ * cache. Do not change the magic pointer, as it is used
++ * by the MFD helper. To completely disable caching, set
++ * cache->enabled to 0.
++ */
++ cache->timeout = DESSERTMESHIFTABLE_CACHE_TIMEOUT; /* seconds */
++} /* dessertMeshifTable_container_init */
++
++/**
++ * container shutdown
++ *
++ * @param container_ptr A pointer to the container.
++ *
++ * This function is called at shutdown to allow you to customize certain
++ * aspects of the access method. For the most part, it is for advanced
++ * users. The default code should suffice for most cases.
++ *
++ * This function is called before dessertMeshifTable_container_free().
++ *
++ * @remark
++ * This would also be a good place to do any cleanup needed
++ * for you data source. For example, closing a connection to another
++ * process that supplied the data, closing a database, etc.
++ */
++void
++dessertMeshifTable_container_shutdown(netsnmp_container * container_ptr)
++{
++ DEBUGMSGTL(("verbose:dessertMeshifTable:dessertMeshifTable_container_shutdown", "called\n"));
++
++ if (NULL == container_ptr) {
++ snmp_log(LOG_ERR,
++ "bad params to dessertMeshifTable_container_shutdown\n");
++ return;
++ }
++
++} /* dessertMeshifTable_container_shutdown */
++
++/**
++ * load initial data
++ *
++ * TODO:350:M: Implement dessertMeshifTable data load
++ * This function will also be called by the cache helper to load
++ * the container again (after the container free function has been
++ * called to free the previous contents).
++ *
++ * @param container container to which items should be inserted
++ *
++ * @retval MFD_SUCCESS : success.
++ * @retval MFD_RESOURCE_UNAVAILABLE : Can't access data source
++ * @retval MFD_ERROR : other error.
++ *
++ * This function is called to load the index(es) (and data, optionally)
++ * for the every row in the data set.
++ *
++ * @remark
++ * While loading the data, the only important thing is the indexes.
++ * If access to your data is cheap/fast (e.g. you have a pointer to a
++ * structure in memory), it would make sense to update the data here.
++ * If, however, the accessing the data invovles more work (e.g. parsing
++ * some other existing data, or peforming calculations to derive the data),
++ * then you can limit yourself to setting the indexes and saving any
++ * information you will need later. Then use the saved information in
++ * dessertMeshifTable_row_prep() for populating data.
++ *
++ * @note
++ * If you need consistency between rows (like you want statistics
++ * for each row to be from the same time frame), you should set all
++ * data here.
++ *
++ */
++int
++dessertMeshifTable_container_load(netsnmp_container * container)
++{
++ dessertMeshifTable_rowreq_ctx *rowreq_ctx;
++ dessert_meshif_t *meshif;
++ size_t count = 0;
++
++ char inPkts[I64CHARSZ+1];
++ char outPkts[I64CHARSZ+1];
++ char inOctets[I64CHARSZ+1];
++ char outOctets[I64CHARSZ+1];
++
++ /*
++ * temporary storage for index values
++ */
++ /*
++ * meshifIndex(1)///()//L/a/w/e/r/d/h
++ */
++ long meshifIndex = -1;
++
++ dessert_debug("dessertMeshifTable_container_load called");
++ DEBUGMSGTL(("verbose:dessertMeshifTable:dessertMeshifTable_container_load", "called\n"));
++
++
++
++ /*
++ * TODO:351:M: |-> Load/update data in the dessertMeshifTable container.
++ * loop over your dessertMeshifTable data, allocate a rowreq context,
++ * set the index(es) [and data, optionally] and insert into
++ * the container.
++ */
++ pthread_rwlock_rdlock(&dessert_cfglock);
++ DL_FOREACH(dessert_meshiflist_get(), meshif){
++
++ meshifIndex = ++count;
++
++ /*
++ * TODO:352:M: | |-> set indexes in new dessertMeshifTable rowreq context.
++ * data context will be set from the param (unless NULL,
++ * in which case a new data context will be allocated)
++ */
++ rowreq_ctx = dessertMeshifTable_allocate_rowreq_ctx(NULL);
++ if (NULL == rowreq_ctx) {
++ snmp_log(LOG_ERR, "memory allocation failed\n");
++ pthread_rwlock_unlock(&dessert_cfglock);
++ return MFD_RESOURCE_UNAVAILABLE;
++ }
++
++ if (MFD_SUCCESS != dessertMeshifTable_indexes_set(rowreq_ctx,
++ meshifIndex)) {
++ snmp_log(LOG_ERR, "error setting index while loading "
++ "dessertMeshifTable data.\n");
++ dessertMeshifTable_release_rowreq_ctx(rowreq_ctx);
++ continue;
++ }
++
++ /*
++ * TODO:352:r: | |-> populate dessertMeshifTable data context.
++ * Populate data context here. (optionally, delay until row prep)
++ */
++
++ rowreq_ctx->data.meshifName_len = strlen(meshif->if_name);
++ strcpy(rowreq_ctx->data.meshifName, meshif->if_name);
++
++ rowreq_ctx->data.meshifMacAddress_len = 6;
++ memcpy(rowreq_ctx->data.meshifMacAddress, meshif->hwaddr, 6);
++
++ pthread_mutex_lock(&(meshif->cnt_mutex));
++
++ rowreq_ctx->data.meshifInPkts.low = meshif->ipkts & 0xffffffff;
++ rowreq_ctx->data.meshifInPkts.high = meshif->ipkts >> 32;
++
++ rowreq_ctx->data.meshifOutPkts.low = meshif->opkts & 0xffffffff;
++ rowreq_ctx->data.meshifOutPkts.high = meshif->opkts >> 32;
++
++ rowreq_ctx->data.meshifInOctets.low = meshif->ibytes & 0xffffffff;
++ rowreq_ctx->data.meshifInOctets.high = meshif->ibytes >> 32;
++
++ rowreq_ctx->data.meshifOutOctets.low = meshif->obytes & 0xffffffff;
++ rowreq_ctx->data.meshifOutOctets.high = meshif->obytes >> 32;
++
++
++ printU64(inPkts, &rowreq_ctx->data.meshifInPkts);
++ printU64(outPkts, &rowreq_ctx->data.meshifOutPkts);
++ printU64(inOctets, &rowreq_ctx->data.meshifInOctets);
++ printU64(outOctets, &rowreq_ctx->data.meshifOutOctets);
++
++
++ dessert_debug("inPkts [%s] [%u]", inPkts, meshif->ipkts);
++ dessert_debug("outPkts [%s] [%u]", outPkts, meshif->opkts);
++ dessert_debug("inOctets [%s] [%u]", inOctets, meshif->ibytes);
++ dessert_debug("outOctets [%s] [%u]", outOctets,meshif->obytes);
++
++
++ pthread_mutex_unlock(&(meshif->cnt_mutex));
++
++ /*
++ * insert into table container
++ */
++ CONTAINER_INSERT(container, rowreq_ctx);
++ }
++ pthread_rwlock_unlock(&dessert_cfglock);
++
++
++
++ DEBUGMSGT(("verbose:dessertMeshifTable:dessertMeshifTable_container_load", "inserted %d records\n", count));
++
++ if (meshifIndex == -1) return MFD_RESOURCE_UNAVAILABLE;
++
++ return MFD_SUCCESS;
++} /* dessertMeshifTable_container_load */
++
++/**
++ * container clean up
++ *
++ * @param container container with all current items
++ *
++ * This optional callback is called prior to all
++ * item's being removed from the container. If you
++ * need to do any processing before that, do it here.
++ *
++ * @note
++ * The MFD helper will take care of releasing all the row contexts.
++ *
++ */
++void
++dessertMeshifTable_container_free(netsnmp_container * container)
++{
++ DEBUGMSGTL(("verbose:dessertMeshifTable:dessertMeshifTable_container_free", "called\n"));
++
++ /*
++ * TODO:380:M: Free dessertMeshifTable container data.
++ */
++} /* dessertMeshifTable_container_free */
++
++/**
++ * prepare row for processing.
++ *
++ * When the agent has located the row for a request, this function is
++ * called to prepare the row for processing. If you fully populated
++ * the data context during the index setup phase, you may not need to
++ * do anything.
++ *
++ * @param rowreq_ctx pointer to a context.
++ *
++ * @retval MFD_SUCCESS : success.
++ * @retval MFD_ERROR : other error.
++ */
++int
++dessertMeshifTable_row_prep(dessertMeshifTable_rowreq_ctx * rowreq_ctx)
++{
++ DEBUGMSGTL(("verbose:dessertMeshifTable:dessertMeshifTable_row_prep",
++ "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:390:o: Prepare row for request.
++ * If populating row data was delayed, this is the place to
++ * fill in the row for this request.
++ */
++
++ return MFD_SUCCESS;
++} /* dessertMeshifTable_row_prep */
++
++/** @} */
+Index: libdessert0.86-0.86.14/src/snmp/dessertMeshifTable_data_access.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertMeshifTable_data_access.h 2009-12-09 16:38:27.326005968 +0100
+@@ -0,0 +1,77 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * version : 14170 $ of $
++ *
++ * $Id:$
++ */
++#ifndef DESSERTMESHIFTABLE_DATA_ACCESS_H
++#define DESSERTMESHIFTABLE_DATA_ACCESS_H
++
++#include "dessert_internal.h"
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++
++ /*
++ *********************************************************************
++ * function declarations
++ */
++
++ /*
++ *********************************************************************
++ * Table declarations
++ */
++/**********************************************************************
++ **********************************************************************
++ ***
++ *** Table dessertMeshifTable
++ ***
++ **********************************************************************
++ **********************************************************************/
++ /*
++ * DESSERT-MIB::dessertMeshifTable is subid 5 of dessertObjects.
++ * Its status is Current.
++ * OID: .1.3.6.1.4.1.18898.0.19.42.1.5, length: 12
++ */
++
++
++ int
++ dessertMeshifTable_init_data(dessertMeshifTable_registration *
++ dessertMeshifTable_reg);
++
++
++ /*
++ * TODO:180:o: Review dessertMeshifTable cache timeout.
++ * The number of seconds before the cache times out
++ */
++#define DESSERTMESHIFTABLE_CACHE_TIMEOUT DESSERT_AGENTX_MESHIFTABLE_CACHE_TIMEOUT
++
++ void dessertMeshifTable_container_init(netsnmp_container **
++ container_ptr_ptr,
++ netsnmp_cache *
++ cache);
++ void dessertMeshifTable_container_shutdown(netsnmp_container
++ * container_ptr);
++
++ int dessertMeshifTable_container_load(netsnmp_container *
++ container);
++ void dessertMeshifTable_container_free(netsnmp_container *
++ container);
++
++ int dessertMeshifTable_cache_load(netsnmp_container *
++ container);
++ void dessertMeshifTable_cache_free(netsnmp_container *
++ container);
++
++ int
++ dessertMeshifTable_row_prep(dessertMeshifTable_rowreq_ctx *
++ rowreq_ctx);
++
++
++
++#ifdef __cplusplus
++}
++#endif
++#endif /* DESSERTMESHIFTABLE_DATA_ACCESS_H */
+Index: libdessert0.86-0.86.14/src/snmp/dessertMeshifTable_data_get.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertMeshifTable_data_get.c 2009-12-09 16:38:27.326005968 +0100
+@@ -0,0 +1,522 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * version : 12088 $ of $
++ *
++ * $Id:$
++ */
++/*
++ * standard Net-SNMP includes
++ */
++#include <net-snmp/net-snmp-config.h>
++#include <net-snmp/net-snmp-includes.h>
++#include <net-snmp/agent/net-snmp-agent-includes.h>
++
++/*
++ * include our parent header
++ */
++#include "dessertMeshifTable.h"
++
++
++/** @defgroup data_get data_get: Routines to get data
++ *
++ * TODO:230:M: Implement dessertMeshifTable get routines.
++ * TODO:240:M: Implement dessertMeshifTable mapping routines (if any).
++ *
++ * These routine are used to get the value for individual objects. The
++ * row context is passed, along with a pointer to the memory where the
++ * value should be copied.
++ *
++ * @{
++ */
++/**********************************************************************
++ **********************************************************************
++ ***
++ *** Table dessertMeshifTable
++ ***
++ **********************************************************************
++ **********************************************************************/
++/*
++ * DESSERT-MIB::dessertMeshifTable is subid 5 of dessertObjects.
++ * Its status is Current.
++ * OID: .1.3.6.1.4.1.18898.0.19.42.1.5, length: 12
++ */
++
++/*
++ * ---------------------------------------------------------------------
++ * * TODO:200:r: Implement dessertMeshifTable data context functions.
++ */
++
++
++/**
++ * set mib index(es)
++ *
++ * @param tbl_idx mib index structure
++ * @param meshifIndex_val
++ *
++ * @retval MFD_SUCCESS : success.
++ * @retval MFD_ERROR : other error.
++ *
++ * @remark
++ * This convenience function is useful for setting all the MIB index
++ * components with a single function call. It is assume that the C values
++ * have already been mapped from their native/rawformat to the MIB format.
++ */
++int
++dessertMeshifTable_indexes_set_tbl_idx(dessertMeshifTable_mib_index *
++ tbl_idx, long meshifIndex_val)
++{
++ DEBUGMSGTL(("verbose:dessertMeshifTable:dessertMeshifTable_indexes_set_tbl_idx", "called\n"));
++
++ /*
++ * meshifIndex(1)///()//L/a/w/e/r/d/h
++ */
++ tbl_idx->meshifIndex = meshifIndex_val;
++
++
++ return MFD_SUCCESS;
++} /* dessertMeshifTable_indexes_set_tbl_idx */
++
++/**
++ * @internal
++ * set row context indexes
++ *
++ * @param reqreq_ctx the row context that needs updated indexes
++ *
++ * @retval MFD_SUCCESS : success.
++ * @retval MFD_ERROR : other error.
++ *
++ * @remark
++ * This function sets the mib indexs, then updates the oid indexs
++ * from the mib index.
++ */
++int
++dessertMeshifTable_indexes_set(dessertMeshifTable_rowreq_ctx * rowreq_ctx,
++ long meshifIndex_val)
++{
++ DEBUGMSGTL(("verbose:dessertMeshifTable:dessertMeshifTable_indexes_set", "called\n"));
++
++ if (MFD_SUCCESS !=
++ dessertMeshifTable_indexes_set_tbl_idx(&rowreq_ctx->tbl_idx,
++ meshifIndex_val))
++ return MFD_ERROR;
++
++ /*
++ * convert mib index to oid index
++ */
++ rowreq_ctx->oid_idx.len = sizeof(rowreq_ctx->oid_tmp) / sizeof(oid);
++ if (0 != dessertMeshifTable_index_to_oid(&rowreq_ctx->oid_idx,
++ &rowreq_ctx->tbl_idx)) {
++ return MFD_ERROR;
++ }
++
++ return MFD_SUCCESS;
++} /* dessertMeshifTable_indexes_set */
++
++
++/*---------------------------------------------------------------------
++ * DESSERT-MIB::dessertMeshifEntry.meshifName
++ * meshifName is subid 2 of dessertMeshifEntry.
++ * Its status is Current, and its access level is ReadOnly.
++ * OID: .1.3.6.1.4.1.18898.0.19.42.1.5.1.2
++ * Description:
++name of interface
++ *
++ * Attributes:
++ * accessible 1 isscalar 0 enums 0 hasdefval 0
++ * readable 1 iscolumn 1 ranges 1 hashint 1
++ * settable 0
++ * hint: 255a
++ *
++ * Ranges: 0 - 255;
++ *
++ * Its syntax is DisplayString (based on perltype OCTETSTR)
++ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
++ * This data type requires a length. (Max 255)
++ */
++/**
++ * Extract the current value of the meshifName data.
++ *
++ * Set a value using the data context for the row.
++ *
++ * @param rowreq_ctx
++ * Pointer to the row request context.
++ * @param meshifName_val_ptr_ptr
++ * Pointer to storage for a char variable
++ * @param meshifName_val_ptr_len_ptr
++ * Pointer to a size_t. On entry, it will contain the size (in bytes)
++ * pointed to by meshifName.
++ * On exit, this value should contain the data size (in bytes).
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_SKIP : skip this node (no value for now)
++ * @retval MFD_ERROR : Any other error
++*
++ * @note If you need more than (*meshifName_val_ptr_len_ptr) bytes of memory,
++ * allocate it using malloc() and update meshifName_val_ptr_ptr.
++ * <b>DO NOT</b> free the previous pointer.
++ * The MFD helper will release the memory you allocate.
++ *
++ * @remark If you call this function yourself, you are responsible
++ * for checking if the pointer changed, and freeing any
++ * previously allocated memory. (Not necessary if you pass
++ * in a pointer to static memory, obviously.)
++ */
++int
++meshifName_get(dessertMeshifTable_rowreq_ctx * rowreq_ctx,
++ char **meshifName_val_ptr_ptr,
++ size_t *meshifName_val_ptr_len_ptr)
++{
++ /** we should have a non-NULL pointer and enough storage */
++ netsnmp_assert((NULL != meshifName_val_ptr_ptr)
++ && (NULL != *meshifName_val_ptr_ptr));
++ netsnmp_assert(NULL != meshifName_val_ptr_len_ptr);
++
++
++ DEBUGMSGTL(("verbose:dessertMeshifTable:meshifName_get", "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:231:o: |-> Extract the current value of the meshifName data.
++ * copy (* meshifName_val_ptr_ptr ) data and (* meshifName_val_ptr_len_ptr ) from rowreq_ctx->data
++ */
++ /*
++ * make sure there is enough space for meshifName data
++ */
++ if ((NULL == (*meshifName_val_ptr_ptr)) ||
++ ((*meshifName_val_ptr_len_ptr) <
++ (rowreq_ctx->data.meshifName_len *
++ sizeof(rowreq_ctx->data.meshifName[0])))) {
++ /*
++ * allocate space for meshifName data
++ */
++ (*meshifName_val_ptr_ptr) =
++ malloc(rowreq_ctx->data.meshifName_len *
++ sizeof(rowreq_ctx->data.meshifName[0]));
++ if (NULL == (*meshifName_val_ptr_ptr)) {
++ snmp_log(LOG_ERR, "could not allocate memory\n");
++ return MFD_ERROR;
++ }
++ }
++ (*meshifName_val_ptr_len_ptr) =
++ rowreq_ctx->data.meshifName_len *
++ sizeof(rowreq_ctx->data.meshifName[0]);
++ memcpy((*meshifName_val_ptr_ptr), rowreq_ctx->data.meshifName,
++ rowreq_ctx->data.meshifName_len *
++ sizeof(rowreq_ctx->data.meshifName[0]));
++
++ return MFD_SUCCESS;
++} /* meshifName_get */
++
++/*---------------------------------------------------------------------
++ * DESSERT-MIB::dessertMeshifEntry.meshifMacAddress
++ * meshifMacAddress is subid 3 of dessertMeshifEntry.
++ * Its status is Current, and its access level is ReadOnly.
++ * OID: .1.3.6.1.4.1.18898.0.19.42.1.5.1.3
++ * Description:
++hardware address of interface
++ *
++ * Attributes:
++ * accessible 1 isscalar 0 enums 0 hasdefval 0
++ * readable 1 iscolumn 1 ranges 1 hashint 1
++ * settable 0
++ * hint: 1x:
++ *
++ * Ranges: 6;
++ *
++ * Its syntax is MacAddress (based on perltype OCTETSTR)
++ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
++ * This data type requires a length. (Max 6)
++ */
++/**
++ * Extract the current value of the meshifMacAddress data.
++ *
++ * Set a value using the data context for the row.
++ *
++ * @param rowreq_ctx
++ * Pointer to the row request context.
++ * @param meshifMacAddress_val_ptr_ptr
++ * Pointer to storage for a char variable
++ * @param meshifMacAddress_val_ptr_len_ptr
++ * Pointer to a size_t. On entry, it will contain the size (in bytes)
++ * pointed to by meshifMacAddress.
++ * On exit, this value should contain the data size (in bytes).
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_SKIP : skip this node (no value for now)
++ * @retval MFD_ERROR : Any other error
++*
++ * @note If you need more than (*meshifMacAddress_val_ptr_len_ptr) bytes of memory,
++ * allocate it using malloc() and update meshifMacAddress_val_ptr_ptr.
++ * <b>DO NOT</b> free the previous pointer.
++ * The MFD helper will release the memory you allocate.
++ *
++ * @remark If you call this function yourself, you are responsible
++ * for checking if the pointer changed, and freeing any
++ * previously allocated memory. (Not necessary if you pass
++ * in a pointer to static memory, obviously.)
++ */
++int
++meshifMacAddress_get(dessertMeshifTable_rowreq_ctx * rowreq_ctx,
++ char **meshifMacAddress_val_ptr_ptr,
++ size_t *meshifMacAddress_val_ptr_len_ptr)
++{
++ /** we should have a non-NULL pointer and enough storage */
++ netsnmp_assert((NULL != meshifMacAddress_val_ptr_ptr)
++ && (NULL != *meshifMacAddress_val_ptr_ptr));
++ netsnmp_assert(NULL != meshifMacAddress_val_ptr_len_ptr);
++
++
++ DEBUGMSGTL(("verbose:dessertMeshifTable:meshifMacAddress_get",
++ "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:231:o: |-> Extract the current value of the meshifMacAddress data.
++ * copy (* meshifMacAddress_val_ptr_ptr ) data and (* meshifMacAddress_val_ptr_len_ptr ) from rowreq_ctx->data
++ */
++ /*
++ * make sure there is enough space for meshifMacAddress data
++ */
++ if ((NULL == (*meshifMacAddress_val_ptr_ptr)) ||
++ ((*meshifMacAddress_val_ptr_len_ptr) <
++ (rowreq_ctx->data.meshifMacAddress_len *
++ sizeof(rowreq_ctx->data.meshifMacAddress[0])))) {
++ /*
++ * allocate space for meshifMacAddress data
++ */
++ (*meshifMacAddress_val_ptr_ptr) =
++ malloc(rowreq_ctx->data.meshifMacAddress_len *
++ sizeof(rowreq_ctx->data.meshifMacAddress[0]));
++ if (NULL == (*meshifMacAddress_val_ptr_ptr)) {
++ snmp_log(LOG_ERR, "could not allocate memory\n");
++ return MFD_ERROR;
++ }
++ }
++ (*meshifMacAddress_val_ptr_len_ptr) =
++ rowreq_ctx->data.meshifMacAddress_len *
++ sizeof(rowreq_ctx->data.meshifMacAddress[0]);
++ memcpy((*meshifMacAddress_val_ptr_ptr),
++ rowreq_ctx->data.meshifMacAddress,
++ rowreq_ctx->data.meshifMacAddress_len *
++ sizeof(rowreq_ctx->data.meshifMacAddress[0]));
++
++ return MFD_SUCCESS;
++} /* meshifMacAddress_get */
++
++/*---------------------------------------------------------------------
++ * DESSERT-MIB::dessertMeshifEntry.meshifInPkts
++ * meshifInPkts is subid 4 of dessertMeshifEntry.
++ * Its status is Current, and its access level is ReadOnly.
++ * OID: .1.3.6.1.4.1.18898.0.19.42.1.5.1.4
++ * Description:
++packet counter in
++ *
++ * Attributes:
++ * accessible 1 isscalar 0 enums 0 hasdefval 0
++ * readable 1 iscolumn 1 ranges 0 hashint 0
++ * settable 0
++ *
++ *
++ * Its syntax is COUNTER64 (based on perltype COUNTER64)
++ * The net-snmp type is ASN_COUNTER64. The C type decl is U64 (U64)
++ */
++/**
++ * Extract the current value of the meshifInPkts data.
++ *
++ * Set a value using the data context for the row.
++ *
++ * @param rowreq_ctx
++ * Pointer to the row request context.
++ * @param meshifInPkts_val_ptr
++ * Pointer to storage for a U64 variable
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_SKIP : skip this node (no value for now)
++ * @retval MFD_ERROR : Any other error
++ */
++int
++meshifInPkts_get(dessertMeshifTable_rowreq_ctx * rowreq_ctx,
++ U64 * meshifInPkts_val_ptr)
++{
++ char inPkts[I64CHARSZ+1];
++
++ /** we should have a non-NULL pointer */
++ netsnmp_assert(NULL != meshifInPkts_val_ptr);
++
++ /*
++ * TODO:231:o: |-> copy meshifInPkts data.
++ * get (* meshifInPkts_val_ptr ).low and (* meshifInPkts_val_ptr ).high from rowreq_ctx->data
++ */
++ (*meshifInPkts_val_ptr).high = rowreq_ctx->data.meshifInPkts.high;
++ (*meshifInPkts_val_ptr).low = rowreq_ctx->data.meshifInPkts.low;
++
++ printU64(inPkts, meshifInPkts_val_ptr);
++
++ return MFD_SUCCESS;
++} /* meshifInPkts_get */
++
++/*---------------------------------------------------------------------
++ * DESSERT-MIB::dessertMeshifEntry.meshifOutPkts
++ * meshifOutPkts is subid 5 of dessertMeshifEntry.
++ * Its status is Current, and its access level is ReadOnly.
++ * OID: .1.3.6.1.4.1.18898.0.19.42.1.5.1.5
++ * Description:
++packet counter out
++ *
++ * Attributes:
++ * accessible 1 isscalar 0 enums 0 hasdefval 0
++ * readable 1 iscolumn 1 ranges 0 hashint 0
++ * settable 0
++ *
++ *
++ * Its syntax is COUNTER64 (based on perltype COUNTER64)
++ * The net-snmp type is ASN_COUNTER64. The C type decl is U64 (U64)
++ */
++/**
++ * Extract the current value of the meshifOutPkts data.
++ *
++ * Set a value using the data context for the row.
++ *
++ * @param rowreq_ctx
++ * Pointer to the row request context.
++ * @param meshifOutPkts_val_ptr
++ * Pointer to storage for a U64 variable
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_SKIP : skip this node (no value for now)
++ * @retval MFD_ERROR : Any other error
++ */
++int
++meshifOutPkts_get(dessertMeshifTable_rowreq_ctx * rowreq_ctx,
++ U64 * meshifOutPkts_val_ptr)
++{
++ char outPkts[I64CHARSZ+1];
++
++ /** we should have a non-NULL pointer */
++ netsnmp_assert(NULL != meshifOutPkts_val_ptr);
++
++ /*
++ * TODO:231:o: |-> copy meshifOutPkts data.
++ * get (* meshifOutPkts_val_ptr ).low and (* meshifOutPkts_val_ptr ).high from rowreq_ctx->data
++ */
++ (*meshifOutPkts_val_ptr).high = rowreq_ctx->data.meshifOutPkts.high;
++ (*meshifOutPkts_val_ptr).low = rowreq_ctx->data.meshifOutPkts.low;
++
++ printU64(outPkts, meshifOutPkts_val_ptr);
++
++
++
++
++ return MFD_SUCCESS;
++} /* meshifOutPkts_get */
++
++/*---------------------------------------------------------------------
++ * DESSERT-MIB::dessertMeshifEntry.meshifInOctets
++ * meshifInOctets is subid 6 of dessertMeshifEntry.
++ * Its status is Current, and its access level is ReadOnly.
++ * OID: .1.3.6.1.4.1.18898.0.19.42.1.5.1.6
++ * Description:
++octet counter in
++ *
++ * Attributes:
++ * accessible 1 isscalar 0 enums 0 hasdefval 0
++ * readable 1 iscolumn 1 ranges 0 hashint 0
++ * settable 0
++ *
++ *
++ * Its syntax is COUNTER64 (based on perltype COUNTER64)
++ * The net-snmp type is ASN_COUNTER64. The C type decl is U64 (U64)
++ */
++/**
++ * Extract the current value of the meshifInOctets data.
++ *
++ * Set a value using the data context for the row.
++ *
++ * @param rowreq_ctx
++ * Pointer to the row request context.
++ * @param meshifInOctets_val_ptr
++ * Pointer to storage for a U64 variable
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_SKIP : skip this node (no value for now)
++ * @retval MFD_ERROR : Any other error
++ */
++int
++meshifInOctets_get(dessertMeshifTable_rowreq_ctx * rowreq_ctx,
++ U64 * meshifInOctets_val_ptr)
++{
++ char inOctets[I64CHARSZ+1];
++ /** we should have a non-NULL pointer */
++ netsnmp_assert(NULL != meshifInOctets_val_ptr);
++
++ /*
++ * TODO:231:o: |-> copy meshifInOctets data.
++ * get (* meshifInOctets_val_ptr ).low and (* meshifInOctets_val_ptr ).high from rowreq_ctx->data
++ */
++ (*meshifInOctets_val_ptr).high = rowreq_ctx->data.meshifInOctets.high;
++ (*meshifInOctets_val_ptr).low = rowreq_ctx->data.meshifInOctets.low;
++
++ printU64(inOctets, meshifInOctets_val_ptr);
++
++
++ return MFD_SUCCESS;
++} /* meshifInOctets_get */
++
++/*---------------------------------------------------------------------
++ * DESSERT-MIB::dessertMeshifEntry.meshifOutOctets
++ * meshifOutOctets is subid 7 of dessertMeshifEntry.
++ * Its status is Current, and its access level is ReadOnly.
++ * OID: .1.3.6.1.4.1.18898.0.19.42.1.5.1.7
++ * Description:
++octet counter out
++ *
++ * Attributes:
++ * accessible 1 isscalar 0 enums 0 hasdefval 0
++ * readable 1 iscolumn 1 ranges 0 hashint 0
++ * settable 0
++ *
++ *
++ * Its syntax is COUNTER64 (based on perltype COUNTER64)
++ * The net-snmp type is ASN_COUNTER64. The C type decl is U64 (U64)
++ */
++/**
++ * Extract the current value of the meshifOutOctets data.
++ *
++ * Set a value using the data context for the row.
++ *
++ * @param rowreq_ctx
++ * Pointer to the row request context.
++ * @param meshifOutOctets_val_ptr
++ * Pointer to storage for a U64 variable
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_SKIP : skip this node (no value for now)
++ * @retval MFD_ERROR : Any other error
++ */
++int
++meshifOutOctets_get(dessertMeshifTable_rowreq_ctx * rowreq_ctx,
++ U64 * meshifOutOctets_val_ptr)
++{
++ char outOctets[I64CHARSZ+1];
++ /** we should have a non-NULL pointer */
++ netsnmp_assert(NULL != meshifOutOctets_val_ptr);
++
++ /*
++ * TODO:231:o: |-> copy meshifOutOctets data.
++ * get (* meshifOutOctets_val_ptr ).low and (* meshifOutOctets_val_ptr ).high from rowreq_ctx->data
++ */
++ (*meshifOutOctets_val_ptr).high =
++ rowreq_ctx->data.meshifOutOctets.high;
++ (*meshifOutOctets_val_ptr).low = rowreq_ctx->data.meshifOutOctets.low;
++
++ printU64(outOctets, meshifOutOctets_val_ptr);
++
++
++ return MFD_SUCCESS;
++} /* meshifOutOctets_get */
++
++
++
++/** @} */
+Index: libdessert0.86-0.86.14/src/snmp/dessertMeshifTable_data_get.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertMeshifTable_data_get.h 2009-12-09 16:38:27.326005968 +0100
+@@ -0,0 +1,109 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * version : 12088 $ of $
++ *
++ * $Id:$
++ *
++ * @file dessertMeshifTable_data_get.h
++ *
++ * @addtogroup get
++ *
++ * Prototypes for get functions
++ *
++ * @{
++ */
++#ifndef DESSERTMESHIFTABLE_DATA_GET_H
++#define DESSERTMESHIFTABLE_DATA_GET_H
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++ /*
++ *********************************************************************
++ * GET function declarations
++ */
++
++ /*
++ *********************************************************************
++ * GET Table declarations
++ */
++/**********************************************************************
++ **********************************************************************
++ ***
++ *** Table dessertMeshifTable
++ ***
++ **********************************************************************
++ **********************************************************************/
++ /*
++ * DESSERT-MIB::dessertMeshifTable is subid 5 of dessertObjects.
++ * Its status is Current.
++ * OID: .1.3.6.1.4.1.18898.0.19.42.1.5, length: 12
++ */
++ /*
++ * indexes
++ */
++ int meshifIndex_map(uint *mib_meshifIndex_val_ptr, uint
++ raw_meshifIndex_val);
++
++ int meshifName_map(char **mib_meshifName_val_ptr_ptr,
++ size_t *mib_meshifName_val_ptr_len_ptr,
++ char *raw_meshifName_val_ptr,
++ size_t raw_meshifName_val_ptr_len,
++ int allow_realloc);
++ int meshifName_get(dessertMeshifTable_rowreq_ctx *
++ rowreq_ctx,
++ char **meshifName_val_ptr_ptr,
++ size_t *meshifName_val_ptr_len_ptr);
++ int meshifMacAddress_map(char
++ **mib_meshifMacAddress_val_ptr_ptr,
++ size_t
++ *mib_meshifMacAddress_val_ptr_len_ptr,
++ char
++ *raw_meshifMacAddress_val_ptr,
++ size_t
++ raw_meshifMacAddress_val_ptr_len,
++ int allow_realloc);
++ int meshifMacAddress_get(dessertMeshifTable_rowreq_ctx *
++ rowreq_ctx,
++ char
++ **meshifMacAddress_val_ptr_ptr,
++ size_t
++ *meshifMacAddress_val_ptr_len_ptr);
++ int meshifInPkts_map(U64 * mib_meshifInPkts_val_ptr,
++ U64 raw_meshifInPkts_val);
++ int meshifInPkts_get(dessertMeshifTable_rowreq_ctx *
++ rowreq_ctx,
++ U64 * meshifInPkts_val_ptr);
++ int meshifOutPkts_map(U64 * mib_meshifOutPkts_val_ptr,
++ U64 raw_meshifOutPkts_val);
++ int meshifOutPkts_get(dessertMeshifTable_rowreq_ctx *
++ rowreq_ctx,
++ U64 * meshifOutPkts_val_ptr);
++ int meshifInOctets_map(U64 * mib_meshifInOctets_val_ptr,
++ U64 raw_meshifInOctets_val);
++ int meshifInOctets_get(dessertMeshifTable_rowreq_ctx *
++ rowreq_ctx,
++ U64 * meshifInOctets_val_ptr);
++ int meshifOutOctets_map(U64 * mib_meshifOutOctets_val_ptr,
++ U64 raw_meshifOutOctets_val);
++ int meshifOutOctets_get(dessertMeshifTable_rowreq_ctx *
++ rowreq_ctx,
++ U64 * meshifOutOctets_val_ptr);
++
++
++ int
++ dessertMeshifTable_indexes_set_tbl_idx(dessertMeshifTable_mib_index
++ * tbl_idx, long meshifIndex_val);
++ int
++ dessertMeshifTable_indexes_set(dessertMeshifTable_rowreq_ctx *
++ rowreq_ctx, long meshifIndex_val);
++
++
++
++
++#ifdef __cplusplus
++}
++#endif
++#endif /* DESSERTMESHIFTABLE_DATA_GET_H */
++/** @} */
+Index: libdessert0.86-0.86.14/src/snmp/dessertMeshifTable_data_set.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertMeshifTable_data_set.c 2009-12-09 16:38:27.326005968 +0100
+@@ -0,0 +1,28 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * version : 12077 $ of $
++ *
++ * $Id:$
++ *
++ */
++/*
++ * standard Net-SNMP includes
++ */
++#include <net-snmp/net-snmp-config.h>
++#include <net-snmp/net-snmp-includes.h>
++#include <net-snmp/agent/net-snmp-agent-includes.h>
++
++/*
++ * include our parent header
++ */
++#include "dessertMeshifTable.h"
++
++
++/** @defgroup data_set data_set: Routines to set data
++ *
++ * These routines are used to set the value for individual objects. The
++ * row context is passed, along with the new value.
++ *
++ * @{
++ */
++/** @} */
+Index: libdessert0.86-0.86.14/src/snmp/dessertMeshifTable_data_set.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertMeshifTable_data_set.h 2009-12-09 16:38:27.326005968 +0100
+@@ -0,0 +1,28 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * version : 12077 $ of $
++ *
++ * $Id:$
++ */
++#ifndef DESSERTMESHIFTABLE_DATA_SET_H
++#define DESSERTMESHIFTABLE_DATA_SET_H
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++ /*
++ *********************************************************************
++ * SET function declarations
++ */
++
++ /*
++ *********************************************************************
++ * SET Table declarations
++ */
++
++
++#ifdef __cplusplus
++}
++#endif
++#endif /* DESSERTMESHIFTABLE_DATA_SET_H */
+Index: libdessert0.86-0.86.14/src/snmp/dessertMeshifTable_enums.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertMeshifTable_enums.h 2009-12-09 16:38:27.326005968 +0100
+@@ -0,0 +1,39 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * : generic-table-enums.m2c 12526 2005-07-15 22:41:16Z rstory $
++ *
++ * $Id:$
++ */
++#ifndef DESSERTMESHIFTABLE_ENUMS_H
++#define DESSERTMESHIFTABLE_ENUMS_H
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++ /*
++ * NOTES on enums
++ * ==============
++ *
++ * Value Mapping
++ * -------------
++ * If the values for your data type don't exactly match the
++ * possible values defined by the mib, you should map them
++ * below. For example, a boolean flag (1/0) is usually represented
++ * as a TruthValue in a MIB, which maps to the values (1/2).
++ *
++ */
++/*************************************************************************
++ *************************************************************************
++ *
++ * enum definitions for table dessertMeshifTable
++ *
++ *************************************************************************
++ *************************************************************************/
++
++
++
++#ifdef __cplusplus
++}
++#endif
++#endif /* DESSERTMESHIFTABLE_ENUMS_H */
+Index: libdessert0.86-0.86.14/src/snmp/dessertMeshifTable_interface.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertMeshifTable_interface.c 2009-12-09 16:38:27.326005968 +0100
+@@ -0,0 +1,944 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * version : 15899 $ of $
++ *
++ * $Id:$
++ */
++/*
++ * *********************************************************************
++ * *********************************************************************
++ * *********************************************************************
++ * *** ***
++ * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
++ * *** ***
++ * *** ***
++ * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
++ * *** ***
++ * *** ***
++ * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
++ * *** ***
++ * *** ***
++ * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
++ * *** ***
++ * *** ***
++ * *********************************************************************
++ * *********************************************************************
++ * *********************************************************************
++ */
++
++/*
++ * standard Net-SNMP includes
++ */
++#include <net-snmp/net-snmp-config.h>
++#include <net-snmp/net-snmp-includes.h>
++#include <net-snmp/agent/net-snmp-agent-includes.h>
++
++/*
++ * include our parent header
++ */
++#include "dessertMeshifTable.h"
++
++
++#include <net-snmp/agent/table_container.h>
++#include <net-snmp/library/container.h>
++
++#include "dessertMeshifTable_interface.h"
++
++#include <ctype.h>
++
++/**********************************************************************
++ **********************************************************************
++ ***
++ *** Table dessertMeshifTable
++ ***
++ **********************************************************************
++ **********************************************************************/
++/*
++ * DESSERT-MIB::dessertMeshifTable is subid 5 of dessertObjects.
++ * Its status is Current.
++ * OID: .1.3.6.1.4.1.18898.0.19.42.1.5, length: 12
++ */
++typedef struct dessertMeshifTable_interface_ctx_s {
++
++ netsnmp_container *container;
++ netsnmp_cache *cache;
++
++ dessertMeshifTable_registration *user_ctx;
++
++ netsnmp_table_registration_info tbl_info;
++
++ netsnmp_baby_steps_access_methods access_multiplexer;
++
++} dessertMeshifTable_interface_ctx;
++
++static dessertMeshifTable_interface_ctx dessertMeshifTable_if_ctx;
++
++static void
++_dessertMeshifTable_container_init(dessertMeshifTable_interface_ctx *
++ if_ctx);
++static void
++_dessertMeshifTable_container_shutdown(dessertMeshifTable_interface_ctx *
++ if_ctx);
++
++
++netsnmp_container *
++dessertMeshifTable_container_get(void)
++{
++ return dessertMeshifTable_if_ctx.container;
++}
++
++dessertMeshifTable_registration *
++dessertMeshifTable_registration_get(void)
++{
++ return dessertMeshifTable_if_ctx.user_ctx;
++}
++
++dessertMeshifTable_registration *
++dessertMeshifTable_registration_set(dessertMeshifTable_registration *
++ newreg)
++{
++ dessertMeshifTable_registration *old =
++ dessertMeshifTable_if_ctx.user_ctx;
++ dessertMeshifTable_if_ctx.user_ctx = newreg;
++ return old;
++}
++
++int
++dessertMeshifTable_container_size(void)
++{
++ return CONTAINER_SIZE(dessertMeshifTable_if_ctx.container);
++}
++
++/*
++ * mfd multiplexer modes
++ */
++static Netsnmp_Node_Handler _mfd_dessertMeshifTable_pre_request;
++static Netsnmp_Node_Handler _mfd_dessertMeshifTable_post_request;
++static Netsnmp_Node_Handler _mfd_dessertMeshifTable_object_lookup;
++static Netsnmp_Node_Handler _mfd_dessertMeshifTable_get_values;
++/**
++ * @internal
++ * Initialize the table dessertMeshifTable
++ * (Define its contents and how it's structured)
++ */
++void
++_dessertMeshifTable_initialize_interface(dessertMeshifTable_registration *
++ reg_ptr, u_long flags)
++{
++ netsnmp_baby_steps_access_methods *access_multiplexer =
++ &dessertMeshifTable_if_ctx.access_multiplexer;
++ netsnmp_table_registration_info *tbl_info =
++ &dessertMeshifTable_if_ctx.tbl_info;
++ netsnmp_handler_registration *reginfo;
++ netsnmp_mib_handler *handler;
++ int mfd_modes = 0;
++
++ DEBUGMSGTL(("internal:dessertMeshifTable:_dessertMeshifTable_initialize_interface", "called\n"));
++
++
++ /*************************************************
++ *
++ * save interface context for dessertMeshifTable
++ */
++ /*
++ * Setting up the table's definition
++ */
++ netsnmp_table_helper_add_indexes(tbl_info,ASN_INTEGER,
++ /** index: meshifIndex */
++ 0);
++
++ /*
++ * Define the minimum and maximum accessible columns. This
++ * optimizes retrival.
++ */
++ tbl_info->min_column = DESSERTMESHIFTABLE_MIN_COL;
++ tbl_info->max_column = DESSERTMESHIFTABLE_MAX_COL;
++
++ /*
++ * save users context
++ */
++ dessertMeshifTable_if_ctx.user_ctx = reg_ptr;
++
++ /*
++ * call data access initialization code
++ */
++ dessertMeshifTable_init_data(reg_ptr);
++
++ /*
++ * set up the container
++ */
++ _dessertMeshifTable_container_init(&dessertMeshifTable_if_ctx);
++ if (NULL == dessertMeshifTable_if_ctx.container) {
++ snmp_log(LOG_ERR,
++ "could not initialize container for dessertMeshifTable\n");
++ return;
++ }
++
++ /*
++ * access_multiplexer: REQUIRED wrapper for get request handling
++ */
++ access_multiplexer->object_lookup =
++ _mfd_dessertMeshifTable_object_lookup;
++ access_multiplexer->get_values = _mfd_dessertMeshifTable_get_values;
++
++ /*
++ * no wrappers yet
++ */
++ access_multiplexer->pre_request = _mfd_dessertMeshifTable_pre_request;
++ access_multiplexer->post_request =
++ _mfd_dessertMeshifTable_post_request;
++
++
++ /*************************************************
++ *
++ * Create a registration, save our reg data, register table.
++ */
++ DEBUGMSGTL(("dessertMeshifTable:init_dessertMeshifTable",
++ "Registering dessertMeshifTable as a mibs-for-dummies table.\n"));
++ handler =
++ netsnmp_baby_steps_access_multiplexer_get(access_multiplexer);
++ reginfo =
++ netsnmp_handler_registration_create("dessertMeshifTable", handler,
++ dessertMeshifTable_oid,
++ dessertMeshifTable_oid_size,
++ HANDLER_CAN_BABY_STEP |
++ HANDLER_CAN_RONLY);
++ if (NULL == reginfo) {
++ snmp_log(LOG_ERR, "error registering table dessertMeshifTable\n");
++ return;
++ }
++ reginfo->my_reg_void = &dessertMeshifTable_if_ctx;
++
++ /*************************************************
++ *
++ * set up baby steps handler, create it and inject it
++ */
++ if (access_multiplexer->object_lookup)
++ mfd_modes |= BABY_STEP_OBJECT_LOOKUP;
++ if (access_multiplexer->set_values)
++ mfd_modes |= BABY_STEP_SET_VALUES;
++ if (access_multiplexer->irreversible_commit)
++ mfd_modes |= BABY_STEP_IRREVERSIBLE_COMMIT;
++ if (access_multiplexer->object_syntax_checks)
++ mfd_modes |= BABY_STEP_CHECK_OBJECT;
++
++ if (access_multiplexer->pre_request)
++ mfd_modes |= BABY_STEP_PRE_REQUEST;
++ if (access_multiplexer->post_request)
++ mfd_modes |= BABY_STEP_POST_REQUEST;
++
++ if (access_multiplexer->undo_setup)
++ mfd_modes |= BABY_STEP_UNDO_SETUP;
++ if (access_multiplexer->undo_cleanup)
++ mfd_modes |= BABY_STEP_UNDO_CLEANUP;
++ if (access_multiplexer->undo_sets)
++ mfd_modes |= BABY_STEP_UNDO_SETS;
++
++ if (access_multiplexer->row_creation)
++ mfd_modes |= BABY_STEP_ROW_CREATE;
++ if (access_multiplexer->consistency_checks)
++ mfd_modes |= BABY_STEP_CHECK_CONSISTENCY;
++ if (access_multiplexer->commit)
++ mfd_modes |= BABY_STEP_COMMIT;
++ if (access_multiplexer->undo_commit)
++ mfd_modes |= BABY_STEP_UNDO_COMMIT;
++
++ handler = netsnmp_baby_steps_handler_get(mfd_modes);
++ netsnmp_inject_handler(reginfo, handler);
++
++ /*************************************************
++ *
++ * inject row_merge helper with prefix rootoid_len + 2 (entry.col)
++ */
++ handler = netsnmp_get_row_merge_handler(reginfo->rootoid_len + 2);
++ netsnmp_inject_handler(reginfo, handler);
++
++ /*************************************************
++ *
++ * inject container_table helper
++ */
++ handler =
++ netsnmp_container_table_handler_get(tbl_info,
++ dessertMeshifTable_if_ctx.
++ container,
++ TABLE_CONTAINER_KEY_NETSNMP_INDEX);
++ netsnmp_inject_handler(reginfo, handler);
++
++ /*************************************************
++ *
++ * inject cache helper
++ */
++ if (NULL != dessertMeshifTable_if_ctx.cache) {
++ handler =
++ netsnmp_cache_handler_get(dessertMeshifTable_if_ctx.cache);
++ netsnmp_inject_handler(reginfo, handler);
++ }
++
++ /*
++ * register table
++ */
++ netsnmp_register_table(reginfo, tbl_info);
++
++} /* _dessertMeshifTable_initialize_interface */
++
++/**
++ * @internal
++ * Shutdown the table dessertMeshifTable
++ */
++void
++_dessertMeshifTable_shutdown_interface(dessertMeshifTable_registration *
++ reg_ptr)
++{
++ /*
++ * shutdown the container
++ */
++ _dessertMeshifTable_container_shutdown(&dessertMeshifTable_if_ctx);
++}
++
++void
++dessertMeshifTable_valid_columns_set(netsnmp_column_info *vc)
++{
++ dessertMeshifTable_if_ctx.tbl_info.valid_columns = vc;
++} /* dessertMeshifTable_valid_columns_set */
++
++/**
++ * @internal
++ * convert the index component stored in the context to an oid
++ */
++int
++dessertMeshifTable_index_to_oid(netsnmp_index * oid_idx,
++ dessertMeshifTable_mib_index * mib_idx)
++{
++ int err = SNMP_ERR_NOERROR;
++
++ /*
++ * temp storage for parsing indexes
++ */
++ /*
++ * meshifIndex(1)///()//L/a/w/e/r/d/h
++ */
++ netsnmp_variable_list var_meshifIndex;
++
++ /*
++ * set up varbinds
++ */
++ memset(&var_meshifIndex, 0x00, sizeof(var_meshifIndex));
++ var_meshifIndex.type = ASN_INTEGER;
++
++ /*
++ * chain temp index varbinds together
++ */
++ var_meshifIndex.next_variable = NULL;
++
++
++ DEBUGMSGTL(("verbose:dessertMeshifTable:dessertMeshifTable_index_to_oid", "called\n"));
++
++ /*
++ * meshifIndex(1)///()//L/a/w/e/r/d/h
++ */
++ snmp_set_var_value(&var_meshifIndex, (u_char *) & mib_idx->meshifIndex,
++ sizeof(mib_idx->meshifIndex));
++
++
++ err = build_oid_noalloc(oid_idx->oids, oid_idx->len, &oid_idx->len,
++ NULL, 0, &var_meshifIndex);
++ if (err)
++ snmp_log(LOG_ERR, "error %d converting index to oid\n", err);
++
++ /*
++ * parsing may have allocated memory. free it.
++ */
++ snmp_reset_var_buffers(&var_meshifIndex);
++
++ return err;
++} /* dessertMeshifTable_index_to_oid */
++
++/**
++ * extract dessertMeshifTable indexes from a netsnmp_index
++ *
++ * @retval SNMP_ERR_NOERROR : no error
++ * @retval SNMP_ERR_GENERR : error
++ */
++int
++dessertMeshifTable_index_from_oid(netsnmp_index * oid_idx,
++ dessertMeshifTable_mib_index * mib_idx)
++{
++ int err = SNMP_ERR_NOERROR;
++
++ /*
++ * temp storage for parsing indexes
++ */
++ /*
++ * meshifIndex(1)///()//L/a/w/e/r/d/h
++ */
++ netsnmp_variable_list var_meshifIndex;
++
++ /*
++ * set up varbinds
++ */
++ memset(&var_meshifIndex, 0x00, sizeof(var_meshifIndex));
++ var_meshifIndex.type = ASN_INTEGER;
++
++ /*
++ * chain temp index varbinds together
++ */
++ var_meshifIndex.next_variable = NULL;
++
++
++ DEBUGMSGTL(("verbose:dessertMeshifTable:dessertMeshifTable_index_from_oid", "called\n"));
++
++ /*
++ * parse the oid into the individual index components
++ */
++ err = parse_oid_indexes(oid_idx->oids, oid_idx->len, &var_meshifIndex);
++ if (err == SNMP_ERR_NOERROR) {
++ /*
++ * copy out values
++ */
++ mib_idx->meshifIndex = *((long *)var_meshifIndex.val.string);
++
++
++ }
++
++ /*
++ * parsing may have allocated memory. free it.
++ */
++ snmp_reset_var_buffers(&var_meshifIndex);
++
++ return err;
++} /* dessertMeshifTable_index_from_oid */
++
++
++/*
++ *********************************************************************
++ * @internal
++ * allocate resources for a dessertMeshifTable_rowreq_ctx
++ */
++dessertMeshifTable_rowreq_ctx *
++dessertMeshifTable_allocate_rowreq_ctx(void *user_init_ctx)
++{
++ dessertMeshifTable_rowreq_ctx *rowreq_ctx =
++ SNMP_MALLOC_TYPEDEF(dessertMeshifTable_rowreq_ctx);
++
++ DEBUGMSGTL(("internal:dessertMeshifTable:dessertMeshifTable_allocate_rowreq_ctx", "called\n"));
++
++ if (NULL == rowreq_ctx) {
++ snmp_log(LOG_ERR, "Couldn't allocate memory for a "
++ "dessertMeshifTable_rowreq_ctx.\n");
++ return NULL;
++ }
++
++ rowreq_ctx->oid_idx.oids = rowreq_ctx->oid_tmp;
++
++ rowreq_ctx->dessertMeshifTable_data_list = NULL;
++
++ /*
++ * if we allocated data, call init routine
++ */
++ if (!(rowreq_ctx->rowreq_flags & MFD_ROW_DATA_FROM_USER)) {
++ if (SNMPERR_SUCCESS !=
++ dessertMeshifTable_rowreq_ctx_init(rowreq_ctx,
++ user_init_ctx)) {
++ dessertMeshifTable_release_rowreq_ctx(rowreq_ctx);
++ rowreq_ctx = NULL;
++ }
++ }
++
++ return rowreq_ctx;
++} /* dessertMeshifTable_allocate_rowreq_ctx */
++
++/*
++ * @internal
++ * release resources for a dessertMeshifTable_rowreq_ctx
++ */
++void
++dessertMeshifTable_release_rowreq_ctx(dessertMeshifTable_rowreq_ctx *
++ rowreq_ctx)
++{
++ DEBUGMSGTL(("internal:dessertMeshifTable:dessertMeshifTable_release_rowreq_ctx", "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ dessertMeshifTable_rowreq_ctx_cleanup(rowreq_ctx);
++
++ /*
++ * free index oid pointer
++ */
++ if (rowreq_ctx->oid_idx.oids != rowreq_ctx->oid_tmp)
++ free(rowreq_ctx->oid_idx.oids);
++
++ SNMP_FREE(rowreq_ctx);
++} /* dessertMeshifTable_release_rowreq_ctx */
++
++/**
++ * @internal
++ * wrapper
++ */
++static int
++_mfd_dessertMeshifTable_pre_request(netsnmp_mib_handler *handler,
++ netsnmp_handler_registration *reginfo,
++ netsnmp_agent_request_info
++ *agtreq_info,
++ netsnmp_request_info *requests)
++{
++ int rc;
++
++ DEBUGMSGTL(("internal:dessertMeshifTable:_mfd_dessertMeshifTable_pre_request", "called\n"));
++
++ if (1 != netsnmp_row_merge_status_first(reginfo, agtreq_info)) {
++ DEBUGMSGTL(("internal:dessertMeshifTable",
++ "skipping additional pre_request\n"));
++ return SNMP_ERR_NOERROR;
++ }
++
++ rc = dessertMeshifTable_pre_request(dessertMeshifTable_if_ctx.
++ user_ctx);
++ if (MFD_SUCCESS != rc) {
++ /*
++ * nothing we can do about it but log it
++ */
++ DEBUGMSGTL(("dessertMeshifTable", "error %d from "
++ "dessertMeshifTable_pre_request\n", rc));
++ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
++ }
++
++ return SNMP_ERR_NOERROR;
++} /* _mfd_dessertMeshifTable_pre_request */
++
++/**
++ * @internal
++ * wrapper
++ */
++static int
++_mfd_dessertMeshifTable_post_request(netsnmp_mib_handler *handler,
++ netsnmp_handler_registration *reginfo,
++ netsnmp_agent_request_info
++ *agtreq_info,
++ netsnmp_request_info *requests)
++{
++ dessertMeshifTable_rowreq_ctx *rowreq_ctx =
++ netsnmp_container_table_row_extract(requests);
++ int rc, packet_rc;
++
++ DEBUGMSGTL(("internal:dessertMeshifTable:_mfd_dessertMeshifTable_post_request", "called\n"));
++
++ /*
++ * release row context, if deleted
++ */
++ if (rowreq_ctx && (rowreq_ctx->rowreq_flags & MFD_ROW_DELETED))
++ dessertMeshifTable_release_rowreq_ctx(rowreq_ctx);
++
++ /*
++ * wait for last call before calling user
++ */
++ if (1 != netsnmp_row_merge_status_last(reginfo, agtreq_info)) {
++ DEBUGMSGTL(("internal:dessertMeshifTable",
++ "waiting for last post_request\n"));
++ return SNMP_ERR_NOERROR;
++ }
++
++ packet_rc = netsnmp_check_all_requests_error(agtreq_info->asp, 0);
++ rc = dessertMeshifTable_post_request(dessertMeshifTable_if_ctx.
++ user_ctx, packet_rc);
++ if (MFD_SUCCESS != rc) {
++ /*
++ * nothing we can do about it but log it
++ */
++ DEBUGMSGTL(("dessertMeshifTable", "error %d from "
++ "dessertMeshifTable_post_request\n", rc));
++ }
++
++ return SNMP_ERR_NOERROR;
++} /* _mfd_dessertMeshifTable_post_request */
++
++/**
++ * @internal
++ * wrapper
++ */
++static int
++_mfd_dessertMeshifTable_object_lookup(netsnmp_mib_handler *handler,
++ netsnmp_handler_registration
++ *reginfo,
++ netsnmp_agent_request_info
++ *agtreq_info,
++ netsnmp_request_info *requests)
++{
++ int rc = SNMP_ERR_NOERROR;
++ dessertMeshifTable_rowreq_ctx *rowreq_ctx =
++ netsnmp_container_table_row_extract(requests);
++
++ DEBUGMSGTL(("internal:dessertMeshifTable:_mfd_dessertMeshifTable_object_lookup", "called\n"));
++
++ /*
++ * get our context from mfd
++ * dessertMeshifTable_interface_ctx *if_ctx =
++ * (dessertMeshifTable_interface_ctx *)reginfo->my_reg_void;
++ */
++
++ if (NULL == rowreq_ctx) {
++ rc = SNMP_ERR_NOCREATION;
++ }
++
++ if (MFD_SUCCESS != rc)
++ netsnmp_request_set_error_all(requests, rc);
++ else
++ dessertMeshifTable_row_prep(rowreq_ctx);
++
++ return SNMP_VALIDATE_ERR(rc);
++} /* _mfd_dessertMeshifTable_object_lookup */
++
++/***********************************************************************
++ *
++ * GET processing
++ *
++ ***********************************************************************/
++/*
++ * @internal
++ * Retrieve the value for a particular column
++ */
++NETSNMP_STATIC_INLINE int
++_dessertMeshifTable_get_column(dessertMeshifTable_rowreq_ctx * rowreq_ctx,
++ netsnmp_variable_list * var, int column)
++{
++ int rc = SNMPERR_SUCCESS;
++
++ DEBUGMSGTL(("internal:dessertMeshifTable:_mfd_dessertMeshifTable_get_column", "called for %d\n", column));
++
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ switch (column) {
++
++ /*
++ * meshifName(2)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
++ */
++ case COLUMN_MESHIFNAME:
++ var->type = ASN_OCTET_STR;
++ rc = meshifName_get(rowreq_ctx, (char **) &var->val.string,
++ &var->val_len);
++ break;
++
++ /*
++ * meshifMacAddress(3)/MacAddress/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
++ */
++ case COLUMN_MESHIFMACADDRESS:
++ var->type = ASN_OCTET_STR;
++ rc = meshifMacAddress_get(rowreq_ctx, (char **) &var->val.string,
++ &var->val_len);
++ break;
++
++ /*
++ * meshifInPkts(4)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
++ */
++ case COLUMN_MESHIFINPKTS:
++ var->val_len = sizeof(U64);
++ var->type = ASN_COUNTER64;
++ rc = meshifInPkts_get(rowreq_ctx, (U64 *) var->val.string);
++ break;
++
++ /*
++ * meshifOutPkts(5)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
++ */
++ case COLUMN_MESHIFOUTPKTS:
++ var->val_len = sizeof(U64);
++ var->type = ASN_COUNTER64;
++ rc = meshifOutPkts_get(rowreq_ctx, (U64 *) var->val.string);
++ break;
++
++ /*
++ * meshifInOctets(6)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
++ */
++ case COLUMN_MESHIFINOCTETS:
++ var->val_len = sizeof(U64);
++ var->type = ASN_COUNTER64;
++ rc = meshifInOctets_get(rowreq_ctx, (U64 *) var->val.string);
++ break;
++
++ /*
++ * meshifOutOctets(7)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
++ */
++ case COLUMN_MESHIFOUTOCTETS:
++ var->val_len = sizeof(U64);
++ var->type = ASN_COUNTER64;
++ rc = meshifOutOctets_get(rowreq_ctx, (U64 *) var->val.string);
++ break;
++
++ default:
++ if (DESSERTMESHIFTABLE_MIN_COL <= column
++ && column <= DESSERTMESHIFTABLE_MAX_COL) {
++ DEBUGMSGTL(("internal:dessertMeshifTable:_mfd_dessertMeshifTable_get_column", "assume column %d is reserved\n", column));
++ rc = MFD_SKIP;
++ } else {
++ snmp_log(LOG_ERR,
++ "unknown column %d in _dessertMeshifTable_get_column\n",
++ column);
++ }
++ break;
++ }
++
++ return rc;
++} /* _dessertMeshifTable_get_column */
++
++int
++_mfd_dessertMeshifTable_get_values(netsnmp_mib_handler *handler,
++ netsnmp_handler_registration *reginfo,
++ netsnmp_agent_request_info *agtreq_info,
++ netsnmp_request_info *requests)
++{
++ dessertMeshifTable_rowreq_ctx *rowreq_ctx =
++ netsnmp_container_table_row_extract(requests);
++ netsnmp_table_request_info *tri;
++ u_char *old_string;
++ void (*dataFreeHook) (void *);
++ int rc;
++
++ DEBUGMSGTL(("internal:dessertMeshifTable:_mfd_dessertMeshifTable_get_values", "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ for (; requests; requests = requests->next) {
++ /*
++ * save old pointer, so we can free it if replaced
++ */
++ old_string = requests->requestvb->val.string;
++ dataFreeHook = requests->requestvb->dataFreeHook;
++ if (NULL == requests->requestvb->val.string) {
++ requests->requestvb->val.string = requests->requestvb->buf;
++ requests->requestvb->val_len =
++ sizeof(requests->requestvb->buf);
++ } else if (requests->requestvb->buf ==
++ requests->requestvb->val.string) {
++ if (requests->requestvb->val_len !=
++ sizeof(requests->requestvb->buf))
++ requests->requestvb->val_len =
++ sizeof(requests->requestvb->buf);
++ }
++
++ /*
++ * get column data
++ */
++ tri = netsnmp_extract_table_info(requests);
++ if (NULL == tri)
++ continue;
++
++ rc = _dessertMeshifTable_get_column(rowreq_ctx,
++ requests->requestvb,
++ tri->colnum);
++ if (rc) {
++ if (MFD_SKIP == rc) {
++ requests->requestvb->type = SNMP_NOSUCHINSTANCE;
++ rc = SNMP_ERR_NOERROR;
++ }
++ } else if (NULL == requests->requestvb->val.string) {
++ snmp_log(LOG_ERR, "NULL varbind data pointer!\n");
++ rc = SNMP_ERR_GENERR;
++ }
++ if (rc)
++ netsnmp_request_set_error(requests, SNMP_VALIDATE_ERR(rc));
++
++ /*
++ * if the buffer wasn't used previously for the old data (i.e. it
++ * was allcoated memory) and the get routine replaced the pointer,
++ * we need to free the previous pointer.
++ */
++ if (old_string && (old_string != requests->requestvb->buf) &&
++ (requests->requestvb->val.string != old_string)) {
++ if (dataFreeHook)
++ (*dataFreeHook) (old_string);
++ else
++ free(old_string);
++ }
++ } /* for results */
++
++ return SNMP_ERR_NOERROR;
++} /* _mfd_dessertMeshifTable_get_values */
++
++
++/***********************************************************************
++ *
++ * SET processing
++ *
++ ***********************************************************************/
++
++/*
++ * SET PROCESSING NOT APPLICABLE (per MIB or user setting)
++ */
++/***********************************************************************
++ *
++ * DATA ACCESS
++ *
++ ***********************************************************************/
++static void _container_free(netsnmp_container * container);
++
++/**
++ * @internal
++ */
++static int
++_cache_load(netsnmp_cache * cache, void *vmagic)
++{
++ DEBUGMSGTL(("internal:dessertMeshifTable:_cache_load", "called\n"));
++
++ if ((NULL == cache) || (NULL == cache->magic)) {
++ snmp_log(LOG_ERR,
++ "invalid cache for dessertMeshifTable_cache_load\n");
++ return -1;
++ }
++
++ /** should only be called for an invalid or expired cache */
++ netsnmp_assert((0 == cache->valid) || (1 == cache->expired));
++
++ /*
++ * call user code
++ */
++ return dessertMeshifTable_container_load((netsnmp_container *) cache->
++ magic);
++} /* _cache_load */
++
++/**
++ * @internal
++ */
++static void
++_cache_free(netsnmp_cache * cache, void *magic)
++{
++ netsnmp_container *container;
++
++ DEBUGMSGTL(("internal:dessertMeshifTable:_cache_free", "called\n"));
++
++ if ((NULL == cache) || (NULL == cache->magic)) {
++ snmp_log(LOG_ERR,
++ "invalid cache in dessertMeshifTable_cache_free\n");
++ return;
++ }
++
++ container = (netsnmp_container *) cache->magic;
++
++ _container_free(container);
++} /* _cache_free */
++
++/**
++ * @internal
++ */
++static void
++_container_item_free(dessertMeshifTable_rowreq_ctx * rowreq_ctx,
++ void *context)
++{
++ DEBUGMSGTL(("internal:dessertMeshifTable:_container_item_free",
++ "called\n"));
++
++ if (NULL == rowreq_ctx)
++ return;
++
++ dessertMeshifTable_release_rowreq_ctx(rowreq_ctx);
++} /* _container_item_free */
++
++/**
++ * @internal
++ */
++static void
++_container_free(netsnmp_container * container)
++{
++ DEBUGMSGTL(("internal:dessertMeshifTable:_container_free",
++ "called\n"));
++
++ if (NULL == container) {
++ snmp_log(LOG_ERR,
++ "invalid container in dessertMeshifTable_container_free\n");
++ return;
++ }
++
++ /*
++ * call user code
++ */
++ dessertMeshifTable_container_free(container);
++
++ /*
++ * free all items. inefficient, but easy.
++ */
++ CONTAINER_CLEAR(container,
++ (netsnmp_container_obj_func *) _container_item_free,
++ NULL);
++} /* _container_free */
++
++/**
++ * @internal
++ * initialize the container with functions or wrappers
++ */
++void
++_dessertMeshifTable_container_init(dessertMeshifTable_interface_ctx *
++ if_ctx)
++{
++ DEBUGMSGTL(("internal:dessertMeshifTable:_dessertMeshifTable_container_init", "called\n"));
++
++ /*
++ * cache init
++ */
++ if_ctx->cache = netsnmp_cache_create(30, /* timeout in seconds */
++ _cache_load, _cache_free,
++ dessertMeshifTable_oid,
++ dessertMeshifTable_oid_size);
++
++ if (NULL == if_ctx->cache) {
++ snmp_log(LOG_ERR, "error creating cache for dessertMeshifTable\n");
++ return;
++ }
++
++ if_ctx->cache->flags = NETSNMP_CACHE_DONT_INVALIDATE_ON_SET;
++
++ dessertMeshifTable_container_init(&if_ctx->container, if_ctx->cache);
++ if (NULL == if_ctx->container)
++ if_ctx->container =
++ netsnmp_container_find("dessertMeshifTable:table_container");
++ if (NULL == if_ctx->container) {
++ snmp_log(LOG_ERR, "error creating container in "
++ "dessertMeshifTable_container_init\n");
++ return;
++ }
++
++ if (NULL != if_ctx->cache)
++ if_ctx->cache->magic = (void *) if_ctx->container;
++} /* _dessertMeshifTable_container_init */
++
++/**
++ * @internal
++ * shutdown the container with functions or wrappers
++ */
++void
++_dessertMeshifTable_container_shutdown(dessertMeshifTable_interface_ctx *
++ if_ctx)
++{
++ DEBUGMSGTL(("internal:dessertMeshifTable:_dessertMeshifTable_container_shutdown", "called\n"));
++
++ dessertMeshifTable_container_shutdown(if_ctx->container);
++
++ _container_free(if_ctx->container);
++
++} /* _dessertMeshifTable_container_shutdown */
++
++
++dessertMeshifTable_rowreq_ctx *
++dessertMeshifTable_row_find_by_mib_index(dessertMeshifTable_mib_index *
++ mib_idx)
++{
++ dessertMeshifTable_rowreq_ctx *rowreq_ctx;
++ oid oid_tmp[MAX_OID_LEN];
++ netsnmp_index oid_idx;
++ int rc;
++
++ /*
++ * set up storage for OID
++ */
++ oid_idx.oids = oid_tmp;
++ oid_idx.len = sizeof(oid_tmp) / sizeof(oid);
++
++ /*
++ * convert
++ */
++ rc = dessertMeshifTable_index_to_oid(&oid_idx, mib_idx);
++ if (MFD_SUCCESS != rc)
++ return NULL;
++
++ rowreq_ctx =
++ CONTAINER_FIND(dessertMeshifTable_if_ctx.container, &oid_idx);
++
++ return rowreq_ctx;
++}
+Index: libdessert0.86-0.86.14/src/snmp/dessertMeshifTable_interface.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertMeshifTable_interface.h 2009-12-09 16:38:27.326005968 +0100
+@@ -0,0 +1,98 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * version : 15899 $ of $
++ *
++ * $Id:$
++ */
++/** @ingroup interface: Routines to interface to Net-SNMP
++ *
++ * \warning This code should not be modified, called directly,
++ * or used to interpret functionality. It is subject to
++ * change at any time.
++ *
++ * @{
++ */
++/*
++ * *********************************************************************
++ * *********************************************************************
++ * *********************************************************************
++ * *** ***
++ * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
++ * *** ***
++ * *** ***
++ * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
++ * *** ***
++ * *** ***
++ * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
++ * *** ***
++ * *** ***
++ * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
++ * *** ***
++ * *** ***
++ * *********************************************************************
++ * *********************************************************************
++ * *********************************************************************
++ */
++#ifndef DESSERTMESHIFTABLE_INTERFACE_H
++#define DESSERTMESHIFTABLE_INTERFACE_H
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++
++#include "dessertMeshifTable.h"
++
++
++ /*
++ ********************************************************************
++ * Table declarations
++ */
++
++ /*
++ * PUBLIC interface initialization routine
++ */
++ void
++ _dessertMeshifTable_initialize_interface
++ (dessertMeshifTable_registration * user_ctx, u_long flags);
++ void
++ _dessertMeshifTable_shutdown_interface
++ (dessertMeshifTable_registration * user_ctx);
++
++ dessertMeshifTable_registration
++ *dessertMeshifTable_registration_get(void);
++
++ dessertMeshifTable_registration
++ *dessertMeshifTable_registration_set
++ (dessertMeshifTable_registration * newreg);
++
++ netsnmp_container *dessertMeshifTable_container_get(void);
++ int dessertMeshifTable_container_size(void);
++
++ dessertMeshifTable_rowreq_ctx
++ *dessertMeshifTable_allocate_rowreq_ctx(void *);
++ void
++ dessertMeshifTable_release_rowreq_ctx(dessertMeshifTable_rowreq_ctx
++ * rowreq_ctx);
++
++ int dessertMeshifTable_index_to_oid(netsnmp_index *
++ oid_idx,
++ dessertMeshifTable_mib_index
++ * mib_idx);
++ int dessertMeshifTable_index_from_oid(netsnmp_index *
++ oid_idx,
++ dessertMeshifTable_mib_index
++ * mib_idx);
++
++ /*
++ * access to certain internals. use with caution!
++ */
++ void
++ dessertMeshifTable_valid_columns_set(netsnmp_column_info *vc);
++
++
++#ifdef __cplusplus
++}
++#endif
++#endif /* DESSERTMESHIFTABLE_INTERFACE_H */
++/** @} */
+Index: libdessert0.86-0.86.14/src/snmp/dessertMeshifTable_oids.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertMeshifTable_oids.h 2009-12-09 16:38:27.326005968 +0100
+@@ -0,0 +1,43 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * : generic-table-oids.m2c 12855 2005-09-27 15:56:08Z rstory $
++ *
++ * $Id:$
++ */
++#ifndef DESSERTMESHIFTABLE_OIDS_H
++#define DESSERTMESHIFTABLE_OIDS_H
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++
++ /*
++ * column number definitions for table dessertMeshifTable
++ */
++#define DESSERTMESHIFTABLE_OID 1,3,6,1,4,1,18898,0,19,10,1,1,5
++
++#define COLUMN_MESHIFINDEX 1
++
++#define COLUMN_MESHIFNAME 2
++
++#define COLUMN_MESHIFMACADDRESS 3
++
++#define COLUMN_MESHIFINPKTS 4
++
++#define COLUMN_MESHIFOUTPKTS 5
++
++#define COLUMN_MESHIFINOCTETS 6
++
++#define COLUMN_MESHIFOUTOCTETS 7
++
++
++#define DESSERTMESHIFTABLE_MIN_COL COLUMN_MESHIFNAME
++#define DESSERTMESHIFTABLE_MAX_COL COLUMN_MESHIFOUTOCTETS
++
++
++
++#ifdef __cplusplus
++}
++#endif
++#endif /* DESSERTMESHIFTABLE_OIDS_H */
+Index: libdessert0.86-0.86.14/src/snmp/dessertObjects.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertObjects.c 2009-12-09 16:38:27.326005968 +0100
+@@ -0,0 +1,165 @@
++/**
++ * Note: this file originally auto-generated by mib2c using
++ * : mib2c.scalar.conf 11805 2005-01-07 09:37:18Z dts12 $
++ */
++
++#include <net-snmp/net-snmp-config.h>
++#include <net-snmp/net-snmp-includes.h>
++#include <net-snmp/agent/net-snmp-agent-includes.h>
++
++#include "dessert_internal.h"
++
++/** Initializes the dessertObjects module */
++void
++init_dessertObjects(void)
++{
++ static oid dessertMeshifNumber_oid[] =
++ { 1, 3, 6, 1, 4, 1, 18898, 0, 19, 10, 1, 1, 4 };
++ static oid applicationVersion_oid[] =
++ { 1, 3, 6, 1, 4, 1, 18898, 0, 19, 10, 1, 1, 3, 2 };
++ static oid protocollShortName_oid[] =
++ { 1, 3, 6, 1, 4, 1, 18898, 0, 19, 10, 1, 1, 3, 3 };
++
++ DEBUGMSGTL((AGENT, "Initializing\n"));
++
++ netsnmp_register_scalar(netsnmp_create_handler_registration
++ ("dessertMeshifNumber",
++ handle_dessertMeshifNumber,
++ dessertMeshifNumber_oid,
++ OID_LENGTH(dessertMeshifNumber_oid),
++ HANDLER_CAN_RONLY));
++ netsnmp_register_scalar(netsnmp_create_handler_registration
++ ("applicationVersion",
++ handle_applicationVersion,
++ applicationVersion_oid,
++ OID_LENGTH(applicationVersion_oid),
++ HANDLER_CAN_RONLY));
++ netsnmp_register_scalar(netsnmp_create_handler_registration
++ ("protocollShortName",
++ handle_protocollShortName,
++ protocollShortName_oid,
++ OID_LENGTH(protocollShortName_oid),
++ HANDLER_CAN_RONLY));
++}
++
++int
++handle_dessertMeshifNumber(netsnmp_mib_handler *handler,
++ netsnmp_handler_registration *reginfo,
++ netsnmp_agent_request_info *reqinfo,
++ netsnmp_request_info *requests)
++{
++ u_char meshif_count;
++
++ dessert_meshif_t *meshif;
++
++ DL_FOREACH(dessert_meshiflist_get(), meshif){
++ meshif_count++;
++ }
++
++ /*
++ * We are never called for a GETNEXT if it's registered as a
++ * "instance", as it's "magically" handled for us.
++ */
++
++ /*
++ * a instance handler also only hands us one request at a time, so
++ * we don't need to loop over a list of requests; we'll only get one.
++ */
++
++ switch (reqinfo->mode) {
++
++ case MODE_GET:
++ DEBUGMSGTL((AGENT, "handle_dessertMeshifNumber:MODE_GET\n"));
++ snmp_set_var_typed_value(requests->requestvb, ASN_INTEGER,
++ (u_char *) &meshif_count, sizeof(u_char));
++ break;
++
++
++ default:
++ /*
++ * we should never get here, so this is a really bad error
++ */
++ snmp_log(LOG_ERR,
++ "unknown mode (%d) in handle_dessertMeshifNumber\n",
++ reqinfo->mode);
++ return SNMP_ERR_GENERR;
++ }
++
++ return SNMP_ERR_NOERROR;
++}
++
++int
++handle_applicationVersion(netsnmp_mib_handler *handler,
++ netsnmp_handler_registration *reginfo,
++ netsnmp_agent_request_info *reqinfo,
++ netsnmp_request_info *requests)
++{
++ /*
++ * We are never called for a GETNEXT if it's registered as a
++ * "instance", as it's "magically" handled for us.
++ */
++
++ /*
++ * a instance handler also only hands us one request at a time, so
++ * we don't need to loop over a list of requests; we'll only get one.
++ */
++
++ switch (reqinfo->mode) {
++
++ case MODE_GET:
++ DEBUGMSGTL((AGENT, "handle_applicationVersion:MODE_GET\n"));
++ snmp_set_var_typed_value(requests->requestvb, ASN_INTEGER,
++ (u_char *) &dessert_ver, sizeof(dessert_ver));
++ break;
++
++
++ default:
++ /*
++ * we should never get here, so this is a really bad error
++ */
++ snmp_log(LOG_ERR,
++ "unknown mode (%d) in handle_applicationVersion\n",
++ reqinfo->mode);
++ return SNMP_ERR_GENERR;
++ }
++
++ return SNMP_ERR_NOERROR;
++}
++
++int
++handle_protocollShortName(netsnmp_mib_handler *handler,
++ netsnmp_handler_registration *reginfo,
++ netsnmp_agent_request_info *reqinfo,
++ netsnmp_request_info *requests)
++{
++ /*
++ * We are never called for a GETNEXT if it's registered as a
++ * "instance", as it's "magically" handled for us.
++ */
++
++ /*
++ * a instance handler also only hands us one request at a time, so
++ * we don't need to loop over a list of requests; we'll only get one.
++ */
++
++ switch (reqinfo->mode) {
++
++ case MODE_GET:
++ DEBUGMSGTL((AGENT, "handle_protocollShortName:MODE_GET\n"));
++ snmp_set_var_typed_value(requests->requestvb, ASN_OCTET_STR,
++ (u_char *) dessert_proto, DESSERT_PROTO_STRLEN+1);
++ break;
++
++
++ default:
++ /*
++ * we should never get here, so this is a really bad error
++ */
++ snmp_log(LOG_ERR,
++ "unknown mode (%d) in handle_protocollShortName\n",
++ reqinfo->mode);
++ return SNMP_ERR_GENERR;
++ }
++
++ return SNMP_ERR_NOERROR;
++}
+Index: libdessert0.86-0.86.14/src/snmp/dessertObjects.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertObjects.h 2009-12-09 16:38:27.326005968 +0100
+@@ -0,0 +1,17 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * : mib2c.scalar.conf 11805 2005-01-07 09:37:18Z dts12 $
++ */
++#ifndef DESSERTOBJECTS_H
++#define DESSERTOBJECTS_H
++
++
++/*
++ * function declarations
++ */
++void init_dessertObjects(void);
++Netsnmp_Node_Handler handle_dessertMeshifNumber;
++Netsnmp_Node_Handler handle_applicationVersion;
++Netsnmp_Node_Handler handle_protocollShortName;
++
++#endif /* DESSERTOBJECTS_H */
+Index: libdessert0.86-0.86.14/src/snmp/dessertSysifTable.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertSysifTable.c 2009-12-09 16:38:27.329339146 +0100
+@@ -0,0 +1,215 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * version : 14170 $ of $
++ *
++ * $Id:$
++ */
++/** \page MFD helper for dessertSysifTable
++ *
++ * \section intro Introduction
++ * Introductory text.
++ *
++ */
++/*
++ * standard Net-SNMP includes
++ */
++#include <net-snmp/net-snmp-config.h>
++#include <net-snmp/net-snmp-includes.h>
++#include <net-snmp/agent/net-snmp-agent-includes.h>
++
++/*
++ * include our parent header
++ */
++#include "dessertSysifTable.h"
++
++#include <net-snmp/agent/mib_modules.h>
++
++#include "dessertSysifTable_interface.h"
++
++oid dessertSysifTable_oid[] = { DESSERTSYSIFTABLE_OID };
++
++int dessertSysifTable_oid_size =
++OID_LENGTH(dessertSysifTable_oid);
++
++dessertSysifTable_registration dessertSysifTable_user_context;
++
++void initialize_table_dessertSysifTable(void);
++void shutdown_table_dessertSysifTable(void);
++
++
++/**
++ * Initializes the dessertSysifTable module
++ */
++void
++init_dessertSysifTable(void)
++{
++ DEBUGMSGTL(("verbose:dessertSysifTable:init_dessertSysifTable",
++ "called\n"));
++
++ /*
++ * TODO:300:o: Perform dessertSysifTable one-time module initialization.
++ */
++
++ /*
++ * here we initialize all the tables we're planning on supporting
++ */
++ if (should_init("dessertSysifTable"))
++ initialize_table_dessertSysifTable();
++
++} /* init_dessertSysifTable */
++
++/**
++ * Shut-down the dessertSysifTable module (agent is exiting)
++ */
++void
++shutdown_dessertSysifTable(void)
++{
++ if (should_init("dessertSysifTable"))
++ shutdown_table_dessertSysifTable();
++
++}
++
++/**
++ * Initialize the table dessertSysifTable
++ * (Define its contents and how it's structured)
++ */
++void
++initialize_table_dessertSysifTable(void)
++{
++ dessertSysifTable_registration *user_context;
++ u_long flags;
++
++ DEBUGMSGTL(("verbose:dessertSysifTable:initialize_table_dessertSysifTable", "called\n"));
++
++ /*
++ * TODO:301:o: Perform dessertSysifTable one-time table initialization.
++ */
++
++ /*
++ * TODO:302:o: |->Initialize dessertSysifTable user context
++ * if you'd like to pass in a pointer to some data for this
++ * table, allocate or set it up here.
++ */
++ /*
++ * a netsnmp_data_list is a simple way to store void pointers. A simple
++ * string token is used to add, find or remove pointers.
++ */
++ user_context =
++ netsnmp_create_data_list("dessertSysifTable", NULL, NULL);
++
++ /*
++ * No support for any flags yet, but in the future you would
++ * set any flags here.
++ */
++ flags = 0;
++
++ /*
++ * call interface initialization code
++ */
++ _dessertSysifTable_initialize_interface(user_context, flags);
++} /* initialize_table_dessertSysifTable */
++
++/**
++ * Shutdown the table dessertSysifTable
++ */
++void
++shutdown_table_dessertSysifTable(void)
++{
++ /*
++ * call interface shutdown code
++ */
++ _dessertSysifTable_shutdown_interface(&dessertSysifTable_user_context);
++}
++
++/**
++ * extra context initialization (eg default values)
++ *
++ * @param rowreq_ctx : row request context
++ * @param user_init_ctx : void pointer for user (parameter to rowreq_ctx_allocate)
++ *
++ * @retval MFD_SUCCESS : no errors
++ * @retval MFD_ERROR : error (context allocate will fail)
++ */
++int
++dessertSysifTable_rowreq_ctx_init(dessertSysifTable_rowreq_ctx *
++ rowreq_ctx, void *user_init_ctx)
++{
++ DEBUGMSGTL(("verbose:dessertSysifTable:dessertSysifTable_rowreq_ctx_init", "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:210:o: |-> Perform extra dessertSysifTable rowreq initialization. (eg DEFVALS)
++ */
++
++ return MFD_SUCCESS;
++} /* dessertSysifTable_rowreq_ctx_init */
++
++/**
++ * extra context cleanup
++ *
++ */
++void
++dessertSysifTable_rowreq_ctx_cleanup(dessertSysifTable_rowreq_ctx *
++ rowreq_ctx)
++{
++ DEBUGMSGTL(("verbose:dessertSysifTable:dessertSysifTable_rowreq_ctx_cleanup", "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:211:o: |-> Perform extra dessertSysifTable rowreq cleanup.
++ */
++} /* dessertSysifTable_rowreq_ctx_cleanup */
++
++/**
++ * pre-request callback
++ *
++ *
++ * @retval MFD_SUCCESS : success.
++ * @retval MFD_ERROR : other error
++ */
++int
++dessertSysifTable_pre_request(dessertSysifTable_registration *
++ user_context)
++{
++ DEBUGMSGTL(("verbose:dessertSysifTable:dessertSysifTable_pre_request",
++ "called\n"));
++
++ /*
++ * TODO:510:o: Perform dessertSysifTable pre-request actions.
++ */
++
++ return MFD_SUCCESS;
++} /* dessertSysifTable_pre_request */
++
++/**
++ * post-request callback
++ *
++ * Note:
++ * New rows have been inserted into the container, and
++ * deleted rows have been removed from the container and
++ * released.
++ *
++ * @param user_context
++ * @param rc : MFD_SUCCESS if all requests succeeded
++ *
++ * @retval MFD_SUCCESS : success.
++ * @retval MFD_ERROR : other error (ignored)
++ */
++int
++dessertSysifTable_post_request(dessertSysifTable_registration *
++ user_context, int rc)
++{
++ DEBUGMSGTL(("verbose:dessertSysifTable:dessertSysifTable_post_request",
++ "called\n"));
++
++ /*
++ * TODO:511:o: Perform dessertSysifTable post-request actions.
++ */
++
++ return MFD_SUCCESS;
++} /* dessertSysifTable_post_request */
++
++
++/** @{ */
+Index: libdessert0.86-0.86.14/src/snmp/dessertSysifTable.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertSysifTable.h 2009-12-09 16:38:27.329339146 +0100
+@@ -0,0 +1,230 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * version : 14170 $ of $
++ *
++ * $Id:$
++ */
++#ifndef DESSERTSYSIFTABLE_H
++#define DESSERTSYSIFTABLE_H
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++
++/** @addtogroup misc misc: Miscellaneous routines
++ *
++ * @{
++ */
++#include <net-snmp/library/asn1.h>
++
++ /*
++ * other required module components
++ */
++ /* *INDENT-OFF* */
++config_add_mib(DESSERT2-MIB)
++config_require(DESSERT2-MIB/dessertSysifTable/dessertSysifTable_interface)
++config_require(DESSERT2-MIB/dessertSysifTable/dessertSysifTable_data_access)
++config_require(DESSERT2-MIB/dessertSysifTable/dessertSysifTable_data_get)
++config_require(DESSERT2-MIB/dessertSysifTable/dessertSysifTable_data_set)
++ /* *INDENT-ON* */
++
++ /*
++ * OID and column number definitions for dessertSysifTable
++ */
++#include "dessertSysifTable_oids.h"
++
++ /*
++ * enum definions
++ */
++#include "dessertSysifTable_enums.h"
++
++
++
++/*
++ *********************************************************************
++ * function declarations
++ */
++ void init_dessertSysifTable(void);
++ void shutdown_dessertSysifTable(void);
++
++ /*
++ *********************************************************************
++ * Table declarations
++ */
++/**********************************************************************
++ **********************************************************************
++ ***
++ *** Table dessertSysifTable
++ ***
++ **********************************************************************
++ **********************************************************************/
++ /*
++ * DESSERT2-MIB::dessertSysifTable is subid 7 of dessertObjects.
++ * Its status is Current.
++ * OID: .1.3.6.1.4.1.18898.0.19.42.1.7, length: 12
++ */
++ /*
++ *********************************************************************
++ * When you register your mib, you get to provide a generic
++ * pointer that will be passed back to you for most of the
++ * functions calls.
++ *
++ * TODO:100:r: Review all context structures
++ */
++ /*
++ * TODO:101:o: |-> Review dessertSysifTable registration context.
++ */
++ typedef netsnmp_data_list dessertSysifTable_registration;
++
++/**********************************************************************/
++ /*
++ * TODO:110:r: |-> Review dessertSysifTable data context structure.
++ * This structure is used to represent the data for dessertSysifTable.
++ */
++ /*
++ * This structure contains storage for all the columns defined in the
++ * dessertSysifTable.
++ */
++ typedef struct dessertSysifTable_data_s {
++
++ /*
++ * sysifName(2)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
++ */
++ char sysifName[255];
++ size_t sysifName_len; /* # of char elements, not bytes */
++
++ /*
++ * sysifMacAddress(3)/MacAddress/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
++ */
++ char sysifMacAddress[6];
++ size_t sysifMacAddress_len; /* # of char elements, not bytes */
++
++ /*
++ * sysifInPkts(4)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
++ */
++ U64 sysifInPkts;
++
++ /*
++ * sysifOutPkts(5)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
++ */
++ U64 sysifOutPkts;
++
++ /*
++ * sysifInOctets(6)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
++ */
++ U64 sysifInOctets;
++
++ /*
++ * sysifOutOctets(7)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
++ */
++ U64 sysifOutOctets;
++
++ } dessertSysifTable_data;
++
++
++ /*
++ * TODO:120:r: |-> Review dessertSysifTable mib index.
++ * This structure is used to represent the index for dessertSysifTable.
++ */
++ typedef struct dessertSysifTable_mib_index_s {
++
++ /*
++ * sysifIndex(1)///()//L/a/w/e/r/d/h
++ */
++ long sysifIndex;
++
++
++ } dessertSysifTable_mib_index;
++
++ /*
++ * TODO:121:r: | |-> Review dessertSysifTable max index length.
++ * If you KNOW that your indexes will never exceed a certain
++ * length, update this macro to that length.
++ */
++#define MAX_dessertSysifTable_IDX_LEN 1
++
++
++ /*
++ *********************************************************************
++ * TODO:130:o: |-> Review dessertSysifTable Row request (rowreq) context.
++ * When your functions are called, you will be passed a
++ * dessertSysifTable_rowreq_ctx pointer.
++ */
++ typedef struct dessertSysifTable_rowreq_ctx_s {
++
++ /** this must be first for container compare to work */
++ netsnmp_index oid_idx;
++ oid oid_tmp[MAX_dessertSysifTable_IDX_LEN];
++
++ dessertSysifTable_mib_index tbl_idx;
++
++ dessertSysifTable_data data;
++
++ /*
++ * flags per row. Currently, the first (lower) 8 bits are reserved
++ * for the user. See mfd.h for other flags.
++ */
++ u_int rowreq_flags;
++
++ /*
++ * TODO:131:o: | |-> Add useful data to dessertSysifTable rowreq context.
++ */
++
++ /*
++ * storage for future expansion
++ */
++ netsnmp_data_list *dessertSysifTable_data_list;
++
++ } dessertSysifTable_rowreq_ctx;
++
++ typedef struct dessertSysifTable_ref_rowreq_ctx_s {
++ dessertSysifTable_rowreq_ctx *rowreq_ctx;
++ } dessertSysifTable_ref_rowreq_ctx;
++
++ /*
++ *********************************************************************
++ * function prototypes
++ */
++ int
++ dessertSysifTable_pre_request(dessertSysifTable_registration *
++ user_context);
++ int
++ dessertSysifTable_post_request(dessertSysifTable_registration *
++ user_context, int rc);
++
++ int
++ dessertSysifTable_rowreq_ctx_init(dessertSysifTable_rowreq_ctx *
++ rowreq_ctx, void *user_init_ctx);
++ void
++ dessertSysifTable_rowreq_ctx_cleanup(dessertSysifTable_rowreq_ctx *
++ rowreq_ctx);
++
++
++ dessertSysifTable_rowreq_ctx
++ *dessertSysifTable_row_find_by_mib_index
++ (dessertSysifTable_mib_index * mib_idx);
++
++ extern oid dessertSysifTable_oid[];
++ extern int dessertSysifTable_oid_size;
++
++#include "dessertSysifTable_interface.h"
++#include "dessertSysifTable_data_access.h"
++#include "dessertSysifTable_data_get.h"
++#include "dessertSysifTable_data_set.h"
++
++ /*
++ * DUMMY markers, ignore
++ *
++ * TODO:099:x: *************************************************************
++ * TODO:199:x: *************************************************************
++ * TODO:299:x: *************************************************************
++ * TODO:399:x: *************************************************************
++ * TODO:499:x: *************************************************************
++ */
++
++#ifdef __cplusplus
++}
++#endif
++#endif /* DESSERTSYSIFTABLE_H */
++/** @} */
+Index: libdessert0.86-0.86.14/src/snmp/dessertSysifTable_data_access.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertSysifTable_data_access.c 2009-12-09 16:38:27.329339146 +0100
+@@ -0,0 +1,336 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * version : 14170 $ of $
++ *
++ * $Id:$
++ */
++/*
++ * standard Net-SNMP includes
++ */
++#include <net-snmp/net-snmp-config.h>
++#include <net-snmp/net-snmp-includes.h>
++#include <net-snmp/agent/net-snmp-agent-includes.h>
++
++#include "dessertSysifTable_data_access.h"
++
++/** @ingroup interface
++ * @addtogroup data_access data_access: Routines to access data
++ *
++ * These routines are used to locate the data used to satisfy
++ * requests.
++ *
++ * @{
++ */
++/**********************************************************************
++ **********************************************************************
++ ***
++ *** Table dessertSysifTable
++ ***
++ **********************************************************************
++ **********************************************************************/
++/*
++ * DESSERT2-MIB::dessertSysifTable is subid 7 of dessertObjects.
++ * Its status is Current.
++ * OID: .1.3.6.1.4.1.18898.0.19.42.1.7, length: 12
++ */
++
++/**
++ * initialization for dessertSysifTable data access
++ *
++ * This function is called during startup to allow you to
++ * allocate any resources you need for the data table.
++ *
++ * @param dessertSysifTable_reg
++ * Pointer to dessertSysifTable_registration
++ *
++ * @retval MFD_SUCCESS : success.
++ * @retval MFD_ERROR : unrecoverable error.
++ */
++int
++dessertSysifTable_init_data(dessertSysifTable_registration *
++ dessertSysifTable_reg)
++{
++ DEBUGMSGTL(("verbose:dessertSysifTable:dessertSysifTable_init_data",
++ "called\n"));
++
++ return MFD_SUCCESS;
++} /* dessertSysifTable_init_data */
++
++/**
++ * container overview
++ *
++ */
++
++/**
++ * container initialization
++ *
++ * @param container_ptr_ptr A pointer to a container pointer. If you
++ * create a custom container, use this parameter to return it
++ * to the MFD helper. If set to NULL, the MFD helper will
++ * allocate a container for you.
++ * @param cache A pointer to a cache structure. You can set the timeout
++ * and other cache flags using this pointer.
++ *
++ * This function is called at startup to allow you to customize certain
++ * aspects of the access method. For the most part, it is for advanced
++ * users. The default code should suffice for most cases. If no custom
++ * container is allocated, the MFD code will create one for your.
++ *
++ * This is also the place to set up cache behavior. The default, to
++ * simply set the cache timeout, will work well with the default
++ * container. If you are using a custom container, you may want to
++ * look at the cache helper documentation to see if there are any
++ * flags you want to set.
++ *
++ * @remark
++ * This would also be a good place to do any initialization needed
++ * for you data source. For example, opening a connection to another
++ * process that will supply the data, opening a database, etc.
++ */
++void
++dessertSysifTable_container_init(netsnmp_container ** container_ptr_ptr,
++ netsnmp_cache * cache)
++{
++ DEBUGMSGTL(("verbose:dessertSysifTable:dessertSysifTable_container_init", "called\n"));
++ dessert_debug("dessertSysifTable_container_load called");
++ if (NULL == container_ptr_ptr) {
++ snmp_log(LOG_ERR,
++ "bad container param to dessertSysifTable_container_init\n");
++ return;
++ }
++
++ /*
++ * For advanced users, you can use a custom container. If you
++ * do not create one, one will be created for you.
++ */
++ *container_ptr_ptr = NULL;
++
++ if (NULL == cache) {
++ snmp_log(LOG_ERR,
++ "bad cache param to dessertSysifTable_container_init\n");
++ return;
++ }
++
++ /*
++ * TODO:345:A: Set up dessertSysifTable cache properties.
++ *
++ * Also for advanced users, you can set parameters for the
++ * cache. Do not change the magic pointer, as it is used
++ * by the MFD helper. To completely disable caching, set
++ * cache->enabled to 0.
++ */
++ cache->timeout = DESSERTSYSIFTABLE_CACHE_TIMEOUT; /* seconds */
++} /* dessertSysifTable_container_init */
++
++/**
++ * container shutdown
++ *
++ * @param container_ptr A pointer to the container.
++ *
++ * This function is called at shutdown to allow you to customize certain
++ * aspects of the access method. For the most part, it is for advanced
++ * users. The default code should suffice for most cases.
++ *
++ * This function is called before dessertSysifTable_container_free().
++ *
++ * @remark
++ * This would also be a good place to do any cleanup needed
++ * for you data source. For example, closing a connection to another
++ * process that supplied the data, closing a database, etc.
++ */
++void
++dessertSysifTable_container_shutdown(netsnmp_container * container_ptr)
++{
++ DEBUGMSGTL(("verbose:dessertSysifTable:dessertSysifTable_container_shutdown", "called\n"));
++
++ if (NULL == container_ptr) {
++ snmp_log(LOG_ERR,
++ "bad params to dessertSysifTable_container_shutdown\n");
++ return;
++ }
++
++} /* dessertSysifTable_container_shutdown */
++
++/**
++ * load initial data
++ *
++ * TODO:350:M: Implement dessertSysifTable data load
++ * This function will also be called by the cache helper to load
++ * the container again (after the container free function has been
++ * called to free the previous contents).
++ *
++ * @param container container to which items should be inserted
++ *
++ * @retval MFD_SUCCESS : success.
++ * @retval MFD_RESOURCE_UNAVAILABLE : Can't access data source
++ * @retval MFD_ERROR : other error.
++ *
++ * This function is called to load the index(es) (and data, optionally)
++ * for the every row in the data set.
++ *
++ * @remark
++ * While loading the data, the only important thing is the indexes.
++ * If access to your data is cheap/fast (e.g. you have a pointer to a
++ * structure in memory), it would make sense to update the data here.
++ * If, however, the accessing the data invovles more work (e.g. parsing
++ * some other existing data, or peforming calculations to derive the data),
++ * then you can limit yourself to setting the indexes and saving any
++ * information you will need later. Then use the saved information in
++ * dessertSysifTable_row_prep() for populating data.
++ *
++ * @note
++ * If you need consistency between rows (like you want statistics
++ * for each row to be from the same time frame), you should set all
++ * data here.
++ *
++ */
++int dessertSysifTable_container_load(netsnmp_container * container) {
++
++ dessertSysifTable_rowreq_ctx *rowreq_ctx;
++ dessert_sysif_t *sysif = _dessert_sysif; /* TODO: change if multiple tun/tap interfaces are supported*/
++
++ char inPkts[I64CHARSZ + 1];
++ char outPkts[I64CHARSZ + 1];
++ char inOctets[I64CHARSZ + 1];
++ char outOctets[I64CHARSZ + 1];
++
++ /*
++ * temporary storage for index values
++ */
++ /*
++ * sysifIndex(1)///()//L/a/w/e/r/d/h
++ */
++ long sysifIndex = 0;
++
++ dessert_debug("dessertSysifTable_container_load called");
++ DEBUGMSGTL(("verbose:dessertSysifTable:dessertSysifTable_container_load", "called\n"));
++
++ /*
++ * TODO:351:M: |-> Load/update data in the dessertSysTable container.
++ * loop over your dessertSysifTable data, allocate a rowreq context,
++ * set the index(es) [and data, optionally] and insert into
++ * the container.
++ */
++
++ /*
++ * TODO:352:M: | |-> set indexes in new dessertSysifTable rowreq context.
++ * data context will be set from the param (unless NULL,
++ * in which case a new data context will be allocated)
++ */
++ rowreq_ctx = dessertSysifTable_allocate_rowreq_ctx(NULL);
++ if (NULL == rowreq_ctx) {
++ snmp_log(LOG_ERR, "memory allocation failed\n");
++ return MFD_RESOURCE_UNAVAILABLE;
++ }
++
++ if (MFD_SUCCESS != dessertSysifTable_indexes_set(rowreq_ctx, sysifIndex)) {
++ snmp_log(LOG_ERR, "error setting index while loading "
++ "dessertSysTable data.\n");
++ dessertSysifTable_release_rowreq_ctx(rowreq_ctx);
++ return MFD_RESOURCE_UNAVAILABLE;
++ }
++
++ /*
++ * TODO:352:r: | |-> populate dessertMeshifTable data context.
++ * Populate data context here. (optionally, delay until row prep)
++ */
++ /*
++ * non-TRANSIENT data: no need to copy. set pointer to data
++ */
++
++ rowreq_ctx->data.sysifName_len = strlen(sysif->if_name);
++ strcpy(rowreq_ctx->data.sysifName, sysif->if_name);
++
++ rowreq_ctx->data.sysifMacAddress_len = 6;
++ memcpy(rowreq_ctx->data.sysifMacAddress, sysif->hwaddr, 6);
++
++ pthread_mutex_lock(&(sysif->cnt_mutex));
++
++ rowreq_ctx->data.sysifInPkts.low = sysif->ipkts & 0xffffffff;
++ rowreq_ctx->data.sysifInPkts.high = sysif->ipkts >> 32;
++
++ rowreq_ctx->data.sysifOutPkts.low = sysif->opkts & 0xffffffff;
++ rowreq_ctx->data.sysifOutPkts.high = sysif->opkts >> 32;
++
++ rowreq_ctx->data.sysifInOctets.low = sysif->ibytes & 0xffffffff;
++ rowreq_ctx->data.sysifInOctets.high = sysif->ibytes >> 32;
++
++ rowreq_ctx->data.sysifOutOctets.low = sysif->obytes & 0xffffffff;
++ rowreq_ctx->data.sysifOutOctets.high = sysif->obytes >> 32;
++
++ printU64(inPkts, &rowreq_ctx->data.sysifInPkts);
++ printU64(outPkts, &rowreq_ctx->data.sysifOutPkts);
++ printU64(inOctets, &rowreq_ctx->data.sysifInOctets);
++ printU64(outOctets, &rowreq_ctx->data.sysifOutOctets);
++
++ dessert_debug("inPkts [%s] [%u]", inPkts, sysif->ipkts);
++ dessert_debug("outPkts [%s] [%u]", outPkts, sysif->opkts);
++ dessert_debug("inOctets [%s] [%u]", inOctets, sysif->ibytes);
++ dessert_debug("outOctets [%s] [%u]", outOctets, sysif->obytes);
++
++ pthread_mutex_unlock(&(sysif->cnt_mutex));
++
++ /*
++ * insert into table container
++ */
++ CONTAINER_INSERT(container, rowreq_ctx);
++
++ DEBUGMSGT(("verbose:dessertSysifTable:dessertSysifTable_container_load", "inserted 1 record(s)\n"));
++
++ return MFD_SUCCESS;
++} /* dessertSysifTable_container_load */
++
++/**
++ * container clean up
++ *
++ * @param container container with all current items
++ *
++ * This optional callback is called prior to all
++ * item's being removed from the container. If you
++ * need to do any processing before that, do it here.
++ *
++ * @note
++ * The MFD helper will take care of releasing all the row contexts.
++ *
++ */
++void
++dessertSysifTable_container_free(netsnmp_container * container)
++{
++ DEBUGMSGTL(("verbose:dessertSysifTable:dessertSysifTable_container_free", "called\n"));
++
++ /*
++ * TODO:380:M: Free dessertSysifTable container data.
++ */
++} /* dessertSysifTable_container_free */
++
++/**
++ * prepare row for processing.
++ *
++ * When the agent has located the row for a request, this function is
++ * called to prepare the row for processing. If you fully populated
++ * the data context during the index setup phase, you may not need to
++ * do anything.
++ *
++ * @param rowreq_ctx pointer to a context.
++ *
++ * @retval MFD_SUCCESS : success.
++ * @retval MFD_ERROR : other error.
++ */
++int
++dessertSysifTable_row_prep(dessertSysifTable_rowreq_ctx * rowreq_ctx)
++{
++ DEBUGMSGTL(("verbose:dessertSysifTable:dessertSysifTable_row_prep",
++ "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:390:o: Prepare row for request.
++ * If populating row data was delayed, this is the place to
++ * fill in the row for this request.
++ */
++
++ return MFD_SUCCESS;
++} /* dessertSysifTable_row_prep */
++
++/** @} */
+Index: libdessert0.86-0.86.14/src/snmp/dessertSysifTable_data_access.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertSysifTable_data_access.h 2009-12-09 16:38:27.329339146 +0100
+@@ -0,0 +1,90 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * version : 14170 $ of $
++ *
++ * $Id:$
++ */
++#ifndef DESSERTSYSIFTABLE_DATA_ACCESS_H
++#define DESSERTSYSIFTABLE_DATA_ACCESS_H
++
++#include "dessert_internal.h"
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++
++ /*
++ *********************************************************************
++ * function declarations
++ */
++
++ /*
++ *********************************************************************
++ * Table declarations
++ */
++/**********************************************************************
++ **********************************************************************
++ ***
++ *** Table dessertSysifTable
++ ***
++ **********************************************************************
++ **********************************************************************/
++ /*
++ * DESSERT2-MIB::dessertSysifTable is subid 7 of dessertObjects.
++ * Its status is Current.
++ * OID: .1.3.6.1.4.1.18898.0.19.42.1.7, length: 12
++ */
++
++
++ int
++ dessertSysifTable_init_data(dessertSysifTable_registration *
++ dessertSysifTable_reg);
++
++
++ /*
++ * TODO:180:o: Review dessertSysifTable cache timeout.
++ * The number of seconds before the cache times out
++ */
++#define DESSERTSYSIFTABLE_CACHE_TIMEOUT DESSERT_AGENTX_SYSIFTABLE_CACHE_TIMEOUT
++
++ void dessertSysifTable_container_init(netsnmp_container **
++ container_ptr_ptr,
++ netsnmp_cache *
++ cache);
++ void dessertSysifTable_container_shutdown(netsnmp_container
++ * container_ptr);
++
++ int dessertSysifTable_container_load(netsnmp_container *
++ container);
++ void dessertSysifTable_container_free(netsnmp_container *
++ container);
++
++ int dessertSysifTable_cache_load(netsnmp_container *
++ container);
++ void dessertSysifTable_cache_free(netsnmp_container *
++ container);
++
++ /*
++ ***************************************************
++ *** START EXAMPLE CODE ***
++ ***---------------------------------------------***/
++ /*
++ *********************************************************************
++ * Since we have no idea how you really access your data, we'll go with
++ * a worst case example: a flat text file.
++ */
++#define MAX_LINE_SIZE 256
++ /*
++ ***---------------------------------------------***
++ *** END EXAMPLE CODE ***
++ ***************************************************/
++ int dessertSysifTable_row_prep(dessertSysifTable_rowreq_ctx
++ * rowreq_ctx);
++
++
++
++#ifdef __cplusplus
++}
++#endif
++#endif /* DESSERTSYSIFTABLE_DATA_ACCESS_H */
+Index: libdessert0.86-0.86.14/src/snmp/dessertSysifTable_data_get.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertSysifTable_data_get.c 2009-12-09 16:38:27.329339146 +0100
+@@ -0,0 +1,507 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * version : 12088 $ of $
++ *
++ * $Id:$
++ */
++/*
++ * standard Net-SNMP includes
++ */
++#include <net-snmp/net-snmp-config.h>
++#include <net-snmp/net-snmp-includes.h>
++#include <net-snmp/agent/net-snmp-agent-includes.h>
++
++/*
++ * include our parent header
++ */
++#include "dessertSysifTable.h"
++
++
++/** @defgroup data_get data_get: Routines to get data
++ *
++ * TODO:230:M: Implement dessertSysifTable get routines.
++ * TODO:240:M: Implement dessertSysifTable mapping routines (if any).
++ *
++ * These routine are used to get the value for individual objects. The
++ * row context is passed, along with a pointer to the memory where the
++ * value should be copied.
++ *
++ * @{
++ */
++/**********************************************************************
++ **********************************************************************
++ ***
++ *** Table dessertSysifTable
++ ***
++ **********************************************************************
++ **********************************************************************/
++/*
++ * DESSERT2-MIB::dessertSysifTable is subid 7 of dessertObjects.
++ * Its status is Current.
++ * OID: .1.3.6.1.4.1.18898.0.19.42.1.7, length: 12
++ */
++
++/*
++ * ---------------------------------------------------------------------
++ * * TODO:200:r: Implement dessertSysifTable data context functions.
++ */
++
++
++/**
++ * set mib index(es)
++ *
++ * @param tbl_idx mib index structure
++ * @param sysifIndex_val
++ *
++ * @retval MFD_SUCCESS : success.
++ * @retval MFD_ERROR : other error.
++ *
++ * @remark
++ * This convenience function is useful for setting all the MIB index
++ * components with a single function call. It is assume that the C values
++ * have already been mapped from their native/rawformat to the MIB format.
++ */
++int
++dessertSysifTable_indexes_set_tbl_idx(dessertSysifTable_mib_index *
++ tbl_idx, long sysifIndex_val)
++{
++ DEBUGMSGTL(("verbose:dessertSysifTable:dessertSysifTable_indexes_set_tbl_idx", "called\n"));
++
++ /*
++ * sysifIndex(1)///()//L/a/w/e/r/d/h
++ */
++ tbl_idx->sysifIndex = sysifIndex_val;
++
++
++ return MFD_SUCCESS;
++} /* dessertSysifTable_indexes_set_tbl_idx */
++
++/**
++ * @internal
++ * set row context indexes
++ *
++ * @param reqreq_ctx the row context that needs updated indexes
++ *
++ * @retval MFD_SUCCESS : success.
++ * @retval MFD_ERROR : other error.
++ *
++ * @remark
++ * This function sets the mib indexs, then updates the oid indexs
++ * from the mib index.
++ */
++int
++dessertSysifTable_indexes_set(dessertSysifTable_rowreq_ctx * rowreq_ctx,
++ long sysifIndex_val)
++{
++ DEBUGMSGTL(("verbose:dessertSysifTable:dessertSysifTable_indexes_set",
++ "called\n"));
++
++ if (MFD_SUCCESS !=
++ dessertSysifTable_indexes_set_tbl_idx(&rowreq_ctx->tbl_idx,
++ sysifIndex_val))
++ return MFD_ERROR;
++
++ /*
++ * convert mib index to oid index
++ */
++ rowreq_ctx->oid_idx.len = sizeof(rowreq_ctx->oid_tmp) / sizeof(oid);
++ if (0 != dessertSysifTable_index_to_oid(&rowreq_ctx->oid_idx,
++ &rowreq_ctx->tbl_idx)) {
++ return MFD_ERROR;
++ }
++
++ return MFD_SUCCESS;
++} /* dessertSysifTable_indexes_set */
++
++
++/*---------------------------------------------------------------------
++ * DESSERT2-MIB::dessertSysifEntry.sysifName
++ * sysifName is subid 2 of dessertSysifEntry.
++ * Its status is Current, and its access level is ReadOnly.
++ * OID: .1.3.6.1.4.1.18898.0.19.42.1.7.1.2
++ * Description:
++name of interface
++ *
++ * Attributes:
++ * accessible 1 isscalar 0 enums 0 hasdefval 0
++ * readable 1 iscolumn 1 ranges 1 hashint 1
++ * settable 0
++ * hint: 255a
++ *
++ * Ranges: 0 - 255;
++ *
++ * Its syntax is DisplayString (based on perltype OCTETSTR)
++ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
++ * This data type requires a length. (Max 255)
++ */
++/**
++ * Extract the current value of the sysifName data.
++ *
++ * Set a value using the data context for the row.
++ *
++ * @param rowreq_ctx
++ * Pointer to the row request context.
++ * @param sysifName_val_ptr_ptr
++ * Pointer to storage for a char variable
++ * @param sysifName_val_ptr_len_ptr
++ * Pointer to a size_t. On entry, it will contain the size (in bytes)
++ * pointed to by sysifName.
++ * On exit, this value should contain the data size (in bytes).
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_SKIP : skip this node (no value for now)
++ * @retval MFD_ERROR : Any other error
++*
++ * @note If you need more than (*sysifName_val_ptr_len_ptr) bytes of memory,
++ * allocate it using malloc() and update sysifName_val_ptr_ptr.
++ * <b>DO NOT</b> free the previous pointer.
++ * The MFD helper will release the memory you allocate.
++ *
++ * @remark If you call this function yourself, you are responsible
++ * for checking if the pointer changed, and freeing any
++ * previously allocated memory. (Not necessary if you pass
++ * in a pointer to static memory, obviously.)
++ */
++int
++sysifName_get(dessertSysifTable_rowreq_ctx * rowreq_ctx,
++ char **sysifName_val_ptr_ptr,
++ size_t *sysifName_val_ptr_len_ptr)
++{
++ /** we should have a non-NULL pointer and enough storage */
++ netsnmp_assert((NULL != sysifName_val_ptr_ptr)
++ && (NULL != *sysifName_val_ptr_ptr));
++ netsnmp_assert(NULL != sysifName_val_ptr_len_ptr);
++
++
++ DEBUGMSGTL(("verbose:dessertSysifTable:sysifName_get", "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:231:o: |-> Extract the current value of the sysifName data.
++ * copy (* sysifName_val_ptr_ptr ) data and (* sysifName_val_ptr_len_ptr ) from rowreq_ctx->data
++ */
++ /*
++ * make sure there is enough space for sysifName data
++ */
++ if ((NULL == (*sysifName_val_ptr_ptr)) ||
++ ((*sysifName_val_ptr_len_ptr) <
++ (rowreq_ctx->data.sysifName_len *
++ sizeof(rowreq_ctx->data.sysifName[0])))) {
++ /*
++ * allocate space for sysifName data
++ */
++ (*sysifName_val_ptr_ptr) =
++ malloc(rowreq_ctx->data.sysifName_len *
++ sizeof(rowreq_ctx->data.sysifName[0]));
++ if (NULL == (*sysifName_val_ptr_ptr)) {
++ snmp_log(LOG_ERR, "could not allocate memory\n");
++ return MFD_ERROR;
++ }
++ }
++ (*sysifName_val_ptr_len_ptr) =
++ rowreq_ctx->data.sysifName_len *
++ sizeof(rowreq_ctx->data.sysifName[0]);
++ memcpy((*sysifName_val_ptr_ptr), rowreq_ctx->data.sysifName,
++ rowreq_ctx->data.sysifName_len *
++ sizeof(rowreq_ctx->data.sysifName[0]));
++
++ return MFD_SUCCESS;
++} /* sysifName_get */
++
++/*---------------------------------------------------------------------
++ * DESSERT2-MIB::dessertSysifEntry.sysifMacAddress
++ * sysifMacAddress is subid 3 of dessertSysifEntry.
++ * Its status is Current, and its access level is ReadOnly.
++ * OID: .1.3.6.1.4.1.18898.0.19.42.1.7.1.3
++ * Description:
++hardware address of interface
++ *
++ * Attributes:
++ * accessible 1 isscalar 0 enums 0 hasdefval 0
++ * readable 1 iscolumn 1 ranges 1 hashint 1
++ * settable 0
++ * hint: 1x:
++ *
++ * Ranges: 6;
++ *
++ * Its syntax is MacAddress (based on perltype OCTETSTR)
++ * The net-snmp type is ASN_OCTET_STR. The C type decl is char (char)
++ * This data type requires a length. (Max 6)
++ */
++/**
++ * Extract the current value of the sysifMacAddress data.
++ *
++ * Set a value using the data context for the row.
++ *
++ * @param rowreq_ctx
++ * Pointer to the row request context.
++ * @param sysifMacAddress_val_ptr_ptr
++ * Pointer to storage for a char variable
++ * @param sysifMacAddress_val_ptr_len_ptr
++ * Pointer to a size_t. On entry, it will contain the size (in bytes)
++ * pointed to by sysifMacAddress.
++ * On exit, this value should contain the data size (in bytes).
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_SKIP : skip this node (no value for now)
++ * @retval MFD_ERROR : Any other error
++*
++ * @note If you need more than (*sysifMacAddress_val_ptr_len_ptr) bytes of memory,
++ * allocate it using malloc() and update sysifMacAddress_val_ptr_ptr.
++ * <b>DO NOT</b> free the previous pointer.
++ * The MFD helper will release the memory you allocate.
++ *
++ * @remark If you call this function yourself, you are responsible
++ * for checking if the pointer changed, and freeing any
++ * previously allocated memory. (Not necessary if you pass
++ * in a pointer to static memory, obviously.)
++ */
++int
++sysifMacAddress_get(dessertSysifTable_rowreq_ctx * rowreq_ctx,
++ char **sysifMacAddress_val_ptr_ptr,
++ size_t *sysifMacAddress_val_ptr_len_ptr)
++{
++ /** we should have a non-NULL pointer and enough storage */
++ netsnmp_assert((NULL != sysifMacAddress_val_ptr_ptr)
++ && (NULL != *sysifMacAddress_val_ptr_ptr));
++ netsnmp_assert(NULL != sysifMacAddress_val_ptr_len_ptr);
++
++
++ DEBUGMSGTL(("verbose:dessertSysifTable:sysifMacAddress_get",
++ "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ /*
++ * TODO:231:o: |-> Extract the current value of the sysifMacAddress data.
++ * copy (* sysifMacAddress_val_ptr_ptr ) data and (* sysifMacAddress_val_ptr_len_ptr ) from rowreq_ctx->data
++ */
++ /*
++ * make sure there is enough space for sysifMacAddress data
++ */
++ if ((NULL == (*sysifMacAddress_val_ptr_ptr)) ||
++ ((*sysifMacAddress_val_ptr_len_ptr) <
++ (rowreq_ctx->data.sysifMacAddress_len *
++ sizeof(rowreq_ctx->data.sysifMacAddress[0])))) {
++ /*
++ * allocate space for sysifMacAddress data
++ */
++ (*sysifMacAddress_val_ptr_ptr) =
++ malloc(rowreq_ctx->data.sysifMacAddress_len *
++ sizeof(rowreq_ctx->data.sysifMacAddress[0]));
++ if (NULL == (*sysifMacAddress_val_ptr_ptr)) {
++ snmp_log(LOG_ERR, "could not allocate memory\n");
++ return MFD_ERROR;
++ }
++ }
++ (*sysifMacAddress_val_ptr_len_ptr) =
++ rowreq_ctx->data.sysifMacAddress_len *
++ sizeof(rowreq_ctx->data.sysifMacAddress[0]);
++ memcpy((*sysifMacAddress_val_ptr_ptr),
++ rowreq_ctx->data.sysifMacAddress,
++ rowreq_ctx->data.sysifMacAddress_len *
++ sizeof(rowreq_ctx->data.sysifMacAddress[0]));
++
++ return MFD_SUCCESS;
++} /* sysifMacAddress_get */
++
++/*---------------------------------------------------------------------
++ * DESSERT2-MIB::dessertSysifEntry.sysifInPkts
++ * sysifInPkts is subid 4 of dessertSysifEntry.
++ * Its status is Current, and its access level is ReadOnly.
++ * OID: .1.3.6.1.4.1.18898.0.19.42.1.7.1.4
++ * Description:
++packet counter in
++ *
++ * Attributes:
++ * accessible 1 isscalar 0 enums 0 hasdefval 0
++ * readable 1 iscolumn 1 ranges 0 hashint 0
++ * settable 0
++ *
++ *
++ * Its syntax is COUNTER64 (based on perltype COUNTER64)
++ * The net-snmp type is ASN_COUNTER64. The C type decl is U64 (U64)
++ */
++/**
++ * Extract the current value of the sysifInPkts data.
++ *
++ * Set a value using the data context for the row.
++ *
++ * @param rowreq_ctx
++ * Pointer to the row request context.
++ * @param sysifInPkts_val_ptr
++ * Pointer to storage for a U64 variable
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_SKIP : skip this node (no value for now)
++ * @retval MFD_ERROR : Any other error
++ */
++int
++sysifInPkts_get(dessertSysifTable_rowreq_ctx * rowreq_ctx,
++ U64 * sysifInPkts_val_ptr)
++{
++ /** we should have a non-NULL pointer */
++ netsnmp_assert(NULL != sysifInPkts_val_ptr);
++
++ /*
++ * TODO:231:o: |-> copy sysifInPkts data.
++ * get (* sysifInPkts_val_ptr ).low and (* sysifInPkts_val_ptr ).high from rowreq_ctx->data
++ */
++ (*sysifInPkts_val_ptr).high = rowreq_ctx->data.sysifInPkts.high;
++ (*sysifInPkts_val_ptr).low = rowreq_ctx->data.sysifInPkts.low;
++
++
++ return MFD_SUCCESS;
++} /* sysifInPkts_get */
++
++/*---------------------------------------------------------------------
++ * DESSERT2-MIB::dessertSysifEntry.sysifOutPkts
++ * sysifOutPkts is subid 5 of dessertSysifEntry.
++ * Its status is Current, and its access level is ReadOnly.
++ * OID: .1.3.6.1.4.1.18898.0.19.42.1.7.1.5
++ * Description:
++packet counter out
++ *
++ * Attributes:
++ * accessible 1 isscalar 0 enums 0 hasdefval 0
++ * readable 1 iscolumn 1 ranges 0 hashint 0
++ * settable 0
++ *
++ *
++ * Its syntax is COUNTER64 (based on perltype COUNTER64)
++ * The net-snmp type is ASN_COUNTER64. The C type decl is U64 (U64)
++ */
++/**
++ * Extract the current value of the sysifOutPkts data.
++ *
++ * Set a value using the data context for the row.
++ *
++ * @param rowreq_ctx
++ * Pointer to the row request context.
++ * @param sysifOutPkts_val_ptr
++ * Pointer to storage for a U64 variable
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_SKIP : skip this node (no value for now)
++ * @retval MFD_ERROR : Any other error
++ */
++int
++sysifOutPkts_get(dessertSysifTable_rowreq_ctx * rowreq_ctx,
++ U64 * sysifOutPkts_val_ptr)
++{
++ /** we should have a non-NULL pointer */
++ netsnmp_assert(NULL != sysifOutPkts_val_ptr);
++
++ /*
++ * TODO:231:o: |-> copy sysifOutPkts data.
++ * get (* sysifOutPkts_val_ptr ).low and (* sysifOutPkts_val_ptr ).high from rowreq_ctx->data
++ */
++ (*sysifOutPkts_val_ptr).high = rowreq_ctx->data.sysifOutPkts.high;
++ (*sysifOutPkts_val_ptr).low = rowreq_ctx->data.sysifOutPkts.low;
++
++
++ return MFD_SUCCESS;
++} /* sysifOutPkts_get */
++
++/*---------------------------------------------------------------------
++ * DESSERT2-MIB::dessertSysifEntry.sysifInOctets
++ * sysifInOctets is subid 6 of dessertSysifEntry.
++ * Its status is Current, and its access level is ReadOnly.
++ * OID: .1.3.6.1.4.1.18898.0.19.42.1.7.1.6
++ * Description:
++octet counter in
++ *
++ * Attributes:
++ * accessible 1 isscalar 0 enums 0 hasdefval 0
++ * readable 1 iscolumn 1 ranges 0 hashint 0
++ * settable 0
++ *
++ *
++ * Its syntax is COUNTER64 (based on perltype COUNTER64)
++ * The net-snmp type is ASN_COUNTER64. The C type decl is U64 (U64)
++ */
++/**
++ * Extract the current value of the sysifInOctets data.
++ *
++ * Set a value using the data context for the row.
++ *
++ * @param rowreq_ctx
++ * Pointer to the row request context.
++ * @param sysifInOctets_val_ptr
++ * Pointer to storage for a U64 variable
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_SKIP : skip this node (no value for now)
++ * @retval MFD_ERROR : Any other error
++ */
++int
++sysifInOctets_get(dessertSysifTable_rowreq_ctx * rowreq_ctx,
++ U64 * sysifInOctets_val_ptr)
++{
++ /** we should have a non-NULL pointer */
++ netsnmp_assert(NULL != sysifInOctets_val_ptr);
++
++ /*
++ * TODO:231:o: |-> copy sysifInOctets data.
++ * get (* sysifInOctets_val_ptr ).low and (* sysifInOctets_val_ptr ).high from rowreq_ctx->data
++ */
++ (*sysifInOctets_val_ptr).high = rowreq_ctx->data.sysifInOctets.high;
++ (*sysifInOctets_val_ptr).low = rowreq_ctx->data.sysifInOctets.low;
++
++
++ return MFD_SUCCESS;
++} /* sysifInOctets_get */
++
++/*---------------------------------------------------------------------
++ * DESSERT2-MIB::dessertSysifEntry.sysifOutOctets
++ * sysifOutOctets is subid 7 of dessertSysifEntry.
++ * Its status is Current, and its access level is ReadOnly.
++ * OID: .1.3.6.1.4.1.18898.0.19.42.1.7.1.7
++ * Description:
++octet counter out
++ *
++ * Attributes:
++ * accessible 1 isscalar 0 enums 0 hasdefval 0
++ * readable 1 iscolumn 1 ranges 0 hashint 0
++ * settable 0
++ *
++ *
++ * Its syntax is COUNTER64 (based on perltype COUNTER64)
++ * The net-snmp type is ASN_COUNTER64. The C type decl is U64 (U64)
++ */
++/**
++ * Extract the current value of the sysifOutOctets data.
++ *
++ * Set a value using the data context for the row.
++ *
++ * @param rowreq_ctx
++ * Pointer to the row request context.
++ * @param sysifOutOctets_val_ptr
++ * Pointer to storage for a U64 variable
++ *
++ * @retval MFD_SUCCESS : success
++ * @retval MFD_SKIP : skip this node (no value for now)
++ * @retval MFD_ERROR : Any other error
++ */
++int
++sysifOutOctets_get(dessertSysifTable_rowreq_ctx * rowreq_ctx,
++ U64 * sysifOutOctets_val_ptr)
++{
++ /** we should have a non-NULL pointer */
++ netsnmp_assert(NULL != sysifOutOctets_val_ptr);
++
++ /*
++ * TODO:231:o: |-> copy sysifOutOctets data.
++ * get (* sysifOutOctets_val_ptr ).low and (* sysifOutOctets_val_ptr ).high from rowreq_ctx->data
++ */
++ (*sysifOutOctets_val_ptr).high = rowreq_ctx->data.sysifOutOctets.high;
++ (*sysifOutOctets_val_ptr).low = rowreq_ctx->data.sysifOutOctets.low;
++
++
++ return MFD_SUCCESS;
++} /* sysifOutOctets_get */
++
++
++
++/** @} */
+Index: libdessert0.86-0.86.14/src/snmp/dessertSysifTable_data_get.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertSysifTable_data_get.h 2009-12-09 16:38:27.329339146 +0100
+@@ -0,0 +1,105 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * version : 12088 $ of $
++ *
++ * $Id:$
++ *
++ * @file dessertSysifTable_data_get.h
++ *
++ * @addtogroup get
++ *
++ * Prototypes for get functions
++ *
++ * @{
++ */
++#ifndef DESSERTSYSIFTABLE_DATA_GET_H
++#define DESSERTSYSIFTABLE_DATA_GET_H
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++ /*
++ *********************************************************************
++ * GET function declarations
++ */
++
++ /*
++ *********************************************************************
++ * GET Table declarations
++ */
++/**********************************************************************
++ **********************************************************************
++ ***
++ *** Table dessertSysifTable
++ ***
++ **********************************************************************
++ **********************************************************************/
++ /*
++ * DESSERT2-MIB::dessertSysifTable is subid 7 of dessertObjects.
++ * Its status is Current.
++ * OID: .1.3.6.1.4.1.18898.0.19.42.1.7, length: 12
++ */
++ /*
++ * indexes
++ */
++ int sysifIndex_map(uint* *mib_sysifIndex_val_ptr,
++ uint raw_sysifIndex_val);
++
++ int sysifName_map(char **mib_sysifName_val_ptr_ptr,
++ size_t *mib_sysifName_val_ptr_len_ptr,
++ char *raw_sysifName_val_ptr,
++ size_t raw_sysifName_val_ptr_len,
++ int allow_realloc);
++ int sysifName_get(dessertSysifTable_rowreq_ctx *
++ rowreq_ctx, char **sysifName_val_ptr_ptr,
++ size_t *sysifName_val_ptr_len_ptr);
++ int sysifMacAddress_map(char
++ **mib_sysifMacAddress_val_ptr_ptr,
++ size_t
++ *mib_sysifMacAddress_val_ptr_len_ptr,
++ char *raw_sysifMacAddress_val_ptr,
++ size_t
++ raw_sysifMacAddress_val_ptr_len,
++ int allow_realloc);
++ int sysifMacAddress_get(dessertSysifTable_rowreq_ctx *
++ rowreq_ctx,
++ char **sysifMacAddress_val_ptr_ptr,
++ size_t
++ *sysifMacAddress_val_ptr_len_ptr);
++ int sysifInPkts_map(U64 * mib_sysifInPkts_val_ptr,
++ U64 raw_sysifInPkts_val);
++ int sysifInPkts_get(dessertSysifTable_rowreq_ctx *
++ rowreq_ctx, U64 * sysifInPkts_val_ptr);
++ int sysifOutPkts_map(U64 * mib_sysifOutPkts_val_ptr,
++ U64 raw_sysifOutPkts_val);
++ int sysifOutPkts_get(dessertSysifTable_rowreq_ctx *
++ rowreq_ctx,
++ U64 * sysifOutPkts_val_ptr);
++ int sysifInOctets_map(U64 * mib_sysifInOctets_val_ptr,
++ U64 raw_sysifInOctets_val);
++ int sysifInOctets_get(dessertSysifTable_rowreq_ctx *
++ rowreq_ctx,
++ U64 * sysifInOctets_val_ptr);
++ int sysifOutOctets_map(U64 * mib_sysifOutOctets_val_ptr,
++ U64 raw_sysifOutOctets_val);
++ int sysifOutOctets_get(dessertSysifTable_rowreq_ctx *
++ rowreq_ctx,
++ U64 * sysifOutOctets_val_ptr);
++
++
++ int
++ dessertSysifTable_indexes_set_tbl_idx(dessertSysifTable_mib_index *
++ tbl_idx, long sysifIndex_val);
++ int
++ dessertSysifTable_indexes_set(dessertSysifTable_rowreq_ctx *
++ rowreq_ctx, long sysifIndex_val);
++
++
++
++
++#ifdef __cplusplus
++}
++#endif
++#endif /* DESSERTSYSIFTABLE_DATA_GET_H */
++/** @} */
+Index: libdessert0.86-0.86.14/src/snmp/dessertSysifTable_data_set.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertSysifTable_data_set.c 2009-12-09 16:38:27.329339146 +0100
+@@ -0,0 +1,28 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * version : 12077 $ of $
++ *
++ * $Id:$
++ *
++ */
++/*
++ * standard Net-SNMP includes
++ */
++#include <net-snmp/net-snmp-config.h>
++#include <net-snmp/net-snmp-includes.h>
++#include <net-snmp/agent/net-snmp-agent-includes.h>
++
++/*
++ * include our parent header
++ */
++#include "dessertSysifTable.h"
++
++
++/** @defgroup data_set data_set: Routines to set data
++ *
++ * These routines are used to set the value for individual objects. The
++ * row context is passed, along with the new value.
++ *
++ * @{
++ */
++/** @} */
+Index: libdessert0.86-0.86.14/src/snmp/dessertSysifTable_data_set.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertSysifTable_data_set.h 2009-12-09 16:38:27.329339146 +0100
+@@ -0,0 +1,28 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * version : 12077 $ of $
++ *
++ * $Id:$
++ */
++#ifndef DESSERTSYSIFTABLE_DATA_SET_H
++#define DESSERTSYSIFTABLE_DATA_SET_H
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++ /*
++ *********************************************************************
++ * SET function declarations
++ */
++
++ /*
++ *********************************************************************
++ * SET Table declarations
++ */
++
++
++#ifdef __cplusplus
++}
++#endif
++#endif /* DESSERTSYSIFTABLE_DATA_SET_H */
+Index: libdessert0.86-0.86.14/src/snmp/dessertSysifTable_enums.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertSysifTable_enums.h 2009-12-09 16:38:27.329339146 +0100
+@@ -0,0 +1,39 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * : generic-table-enums.m2c 12526 2005-07-15 22:41:16Z rstory $
++ *
++ * $Id:$
++ */
++#ifndef DESSERTSYSIFTABLE_ENUMS_H
++#define DESSERTSYSIFTABLE_ENUMS_H
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++ /*
++ * NOTES on enums
++ * ==============
++ *
++ * Value Mapping
++ * -------------
++ * If the values for your data type don't exactly match the
++ * possible values defined by the mib, you should map them
++ * below. For example, a boolean flag (1/0) is usually represented
++ * as a TruthValue in a MIB, which maps to the values (1/2).
++ *
++ */
++/*************************************************************************
++ *************************************************************************
++ *
++ * enum definitions for table dessertSysifTable
++ *
++ *************************************************************************
++ *************************************************************************/
++
++
++
++#ifdef __cplusplus
++}
++#endif
++#endif /* DESSERTSYSIFTABLE_ENUMS_H */
+Index: libdessert0.86-0.86.14/src/snmp/dessertSysifTable_interface.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertSysifTable_interface.c 2009-12-09 16:38:27.329339146 +0100
+@@ -0,0 +1,936 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * version : 15899 $ of $
++ *
++ * $Id:$
++ */
++/*
++ * *********************************************************************
++ * *********************************************************************
++ * *********************************************************************
++ * *** ***
++ * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
++ * *** ***
++ * *** ***
++ * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
++ * *** ***
++ * *** ***
++ * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
++ * *** ***
++ * *** ***
++ * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
++ * *** ***
++ * *** ***
++ * *********************************************************************
++ * *********************************************************************
++ * *********************************************************************
++ */
++
++/*
++ * standard Net-SNMP includes
++ */
++#include <net-snmp/net-snmp-config.h>
++#include <net-snmp/net-snmp-includes.h>
++#include <net-snmp/agent/net-snmp-agent-includes.h>
++
++/*
++ * include our parent header
++ */
++#include "dessertSysifTable.h"
++
++
++#include <net-snmp/agent/table_container.h>
++#include <net-snmp/library/container.h>
++
++#include "dessertSysifTable_interface.h"
++
++#include <ctype.h>
++
++/**********************************************************************
++ **********************************************************************
++ ***
++ *** Table dessertSysifTable
++ ***
++ **********************************************************************
++ **********************************************************************/
++/*
++ * DESSERT2-MIB::dessertSysifTable is subid 7 of dessertObjects.
++ * Its status is Current.
++ * OID: .1.3.6.1.4.1.18898.0.19.42.1.7, length: 12
++ */
++typedef struct dessertSysifTable_interface_ctx_s {
++
++ netsnmp_container *container;
++ netsnmp_cache *cache;
++
++ dessertSysifTable_registration *user_ctx;
++
++ netsnmp_table_registration_info tbl_info;
++
++ netsnmp_baby_steps_access_methods access_multiplexer;
++
++} dessertSysifTable_interface_ctx;
++
++static dessertSysifTable_interface_ctx dessertSysifTable_if_ctx;
++
++static void
++_dessertSysifTable_container_init(dessertSysifTable_interface_ctx *
++ if_ctx);
++static void
++_dessertSysifTable_container_shutdown(dessertSysifTable_interface_ctx *
++ if_ctx);
++
++
++netsnmp_container *
++dessertSysifTable_container_get(void)
++{
++ return dessertSysifTable_if_ctx.container;
++}
++
++dessertSysifTable_registration *
++dessertSysifTable_registration_get(void)
++{
++ return dessertSysifTable_if_ctx.user_ctx;
++}
++
++dessertSysifTable_registration *
++dessertSysifTable_registration_set(dessertSysifTable_registration * newreg)
++{
++ dessertSysifTable_registration *old =
++ dessertSysifTable_if_ctx.user_ctx;
++ dessertSysifTable_if_ctx.user_ctx = newreg;
++ return old;
++}
++
++int
++dessertSysifTable_container_size(void)
++{
++ return CONTAINER_SIZE(dessertSysifTable_if_ctx.container);
++}
++
++/*
++ * mfd multiplexer modes
++ */
++static Netsnmp_Node_Handler _mfd_dessertSysifTable_pre_request;
++static Netsnmp_Node_Handler _mfd_dessertSysifTable_post_request;
++static Netsnmp_Node_Handler _mfd_dessertSysifTable_object_lookup;
++static Netsnmp_Node_Handler _mfd_dessertSysifTable_get_values;
++/**
++ * @internal
++ * Initialize the table dessertSysifTable
++ * (Define its contents and how it's structured)
++ */
++void
++_dessertSysifTable_initialize_interface(dessertSysifTable_registration *
++ reg_ptr, u_long flags)
++{
++ netsnmp_baby_steps_access_methods *access_multiplexer =
++ &dessertSysifTable_if_ctx.access_multiplexer;
++ netsnmp_table_registration_info *tbl_info =
++ &dessertSysifTable_if_ctx.tbl_info;
++ netsnmp_handler_registration *reginfo;
++ netsnmp_mib_handler *handler;
++ int mfd_modes = 0;
++
++ DEBUGMSGTL(("internal:dessertSysifTable:_dessertSysifTable_initialize_interface", "called\n"));
++
++
++ /*************************************************
++ *
++ * save interface context for dessertSysifTable
++ */
++ /*
++ * Setting up the table's definition
++ */
++ netsnmp_table_helper_add_indexes(tbl_info,
++ /** index: sysifIndex */
++ 0);
++
++ /*
++ * Define the minimum and maximum accessible columns. This
++ * optimizes retrival.
++ */
++ tbl_info->min_column = DESSERTSYSIFTABLE_MIN_COL;
++ tbl_info->max_column = DESSERTSYSIFTABLE_MAX_COL;
++
++ /*
++ * save users context
++ */
++ dessertSysifTable_if_ctx.user_ctx = reg_ptr;
++
++ /*
++ * call data access initialization code
++ */
++ dessertSysifTable_init_data(reg_ptr);
++
++ /*
++ * set up the container
++ */
++ _dessertSysifTable_container_init(&dessertSysifTable_if_ctx);
++ if (NULL == dessertSysifTable_if_ctx.container) {
++ snmp_log(LOG_ERR,
++ "could not initialize container for dessertSysifTable\n");
++ return;
++ }
++
++ /*
++ * access_multiplexer: REQUIRED wrapper for get request handling
++ */
++ access_multiplexer->object_lookup =
++ _mfd_dessertSysifTable_object_lookup;
++ access_multiplexer->get_values = _mfd_dessertSysifTable_get_values;
++
++ /*
++ * no wrappers yet
++ */
++ access_multiplexer->pre_request = _mfd_dessertSysifTable_pre_request;
++ access_multiplexer->post_request = _mfd_dessertSysifTable_post_request;
++
++
++ /*************************************************
++ *
++ * Create a registration, save our reg data, register table.
++ */
++ DEBUGMSGTL(("dessertSysifTable:init_dessertSysifTable",
++ "Registering dessertSysifTable as a mibs-for-dummies table.\n"));
++ handler =
++ netsnmp_baby_steps_access_multiplexer_get(access_multiplexer);
++ reginfo =
++ netsnmp_handler_registration_create("dessertSysifTable", handler,
++ dessertSysifTable_oid,
++ dessertSysifTable_oid_size,
++ HANDLER_CAN_BABY_STEP |
++ HANDLER_CAN_RONLY);
++ if (NULL == reginfo) {
++ snmp_log(LOG_ERR, "error registering table dessertSysifTable\n");
++ return;
++ }
++ reginfo->my_reg_void = &dessertSysifTable_if_ctx;
++
++ /*************************************************
++ *
++ * set up baby steps handler, create it and inject it
++ */
++ if (access_multiplexer->object_lookup)
++ mfd_modes |= BABY_STEP_OBJECT_LOOKUP;
++ if (access_multiplexer->set_values)
++ mfd_modes |= BABY_STEP_SET_VALUES;
++ if (access_multiplexer->irreversible_commit)
++ mfd_modes |= BABY_STEP_IRREVERSIBLE_COMMIT;
++ if (access_multiplexer->object_syntax_checks)
++ mfd_modes |= BABY_STEP_CHECK_OBJECT;
++
++ if (access_multiplexer->pre_request)
++ mfd_modes |= BABY_STEP_PRE_REQUEST;
++ if (access_multiplexer->post_request)
++ mfd_modes |= BABY_STEP_POST_REQUEST;
++
++ if (access_multiplexer->undo_setup)
++ mfd_modes |= BABY_STEP_UNDO_SETUP;
++ if (access_multiplexer->undo_cleanup)
++ mfd_modes |= BABY_STEP_UNDO_CLEANUP;
++ if (access_multiplexer->undo_sets)
++ mfd_modes |= BABY_STEP_UNDO_SETS;
++
++ if (access_multiplexer->row_creation)
++ mfd_modes |= BABY_STEP_ROW_CREATE;
++ if (access_multiplexer->consistency_checks)
++ mfd_modes |= BABY_STEP_CHECK_CONSISTENCY;
++ if (access_multiplexer->commit)
++ mfd_modes |= BABY_STEP_COMMIT;
++ if (access_multiplexer->undo_commit)
++ mfd_modes |= BABY_STEP_UNDO_COMMIT;
++
++ handler = netsnmp_baby_steps_handler_get(mfd_modes);
++ netsnmp_inject_handler(reginfo, handler);
++
++ /*************************************************
++ *
++ * inject row_merge helper with prefix rootoid_len + 2 (entry.col)
++ */
++ handler = netsnmp_get_row_merge_handler(reginfo->rootoid_len + 2);
++ netsnmp_inject_handler(reginfo, handler);
++
++ /*************************************************
++ *
++ * inject container_table helper
++ */
++ handler =
++ netsnmp_container_table_handler_get(tbl_info,
++ dessertSysifTable_if_ctx.
++ container,
++ TABLE_CONTAINER_KEY_NETSNMP_INDEX);
++ netsnmp_inject_handler(reginfo, handler);
++
++ /*************************************************
++ *
++ * inject cache helper
++ */
++ if (NULL != dessertSysifTable_if_ctx.cache) {
++ handler =
++ netsnmp_cache_handler_get(dessertSysifTable_if_ctx.cache);
++ netsnmp_inject_handler(reginfo, handler);
++ }
++
++ /*
++ * register table
++ */
++ netsnmp_register_table(reginfo, tbl_info);
++
++} /* _dessertSysifTable_initialize_interface */
++
++/**
++ * @internal
++ * Shutdown the table dessertSysifTable
++ */
++void
++_dessertSysifTable_shutdown_interface(dessertSysifTable_registration *
++ reg_ptr)
++{
++ /*
++ * shutdown the container
++ */
++ _dessertSysifTable_container_shutdown(&dessertSysifTable_if_ctx);
++}
++
++void
++dessertSysifTable_valid_columns_set(netsnmp_column_info *vc)
++{
++ dessertSysifTable_if_ctx.tbl_info.valid_columns = vc;
++} /* dessertSysifTable_valid_columns_set */
++
++/**
++ * @internal
++ * convert the index component stored in the context to an oid
++ */
++int
++dessertSysifTable_index_to_oid(netsnmp_index * oid_idx,
++ dessertSysifTable_mib_index * mib_idx)
++{
++ int err = SNMP_ERR_NOERROR;
++
++ /*
++ * temp storage for parsing indexes
++ */
++ /*
++ * sysifIndex(1)///()//L/a/w/e/r/d/h
++ */
++ netsnmp_variable_list var_sysifIndex;
++
++ /*
++ * set up varbinds
++ */
++ memset(&var_sysifIndex, 0x00, sizeof(var_sysifIndex));
++ var_sysifIndex.type = ASN_INTEGER;
++
++ /*
++ * chain temp index varbinds together
++ */
++ var_sysifIndex.next_variable = NULL;
++
++
++ DEBUGMSGTL(("verbose:dessertSysifTable:dessertSysifTable_index_to_oid",
++ "called\n"));
++
++ /*
++ * sysifIndex(1)///()//L/a/w/e/r/d/h
++ */
++ snmp_set_var_value(&var_sysifIndex, (u_char *) & mib_idx->sysifIndex,
++ sizeof(mib_idx->sysifIndex));
++
++
++ err = build_oid_noalloc(oid_idx->oids, oid_idx->len, &oid_idx->len,
++ NULL, 0, &var_sysifIndex);
++ if (err)
++ snmp_log(LOG_ERR, "error %d converting index to oid\n", err);
++
++ /*
++ * parsing may have allocated memory. free it.
++ */
++ snmp_reset_var_buffers(&var_sysifIndex);
++
++ return err;
++} /* dessertSysifTable_index_to_oid */
++
++/**
++ * extract dessertSysifTable indexes from a netsnmp_index
++ *
++ * @retval SNMP_ERR_NOERROR : no error
++ * @retval SNMP_ERR_GENERR : error
++ */
++int
++dessertSysifTable_index_from_oid(netsnmp_index * oid_idx,
++ dessertSysifTable_mib_index * mib_idx)
++{
++ int err = SNMP_ERR_NOERROR;
++
++ /*
++ * temp storage for parsing indexes
++ */
++ /*
++ * sysifIndex(1)///()//L/a/w/e/r/d/h
++ */
++ netsnmp_variable_list var_sysifIndex;
++
++ /*
++ * set up varbinds
++ */
++ memset(&var_sysifIndex, 0x00, sizeof(var_sysifIndex));
++ var_sysifIndex.type = ASN_INTEGER;
++
++ /*
++ * chain temp index varbinds together
++ */
++ var_sysifIndex.next_variable = NULL;
++
++
++ DEBUGMSGTL(("verbose:dessertSysifTable:dessertSysifTable_index_from_oid", "called\n"));
++
++ /*
++ * parse the oid into the individual index components
++ */
++ err = parse_oid_indexes(oid_idx->oids, oid_idx->len, &var_sysifIndex);
++ if (err == SNMP_ERR_NOERROR) {
++ /*
++ * copy out values
++ */
++ mib_idx->sysifIndex = *((long *)var_sysifIndex.val.string);
++
++
++ }
++
++ /*
++ * parsing may have allocated memory. free it.
++ */
++ snmp_reset_var_buffers(&var_sysifIndex);
++
++ return err;
++} /* dessertSysifTable_index_from_oid */
++
++
++/*
++ *********************************************************************
++ * @internal
++ * allocate resources for a dessertSysifTable_rowreq_ctx
++ */
++dessertSysifTable_rowreq_ctx *
++dessertSysifTable_allocate_rowreq_ctx(void *user_init_ctx)
++{
++ dessertSysifTable_rowreq_ctx *rowreq_ctx =
++ SNMP_MALLOC_TYPEDEF(dessertSysifTable_rowreq_ctx);
++
++ DEBUGMSGTL(("internal:dessertSysifTable:dessertSysifTable_allocate_rowreq_ctx", "called\n"));
++
++ if (NULL == rowreq_ctx) {
++ snmp_log(LOG_ERR, "Couldn't allocate memory for a "
++ "dessertSysifTable_rowreq_ctx.\n");
++ return NULL;
++ }
++
++ rowreq_ctx->oid_idx.oids = rowreq_ctx->oid_tmp;
++
++ rowreq_ctx->dessertSysifTable_data_list = NULL;
++
++ /*
++ * if we allocated data, call init routine
++ */
++ if (!(rowreq_ctx->rowreq_flags & MFD_ROW_DATA_FROM_USER)) {
++ if (SNMPERR_SUCCESS !=
++ dessertSysifTable_rowreq_ctx_init(rowreq_ctx, user_init_ctx)) {
++ dessertSysifTable_release_rowreq_ctx(rowreq_ctx);
++ rowreq_ctx = NULL;
++ }
++ }
++
++ return rowreq_ctx;
++} /* dessertSysifTable_allocate_rowreq_ctx */
++
++/*
++ * @internal
++ * release resources for a dessertSysifTable_rowreq_ctx
++ */
++void
++dessertSysifTable_release_rowreq_ctx(dessertSysifTable_rowreq_ctx *
++ rowreq_ctx)
++{
++ DEBUGMSGTL(("internal:dessertSysifTable:dessertSysifTable_release_rowreq_ctx", "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ dessertSysifTable_rowreq_ctx_cleanup(rowreq_ctx);
++
++ /*
++ * free index oid pointer
++ */
++ if (rowreq_ctx->oid_idx.oids != rowreq_ctx->oid_tmp)
++ free(rowreq_ctx->oid_idx.oids);
++
++ SNMP_FREE(rowreq_ctx);
++} /* dessertSysifTable_release_rowreq_ctx */
++
++/**
++ * @internal
++ * wrapper
++ */
++static int
++_mfd_dessertSysifTable_pre_request(netsnmp_mib_handler *handler,
++ netsnmp_handler_registration *reginfo,
++ netsnmp_agent_request_info *agtreq_info,
++ netsnmp_request_info *requests)
++{
++ int rc;
++
++ DEBUGMSGTL(("internal:dessertSysifTable:_mfd_dessertSysifTable_pre_request", "called\n"));
++
++ if (1 != netsnmp_row_merge_status_first(reginfo, agtreq_info)) {
++ DEBUGMSGTL(("internal:dessertSysifTable",
++ "skipping additional pre_request\n"));
++ return SNMP_ERR_NOERROR;
++ }
++
++ rc = dessertSysifTable_pre_request(dessertSysifTable_if_ctx.user_ctx);
++ if (MFD_SUCCESS != rc) {
++ /*
++ * nothing we can do about it but log it
++ */
++ DEBUGMSGTL(("dessertSysifTable", "error %d from "
++ "dessertSysifTable_pre_request\n", rc));
++ netsnmp_request_set_error_all(requests, SNMP_VALIDATE_ERR(rc));
++ }
++
++ return SNMP_ERR_NOERROR;
++} /* _mfd_dessertSysifTable_pre_request */
++
++/**
++ * @internal
++ * wrapper
++ */
++static int
++_mfd_dessertSysifTable_post_request(netsnmp_mib_handler *handler,
++ netsnmp_handler_registration *reginfo,
++ netsnmp_agent_request_info
++ *agtreq_info,
++ netsnmp_request_info *requests)
++{
++ dessertSysifTable_rowreq_ctx *rowreq_ctx =
++ netsnmp_container_table_row_extract(requests);
++ int rc, packet_rc;
++
++ DEBUGMSGTL(("internal:dessertSysifTable:_mfd_dessertSysifTable_post_request", "called\n"));
++
++ /*
++ * release row context, if deleted
++ */
++ if (rowreq_ctx && (rowreq_ctx->rowreq_flags & MFD_ROW_DELETED))
++ dessertSysifTable_release_rowreq_ctx(rowreq_ctx);
++
++ /*
++ * wait for last call before calling user
++ */
++ if (1 != netsnmp_row_merge_status_last(reginfo, agtreq_info)) {
++ DEBUGMSGTL(("internal:dessertSysifTable",
++ "waiting for last post_request\n"));
++ return SNMP_ERR_NOERROR;
++ }
++
++ packet_rc = netsnmp_check_all_requests_error(agtreq_info->asp, 0);
++ rc = dessertSysifTable_post_request(dessertSysifTable_if_ctx.user_ctx,
++ packet_rc);
++ if (MFD_SUCCESS != rc) {
++ /*
++ * nothing we can do about it but log it
++ */
++ DEBUGMSGTL(("dessertSysifTable", "error %d from "
++ "dessertSysifTable_post_request\n", rc));
++ }
++
++ return SNMP_ERR_NOERROR;
++} /* _mfd_dessertSysifTable_post_request */
++
++/**
++ * @internal
++ * wrapper
++ */
++static int
++_mfd_dessertSysifTable_object_lookup(netsnmp_mib_handler *handler,
++ netsnmp_handler_registration *reginfo,
++ netsnmp_agent_request_info
++ *agtreq_info,
++ netsnmp_request_info *requests)
++{
++ int rc = SNMP_ERR_NOERROR;
++ dessertSysifTable_rowreq_ctx *rowreq_ctx =
++ netsnmp_container_table_row_extract(requests);
++
++ DEBUGMSGTL(("internal:dessertSysifTable:_mfd_dessertSysifTable_object_lookup", "called\n"));
++
++ /*
++ * get our context from mfd
++ * dessertSysifTable_interface_ctx *if_ctx =
++ * (dessertSysifTable_interface_ctx *)reginfo->my_reg_void;
++ */
++
++ if (NULL == rowreq_ctx) {
++ rc = SNMP_ERR_NOCREATION;
++ }
++
++ if (MFD_SUCCESS != rc)
++ netsnmp_request_set_error_all(requests, rc);
++ else
++ dessertSysifTable_row_prep(rowreq_ctx);
++
++ return SNMP_VALIDATE_ERR(rc);
++} /* _mfd_dessertSysifTable_object_lookup */
++
++/***********************************************************************
++ *
++ * GET processing
++ *
++ ***********************************************************************/
++/*
++ * @internal
++ * Retrieve the value for a particular column
++ */
++NETSNMP_STATIC_INLINE int
++_dessertSysifTable_get_column(dessertSysifTable_rowreq_ctx * rowreq_ctx,
++ netsnmp_variable_list * var, int column)
++{
++ int rc = SNMPERR_SUCCESS;
++
++ DEBUGMSGTL(("internal:dessertSysifTable:_mfd_dessertSysifTable_get_column", "called for %d\n", column));
++
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ switch (column) {
++
++ /*
++ * sysifName(2)/DisplayString/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
++ */
++ case COLUMN_SYSIFNAME:
++ var->type = ASN_OCTET_STR;
++ rc = sysifName_get(rowreq_ctx, (char **) &var->val.string,
++ &var->val_len);
++ break;
++
++ /*
++ * sysifMacAddress(3)/MacAddress/ASN_OCTET_STR/char(char)//L/A/w/e/R/d/H
++ */
++ case COLUMN_SYSIFMACADDRESS:
++ var->type = ASN_OCTET_STR;
++ rc = sysifMacAddress_get(rowreq_ctx, (char **) &var->val.string,
++ &var->val_len);
++ break;
++
++ /*
++ * sysifInPkts(4)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
++ */
++ case COLUMN_SYSIFINPKTS:
++ var->val_len = sizeof(U64);
++ var->type = ASN_COUNTER64;
++ rc = sysifInPkts_get(rowreq_ctx, (U64 *) var->val.string);
++ break;
++
++ /*
++ * sysifOutPkts(5)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
++ */
++ case COLUMN_SYSIFOUTPKTS:
++ var->val_len = sizeof(U64);
++ var->type = ASN_COUNTER64;
++ rc = sysifOutPkts_get(rowreq_ctx, (U64 *) var->val.string);
++ break;
++
++ /*
++ * sysifInOctets(6)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
++ */
++ case COLUMN_SYSIFINOCTETS:
++ var->val_len = sizeof(U64);
++ var->type = ASN_COUNTER64;
++ rc = sysifInOctets_get(rowreq_ctx, (U64 *) var->val.string);
++ break;
++
++ /*
++ * sysifOutOctets(7)/COUNTER64/ASN_COUNTER64/U64(U64)//l/A/w/e/r/d/h
++ */
++ case COLUMN_SYSIFOUTOCTETS:
++ var->val_len = sizeof(U64);
++ var->type = ASN_COUNTER64;
++ rc = sysifOutOctets_get(rowreq_ctx, (U64 *) var->val.string);
++ break;
++
++ default:
++ if (DESSERTSYSIFTABLE_MIN_COL <= column
++ && column <= DESSERTSYSIFTABLE_MAX_COL) {
++ DEBUGMSGTL(("internal:dessertSysifTable:_mfd_dessertSysifTable_get_column", "assume column %d is reserved\n", column));
++ rc = MFD_SKIP;
++ } else {
++ snmp_log(LOG_ERR,
++ "unknown column %d in _dessertSysifTable_get_column\n",
++ column);
++ }
++ break;
++ }
++
++ return rc;
++} /* _dessertSysifTable_get_column */
++
++int
++_mfd_dessertSysifTable_get_values(netsnmp_mib_handler *handler,
++ netsnmp_handler_registration *reginfo,
++ netsnmp_agent_request_info *agtreq_info,
++ netsnmp_request_info *requests)
++{
++ dessertSysifTable_rowreq_ctx *rowreq_ctx =
++ netsnmp_container_table_row_extract(requests);
++ netsnmp_table_request_info *tri;
++ u_char *old_string;
++ void (*dataFreeHook) (void *);
++ int rc;
++
++ DEBUGMSGTL(("internal:dessertSysifTable:_mfd_dessertSysifTable_get_values", "called\n"));
++
++ netsnmp_assert(NULL != rowreq_ctx);
++
++ for (; requests; requests = requests->next) {
++ /*
++ * save old pointer, so we can free it if replaced
++ */
++ old_string = requests->requestvb->val.string;
++ dataFreeHook = requests->requestvb->dataFreeHook;
++ if (NULL == requests->requestvb->val.string) {
++ requests->requestvb->val.string = requests->requestvb->buf;
++ requests->requestvb->val_len =
++ sizeof(requests->requestvb->buf);
++ } else if (requests->requestvb->buf ==
++ requests->requestvb->val.string) {
++ if (requests->requestvb->val_len !=
++ sizeof(requests->requestvb->buf))
++ requests->requestvb->val_len =
++ sizeof(requests->requestvb->buf);
++ }
++
++ /*
++ * get column data
++ */
++ tri = netsnmp_extract_table_info(requests);
++ if (NULL == tri)
++ continue;
++
++ rc = _dessertSysifTable_get_column(rowreq_ctx, requests->requestvb,
++ tri->colnum);
++ if (rc) {
++ if (MFD_SKIP == rc) {
++ requests->requestvb->type = SNMP_NOSUCHINSTANCE;
++ rc = SNMP_ERR_NOERROR;
++ }
++ } else if (NULL == requests->requestvb->val.string) {
++ snmp_log(LOG_ERR, "NULL varbind data pointer!\n");
++ rc = SNMP_ERR_GENERR;
++ }
++ if (rc)
++ netsnmp_request_set_error(requests, SNMP_VALIDATE_ERR(rc));
++
++ /*
++ * if the buffer wasn't used previously for the old data (i.e. it
++ * was allcoated memory) and the get routine replaced the pointer,
++ * we need to free the previous pointer.
++ */
++ if (old_string && (old_string != requests->requestvb->buf) &&
++ (requests->requestvb->val.string != old_string)) {
++ if (dataFreeHook)
++ (*dataFreeHook) (old_string);
++ else
++ free(old_string);
++ }
++ } /* for results */
++
++ return SNMP_ERR_NOERROR;
++} /* _mfd_dessertSysifTable_get_values */
++
++
++/***********************************************************************
++ *
++ * SET processing
++ *
++ ***********************************************************************/
++
++/*
++ * SET PROCESSING NOT APPLICABLE (per MIB or user setting)
++ */
++/***********************************************************************
++ *
++ * DATA ACCESS
++ *
++ ***********************************************************************/
++static void _container_free(netsnmp_container * container);
++
++/**
++ * @internal
++ */
++static int
++_cache_load(netsnmp_cache * cache, void *vmagic)
++{
++ DEBUGMSGTL(("internal:dessertSysifTable:_cache_load", "called\n"));
++
++ if ((NULL == cache) || (NULL == cache->magic)) {
++ snmp_log(LOG_ERR,
++ "invalid cache for dessertSysifTable_cache_load\n");
++ return -1;
++ }
++
++ /** should only be called for an invalid or expired cache */
++ netsnmp_assert((0 == cache->valid) || (1 == cache->expired));
++
++ /*
++ * call user code
++ */
++ return dessertSysifTable_container_load((netsnmp_container *) cache->
++ magic);
++} /* _cache_load */
++
++/**
++ * @internal
++ */
++static void
++_cache_free(netsnmp_cache * cache, void *magic)
++{
++ netsnmp_container *container;
++
++ DEBUGMSGTL(("internal:dessertSysifTable:_cache_free", "called\n"));
++
++ if ((NULL == cache) || (NULL == cache->magic)) {
++ snmp_log(LOG_ERR,
++ "invalid cache in dessertSysifTable_cache_free\n");
++ return;
++ }
++
++ container = (netsnmp_container *) cache->magic;
++
++ _container_free(container);
++} /* _cache_free */
++
++/**
++ * @internal
++ */
++static void
++_container_item_free(dessertSysifTable_rowreq_ctx * rowreq_ctx,
++ void *context)
++{
++ DEBUGMSGTL(("internal:dessertSysifTable:_container_item_free",
++ "called\n"));
++
++ if (NULL == rowreq_ctx)
++ return;
++
++ dessertSysifTable_release_rowreq_ctx(rowreq_ctx);
++} /* _container_item_free */
++
++/**
++ * @internal
++ */
++static void
++_container_free(netsnmp_container * container)
++{
++ DEBUGMSGTL(("internal:dessertSysifTable:_container_free", "called\n"));
++
++ if (NULL == container) {
++ snmp_log(LOG_ERR,
++ "invalid container in dessertSysifTable_container_free\n");
++ return;
++ }
++
++ /*
++ * call user code
++ */
++ dessertSysifTable_container_free(container);
++
++ /*
++ * free all items. inefficient, but easy.
++ */
++ CONTAINER_CLEAR(container,
++ (netsnmp_container_obj_func *) _container_item_free,
++ NULL);
++} /* _container_free */
++
++/**
++ * @internal
++ * initialize the container with functions or wrappers
++ */
++void
++_dessertSysifTable_container_init(dessertSysifTable_interface_ctx * if_ctx)
++{
++ DEBUGMSGTL(("internal:dessertSysifTable:_dessertSysifTable_container_init", "called\n"));
++
++ /*
++ * cache init
++ */
++ if_ctx->cache = netsnmp_cache_create(30, /* timeout in seconds */
++ _cache_load, _cache_free,
++ dessertSysifTable_oid,
++ dessertSysifTable_oid_size);
++
++ if (NULL == if_ctx->cache) {
++ snmp_log(LOG_ERR, "error creating cache for dessertSysifTable\n");
++ return;
++ }
++
++ if_ctx->cache->flags = NETSNMP_CACHE_DONT_INVALIDATE_ON_SET;
++
++ dessertSysifTable_container_init(&if_ctx->container, if_ctx->cache);
++ if (NULL == if_ctx->container)
++ if_ctx->container =
++ netsnmp_container_find("dessertSysifTable:table_container");
++ if (NULL == if_ctx->container) {
++ snmp_log(LOG_ERR, "error creating container in "
++ "dessertSysifTable_container_init\n");
++ return;
++ }
++
++ if (NULL != if_ctx->cache)
++ if_ctx->cache->magic = (void *) if_ctx->container;
++} /* _dessertSysifTable_container_init */
++
++/**
++ * @internal
++ * shutdown the container with functions or wrappers
++ */
++void
++_dessertSysifTable_container_shutdown(dessertSysifTable_interface_ctx *
++ if_ctx)
++{
++ DEBUGMSGTL(("internal:dessertSysifTable:_dessertSysifTable_container_shutdown", "called\n"));
++
++ dessertSysifTable_container_shutdown(if_ctx->container);
++
++ _container_free(if_ctx->container);
++
++} /* _dessertSysifTable_container_shutdown */
++
++
++dessertSysifTable_rowreq_ctx *
++dessertSysifTable_row_find_by_mib_index(dessertSysifTable_mib_index *
++ mib_idx)
++{
++ dessertSysifTable_rowreq_ctx *rowreq_ctx;
++ oid oid_tmp[MAX_OID_LEN];
++ netsnmp_index oid_idx;
++ int rc;
++
++ /*
++ * set up storage for OID
++ */
++ oid_idx.oids = oid_tmp;
++ oid_idx.len = sizeof(oid_tmp) / sizeof(oid);
++
++ /*
++ * convert
++ */
++ rc = dessertSysifTable_index_to_oid(&oid_idx, mib_idx);
++ if (MFD_SUCCESS != rc)
++ return NULL;
++
++ rowreq_ctx =
++ CONTAINER_FIND(dessertSysifTable_if_ctx.container, &oid_idx);
++
++ return rowreq_ctx;
++}
+Index: libdessert0.86-0.86.14/src/snmp/dessertSysifTable_interface.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertSysifTable_interface.h 2009-12-09 16:38:27.329339146 +0100
+@@ -0,0 +1,97 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * version : 15899 $ of $
++ *
++ * $Id:$
++ */
++/** @ingroup interface: Routines to interface to Net-SNMP
++ *
++ * \warning This code should not be modified, called directly,
++ * or used to interpret functionality. It is subject to
++ * change at any time.
++ *
++ * @{
++ */
++/*
++ * *********************************************************************
++ * *********************************************************************
++ * *********************************************************************
++ * *** ***
++ * *** NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE NOTE ***
++ * *** ***
++ * *** ***
++ * *** THIS FILE DOES NOT CONTAIN ANY USER EDITABLE CODE. ***
++ * *** ***
++ * *** ***
++ * *** THE GENERATED CODE IS INTERNAL IMPLEMENTATION, AND ***
++ * *** ***
++ * *** ***
++ * *** IS SUBJECT TO CHANGE WITHOUT WARNING IN FUTURE RELEASES. ***
++ * *** ***
++ * *** ***
++ * *********************************************************************
++ * *********************************************************************
++ * *********************************************************************
++ */
++#ifndef DESSERTSYSIFTABLE_INTERFACE_H
++#define DESSERTSYSIFTABLE_INTERFACE_H
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++
++#include "dessertSysifTable.h"
++
++
++ /*
++ ********************************************************************
++ * Table declarations
++ */
++
++ /*
++ * PUBLIC interface initialization routine
++ */
++ void
++ _dessertSysifTable_initialize_interface
++ (dessertSysifTable_registration * user_ctx, u_long flags);
++ void
++ _dessertSysifTable_shutdown_interface
++ (dessertSysifTable_registration * user_ctx);
++
++ dessertSysifTable_registration
++ *dessertSysifTable_registration_get(void);
++
++ dessertSysifTable_registration
++ *dessertSysifTable_registration_set(dessertSysifTable_registration
++ * newreg);
++
++ netsnmp_container *dessertSysifTable_container_get(void);
++ int dessertSysifTable_container_size(void);
++
++ dessertSysifTable_rowreq_ctx
++ *dessertSysifTable_allocate_rowreq_ctx(void *);
++ void
++ dessertSysifTable_release_rowreq_ctx(dessertSysifTable_rowreq_ctx *
++ rowreq_ctx);
++
++ int dessertSysifTable_index_to_oid(netsnmp_index * oid_idx,
++ dessertSysifTable_mib_index
++ * mib_idx);
++ int dessertSysifTable_index_from_oid(netsnmp_index *
++ oid_idx,
++ dessertSysifTable_mib_index
++ * mib_idx);
++
++ /*
++ * access to certain internals. use with caution!
++ */
++ void dessertSysifTable_valid_columns_set(netsnmp_column_info
++ *vc);
++
++
++#ifdef __cplusplus
++}
++#endif
++#endif /* DESSERTSYSIFTABLE_INTERFACE_H */
++/** @} */
+Index: libdessert0.86-0.86.14/src/snmp/dessertSysifTable_oids.h
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertSysifTable_oids.h 2009-12-09 16:38:27.332672538 +0100
+@@ -0,0 +1,43 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * : generic-table-oids.m2c 12855 2005-09-27 15:56:08Z rstory $
++ *
++ * $Id:$
++ */
++#ifndef DESSERTSYSIFTABLE_OIDS_H
++#define DESSERTSYSIFTABLE_OIDS_H
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++
++ /*
++ * column number definitions for table dessertSysifTable
++ */
++#define DESSERTSYSIFTABLE_OID 1,3,6,1,4,1,18898,0,19,10,1,1,7
++
++#define COLUMN_SYSIFINDEX 1
++
++#define COLUMN_SYSIFNAME 2
++
++#define COLUMN_SYSIFMACADDRESS 3
++
++#define COLUMN_SYSIFINPKTS 4
++
++#define COLUMN_SYSIFOUTPKTS 5
++
++#define COLUMN_SYSIFINOCTETS 6
++
++#define COLUMN_SYSIFOUTOCTETS 7
++
++
++#define DESSERTSYSIFTABLE_MIN_COL COLUMN_SYSIFNAME
++#define DESSERTSYSIFTABLE_MAX_COL COLUMN_SYSIFOUTOCTETS
++
++
++
++#ifdef __cplusplus
++}
++#endif
++#endif /* DESSERTSYSIFTABLE_OIDS_H */
+Index: libdessert0.86-0.86.14/src/snmp/dessertSysifTable_subagent.c
+===================================================================
+--- /dev/null 1970-01-01 00:00:00.000000000 +0000
++++ libdessert0.86-0.86.14/src/snmp/dessertSysifTable_subagent.c 2009-12-09 16:38:27.332672538 +0100
+@@ -0,0 +1,202 @@
++/*
++ * Note: this file originally auto-generated by mib2c using
++ * version : 15795 $ of $
++ */
++/*
++ * standard Net-SNMP includes
++ */
++#include <net-snmp/net-snmp-config.h>
++#include <net-snmp/net-snmp-includes.h>
++#include <net-snmp/agent/net-snmp-agent-includes.h>
++
++/*
++ * include our parent header
++ */
++#include "dessertSysifTable.h"
++
++#include <signal.h>
++
++static int keep_running;
++
++static RETSIGTYPE
++stop_server(int a)
++{
++ keep_running = 0;
++}
++
++static void
++usage(void)
++{
++ printf
++ ("usage: dessertSysifTable [-D<tokens>] [-f] [-L] [-M] [-H] [LISTENING ADDRESSES]\n"
++ "\t-f Do not fork() from the calling shell.\n"
++ "\t-DTOKEN[,TOKEN,...]\n"
++ "\t\tTurn on debugging output for the given TOKEN(s).\n"
++ "\t\tWithout any tokens specified, it defaults to printing\n"
++ "\t\tall the tokens (which is equivalent to the keyword 'ALL').\n"
++ "\t\tYou might want to try ALL for extremely verbose output.\n"
++ "\t\tNote: You can't put a space between the -D and the TOKENs.\n"
++ "\t-H\tDisplay a list of configuration file directives\n"
++ "\t\tunderstood by the agent and then exit.\n"
++ "\t-M\tRun as a normal SNMP Agent instead of an AgentX sub-agent.\n"
++ "\t-x ADDRESS\tconnect to master agent at ADDRESS (default /var/agentx/master).\n"
++ "\t-L\tDo not open a log file; print all messages to stderr.\n");
++ exit(0);
++}
++
++int
++main(int argc, char **argv)
++{
++ int agentx_subagent = 1; /* change this if you want to be a SNMP master agent */
++ /*
++ * Defs for arg-handling code: handles setting of policy-related variables
++ */
++ int ch;
++ extern char *optarg;
++ int dont_fork = 0, use_syslog = 0;
++ char *agentx_socket = NULL;
++
++ while ((ch = getopt(argc, argv, "D:fHLMx:")) != EOF)
++ switch (ch) {
++ case 'D':
++ debug_register_tokens(optarg);
++ snmp_set_do_debugging(1);
++ break;
++ case 'f':
++ dont_fork = 1;
++ break;
++ case 'H':
++ netsnmp_ds_set_boolean(NETSNMP_DS_APPLICATION_ID,
++ NETSNMP_DS_AGENT_NO_ROOT_ACCESS, 1);
++ init_agent("dessertSysifTable"); /* register our .conf handlers */
++ init_dessertSysifTable();
++ init_snmp("dessertSysifTable");
++ fprintf(stderr, "Configuration directives understood:\n");
++ read_config_print_usage(" ");
++ exit(0);
++ case 'M':
++ agentx_subagent = 0;
++ break;
++ case 'L':
++ use_syslog = 0; /* use stderr */
++ break;
++ case 'x':
++ agentx_socket = optarg;
++ break;
++ default:
++ fprintf(stderr, "unknown option %c\n", ch);
++ usage();
++ }
++
++ if (optind < argc) {
++ int i;
++ /*
++ * There are optional transport addresses on the command line.
++ */
++ DEBUGMSGTL(("snmpd/main", "optind %d, argc %d\n", optind, argc));
++ for (i = optind; i < argc; i++) {
++ char *c, *astring;
++ if ((c = netsnmp_ds_get_string(NETSNMP_DS_APPLICATION_ID,
++ NETSNMP_DS_AGENT_PORTS))) {
++ astring = malloc(strlen(c) + 2 + strlen(argv[i]));
++ if (astring == NULL) {
++ fprintf(stderr, "malloc failure processing argv[%d]\n",
++ i);
++ exit(1);
++ }
++ sprintf(astring, "%s,%s", c, argv[i]);
++ netsnmp_ds_set_string(NETSNMP_DS_APPLICATION_ID,
++ NETSNMP_DS_AGENT_PORTS, astring);
++ SNMP_FREE(astring);
++ } else {
++ netsnmp_ds_set_string(NETSNMP_DS_APPLICATION_ID,
++ NETSNMP_DS_AGENT_PORTS, argv[i]);
++ }
++ }
++ DEBUGMSGTL(("snmpd/main", "port spec: %s\n",
++ netsnmp_ds_get_string(NETSNMP_DS_APPLICATION_ID,
++ NETSNMP_DS_AGENT_PORTS)));
++ }
++
++ /*
++ * we're an agentx subagent?
++ */
++ if (agentx_subagent) {
++ /*
++ * make us a agentx client.
++ */
++ netsnmp_enable_subagent();
++ if (NULL != agentx_socket)
++ netsnmp_ds_set_string(NETSNMP_DS_APPLICATION_ID,
++ NETSNMP_DS_AGENT_X_SOCKET,
++ agentx_socket);
++ }
++
++ snmp_disable_log();
++ if (use_syslog)
++ snmp_enable_calllog();
++ else
++ snmp_enable_stderrlog();
++
++ /*
++ * daemonize
++ */
++ if (!dont_fork) {
++ int rc = netsnmp_daemonize(1, !use_syslog);
++ if (rc)
++ exit(-1);
++ }
++
++ /*
++ * initialize tcp/ip if necessary
++ */
++ SOCK_STARTUP;
++
++ /*
++ * initialize the agent library
++ */
++ init_agent("dessertSysifTable");
++
++ /*
++ * init dessertSysifTable mib code
++ */
++ init_dessertSysifTable();
++
++ /*
++ * read dessertSysifTable.conf files.
++ */
++ init_snmp("dessertSysifTable");
++
++ /*
++ * If we're going to be a snmp master agent, initial the ports
++ */
++ if (!agentx_subagent)
++ init_master_agent(); /* open the port to listen on (defaults to udp:161) */
++
++ /*
++ * In case we recevie a request to stop (kill -TERM or kill -INT)
++ */
++ keep_running = 1;
++ signal(SIGTERM, stop_server);
++ signal(SIGINT, stop_server);
++
++ /*
++ * you're main loop here...
++ */
++ while (keep_running) {
++ /*
++ * if you use select(), see snmp_select_info() in snmp_api(3)
++ */
++ /*
++ * --- OR ---
++ */
++ agent_check_and_process(1); /* 0 == don't block */
++ }
++
++ /*
++ * at shutdown time
++ */
++ snmp_shutdown("dessertSysifTable");
++ SOCK_CLEANUP;
++ exit(0);
++}
+Index: libdessert0.86-0.86.14/utlist.h
+===================================================================
+--- libdessert0.86-0.86.14.orig/utlist.h 2009-11-26 18:56:56.000000000 +0100
++++ /dev/null 1970-01-01 00:00:00.000000000 +0000
+@@ -1,349 +0,0 @@
+-/*
+-Copyright (c) 2007-2009, Troy D. Hanson
+-All rights reserved.
+-
+-Redistribution and use in source and binary forms, with or without
+-modification, are permitted provided that the following conditions are met:
+-
+- * Redistributions of source code must retain the above copyright
+- notice, this list of conditions and the following disclaimer.
+-
+-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
+-IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+-TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+-PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER
+-OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+-EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+-PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+-PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+-LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+-NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+-*/
+-
+-#ifndef UTLIST_H
+-#define UTLIST_H
+-
+-#define UTLIST_VERSION 1.8
+-
+-/*
+- * This file contains macros to manipulate singly and doubly-linked lists.
+- *
+- * 1. LL_ macros: singly-linked lists.
+- * 2. DL_ macros: doubly-linked lists.
+- * 3. CDL_ macros: circular doubly-linked lists.
+- *
+- * To use singly-linked lists, your structure must have a "next" pointer.
+- * To use doubly-linked lists, your structure must "prev" and "next" pointers.
+- * Either way, the pointer to the head of the list must be initialized to NULL.
+- *
+- * ----------------.EXAMPLE -------------------------
+- * struct item {
+- * int id;
+- * struct item *prev, *next;
+- * }
+- *
+- * struct item *list = NULL:
+- *
+- * int main() {
+- * struct item *item;
+- * ... allocate and populate item ...
+- * DL_APPEND(list, item);
+- * }
+- * --------------------------------------------------
+- *
+- * For doubly-linked lists, the append and delete macros are O(1)
+- * For singly-linked lists, append and delete are O(n) but prepend is O(1)
+- * The sort macro is O(n log(n)) for all types of single/double/circular lists.
+- */
+-
+-/******************************************************************************
+- * The sort macro is an adaptation of Simon Tatham's O(n log(n)) mergesort *
+- * Unwieldy variable names used here to avoid shadowing passed-in variables. *
+- *****************************************************************************/
+-#define LL_SORT(list, cmp) \
+-do { \
+- __typeof__(list) _ls_p, _ls_q, _ls_e, _ls_tail, _ls_oldhead; \
+- int _ls_insize, _ls_nmerges, _ls_psize, _ls_qsize, _ls_i, _ls_looping; \
+- if (list) { \
+- _ls_insize = 1; \
+- _ls_looping = 1; \
+- while (_ls_looping) { \
+- _ls_p = list; \
+- _ls_oldhead = list; \
+- list = NULL; \
+- _ls_tail = NULL; \
+- _ls_nmerges = 0; \
+- while (_ls_p) { \
+- _ls_nmerges++; \
+- _ls_q = _ls_p; \
+- _ls_psize = 0; \
+- for (_ls_i = 0; _ls_i < _ls_insize; _ls_i++) { \
+- _ls_psize++; \
+- _ls_q = _ls_q->next; \
+- if (!_ls_q) break; \
+- } \
+- _ls_qsize = _ls_insize; \
+- while (_ls_psize > 0 || (_ls_qsize > 0 && _ls_q)) { \
+- if (_ls_psize == 0) { \
+- _ls_e = _ls_q; _ls_q = _ls_q->next; _ls_qsize--; \
+- } else if (_ls_qsize == 0 || !_ls_q) { \
+- _ls_e = _ls_p; _ls_p = _ls_p->next; _ls_psize--; \
+- } else if (cmp(_ls_p,_ls_q) <= 0) { \
+- _ls_e = _ls_p; _ls_p = _ls_p->next; _ls_psize--; \
+- } else { \
+- _ls_e = _ls_q; _ls_q = _ls_q->next; _ls_qsize--; \
+- } \
+- if (_ls_tail) { \
+- _ls_tail->next = _ls_e; \
+- } else { \
+- list = _ls_e; \
+- } \
+- _ls_tail = _ls_e; \
+- } \
+- _ls_p = _ls_q; \
+- } \
+- _ls_tail->next = NULL; \
+- if (_ls_nmerges <= 1) { \
+- _ls_looping=0; \
+- } \
+- _ls_insize *= 2; \
+- } \
+- } \
+-} while (0)
+-
+-#define DL_SORT(list, cmp) \
+-do { \
+- __typeof__(list) _ls_p, _ls_q, _ls_e, _ls_tail, _ls_oldhead; \
+- int _ls_insize, _ls_nmerges, _ls_psize, _ls_qsize, _ls_i, _ls_looping; \
+- if (list) { \
+- _ls_insize = 1; \
+- _ls_looping = 1; \
+- while (_ls_looping) { \
+- _ls_p = list; \
+- _ls_oldhead = list; \
+- list = NULL; \
+- _ls_tail = NULL; \
+- _ls_nmerges = 0; \
+- while (_ls_p) { \
+- _ls_nmerges++; \
+- _ls_q = _ls_p; \
+- _ls_psize = 0; \
+- for (_ls_i = 0; _ls_i < _ls_insize; _ls_i++) { \
+- _ls_psize++; \
+- _ls_q = _ls_q->next; \
+- if (!_ls_q) break; \
+- } \
+- _ls_qsize = _ls_insize; \
+- while (_ls_psize > 0 || (_ls_qsize > 0 && _ls_q)) { \
+- if (_ls_psize == 0) { \
+- _ls_e = _ls_q; _ls_q = _ls_q->next; _ls_qsize--; \
+- } else if (_ls_qsize == 0 || !_ls_q) { \
+- _ls_e = _ls_p; _ls_p = _ls_p->next; _ls_psize--; \
+- } else if (cmp(_ls_p,_ls_q) <= 0) { \
+- _ls_e = _ls_p; _ls_p = _ls_p->next; _ls_psize--; \
+- } else { \
+- _ls_e = _ls_q; _ls_q = _ls_q->next; _ls_qsize--; \
+- } \
+- if (_ls_tail) { \
+- _ls_tail->next = _ls_e; \
+- } else { \
+- list = _ls_e; \
+- } \
+- _ls_e->prev = _ls_tail; \
+- _ls_tail = _ls_e; \
+- } \
+- _ls_p = _ls_q; \
+- } \
+- list->prev = _ls_tail; \
+- _ls_tail->next = NULL; \
+- if (_ls_nmerges <= 1) { \
+- _ls_looping=0; \
+- } \
+- _ls_insize *= 2; \
+- } \
+- } \
+-} while (0)
+-
+-#define CDL_SORT(list, cmp) \
+-do { \
+- __typeof__(list) _ls_p, _ls_q, _ls_e, _ls_tail, _ls_oldhead; \
+- int _ls_insize, _ls_nmerges, _ls_psize, _ls_qsize, _ls_i, _ls_looping; \
+- if (list) { \
+- _ls_insize = 1; \
+- _ls_looping = 1; \
+- while (_ls_looping) { \
+- _ls_p = list; \
+- _ls_oldhead = list; \
+- list = NULL; \
+- _ls_tail = NULL; \
+- _ls_nmerges = 0; \
+- while (_ls_p) { \
+- _ls_nmerges++; \
+- _ls_q = _ls_p; \
+- _ls_psize = 0; \
+- for (_ls_i = 0; _ls_i < _ls_insize; _ls_i++) { \
+- _ls_psize++; \
+- _ls_q = ((_ls_q->next == _ls_oldhead) ? NULL : _ls_q->next); \
+- if (!_ls_q) break; \
+- } \
+- _ls_qsize = _ls_insize; \
+- while (_ls_psize > 0 || (_ls_qsize > 0 && _ls_q)) { \
+- if (_ls_psize == 0) { \
+- _ls_e = _ls_q; _ls_q = _ls_q->next; _ls_qsize--; \
+- if (_ls_q == _ls_oldhead) { _ls_q = NULL; } \
+- } else if (_ls_qsize == 0 || !_ls_q) { \
+- _ls_e = _ls_p; _ls_p = _ls_p->next; _ls_psize--; \
+- if (_ls_p == _ls_oldhead) { _ls_p = NULL; } \
+- } else if (cmp(_ls_p,_ls_q) <= 0) { \
+- _ls_e = _ls_p; _ls_p = _ls_p->next; _ls_psize--; \
+- if (_ls_p == _ls_oldhead) { _ls_p = NULL; } \
+- } else { \
+- _ls_e = _ls_q; _ls_q = _ls_q->next; _ls_qsize--; \
+- if (_ls_q == _ls_oldhead) { _ls_q = NULL; } \
+- } \
+- if (_ls_tail) { \
+- _ls_tail->next = _ls_e; \
+- } else { \
+- list = _ls_e; \
+- } \
+- _ls_e->prev = _ls_tail; \
+- _ls_tail = _ls_e; \
+- } \
+- _ls_p = _ls_q; \
+- } \
+- list->prev = _ls_tail; \
+- _ls_tail->next = list; \
+- if (_ls_nmerges <= 1) { \
+- _ls_looping=0; \
+- } \
+- _ls_insize *= 2; \
+- } \
+- } \
+-} while (0)
+-
+-/******************************************************************************
+- * singly linked list macros (non-circular) *
+- *****************************************************************************/
+-#define LL_PREPEND(head,add) \
+-do { \
+- (add)->next = head; \
+- head = add; \
+-} while (0)
+-
+-#define LL_APPEND(head,add) \
+-do { \
+- __typeof__(head) _tmp; \
+- (add)->next=NULL; \
+- if (head) { \
+- _tmp = head; \
+- while (_tmp->next) { _tmp = _tmp->next; } \
+- _tmp->next=(add); \
+- } else { \
+- (head)=(add); \
+- } \
+-} while (0)
+-
+-#define LL_DELETE(head,del) \
+-do { \
+- __typeof__(head) _tmp; \
+- if ((head) == (del)) { \
+- (head)=(head)->next; \
+- } else { \
+- _tmp = head; \
+- while (_tmp->next && (_tmp->next != (del))) { \
+- _tmp = _tmp->next; \
+- } \
+- if (_tmp->next) { \
+- _tmp->next = ((del)->next); \
+- } \
+- } \
+-} while (0)
+-
+-#define LL_FOREACH(head,el) \
+- for(el=head;el;el=el->next)
+-
+-/******************************************************************************
+- * doubly linked list macros (non-circular) *
+- *****************************************************************************/
+-#define DL_PREPEND(head,add) \
+-do { \
+- (add)->next = head; \
+- if (head) { \
+- (add)->prev = (head)->prev; \
+- (head)->prev = (add); \
+- } else { \
+- (add)->prev = (add); \
+- } \
+- (head) = (add); \
+-} while (0)
+-
+-#define DL_APPEND(head,add) \
+-do { \
+- if (head) { \
+- (add)->prev = (head)->prev; \
+- (head)->prev->next = (add); \
+- (head)->prev = (add); \
+- (add)->next = NULL; \
+- } else { \
+- (head)=(add); \
+- (head)->prev = (head); \
+- (head)->next = NULL; \
+- } \
+-} while (0);
+-
+-#define DL_DELETE(head,del) \
+-do { \
+- if ((del)->prev == (del)) { \
+- (head)=NULL; \
+- } else if ((del)==(head)) { \
+- (del)->next->prev = (del)->prev; \
+- (head) = (del)->next; \
+- } else { \
+- (del)->prev->next = (del)->next; \
+- if ((del)->next) { \
+- (del)->next->prev = (del)->prev; \
+- } else { \
+- (head)->prev = (del)->prev; \
+- } \
+- } \
+-} while (0);
+-
+-
+-#define DL_FOREACH(head,el) \
+- for(el=head;el;el=el->next)
+-
+-/******************************************************************************
+- * circular doubly linked list macros *
+- *****************************************************************************/
+-#define CDL_PREPEND(head,add) \
+-do { \
+- if (head) { \
+- (add)->prev = (head)->prev; \
+- (add)->next = (head); \
+- (head)->prev = (add); \
+- (add)->prev->next = (add); \
+- } else { \
+- (add)->prev = (add); \
+- (add)->next = (add); \
+- } \
+-(head)=(add); \
+-} while (0)
+-
+-#define CDL_DELETE(head,del) \
+-do { \
+- if ( ((head)==(del)) && ((head)->next == (head))) { \
+- (head) = 0L; \
+- } else { \
+- (del)->next->prev = (del)->prev; \
+- (del)->prev->next = (del)->next; \
+- if ((del) == (head)) (head)=(del)->next; \
+- } \
+-} while (0);
+-
+-#define CDL_FOREACH(head,el) \
+- for(el=head;el;el= (el->next==head ? 0L : el->next))
+-
+-
+-#endif /* UTLIST_H */
+-
diff --git a/recipes/libdessert/libdessert_0.86.14.bb b/recipes/libdessert/libdessert_0.86.14.bb
new file mode 100644
index 0000000000..97dfe96323
--- /dev/null
+++ b/recipes/libdessert/libdessert_0.86.14.bb
@@ -0,0 +1,15 @@
+DESCRIPTION = "DES-SERT (DES Simple and Extensible Routing-Framework for Testbeds)"
+HOMEPAGE = "http://www.des-testbed.net/DES-SERT"
+SECTION = "devel"
+LICENSE = "GPL"
+PR = "r2"
+
+DEPENDS = "net-snmp libpcap libcli"
+
+SRC_URI = "http://www.des-testbed.net/sites/default/files/${PN}${PV}.tar.gz \
+ file://0001-big-fat-autotools-patch.patch;patch=1 \
+ "
+
+S = "${WORKDIR}/${PN}0.86-${PV}"
+
+inherit autotools
diff --git a/recipes/libpcre/libpcre_7.6.bb b/recipes/libpcre/libpcre_7.6.bb
index aa038c6e95..f89f83d631 100644
--- a/recipes/libpcre/libpcre_7.6.bb
+++ b/recipes/libpcre/libpcre_7.6.bb
@@ -5,7 +5,7 @@ provides a POSIX calling interface to PCRE; the regular expressions \
themselves still follow Perl syntax and semantics. The header file for \
the POSIX-style functions is called pcreposix.h."
SECTION = "devel"
-PR = "r4"
+PR = "r6"
LICENSE = "BSD"
SRC_URI = "${SOURCEFORGE_MIRROR}/pcre/pcre-${PV}.tar.bz2 \
file://pcre-cross.patch;patch=1"
@@ -39,11 +39,10 @@ do_compile () {
}
do_stage () {
- autotools_stage_all
- install -d ${STAGING_BINDIR_NATIVE}
- install -m 0755 ${S}/dftables ${STAGING_BINDIR_NATIVE}/
+ autotools_stage_all
+ install -d ${STAGING_BINDIR}
+ install -m 0755 ${D}${bindir}/pcre-config ${STAGING_BINDIR}/
}
-
python populate_packages_prepend () {
pcre_libdir = bb.data.expand('${libdir}', d)
pcre_libdir_dbg = bb.data.expand('${libdir}/.debug', d)
diff --git a/recipes/libqpe/libqpe-opie.inc b/recipes/libqpe/libqpe-opie.inc
index ebb49c0658..3cecedd071 100644
--- a/recipes/libqpe/libqpe-opie.inc
+++ b/recipes/libqpe/libqpe-opie.inc
@@ -6,10 +6,11 @@ PRIORITY = "optional"
LICENSE = "GPL"
DEPENDS = "uicmoc-native virtual/libqte2"
PROVIDES = "virtual/libqpe1"
-
+INC_PR = "r7"
S = "${WORKDIR}/library"
inherit palmtop
+inherit opie
OE_QMAKE_CXXFLAGS := "${@oe_filter_out('-fno-rtti', '${OE_QMAKE_CXXFLAGS}', d)}"
QMAKE_PROFILES = "library.pro"
diff --git a/recipes/libqpe/libqpe-opie_1.2.2.bb b/recipes/libqpe/libqpe-opie_1.2.2.bb
index 009a075091..b209780ff7 100644
--- a/recipes/libqpe/libqpe-opie_1.2.2.bb
+++ b/recipes/libqpe/libqpe-opie_1.2.2.bb
@@ -1,6 +1,6 @@
require ${PN}.inc
-PR = "r3"
+PR = "${INC_PR}.0"
TAG = "${@'v' + bb.data.getVar('PV',d,1).replace('.', '_')}"
SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/library \
diff --git a/recipes/libqpe/libqpe-opie_1.2.3.bb b/recipes/libqpe/libqpe-opie_1.2.3.bb
index 0822385b9d..1a74e3a156 100644
--- a/recipes/libqpe/libqpe-opie_1.2.3.bb
+++ b/recipes/libqpe/libqpe-opie_1.2.3.bb
@@ -1,6 +1,6 @@
require ${PN}.inc
-PR = "r3"
+PR = "${INC_PR}.0"
TAG = "${@'v' + bb.data.getVar('PV',d,1).replace('.', '_')}"
SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/library \
diff --git a/recipes/libqpe/libqpe-opie_1.2.4.bb b/recipes/libqpe/libqpe-opie_1.2.4.bb
index 8c2abc7af6..5c1690ec12 100644
--- a/recipes/libqpe/libqpe-opie_1.2.4.bb
+++ b/recipes/libqpe/libqpe-opie_1.2.4.bb
@@ -1,6 +1,6 @@
require ${PN}.inc
-PR = "r0"
+PR = "${INC_PR}.0"
TAG = "${@'v' + bb.data.getVar('PV',d,1).replace('.', '_')}"
SRC_URI = "${HANDHELDS_CVS};tag=${TAG};module=opie/library \
diff --git a/recipes/libqpe/libqpe-opie_cvs.bb b/recipes/libqpe/libqpe-opie_cvs.bb
index 49c1a934e3..8ed2f4d88b 100644
--- a/recipes/libqpe/libqpe-opie_cvs.bb
+++ b/recipes/libqpe/libqpe-opie_cvs.bb
@@ -1,7 +1,7 @@
require ${PN}.inc
PV = "${OPIE_CVS_PV}"
-PR = "r6"
+PR = "${INC_PR}.0"
SRC_URI = "${HANDHELDS_CVS};module=opie/library \
file://fix-titleheight.patch;patch=1 \
diff --git a/recipes/libsdl/libsdl-directfb_1.2.11.bb b/recipes/libsdl/libsdl-directfb_1.2.11.bb
index 3f44f9df3f..cc5f043142 100644
--- a/recipes/libsdl/libsdl-directfb_1.2.11.bb
+++ b/recipes/libsdl/libsdl-directfb_1.2.11.bb
@@ -4,7 +4,7 @@ DEPENDS = "alsa-lib directfb"
# extra-keys.patch is missing
DEFAULT_PREFERENCE = "-1"
-PR = "r0"
+PR = "${INC_PR}.0"
SRC_URI = "\
http://www.libsdl.org/release/SDL-${PV}.tar.gz \
diff --git a/recipes/libsdl/libsdl-directfb_1.2.9.bb b/recipes/libsdl/libsdl-directfb_1.2.9.bb
index 7a9bd88ee2..f0d7b9f4a2 100644
--- a/recipes/libsdl/libsdl-directfb_1.2.9.bb
+++ b/recipes/libsdl/libsdl-directfb_1.2.9.bb
@@ -3,6 +3,8 @@ require libsdl.inc
DEPENDS = "alsa-lib directfb"
DEFAULT_PREFERENCE = "-1"
+PR = "${INC_PR}.0"
+
SRC_URI += "\
file://explicit-extern-C.patch;patch=1 \
file://acinclude.m4 \
diff --git a/recipes/libsdl/libsdl-qpe_1.2.9.bb b/recipes/libsdl/libsdl-qpe_1.2.9.bb
index 711a05d656..4bc985a7c9 100644
--- a/recipes/libsdl/libsdl-qpe_1.2.9.bb
+++ b/recipes/libsdl/libsdl-qpe_1.2.9.bb
@@ -1,6 +1,6 @@
require libsdl.inc
-PR="r1"
+PR = "${INC_PR}.0"
SECTION = "opie/libs"
DEPENDS = "virtual/libqpe1 libopie2"
diff --git a/recipes/libsdl/libsdl-x11_1.2.11.bb b/recipes/libsdl/libsdl-x11_1.2.11.bb
index 0dffe4ab3f..cf2cf49a56 100644
--- a/recipes/libsdl/libsdl-x11_1.2.11.bb
+++ b/recipes/libsdl/libsdl-x11_1.2.11.bb
@@ -3,7 +3,7 @@ require libsdl.inc
# extra-keys.patch is missing
DEFAULT_PREFERENCE = "-1"
-PR = "r8"
+PR = "${INC_PR}.0"
SRC_URI = "\
http://www.libsdl.org/release/SDL-${PV}.tar.gz \
diff --git a/recipes/libsdl/libsdl-x11_1.2.14.bb b/recipes/libsdl/libsdl-x11_1.2.14.bb
index 98269c8f2f..b48791f6be 100644
--- a/recipes/libsdl/libsdl-x11_1.2.14.bb
+++ b/recipes/libsdl/libsdl-x11_1.2.14.bb
@@ -8,7 +8,7 @@ LICENSE = "LGPL"
DEPENDS = "alsa-lib virtual/libgl virtual/libx11 libxext tslib"
DEPENDS_avr32 = "alsa-lib virtual/libx11 libxext tslib"
PROVIDES = "virtual/libsdl"
-PR = "r1"
+PR = "r2"
SRC_URI = " \
http://www.libsdl.org/release/SDL-${PV}.tar.gz \
diff --git a/recipes/libsdl/libsdl.inc b/recipes/libsdl/libsdl.inc
index 0db0be8e14..51a4b22d4f 100644
--- a/recipes/libsdl/libsdl.inc
+++ b/recipes/libsdl/libsdl.inc
@@ -6,7 +6,7 @@ DEPENDS_avr32 = "alsa-lib virtual/libx11 libxext"
PROVIDES = "virtual/libsdl"
LICENSE = "LGPL"
-PR = "r1"
+INC_PR = "r10"
SRC_URI = "\
http://www.libsdl.org/release/SDL-${PV}.tar.gz \
diff --git a/recipes/linphone/files/b64_assert.patch b/recipes/linphone/files/b64_assert.patch
new file mode 100644
index 0000000000..1e89610b8a
--- /dev/null
+++ b/recipes/linphone/files/b64_assert.patch
@@ -0,0 +1,11 @@
+--- linphone-3.1.0/oRTP/src/b64.c.orig 2009-04-13 23:04:35.000000000 -0600
++++ linphone-3.1.0/oRTP/src/b64.c 2009-04-13 23:05:00.000000000 -0600
+@@ -205,7 +205,7 @@
+ /* characters[3] is the right-most 6 bits of src[2] */
+ characters[3] = (char)(src[2] & 0x3f);
+
+-#ifndef __WATCOMC__
++#ifdef XXXX
+ assert(characters[0] >= 0 && characters[0] < 64);
+ assert(characters[1] >= 0 && characters[1] < 64);
+ assert(characters[2] >= 0 && characters[2] < 64);
diff --git a/recipes/linphone/linphone_3.1.0.bb b/recipes/linphone/linphone_3.1.0.bb
index bebaa169e2..e5e1258885 100644
--- a/recipes/linphone/linphone_3.1.0.bb
+++ b/recipes/linphone/linphone_3.1.0.bb
@@ -5,7 +5,7 @@ LICENSE = "GPLv2"
PR = "r1"
-DEPENDS = "intltool libosip2 speex libogg alsa-lib readline libexosip2"
+DEPENDS = "intltool libosip2 speex libogg alsa-lib readline libexosip2 gtk+"
DEPENDS_${PN} = "liblinphone"
DEPENDS_${PN}c = "liblinphone readline"
DEPENDS_liblinphone = "libmediastreamer libortp libosip2"
diff --git a/recipes/linux-libc-headers/linux-libc-headers-2.6.32/0001-implement-TIF_RESTORE_SIGMASK-support-and-enable-the.patch b/recipes/linux-libc-headers/linux-libc-headers-2.6.32/0001-implement-TIF_RESTORE_SIGMASK-support-and-enable-the.patch
new file mode 100644
index 0000000000..1dee314700
--- /dev/null
+++ b/recipes/linux-libc-headers/linux-libc-headers-2.6.32/0001-implement-TIF_RESTORE_SIGMASK-support-and-enable-the.patch
@@ -0,0 +1,429 @@
+Path: news.gmane.org!not-for-mail
+From: Mikael Pettersson <mikpe@it.uu.se>
+Newsgroups: gmane.linux.ports.arm.kernel
+Subject: [PATCH][v3] ARM support for
+ TIF_RESTORE_SIGMASK/pselect6/ppoll/epoll_pwait
+Date: Sat, 15 Aug 2009 13:09:28 +0200 (MEST)
+Lines: 362
+Approved: news@gmane.org
+Message-ID: <200908151109.n7FB9Sbs000150@pilspetsen.it.uu.se>
+NNTP-Posting-Host: lo.gmane.org
+Mime-Version: 1.0
+Content-Type: text/plain; charset="us-ascii"
+Content-Transfer-Encoding: 7bit
+X-Trace: ger.gmane.org 1250334940 22899 80.91.229.12 (15 Aug 2009 11:15:40 GMT)
+X-Complaints-To: usenet@ger.gmane.org
+NNTP-Posting-Date: Sat, 15 Aug 2009 11:15:40 +0000 (UTC)
+To: linux-arm-kernel@lists.arm.linux.org.uk
+Original-X-From: linux-arm-kernel-bounces+linux-arm-kernel=m.gmane.org@lists.arm.linux.org.uk Sat Aug 15 13:15:33 2009
+Return-path: <linux-arm-kernel-bounces+linux-arm-kernel=m.gmane.org@lists.arm.linux.org.uk>
+Envelope-to: linux-arm-kernel@m.gmane.org
+Original-Received: from zeniv.linux.org.uk ([195.92.253.2])
+ by lo.gmane.org with esmtp (Exim 4.50)
+ id 1McHER-0000U2-PG
+ for linux-arm-kernel@m.gmane.org; Sat, 15 Aug 2009 13:15:31 +0200
+Original-Received: from [2002:4e20:1eda:1:201:3dff:fe00:156] (helo=lists.arm.linux.org.uk)
+ by ZenIV.linux.org.uk with esmtpsa (Exim 4.69 #1 (Red Hat Linux))
+ id 1McH9u-0005LV-3W; Sat, 15 Aug 2009 11:10:57 +0000
+DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
+ d=arm.linux.org.uk; s=lists; h=Date:Message-Id:From:To:Subject:
+ List-Id:List-Unsubscribe:List-Archive:List-Post:List-Help:
+ List-Subscribe:MIME-Version:Content-Type:
+ Content-Transfer-Encoding; bh=RVq9hPAexlUcptd3h6j5nomOyoEIjcDWAP
+ VeJtlhsa4=; b=HAoqRMC9svNzKlR0f938E0cRlLoJZvG2aSun171woWZAClu/Ud
+ IYN0iD2vm4eF+kYQkTYD6PGFCMbNnugmZe6gCpS0QhijoKyOzRBdykQHJuOLQtLE
+ q9KJzp24cQ/vwsV2+O1OqcmIFboIg2L5JQaUuv0djS7OkdspH0ysmi1lg=
+Original-Received: from [::1] (helo=lists.arm.linux.org.uk)
+ by lists.arm.linux.org.uk with esmtp (Exim 4.69)
+ (envelope-from <linux-arm-kernel-bounces@lists.arm.linux.org.uk>)
+ id 1McH9o-0002us-34; Sat, 15 Aug 2009 12:10:44 +0100
+Original-Received: from aun.it.uu.se ([130.238.12.36] ident=root)
+ by lists.arm.linux.org.uk with esmtps (TLSv1:AES256-SHA:256)
+ (Exim 4.69) (envelope-from <mikpe@user.it.uu.se>) id 1McH8h-0002uj-Ck
+ for linux-arm-kernel@lists.arm.linux.org.uk;
+ Sat, 15 Aug 2009 12:09:35 +0100
+Original-Received: from pilspetsen.it.uu.se (daemon@pilspetsen.it.uu.se [130.238.18.39])
+ by aun.it.uu.se (8.13.6/8.13.6) with ESMTP id n7FB9S04005839
+ for <linux-arm-kernel@lists.arm.linux.org.uk>;
+ Sat, 15 Aug 2009 13:09:28 +0200 (MEST)
+Original-Received: (from mikpe@localhost)
+ by pilspetsen.it.uu.se (8.13.8+Sun/8.13.7) id n7FB9Sbs000150
+ for linux-arm-kernel@lists.arm.linux.org.uk;
+ Sat, 15 Aug 2009 13:09:28 +0200 (MEST)
+X-BeenThere: linux-arm-kernel@lists.arm.linux.org.uk
+X-Mailman-Version: 2.1.9
+Precedence: list
+List-Id: ARM Linux kernel discussions <linux-arm-kernel.lists.arm.linux.org.uk>
+List-Unsubscribe: <http://lists.arm.linux.org.uk/mailman/listinfo/linux-arm-kernel>,
+ <mailto:linux-arm-kernel-request@lists.arm.linux.org.uk?subject=unsubscribe>
+List-Archive: <http://lists.arm.linux.org.uk/lurker/list/linux-arm-kernel.html>
+List-Post: <mailto:linux-arm-kernel@lists.arm.linux.org.uk>
+List-Help: <mailto:linux-arm-kernel-request@lists.arm.linux.org.uk?subject=help>
+List-Subscribe: <http://lists.arm.linux.org.uk/mailman/listinfo/linux-arm-kernel>,
+ <mailto:linux-arm-kernel-request@lists.arm.linux.org.uk?subject=subscribe>
+Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=m.gmane.org@lists.arm.linux.org.uk
+Xref: news.gmane.org gmane.linux.ports.arm.kernel:64340
+Archived-At: <http://permalink.gmane.org/gmane.linux.ports.arm.kernel/64340>
+
+This patch adds support for TIF_RESTORE_SIGMASK to ARM's signal handling,
+which allows to hook up the pselect6, ppoll, and epoll_pwait syscalls on ARM.
+
+Tested here with eabi userspace and a test program with a deliberate race
+between a child's exit and the parent's sigprocmask/select sequence.
+Using sys_pselect6() instead of sigprocmask/select reliably prevents the race.
+
+The other arch's support for TIF_RESTORE_SIGMASK has evolved over time:
+
+In 2.6.16:
+- add TIF_RESTORE_SIGMASK which parallels TIF_SIGPENDING
+- test both when checking for pending signal [bad, changed later]
+- reimplement sys_sigsuspend() to use current->saved_sigmask,
+ TIF_RESTORE_SIGMASK [changed later], and -ERESTARTNOHAND;
+ ditto for sys_rt_sigsuspend(), but drop private code and
+ use common code via __ARCH_WANT_SYS_RT_SIGSUSPEND;
+- there are now no "extra" calls to do_signal() so its oldset
+ parameter is always &current->blocked so need not be passed,
+ also its return value is changed to void
+- change handle_signal() to return 0/-errno
+- change do_signal() to honor TIF_RESTORE_SIGMASK:
+ + get oldset from current->saved_sigmask if TIF_RESTORE_SIGMASK is set
+ + if handle_signal() was successful then clear TIF_RESTORE_SIGMASK
+ + if no signal was delivered and TIF_RESTORE_SIGMASK is set then
+ clear it and restore the sigmask
+- hook up sys_pselect6() and sys_ppoll()
+
+In 2.6.19:
+- hook up sys_epoll_pwait()
+
+In 2.6.26:
+- allow archs to override how TIF_RESTORE_SIGMASK is implemented;
+ default set_restore_sigmask() sets both TIF_RESTORE_SIGMASK and
+ TIF_SIGPENDING; archs need now just test TIF_SIGPENDING again
+ when checking for pending signal work; some archs now implement
+ TIF_RESTORE_SIGMASK as a secondary/non-atomic thread flag bit
+- call set_restore_sigmask() in sys_sigsuspend() instead of setting
+ TIF_RESTORE_SIGMASK
+
+In 2.6.29-rc:
+- kill sys_pselect7() which no arch wanted
+
+So for 2.6.31-rc6/ARM this patch does the following:
+- Add TIF_RESTORE_SIGMASK. Use the generic set_restore_sigmask()
+ which sets both TIF_SIGPENDING and TIF_RESTORE_SIGMASK, so
+ TIF_RESTORE_SIGMASK need not claim one of the scarce low thread
+ flags, and existing TIF_SIGPENDING and _TIF_WORK_MASK tests need
+ not be extended for TIF_RESTORE_SIGMASK.
+- sys_sigsuspend() is reimplemented to use current->saved_sigmask and
+ set_restore_sigmask(), making it identical to most other archs.
+- The private code for sys_rt_sigsuspend() is removed, instead generic
+ code supplies it via __ARCH_WANT_SYS_RT_SIGSUSPEND.
+- sys_sigsuspend() and sys_rt_sigsuspend() no longer need a pt_regs
+ parameter, so their assembly code wrappers are removed.
+- handle_signal() is changed to return 0 on success or -errno.
+- The oldset parameter to do_signal() is now redundant and removed,
+ and the return value is now also redundant so it's changed to void.
+- do_signal() is changed to honor TIF_RESTORE_SIGMASK:
+ + get oldset from current->saved_sigmask if TIF_RESTORE_SIGMASK is set
+ + if handle_signal() was successful then clear TIF_RESTORE_SIGMASK
+ + if no signal was delivered and TIF_RESTORE_SIGMASK is set then
+ clear it and restore the sigmask
+- Hook up sys_pselect6, sys_ppoll, and sys_epoll_pwait.
+
+Signed-off-by: Mikael Pettersson
+---
+Changes from previous versions:
+
+v2 (only posted as incremental diff against v1):
+- moved sigmask restoration in no-signal-delivered case into
+ "if (syscall)" block for extra protection against exception
+ path also invoking do_signal()
+v3 (this version):
+- moved oldset initialisation into "if (signr > 0)" block,
+ as requested by Russell
+
+ arch/arm/include/asm/thread_info.h | 2
+ arch/arm/include/asm/unistd.h | 7 +--
+ arch/arm/kernel/calls.S | 10 ++--
+ arch/arm/kernel/entry-common.S | 10 ----
+ arch/arm/kernel/signal.c | 86 +++++++++++++++----------------------
+ 5 files changed, 48 insertions(+), 67 deletions(-)
+
+diff -rupN linux-2.6.31-rc6/arch/arm/include/asm/thread_info.h linux-2.6.31-rc6.arm-restore-sigmask-v3/arch/arm/include/asm/thread_info.h
+--- linux-2.6.31-rc6/arch/arm/include/asm/thread_info.h 2009-08-14 11:11:10.000000000 +0200
++++ linux-2.6.31-rc6.arm-restore-sigmask-v3/arch/arm/include/asm/thread_info.h 2009-08-14 11:26:44.000000000 +0200
+@@ -140,6 +140,7 @@ extern void vfp_sync_state(struct thread
+ #define TIF_USING_IWMMXT 17
+ #define TIF_MEMDIE 18
+ #define TIF_FREEZE 19
++#define TIF_RESTORE_SIGMASK 20
+
+ #define _TIF_SIGPENDING (1 << TIF_SIGPENDING)
+ #define _TIF_NEED_RESCHED (1 << TIF_NEED_RESCHED)
+@@ -147,6 +148,7 @@ extern void vfp_sync_state(struct thread
+ #define _TIF_POLLING_NRFLAG (1 << TIF_POLLING_NRFLAG)
+ #define _TIF_USING_IWMMXT (1 << TIF_USING_IWMMXT)
+ #define _TIF_FREEZE (1 << TIF_FREEZE)
++#define _TIF_RESTORE_SIGMASK (1 << TIF_RESTORE_SIGMASK)
+
+ /*
+ * Change these and you break ASM code in entry-common.S
+diff -rupN linux-2.6.31-rc6/arch/arm/include/asm/unistd.h linux-2.6.31-rc6.arm-restore-sigmask-v3/arch/arm/include/asm/unistd.h
+--- linux-2.6.31-rc6/arch/arm/include/asm/unistd.h 2009-08-14 11:11:10.000000000 +0200
++++ linux-2.6.31-rc6.arm-restore-sigmask-v3/arch/arm/include/asm/unistd.h 2009-08-14 11:26:44.000000000 +0200
+@@ -360,8 +360,8 @@
+ #define __NR_readlinkat (__NR_SYSCALL_BASE+332)
+ #define __NR_fchmodat (__NR_SYSCALL_BASE+333)
+ #define __NR_faccessat (__NR_SYSCALL_BASE+334)
+- /* 335 for pselect6 */
+- /* 336 for ppoll */
++#define __NR_pselect6 (__NR_SYSCALL_BASE+335)
++#define __NR_ppoll (__NR_SYSCALL_BASE+336)
+ #define __NR_unshare (__NR_SYSCALL_BASE+337)
+ #define __NR_set_robust_list (__NR_SYSCALL_BASE+338)
+ #define __NR_get_robust_list (__NR_SYSCALL_BASE+339)
+@@ -372,7 +372,7 @@
+ #define __NR_vmsplice (__NR_SYSCALL_BASE+343)
+ #define __NR_move_pages (__NR_SYSCALL_BASE+344)
+ #define __NR_getcpu (__NR_SYSCALL_BASE+345)
+- /* 346 for epoll_pwait */
++#define __NR_epoll_pwait (__NR_SYSCALL_BASE+346)
+ #define __NR_kexec_load (__NR_SYSCALL_BASE+347)
+ #define __NR_utimensat (__NR_SYSCALL_BASE+348)
+ #define __NR_signalfd (__NR_SYSCALL_BASE+349)
+@@ -432,6 +432,7 @@
+ #define __ARCH_WANT_SYS_SIGPENDING
+ #define __ARCH_WANT_SYS_SIGPROCMASK
+ #define __ARCH_WANT_SYS_RT_SIGACTION
++#define __ARCH_WANT_SYS_RT_SIGSUSPEND
+
+ #if !defined(CONFIG_AEABI) || defined(CONFIG_OABI_COMPAT)
+ #define __ARCH_WANT_SYS_TIME
+diff -rupN linux-2.6.31-rc6/arch/arm/kernel/calls.S linux-2.6.31-rc6.arm-restore-sigmask-v3/arch/arm/kernel/calls.S
+--- linux-2.6.31-rc6/arch/arm/kernel/calls.S 2009-08-14 11:11:10.000000000 +0200
++++ linux-2.6.31-rc6.arm-restore-sigmask-v3/arch/arm/kernel/calls.S 2009-08-14 11:26:44.000000000 +0200
+@@ -81,7 +81,7 @@
+ CALL(sys_ni_syscall) /* was sys_ssetmask */
+ /* 70 */ CALL(sys_setreuid16)
+ CALL(sys_setregid16)
+- CALL(sys_sigsuspend_wrapper)
++ CALL(sys_sigsuspend)
+ CALL(sys_sigpending)
+ CALL(sys_sethostname)
+ /* 75 */ CALL(sys_setrlimit)
+@@ -188,7 +188,7 @@
+ CALL(sys_rt_sigpending)
+ CALL(sys_rt_sigtimedwait)
+ CALL(sys_rt_sigqueueinfo)
+- CALL(sys_rt_sigsuspend_wrapper)
++ CALL(sys_rt_sigsuspend)
+ /* 180 */ CALL(ABI(sys_pread64, sys_oabi_pread64))
+ CALL(ABI(sys_pwrite64, sys_oabi_pwrite64))
+ CALL(sys_chown16)
+@@ -344,8 +344,8 @@
+ CALL(sys_readlinkat)
+ CALL(sys_fchmodat)
+ CALL(sys_faccessat)
+-/* 335 */ CALL(sys_ni_syscall) /* eventually pselect6 */
+- CALL(sys_ni_syscall) /* eventually ppoll */
++/* 335 */ CALL(sys_pselect6)
++ CALL(sys_ppoll)
+ CALL(sys_unshare)
+ CALL(sys_set_robust_list)
+ CALL(sys_get_robust_list)
+@@ -355,7 +355,7 @@
+ CALL(sys_vmsplice)
+ CALL(sys_move_pages)
+ /* 345 */ CALL(sys_getcpu)
+- CALL(sys_ni_syscall) /* eventually epoll_pwait */
++ CALL(sys_epoll_pwait)
+ CALL(sys_kexec_load)
+ CALL(sys_utimensat)
+ CALL(sys_signalfd)
+diff -rupN linux-2.6.31-rc6/arch/arm/kernel/entry-common.S linux-2.6.31-rc6.arm-restore-sigmask-v3/arch/arm/kernel/entry-common.S
+--- linux-2.6.31-rc6/arch/arm/kernel/entry-common.S 2009-08-14 11:11:10.000000000 +0200
++++ linux-2.6.31-rc6.arm-restore-sigmask-v3/arch/arm/kernel/entry-common.S 2009-08-14 11:26:44.000000000 +0200
+@@ -373,16 +373,6 @@ sys_clone_wrapper:
+ b sys_clone
+ ENDPROC(sys_clone_wrapper)
+
+-sys_sigsuspend_wrapper:
+- add r3, sp, #S_OFF
+- b sys_sigsuspend
+-ENDPROC(sys_sigsuspend_wrapper)
+-
+-sys_rt_sigsuspend_wrapper:
+- add r2, sp, #S_OFF
+- b sys_rt_sigsuspend
+-ENDPROC(sys_rt_sigsuspend_wrapper)
+-
+ sys_sigreturn_wrapper:
+ add r0, sp, #S_OFF
+ b sys_sigreturn
+diff -rupN linux-2.6.31-rc6/arch/arm/kernel/signal.c linux-2.6.31-rc6.arm-restore-sigmask-v3/arch/arm/kernel/signal.c
+--- linux-2.6.31-rc6/arch/arm/kernel/signal.c 2009-08-14 11:11:10.000000000 +0200
++++ linux-2.6.31-rc6.arm-restore-sigmask-v3/arch/arm/kernel/signal.c 2009-08-14 11:26:44.000000000 +0200
+@@ -47,57 +47,22 @@ const unsigned long sigreturn_codes[7] =
+ MOV_R7_NR_RT_SIGRETURN, SWI_SYS_RT_SIGRETURN, SWI_THUMB_RT_SIGRETURN,
+ };
+
+-static int do_signal(sigset_t *oldset, struct pt_regs * regs, int syscall);
+-
+ /*
+ * atomically swap in the new signal mask, and wait for a signal.
+ */
+-asmlinkage int sys_sigsuspend(int restart, unsigned long oldmask, old_sigset_t mask, struct pt_regs *regs)
++asmlinkage int sys_sigsuspend(int restart, unsigned long oldmask, old_sigset_t mask)
+ {
+- sigset_t saveset;
+-
+ mask &= _BLOCKABLE;
+ spin_lock_irq(&current->sighand->siglock);
+- saveset = current->blocked;
++ current->saved_sigmask = current->blocked;
+ siginitset(&current->blocked, mask);
+ recalc_sigpending();
+ spin_unlock_irq(&current->sighand->siglock);
+- regs->ARM_r0 = -EINTR;
+-
+- while (1) {
+- current->state = TASK_INTERRUPTIBLE;
+- schedule();
+- if (do_signal(&saveset, regs, 0))
+- return regs->ARM_r0;
+- }
+-}
+-
+-asmlinkage int
+-sys_rt_sigsuspend(sigset_t __user *unewset, size_t sigsetsize, struct pt_regs *regs)
+-{
+- sigset_t saveset, newset;
+-
+- /* XXX: Don't preclude handling different sized sigset_t's. */
+- if (sigsetsize != sizeof(sigset_t))
+- return -EINVAL;
+-
+- if (copy_from_user(&newset, unewset, sizeof(newset)))
+- return -EFAULT;
+- sigdelsetmask(&newset, ~_BLOCKABLE);
+-
+- spin_lock_irq(&current->sighand->siglock);
+- saveset = current->blocked;
+- current->blocked = newset;
+- recalc_sigpending();
+- spin_unlock_irq(&current->sighand->siglock);
+- regs->ARM_r0 = -EINTR;
+
+- while (1) {
+- current->state = TASK_INTERRUPTIBLE;
+- schedule();
+- if (do_signal(&saveset, regs, 0))
+- return regs->ARM_r0;
+- }
++ current->state = TASK_INTERRUPTIBLE;
++ schedule();
++ set_restore_sigmask();
++ return -ERESTARTNOHAND;
+ }
+
+ asmlinkage int
+@@ -545,7 +510,7 @@ static inline void setup_syscall_restart
+ /*
+ * OK, we're invoking a handler
+ */
+-static void
++static int
+ handle_signal(unsigned long sig, struct k_sigaction *ka,
+ siginfo_t *info, sigset_t *oldset,
+ struct pt_regs * regs, int syscall)
+@@ -596,7 +561,7 @@ handle_signal(unsigned long sig, struct
+
+ if (ret != 0) {
+ force_sigsegv(sig, tsk);
+- return;
++ return ret;
+ }
+
+ /*
+@@ -610,6 +575,7 @@ handle_signal(unsigned long sig, struct
+ recalc_sigpending();
+ spin_unlock_irq(&tsk->sighand->siglock);
+
++ return 0;
+ }
+
+ /*
+@@ -621,7 +587,7 @@ handle_signal(unsigned long sig, struct
+ * the kernel can handle, and then we build all the user-level signal handling
+ * stack-frames in one go after that.
+ */
+-static int do_signal(sigset_t *oldset, struct pt_regs *regs, int syscall)
++static void do_signal(struct pt_regs *regs, int syscall)
+ {
+ struct k_sigaction ka;
+ siginfo_t info;
+@@ -634,7 +600,7 @@ static int do_signal(sigset_t *oldset, s
+ * if so.
+ */
+ if (!user_mode(regs))
+- return 0;
++ return;
+
+ if (try_to_freeze())
+ goto no_signal;
+@@ -643,9 +609,24 @@ static int do_signal(sigset_t *oldset, s
+
+ signr = get_signal_to_deliver(&info, &ka, regs, NULL);
+ if (signr > 0) {
+- handle_signal(signr, &ka, &info, oldset, regs, syscall);
++ sigset_t *oldset;
++
++ if (test_thread_flag(TIF_RESTORE_SIGMASK))
++ oldset = &current->saved_sigmask;
++ else
++ oldset = &current->blocked;
++ if (handle_signal(signr, &ka, &info, oldset, regs, syscall) == 0) {
++ /*
++ * A signal was successfully delivered; the saved
++ * sigmask will have been stored in the signal frame,
++ * and will be restored by sigreturn, so we can simply
++ * clear the TIF_RESTORE_SIGMASK flag.
++ */
++ if (test_thread_flag(TIF_RESTORE_SIGMASK))
++ clear_thread_flag(TIF_RESTORE_SIGMASK);
++ }
+ single_step_set(current);
+- return 1;
++ return;
+ }
+
+ no_signal:
+@@ -697,14 +678,21 @@ static int do_signal(sigset_t *oldset, s
+ regs->ARM_r0 == -ERESTARTNOINTR) {
+ setup_syscall_restart(regs);
+ }
++
++ /* If there's no signal to deliver, we just put the saved sigmask
++ * back.
++ */
++ if (test_thread_flag(TIF_RESTORE_SIGMASK)) {
++ clear_thread_flag(TIF_RESTORE_SIGMASK);
++ sigprocmask(SIG_SETMASK, &current->saved_sigmask, NULL);
++ }
+ }
+ single_step_set(current);
+- return 0;
+ }
+
+ asmlinkage void
+ do_notify_resume(struct pt_regs *regs, unsigned int thread_flags, int syscall)
+ {
+ if (thread_flags & _TIF_SIGPENDING)
+- do_signal(&current->blocked, regs, syscall);
++ do_signal(regs, syscall);
+ }
+
+-------------------------------------------------------------------
+List admin: http://lists.arm.linux.org.uk/mailman/listinfo/linux-arm-kernel
+FAQ: http://www.arm.linux.org.uk/mailinglists/faq.php
+Etiquette: http://www.arm.linux.org.uk/mailinglists/etiquette.php
+
diff --git a/recipes/linux-libc-headers/linux-libc-headers_2.6.32.bb b/recipes/linux-libc-headers/linux-libc-headers_2.6.32.bb
new file mode 100644
index 0000000000..6e1fdb0996
--- /dev/null
+++ b/recipes/linux-libc-headers/linux-libc-headers_2.6.32.bb
@@ -0,0 +1,50 @@
+require linux-libc-headers.inc
+
+INHIBIT_DEFAULT_DEPS = "1"
+DEPENDS += "unifdef-native"
+PR = "r0"
+
+DEFAULT_PREFERENCE = "-1"
+
+SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${PV}.tar.bz2 \
+ "
+S = "${WORKDIR}/linux-${PV}"
+
+set_arch() {
+ case ${TARGET_ARCH} in
+ alpha*) ARCH=alpha ;;
+ arm*) ARCH=arm ;;
+ cris*) ARCH=cris ;;
+ hppa*) ARCH=parisc ;;
+ i*86*) ARCH=i386 ;;
+ ia64*) ARCH=ia64 ;;
+ mips*) ARCH=mips ;;
+ m68k*) ARCH=m68k ;;
+ powerpc*) ARCH=powerpc ;;
+ s390*) ARCH=s390 ;;
+ sh*) ARCH=sh ;;
+ sparc64*) ARCH=sparc64 ;;
+ sparc*) ARCH=sparc ;;
+ x86_64*) ARCH=x86_64 ;;
+ avr32*) ARCH=avr32 ;;
+ bfin*) ARCH=blackfin ;;
+ esac
+}
+
+do_configure() {
+ set_arch
+ oe_runmake allnoconfig ARCH=$ARCH
+}
+
+do_compile () {
+}
+
+do_install() {
+ set_arch
+ oe_runmake headers_install INSTALL_HDR_PATH=${D}${exec_prefix} ARCH=$ARCH
+}
+
+do_stage () {
+ set_arch
+ oe_runmake headers_install INSTALL_HDR_PATH=${STAGING_DIR_HOST}${layout_prefix} ARCH=$ARCH
+}
diff --git a/recipes/linux/linux-2.6.20/0001-kbuild-include-limits.h-in-sumversion.c-for-PATH_MAX.patch b/recipes/linux/linux-2.6.20/0001-kbuild-include-limits.h-in-sumversion.c-for-PATH_MAX.patch
new file mode 100644
index 0000000000..4871601c97
--- /dev/null
+++ b/recipes/linux/linux-2.6.20/0001-kbuild-include-limits.h-in-sumversion.c-for-PATH_MAX.patch
@@ -0,0 +1,29 @@
+From fc31c7716355a226b8ed4e16f4581e5c8fa53570 Mon Sep 17 00:00:00 2001
+From: Mike Frysinger <vapier@gentoo.org>
+Date: Thu, 17 May 2007 14:57:20 -0400
+Subject: [PATCH] kbuild: include limits.h in sumversion.c for PATH_MAX
+
+POSIX says limits.h defines PATH_MAX so we should include it (which fixes
+compiling on some systems like OS X).
+
+Signed-off-by: Mike Frysinger <vapier@gentoo.org>
+Signed-off-by: Sam Ravnborg <sam@ravnborg.org>
+---
+ scripts/mod/sumversion.c | 1 +
+ 1 files changed, 1 insertions(+), 0 deletions(-)
+
+diff --git a/scripts/mod/sumversion.c b/scripts/mod/sumversion.c
+index 6873d5a..d9cc690 100644
+--- a/scripts/mod/sumversion.c
++++ b/scripts/mod/sumversion.c
+@@ -7,6 +7,7 @@
+ #include <ctype.h>
+ #include <errno.h>
+ #include <string.h>
++#include <limits.h>
+ #include "modpost.h"
+
+ /*
+--
+1.6.3.3
+
diff --git a/recipes/linux/linux-2.6.22.6/mx31moboard/defconfig b/recipes/linux/linux-2.6.22/mx31moboard/defconfig
index 848ec6b4ce..848ec6b4ce 100644
--- a/recipes/linux/linux-2.6.22.6/mx31moboard/defconfig
+++ b/recipes/linux/linux-2.6.22/mx31moboard/defconfig
diff --git a/recipes/linux/linux-2.6.23/em-x270/01-prevent_loop_timespec_add_ns.patch b/recipes/linux/linux-2.6.23/em-x270/01-prevent_loop_timespec_add_ns.patch
deleted file mode 100644
index a2f6e1765e..0000000000
--- a/recipes/linux/linux-2.6.23/em-x270/01-prevent_loop_timespec_add_ns.patch
+++ /dev/null
@@ -1,19 +0,0 @@
----
- include/linux/time.h | 4 ++++
- 1 files changed, 4 insertions(+), 0 deletions(-)
-diff --git a/include/linux/time.h b/include/linux/time.h
-index 2091a19..d32ef0a 100644
---- a/include/linux/time.h
-+++ b/include/linux/time.h
-@@ -173,6 +173,10 @@ static inline void timespec_add_ns(struct timespec *a, u64 ns)
- {
- ns += a->tv_nsec;
- while(unlikely(ns >= NSEC_PER_SEC)) {
-+ /* The following asm() prevents the compiler from
-+ * optimising this loop into a modulo operation. */
-+ asm("" : "+r"(ns));
-+
- ns -= NSEC_PER_SEC;
- a->tv_sec++;
- }
-
diff --git a/recipes/linux/linux-2.6.23/sched-cfs-v2.6.23.12-v24.1.patch b/recipes/linux/linux-2.6.23/sched-cfs-v2.6.23.12-v24.1.patch
new file mode 100644
index 0000000000..77ee5c8f1d
--- /dev/null
+++ b/recipes/linux/linux-2.6.23/sched-cfs-v2.6.23.12-v24.1.patch
@@ -0,0 +1,8567 @@
+---
+ Documentation/sched-design-CFS.txt | 67 +
+ Makefile | 2
+ arch/i386/Kconfig | 11
+ drivers/kvm/kvm.h | 10
+ fs/pipe.c | 9
+ fs/proc/array.c | 21
+ fs/proc/base.c | 2
+ fs/proc/proc_misc.c | 15
+ include/linux/cgroup.h | 12
+ include/linux/cpuset.h | 5
+ include/linux/kernel.h | 7
+ include/linux/kernel_stat.h | 3
+ include/linux/nodemask.h | 94 +
+ include/linux/sched.h | 174 ++
+ include/linux/taskstats.h | 7
+ include/linux/topology.h | 5
+ init/Kconfig | 26
+ init/main.c | 3
+ kernel/delayacct.c | 8
+ kernel/exit.c | 6
+ kernel/fork.c | 5
+ kernel/ksysfs.c | 8
+ kernel/sched.c | 2310 +++++++++++++++++++++++--------------
+ kernel/sched_debug.c | 289 +++-
+ kernel/sched_fair.c | 885 ++++++--------
+ kernel/sched_idletask.c | 26
+ kernel/sched_rt.c | 54
+ kernel/sched_stats.h | 40
+ kernel/sysctl.c | 40
+ kernel/timer.c | 7
+ kernel/tsacct.c | 4
+ kernel/user.c | 249 +++
+ mm/memory_hotplug.c | 7
+ mm/page_alloc.c | 50
+ mm/vmscan.c | 4
+ net/unix/af_unix.c | 4
+ 36 files changed, 2883 insertions(+), 1586 deletions(-)
+
+--- linux-2.6.23.orig/Documentation/sched-design-CFS.txt
++++ linux-2.6.23/Documentation/sched-design-CFS.txt
+@@ -115,5 +115,72 @@ Some implementation details:
+ - reworked/sanitized SMP load-balancing: the runqueue-walking
+ assumptions are gone from the load-balancing code now, and
+ iterators of the scheduling modules are used. The balancing code got
+ quite a bit simpler as a result.
+
++
++Group scheduler extension to CFS
++================================
++
++Normally the scheduler operates on individual tasks and strives to provide
++fair CPU time to each task. Sometimes, it may be desirable to group tasks
++and provide fair CPU time to each such task group. For example, it may
++be desirable to first provide fair CPU time to each user on the system
++and then to each task belonging to a user.
++
++CONFIG_FAIR_GROUP_SCHED strives to achieve exactly that. It lets
++SCHED_NORMAL/BATCH tasks be be grouped and divides CPU time fairly among such
++groups. At present, there are two (mutually exclusive) mechanisms to group
++tasks for CPU bandwidth control purpose:
++
++ - Based on user id (CONFIG_FAIR_USER_SCHED)
++ In this option, tasks are grouped according to their user id.
++ - Based on "cgroup" pseudo filesystem (CONFIG_FAIR_CGROUP_SCHED)
++ This options lets the administrator create arbitrary groups
++ of tasks, using the "cgroup" pseudo filesystem. See
++ Documentation/cgroups.txt for more information about this
++ filesystem.
++
++Only one of these options to group tasks can be chosen and not both.
++
++Group scheduler tunables:
++
++When CONFIG_FAIR_USER_SCHED is defined, a directory is created in sysfs for
++each new user and a "cpu_share" file is added in that directory.
++
++ # cd /sys/kernel/uids
++ # cat 512/cpu_share # Display user 512's CPU share
++ 1024
++ # echo 2048 > 512/cpu_share # Modify user 512's CPU share
++ # cat 512/cpu_share # Display user 512's CPU share
++ 2048
++ #
++
++CPU bandwidth between two users are divided in the ratio of their CPU shares.
++For ex: if you would like user "root" to get twice the bandwidth of user
++"guest", then set the cpu_share for both the users such that "root"'s
++cpu_share is twice "guest"'s cpu_share
++
++
++When CONFIG_FAIR_CGROUP_SCHED is defined, a "cpu.shares" file is created
++for each group created using the pseudo filesystem. See example steps
++below to create task groups and modify their CPU share using the "cgroups"
++pseudo filesystem
++
++ # mkdir /dev/cpuctl
++ # mount -t cgroup -ocpu none /dev/cpuctl
++ # cd /dev/cpuctl
++
++ # mkdir multimedia # create "multimedia" group of tasks
++ # mkdir browser # create "browser" group of tasks
++
++ # #Configure the multimedia group to receive twice the CPU bandwidth
++ # #that of browser group
++
++ # echo 2048 > multimedia/cpu.shares
++ # echo 1024 > browser/cpu.shares
++
++ # firefox & # Launch firefox and move it to "browser" group
++ # echo <firefox_pid> > browser/tasks
++
++ # #Launch gmplayer (or your favourite movie player)
++ # echo <movie_player_pid> > multimedia/tasks
+--- linux-2.6.23.orig/Makefile
++++ linux-2.6.23/Makefile
+@@ -1,9 +1,9 @@
+ VERSION = 2
+ PATCHLEVEL = 6
+ SUBLEVEL = 23
+-EXTRAVERSION = .17
++EXTRAVERSION = .17-cfs-v24.1
+ NAME = Arr Matey! A Hairy Bilge Rat!
+
+ # *DOCUMENTATION*
+ # To see a list of typical targets execute "make help"
+ # More info can be located in ./README
+--- linux-2.6.23.orig/arch/i386/Kconfig
++++ linux-2.6.23/arch/i386/Kconfig
+@@ -212,10 +212,21 @@ config X86_ES7000
+ Only choose this option if you have such a system, otherwise you
+ should say N here.
+
+ endchoice
+
++config SCHED_NO_NO_OMIT_FRAME_POINTER
++ bool "Single-depth WCHAN output"
++ default y
++ help
++ Calculate simpler /proc/<PID>/wchan values. If this option
++ is disabled then wchan values will recurse back to the
++ caller function. This provides more accurate wchan values,
++ at the expense of slightly more scheduling overhead.
++
++ If in doubt, say "Y".
++
+ config PARAVIRT
+ bool "Paravirtualization support (EXPERIMENTAL)"
+ depends on EXPERIMENTAL
+ depends on !(X86_VISWS || X86_VOYAGER)
+ help
+--- linux-2.6.23.orig/drivers/kvm/kvm.h
++++ linux-2.6.23/drivers/kvm/kvm.h
+@@ -623,10 +623,20 @@ void __kvm_mmu_free_some_pages(struct kv
+ int kvm_mmu_load(struct kvm_vcpu *vcpu);
+ void kvm_mmu_unload(struct kvm_vcpu *vcpu);
+
+ int kvm_hypercall(struct kvm_vcpu *vcpu, struct kvm_run *run);
+
++static inline void kvm_guest_enter(void)
++{
++ current->flags |= PF_VCPU;
++}
++
++static inline void kvm_guest_exit(void)
++{
++ current->flags &= ~PF_VCPU;
++}
++
+ static inline int kvm_mmu_page_fault(struct kvm_vcpu *vcpu, gva_t gva,
+ u32 error_code)
+ {
+ return vcpu->mmu.page_fault(vcpu, gva, error_code);
+ }
+--- linux-2.6.23.orig/fs/pipe.c
++++ linux-2.6.23/fs/pipe.c
+@@ -43,12 +43,11 @@ void pipe_wait(struct pipe_inode_info *p
+
+ /*
+ * Pipes are system-local resources, so sleeping on them
+ * is considered a noninteractive wait:
+ */
+- prepare_to_wait(&pipe->wait, &wait,
+- TASK_INTERRUPTIBLE | TASK_NONINTERACTIVE);
++ prepare_to_wait(&pipe->wait, &wait, TASK_INTERRUPTIBLE);
+ if (pipe->inode)
+ mutex_unlock(&pipe->inode->i_mutex);
+ schedule();
+ finish_wait(&pipe->wait, &wait);
+ if (pipe->inode)
+@@ -381,11 +380,11 @@ redo:
+ }
+ mutex_unlock(&inode->i_mutex);
+
+ /* Signal writers asynchronously that there is more room. */
+ if (do_wakeup) {
+- wake_up_interruptible(&pipe->wait);
++ wake_up_interruptible_sync(&pipe->wait);
+ kill_fasync(&pipe->fasync_writers, SIGIO, POLL_OUT);
+ }
+ if (ret > 0)
+ file_accessed(filp);
+ return ret;
+@@ -554,11 +553,11 @@ redo2:
+ pipe->waiting_writers--;
+ }
+ out:
+ mutex_unlock(&inode->i_mutex);
+ if (do_wakeup) {
+- wake_up_interruptible(&pipe->wait);
++ wake_up_interruptible_sync(&pipe->wait);
+ kill_fasync(&pipe->fasync_readers, SIGIO, POLL_IN);
+ }
+ if (ret > 0)
+ file_update_time(filp);
+ return ret;
+@@ -648,11 +647,11 @@ pipe_release(struct inode *inode, int de
+ pipe->writers -= decw;
+
+ if (!pipe->readers && !pipe->writers) {
+ free_pipe_info(inode);
+ } else {
+- wake_up_interruptible(&pipe->wait);
++ wake_up_interruptible_sync(&pipe->wait);
+ kill_fasync(&pipe->fasync_readers, SIGIO, POLL_IN);
+ kill_fasync(&pipe->fasync_writers, SIGIO, POLL_OUT);
+ }
+ mutex_unlock(&inode->i_mutex);
+
+--- linux-2.6.23.orig/fs/proc/array.c
++++ linux-2.6.23/fs/proc/array.c
+@@ -365,15 +365,22 @@ static cputime_t task_stime(struct task_
+ * grows monotonically - apps rely on that):
+ */
+ stime = nsec_to_clock_t(p->se.sum_exec_runtime) -
+ cputime_to_clock_t(task_utime(p));
+
+- p->prev_stime = max(p->prev_stime, clock_t_to_cputime(stime));
++ if (stime >= 0)
++ p->prev_stime = max(p->prev_stime, clock_t_to_cputime(stime));
++
+ return p->prev_stime;
+ }
+ #endif
+
++static cputime_t task_gtime(struct task_struct *p)
++{
++ return p->gtime;
++}
++
+ static int do_task_stat(struct task_struct *task, char *buffer, int whole)
+ {
+ unsigned long vsize, eip, esp, wchan = ~0UL;
+ long priority, nice;
+ int tty_pgrp = -1, tty_nr = 0;
+@@ -385,10 +392,11 @@ static int do_task_stat(struct task_stru
+ struct mm_struct *mm;
+ unsigned long long start_time;
+ unsigned long cmin_flt = 0, cmaj_flt = 0;
+ unsigned long min_flt = 0, maj_flt = 0;
+ cputime_t cutime, cstime, utime, stime;
++ cputime_t cgtime, gtime;
+ unsigned long rsslim = 0;
+ char tcomm[sizeof(task->comm)];
+ unsigned long flags;
+
+ state = *get_task_state(task);
+@@ -403,10 +411,11 @@ static int do_task_stat(struct task_stru
+ get_task_comm(tcomm, task);
+
+ sigemptyset(&sigign);
+ sigemptyset(&sigcatch);
+ cutime = cstime = utime = stime = cputime_zero;
++ cgtime = gtime = cputime_zero;
+
+ rcu_read_lock();
+ if (lock_task_sighand(task, &flags)) {
+ struct signal_struct *sig = task->signal;
+
+@@ -420,27 +429,30 @@ static int do_task_stat(struct task_stru
+
+ cmin_flt = sig->cmin_flt;
+ cmaj_flt = sig->cmaj_flt;
+ cutime = sig->cutime;
+ cstime = sig->cstime;
++ cgtime = sig->cgtime;
+ rsslim = sig->rlim[RLIMIT_RSS].rlim_cur;
+
+ /* add up live thread stats at the group level */
+ if (whole) {
+ struct task_struct *t = task;
+ do {
+ min_flt += t->min_flt;
+ maj_flt += t->maj_flt;
+ utime = cputime_add(utime, task_utime(t));
+ stime = cputime_add(stime, task_stime(t));
++ gtime = cputime_add(gtime, task_gtime(t));
+ t = next_thread(t);
+ } while (t != task);
+
+ min_flt += sig->min_flt;
+ maj_flt += sig->maj_flt;
+ utime = cputime_add(utime, sig->utime);
+ stime = cputime_add(stime, sig->stime);
++ gtime = cputime_add(gtime, sig->gtime);
+ }
+
+ sid = signal_session(sig);
+ pgid = process_group(task);
+ ppid = rcu_dereference(task->real_parent)->tgid;
+@@ -454,10 +466,11 @@ static int do_task_stat(struct task_stru
+ if (!whole) {
+ min_flt = task->min_flt;
+ maj_flt = task->maj_flt;
+ utime = task_utime(task);
+ stime = task_stime(task);
++ gtime = task_gtime(task);
+ }
+
+ /* scale priority and nice values from timeslices to -20..20 */
+ /* to make it look like a "normal" Unix priority/nice value */
+ priority = task_prio(task);
+@@ -471,11 +484,11 @@ static int do_task_stat(struct task_stru
+ /* convert nsec -> ticks */
+ start_time = nsec_to_clock_t(start_time);
+
+ res = sprintf(buffer, "%d (%s) %c %d %d %d %d %d %u %lu \
+ %lu %lu %lu %lu %lu %ld %ld %ld %ld %d 0 %llu %lu %ld %lu %lu %lu %lu %lu \
+-%lu %lu %lu %lu %lu %lu %lu %lu %d %d %u %u %llu\n",
++%lu %lu %lu %lu %lu %lu %lu %lu %d %d %u %u %llu %lu %ld\n",
+ task->pid,
+ tcomm,
+ state,
+ ppid,
+ pgid,
+@@ -516,11 +529,13 @@ static int do_task_stat(struct task_stru
+ 0UL,
+ task->exit_signal,
+ task_cpu(task),
+ task->rt_priority,
+ task->policy,
+- (unsigned long long)delayacct_blkio_ticks(task));
++ (unsigned long long)delayacct_blkio_ticks(task),
++ cputime_to_clock_t(gtime),
++ cputime_to_clock_t(cgtime));
+ if (mm)
+ mmput(mm);
+ return res;
+ }
+
+--- linux-2.6.23.orig/fs/proc/base.c
++++ linux-2.6.23/fs/proc/base.c
+@@ -302,11 +302,11 @@ static int proc_pid_wchan(struct task_st
+ static int proc_pid_schedstat(struct task_struct *task, char *buffer)
+ {
+ return sprintf(buffer, "%llu %llu %lu\n",
+ task->sched_info.cpu_time,
+ task->sched_info.run_delay,
+- task->sched_info.pcnt);
++ task->sched_info.pcount);
+ }
+ #endif
+
+ /* The badness from the OOM killer */
+ unsigned long badness(struct task_struct *p, unsigned long uptime);
+--- linux-2.6.23.orig/fs/proc/proc_misc.c
++++ linux-2.6.23/fs/proc/proc_misc.c
+@@ -441,20 +441,22 @@ static const struct file_operations proc
+ static int show_stat(struct seq_file *p, void *v)
+ {
+ int i;
+ unsigned long jif;
+ cputime64_t user, nice, system, idle, iowait, irq, softirq, steal;
++ cputime64_t guest;
+ u64 sum = 0;
+ struct timespec boottime;
+ unsigned int *per_irq_sum;
+
+ per_irq_sum = kzalloc(sizeof(unsigned int)*NR_IRQS, GFP_KERNEL);
+ if (!per_irq_sum)
+ return -ENOMEM;
+
+ user = nice = system = idle = iowait =
+ irq = softirq = steal = cputime64_zero;
++ guest = cputime64_zero;
+ getboottime(&boottime);
+ jif = boottime.tv_sec;
+
+ for_each_possible_cpu(i) {
+ int j;
+@@ -465,26 +467,28 @@ static int show_stat(struct seq_file *p,
+ idle = cputime64_add(idle, kstat_cpu(i).cpustat.idle);
+ iowait = cputime64_add(iowait, kstat_cpu(i).cpustat.iowait);
+ irq = cputime64_add(irq, kstat_cpu(i).cpustat.irq);
+ softirq = cputime64_add(softirq, kstat_cpu(i).cpustat.softirq);
+ steal = cputime64_add(steal, kstat_cpu(i).cpustat.steal);
++ guest = cputime64_add(guest, kstat_cpu(i).cpustat.guest);
+ for (j = 0; j < NR_IRQS; j++) {
+ unsigned int temp = kstat_cpu(i).irqs[j];
+ sum += temp;
+ per_irq_sum[j] += temp;
+ }
+ }
+
+- seq_printf(p, "cpu %llu %llu %llu %llu %llu %llu %llu %llu\n",
++ seq_printf(p, "cpu %llu %llu %llu %llu %llu %llu %llu %llu %llu\n",
+ (unsigned long long)cputime64_to_clock_t(user),
+ (unsigned long long)cputime64_to_clock_t(nice),
+ (unsigned long long)cputime64_to_clock_t(system),
+ (unsigned long long)cputime64_to_clock_t(idle),
+ (unsigned long long)cputime64_to_clock_t(iowait),
+ (unsigned long long)cputime64_to_clock_t(irq),
+ (unsigned long long)cputime64_to_clock_t(softirq),
+- (unsigned long long)cputime64_to_clock_t(steal));
++ (unsigned long long)cputime64_to_clock_t(steal),
++ (unsigned long long)cputime64_to_clock_t(guest));
+ for_each_online_cpu(i) {
+
+ /* Copy values here to work around gcc-2.95.3, gcc-2.96 */
+ user = kstat_cpu(i).cpustat.user;
+ nice = kstat_cpu(i).cpustat.nice;
+@@ -492,20 +496,23 @@ static int show_stat(struct seq_file *p,
+ idle = kstat_cpu(i).cpustat.idle;
+ iowait = kstat_cpu(i).cpustat.iowait;
+ irq = kstat_cpu(i).cpustat.irq;
+ softirq = kstat_cpu(i).cpustat.softirq;
+ steal = kstat_cpu(i).cpustat.steal;
+- seq_printf(p, "cpu%d %llu %llu %llu %llu %llu %llu %llu %llu\n",
++ guest = kstat_cpu(i).cpustat.guest;
++ seq_printf(p,
++ "cpu%d %llu %llu %llu %llu %llu %llu %llu %llu %llu\n",
+ i,
+ (unsigned long long)cputime64_to_clock_t(user),
+ (unsigned long long)cputime64_to_clock_t(nice),
+ (unsigned long long)cputime64_to_clock_t(system),
+ (unsigned long long)cputime64_to_clock_t(idle),
+ (unsigned long long)cputime64_to_clock_t(iowait),
+ (unsigned long long)cputime64_to_clock_t(irq),
+ (unsigned long long)cputime64_to_clock_t(softirq),
+- (unsigned long long)cputime64_to_clock_t(steal));
++ (unsigned long long)cputime64_to_clock_t(steal),
++ (unsigned long long)cputime64_to_clock_t(guest));
+ }
+ seq_printf(p, "intr %llu", (unsigned long long)sum);
+
+ #ifndef CONFIG_SMP
+ /* Touches too many cache lines on SMP setups */
+--- /dev/null
++++ linux-2.6.23/include/linux/cgroup.h
+@@ -0,0 +1,12 @@
++#ifndef _LINUX_CGROUP_H
++#define _LINUX_CGROUP_H
++
++/*
++ * Control groups are not backported - we use a few compatibility
++ * defines to be able to use the upstream sched.c as-is:
++ */
++#define task_pid_nr(task) (task)->pid
++#define task_pid_vnr(task) (task)->pid
++#define find_task_by_vpid(pid) find_task_by_pid(pid)
++
++#endif
+--- linux-2.6.23.orig/include/linux/cpuset.h
++++ linux-2.6.23/include/linux/cpuset.h
+@@ -144,8 +144,13 @@ static inline int cpuset_do_slab_mem_spr
+ return 0;
+ }
+
+ static inline void cpuset_track_online_nodes(void) {}
+
++static inline cpumask_t cpuset_cpus_allowed_locked(struct task_struct *p)
++{
++ return cpu_possible_map;
++}
++
+ #endif /* !CONFIG_CPUSETS */
+
+ #endif /* _LINUX_CPUSET_H */
+--- linux-2.6.23.orig/include/linux/kernel.h
++++ linux-2.6.23/include/linux/kernel.h
+@@ -59,10 +59,17 @@ extern const char linux_proc_banner[];
+ #define KERN_WARNING "<4>" /* warning conditions */
+ #define KERN_NOTICE "<5>" /* normal but significant condition */
+ #define KERN_INFO "<6>" /* informational */
+ #define KERN_DEBUG "<7>" /* debug-level messages */
+
++/*
++ * Annotation for a "continued" line of log printout (only done after a
++ * line that had no enclosing \n). Only to be used by core/arch code
++ * during early bootup (a continued line is not SMP-safe otherwise).
++ */
++#define KERN_CONT ""
++
+ extern int console_printk[];
+
+ #define console_loglevel (console_printk[0])
+ #define default_message_loglevel (console_printk[1])
+ #define minimum_console_loglevel (console_printk[2])
+--- linux-2.6.23.orig/include/linux/kernel_stat.h
++++ linux-2.6.23/include/linux/kernel_stat.h
+@@ -21,10 +21,11 @@ struct cpu_usage_stat {
+ cputime64_t softirq;
+ cputime64_t irq;
+ cputime64_t idle;
+ cputime64_t iowait;
+ cputime64_t steal;
++ cputime64_t guest;
+ };
+
+ struct kernel_stat {
+ struct cpu_usage_stat cpustat;
+ unsigned int irqs[NR_IRQS];
+@@ -50,9 +51,11 @@ static inline int kstat_irqs(int irq)
+
+ return sum;
+ }
+
+ extern void account_user_time(struct task_struct *, cputime_t);
++extern void account_user_time_scaled(struct task_struct *, cputime_t);
+ extern void account_system_time(struct task_struct *, int, cputime_t);
++extern void account_system_time_scaled(struct task_struct *, cputime_t);
+ extern void account_steal_time(struct task_struct *, cputime_t);
+
+ #endif /* _LINUX_KERNEL_STAT_H */
+--- linux-2.6.23.orig/include/linux/nodemask.h
++++ linux-2.6.23/include/linux/nodemask.h
+@@ -336,46 +336,108 @@ static inline void __nodes_remap(nodemas
+ if (!nodes_empty(mask)) \
+ for ((node) = 0; (node) < 1; (node)++)
+ #endif /* MAX_NUMNODES */
+
+ /*
++ * Bitmasks that are kept for all the nodes.
++ */
++enum node_states {
++ N_POSSIBLE, /* The node could become online at some point */
++ N_ONLINE, /* The node is online */
++ N_NORMAL_MEMORY, /* The node has regular memory */
++#ifdef CONFIG_HIGHMEM
++ N_HIGH_MEMORY, /* The node has regular or high memory */
++#else
++ N_HIGH_MEMORY = N_NORMAL_MEMORY,
++#endif
++ N_CPU, /* The node has one or more cpus */
++ NR_NODE_STATES
++};
++
++/*
+ * The following particular system nodemasks and operations
+ * on them manage all possible and online nodes.
+ */
+
+-extern nodemask_t node_online_map;
+-extern nodemask_t node_possible_map;
++extern nodemask_t node_states[NR_NODE_STATES];
+
+ #if MAX_NUMNODES > 1
+-#define num_online_nodes() nodes_weight(node_online_map)
+-#define num_possible_nodes() nodes_weight(node_possible_map)
+-#define node_online(node) node_isset((node), node_online_map)
+-#define node_possible(node) node_isset((node), node_possible_map)
+-#define first_online_node first_node(node_online_map)
+-#define next_online_node(nid) next_node((nid), node_online_map)
++static inline int node_state(int node, enum node_states state)
++{
++ return node_isset(node, node_states[state]);
++}
++
++static inline void node_set_state(int node, enum node_states state)
++{
++ __node_set(node, &node_states[state]);
++}
++
++static inline void node_clear_state(int node, enum node_states state)
++{
++ __node_clear(node, &node_states[state]);
++}
++
++static inline int num_node_state(enum node_states state)
++{
++ return nodes_weight(node_states[state]);
++}
++
++#define for_each_node_state(__node, __state) \
++ for_each_node_mask((__node), node_states[__state])
++
++#define first_online_node first_node(node_states[N_ONLINE])
++#define next_online_node(nid) next_node((nid), node_states[N_ONLINE])
++
+ extern int nr_node_ids;
+ #else
+-#define num_online_nodes() 1
+-#define num_possible_nodes() 1
+-#define node_online(node) ((node) == 0)
+-#define node_possible(node) ((node) == 0)
++
++static inline int node_state(int node, enum node_states state)
++{
++ return node == 0;
++}
++
++static inline void node_set_state(int node, enum node_states state)
++{
++}
++
++static inline void node_clear_state(int node, enum node_states state)
++{
++}
++
++static inline int num_node_state(enum node_states state)
++{
++ return 1;
++}
++
++#define for_each_node_state(node, __state) \
++ for ( (node) = 0; (node) == 0; (node) = 1)
++
+ #define first_online_node 0
+ #define next_online_node(nid) (MAX_NUMNODES)
+ #define nr_node_ids 1
++
+ #endif
+
++#define node_online_map node_states[N_ONLINE]
++#define node_possible_map node_states[N_POSSIBLE]
++
+ #define any_online_node(mask) \
+ ({ \
+ int node; \
+ for_each_node_mask(node, (mask)) \
+ if (node_online(node)) \
+ break; \
+ node; \
+ })
+
+-#define node_set_online(node) set_bit((node), node_online_map.bits)
+-#define node_set_offline(node) clear_bit((node), node_online_map.bits)
++#define num_online_nodes() num_node_state(N_ONLINE)
++#define num_possible_nodes() num_node_state(N_POSSIBLE)
++#define node_online(node) node_state((node), N_ONLINE)
++#define node_possible(node) node_state((node), N_POSSIBLE)
++
++#define node_set_online(node) node_set_state((node), N_ONLINE)
++#define node_set_offline(node) node_clear_state((node), N_ONLINE)
+
+-#define for_each_node(node) for_each_node_mask((node), node_possible_map)
+-#define for_each_online_node(node) for_each_node_mask((node), node_online_map)
++#define for_each_node(node) for_each_node_state(node, N_POSSIBLE)
++#define for_each_online_node(node) for_each_node_state(node, N_ONLINE)
+
+ #endif /* __LINUX_NODEMASK_H */
+--- linux-2.6.23.orig/include/linux/sched.h
++++ linux-2.6.23/include/linux/sched.h
+@@ -1,10 +1,21 @@
+ #ifndef _LINUX_SCHED_H
+ #define _LINUX_SCHED_H
+
+ #include <linux/auxvec.h> /* For AT_VECTOR_SIZE */
+
++/* backporting helper macro: */
++#define cpu_sibling_map(cpu) cpu_sibling_map[cpu]
++
++/*
++ * * Control groups are not backported - we use a few compatibility
++ * * defines to be able to use the upstream sched.c as-is:
++ * */
++#define task_pid_nr(task) (task)->pid
++#define task_pid_vnr(task) (task)->pid
++#define find_task_by_vpid(pid) find_task_by_pid(pid)
++
+ /*
+ * cloning flags:
+ */
+ #define CSIGNAL 0x000000ff /* signal mask to be sent at exit */
+ #define CLONE_VM 0x00000100 /* set if VM shared between processes */
+@@ -84,10 +95,11 @@ struct sched_param {
+ #include <linux/param.h>
+ #include <linux/resource.h>
+ #include <linux/timer.h>
+ #include <linux/hrtimer.h>
+ #include <linux/task_io_accounting.h>
++#include <linux/kobject.h>
+
+ #include <asm/processor.h>
+
+ struct exec_domain;
+ struct futex_pi_state;
+@@ -133,10 +145,11 @@ extern unsigned long nr_active(void);
+ extern unsigned long nr_iowait(void);
+ extern unsigned long weighted_cpuload(const int cpu);
+
+ struct seq_file;
+ struct cfs_rq;
++struct task_group;
+ #ifdef CONFIG_SCHED_DEBUG
+ extern void proc_sched_show_task(struct task_struct *p, struct seq_file *m);
+ extern void proc_sched_set_task(struct task_struct *p);
+ extern void
+ print_cfs_rq(struct seq_file *m, int cpu, struct cfs_rq *cfs_rq);
+@@ -171,12 +184,11 @@ print_cfs_rq(struct seq_file *m, int cpu
+ #define TASK_TRACED 8
+ /* in tsk->exit_state */
+ #define EXIT_ZOMBIE 16
+ #define EXIT_DEAD 32
+ /* in tsk->state again */
+-#define TASK_NONINTERACTIVE 64
+-#define TASK_DEAD 128
++#define TASK_DEAD 64
+
+ #define __set_task_state(tsk, state_value) \
+ do { (tsk)->state = (state_value); } while (0)
+ #define set_task_state(tsk, state_value) \
+ set_mb((tsk)->state, (state_value))
+@@ -276,10 +288,14 @@ static inline void touch_all_softlockup_
+ #endif
+
+
+ /* Attach to any functions which should be ignored in wchan output. */
+ #define __sched __attribute__((__section__(".sched.text")))
++
++/* Linker adds these: start and end of __sched functions */
++extern char __sched_text_start[], __sched_text_end[];
++
+ /* Is this address in the __sched functions? */
+ extern int in_sched_functions(unsigned long addr);
+
+ #define MAX_SCHEDULE_TIMEOUT LONG_MAX
+ extern signed long FASTCALL(schedule_timeout(signed long timeout));
+@@ -513,10 +529,12 @@ struct signal_struct {
+ * and for reaped dead child processes forked by this group.
+ * Live threads maintain their own counters and add to these
+ * in __exit_signal, except for the group leader.
+ */
+ cputime_t utime, stime, cutime, cstime;
++ cputime_t gtime;
++ cputime_t cgtime;
+ unsigned long nvcsw, nivcsw, cnvcsw, cnivcsw;
+ unsigned long min_flt, maj_flt, cmin_flt, cmaj_flt;
+ unsigned long inblock, oublock, cinblock, coublock;
+
+ /*
+@@ -593,12 +611,27 @@ struct user_struct {
+ #endif
+
+ /* Hash table maintenance information */
+ struct hlist_node uidhash_node;
+ uid_t uid;
++
++#ifdef CONFIG_FAIR_USER_SCHED
++ struct task_group *tg;
++#ifdef CONFIG_SYSFS
++ struct kset kset;
++ struct subsys_attribute user_attr;
++ struct work_struct work;
++#endif
++#endif
+ };
+
++#ifdef CONFIG_FAIR_USER_SCHED
++extern int uids_kobject_init(void);
++#else
++static inline int uids_kobject_init(void) { return 0; }
++#endif
++
+ extern struct user_struct *find_user(uid_t);
+
+ extern struct user_struct root_user;
+ #define INIT_USER (&root_user)
+
+@@ -606,17 +639,21 @@ struct backing_dev_info;
+ struct reclaim_state;
+
+ #if defined(CONFIG_SCHEDSTATS) || defined(CONFIG_TASK_DELAY_ACCT)
+ struct sched_info {
+ /* cumulative counters */
+- unsigned long pcnt; /* # of times run on this cpu */
++ unsigned long pcount; /* # of times run on this cpu */
+ unsigned long long cpu_time, /* time spent on the cpu */
+ run_delay; /* time spent waiting on a runqueue */
+
+ /* timestamps */
+ unsigned long long last_arrival,/* when we last ran on a cpu */
+ last_queued; /* when we were last queued to run */
++#ifdef CONFIG_SCHEDSTATS
++ /* BKL stats */
++ unsigned int bkl_count;
++#endif
+ };
+ #endif /* defined(CONFIG_SCHEDSTATS) || defined(CONFIG_TASK_DELAY_ACCT) */
+
+ #ifdef CONFIG_SCHEDSTATS
+ extern const struct file_operations proc_schedstat_operations;
+@@ -747,43 +784,42 @@ struct sched_domain {
+ unsigned int balance_interval; /* initialise to 1. units in ms. */
+ unsigned int nr_balance_failed; /* initialise to 0 */
+
+ #ifdef CONFIG_SCHEDSTATS
+ /* load_balance() stats */
+- unsigned long lb_cnt[CPU_MAX_IDLE_TYPES];
+- unsigned long lb_failed[CPU_MAX_IDLE_TYPES];
+- unsigned long lb_balanced[CPU_MAX_IDLE_TYPES];
+- unsigned long lb_imbalance[CPU_MAX_IDLE_TYPES];
+- unsigned long lb_gained[CPU_MAX_IDLE_TYPES];
+- unsigned long lb_hot_gained[CPU_MAX_IDLE_TYPES];
+- unsigned long lb_nobusyg[CPU_MAX_IDLE_TYPES];
+- unsigned long lb_nobusyq[CPU_MAX_IDLE_TYPES];
++ unsigned int lb_count[CPU_MAX_IDLE_TYPES];
++ unsigned int lb_failed[CPU_MAX_IDLE_TYPES];
++ unsigned int lb_balanced[CPU_MAX_IDLE_TYPES];
++ unsigned int lb_imbalance[CPU_MAX_IDLE_TYPES];
++ unsigned int lb_gained[CPU_MAX_IDLE_TYPES];
++ unsigned int lb_hot_gained[CPU_MAX_IDLE_TYPES];
++ unsigned int lb_nobusyg[CPU_MAX_IDLE_TYPES];
++ unsigned int lb_nobusyq[CPU_MAX_IDLE_TYPES];
+
+ /* Active load balancing */
+- unsigned long alb_cnt;
+- unsigned long alb_failed;
+- unsigned long alb_pushed;
++ unsigned int alb_count;
++ unsigned int alb_failed;
++ unsigned int alb_pushed;
+
+ /* SD_BALANCE_EXEC stats */
+- unsigned long sbe_cnt;
+- unsigned long sbe_balanced;
+- unsigned long sbe_pushed;
++ unsigned int sbe_count;
++ unsigned int sbe_balanced;
++ unsigned int sbe_pushed;
+
+ /* SD_BALANCE_FORK stats */
+- unsigned long sbf_cnt;
+- unsigned long sbf_balanced;
+- unsigned long sbf_pushed;
++ unsigned int sbf_count;
++ unsigned int sbf_balanced;
++ unsigned int sbf_pushed;
+
+ /* try_to_wake_up() stats */
+- unsigned long ttwu_wake_remote;
+- unsigned long ttwu_move_affine;
+- unsigned long ttwu_move_balance;
++ unsigned int ttwu_wake_remote;
++ unsigned int ttwu_move_affine;
++ unsigned int ttwu_move_balance;
+ #endif
+ };
+
+-extern int partition_sched_domains(cpumask_t *partition1,
+- cpumask_t *partition2);
++extern void partition_sched_domains(int ndoms_new, cpumask_t *doms_new);
+
+ #endif /* CONFIG_SMP */
+
+ /*
+ * A runqueue laden with a single nice 0 task scores a weighted_cpuload of
+@@ -851,27 +887,32 @@ struct uts_namespace;
+
+ struct rq;
+ struct sched_domain;
+
+ struct sched_class {
+- struct sched_class *next;
++ const struct sched_class *next;
+
+ void (*enqueue_task) (struct rq *rq, struct task_struct *p, int wakeup);
+ void (*dequeue_task) (struct rq *rq, struct task_struct *p, int sleep);
+- void (*yield_task) (struct rq *rq, struct task_struct *p);
++ void (*yield_task) (struct rq *rq);
+
+ void (*check_preempt_curr) (struct rq *rq, struct task_struct *p);
+
+ struct task_struct * (*pick_next_task) (struct rq *rq);
+ void (*put_prev_task) (struct rq *rq, struct task_struct *p);
+
++#ifdef CONFIG_SMP
+ unsigned long (*load_balance) (struct rq *this_rq, int this_cpu,
+- struct rq *busiest,
+- unsigned long max_nr_move, unsigned long max_load_move,
++ struct rq *busiest, unsigned long max_load_move,
+ struct sched_domain *sd, enum cpu_idle_type idle,
+ int *all_pinned, int *this_best_prio);
+
++ int (*move_one_task) (struct rq *this_rq, int this_cpu,
++ struct rq *busiest, struct sched_domain *sd,
++ enum cpu_idle_type idle);
++#endif
++
+ void (*set_curr_task) (struct rq *rq);
+ void (*task_tick) (struct rq *rq, struct task_struct *p);
+ void (*task_new) (struct rq *rq, struct task_struct *p);
+ };
+
+@@ -885,46 +926,52 @@ struct load_weight {
+ * Current field usage histogram:
+ *
+ * 4 se->block_start
+ * 4 se->run_node
+ * 4 se->sleep_start
+- * 4 se->sleep_start_fair
+ * 6 se->load.weight
+- * 7 se->delta_fair
+- * 15 se->wait_runtime
+ */
+ struct sched_entity {
+- long wait_runtime;
+- unsigned long delta_fair_run;
+- unsigned long delta_fair_sleep;
+- unsigned long delta_exec;
+- s64 fair_key;
+ struct load_weight load; /* for load-balancing */
+ struct rb_node run_node;
+ unsigned int on_rq;
+
+ u64 exec_start;
+ u64 sum_exec_runtime;
++ u64 vruntime;
+ u64 prev_sum_exec_runtime;
+- u64 wait_start_fair;
+- u64 sleep_start_fair;
+
+ #ifdef CONFIG_SCHEDSTATS
+ u64 wait_start;
+ u64 wait_max;
+- s64 sum_wait_runtime;
+
+ u64 sleep_start;
+ u64 sleep_max;
+ s64 sum_sleep_runtime;
+
+ u64 block_start;
+ u64 block_max;
+ u64 exec_max;
++ u64 slice_max;
+
+- unsigned long wait_runtime_overruns;
+- unsigned long wait_runtime_underruns;
++ u64 nr_migrations;
++ u64 nr_migrations_cold;
++ u64 nr_failed_migrations_affine;
++ u64 nr_failed_migrations_running;
++ u64 nr_failed_migrations_hot;
++ u64 nr_forced_migrations;
++ u64 nr_forced2_migrations;
++
++ u64 nr_wakeups;
++ u64 nr_wakeups_sync;
++ u64 nr_wakeups_migrate;
++ u64 nr_wakeups_local;
++ u64 nr_wakeups_remote;
++ u64 nr_wakeups_affine;
++ u64 nr_wakeups_affine_attempts;
++ u64 nr_wakeups_passive;
++ u64 nr_wakeups_idle;
+ #endif
+
+ #ifdef CONFIG_FAIR_GROUP_SCHED
+ struct sched_entity *parent;
+ /* rq on which this entity is (to be) queued: */
+@@ -949,11 +996,11 @@ struct task_struct {
+ #endif
+ #endif
+
+ int prio, static_prio, normal_prio;
+ struct list_head run_list;
+- struct sched_class *sched_class;
++ const struct sched_class *sched_class;
+ struct sched_entity se;
+
+ #ifdef CONFIG_PREEMPT_NOTIFIERS
+ /* list of struct preempt_notifier: */
+ struct hlist_head preempt_notifiers;
+@@ -1019,11 +1066,12 @@ struct task_struct {
+ struct completion *vfork_done; /* for vfork() */
+ int __user *set_child_tid; /* CLONE_CHILD_SETTID */
+ int __user *clear_child_tid; /* CLONE_CHILD_CLEARTID */
+
+ unsigned int rt_priority;
+- cputime_t utime, stime;
++ cputime_t utime, stime, utimescaled, stimescaled;
++ cputime_t gtime;
+ cputime_t prev_utime, prev_stime;
+ unsigned long nvcsw, nivcsw; /* context switch counts */
+ struct timespec start_time; /* monotonic time */
+ struct timespec real_start_time; /* boot based time */
+ /* mm fault and swap info: this can arguably be seen as either mm-specific or thread-specific */
+@@ -1312,10 +1360,11 @@ static inline void put_task_struct(struc
+ #define PF_ALIGNWARN 0x00000001 /* Print alignment warning msgs */
+ /* Not implemented yet, only for 486*/
+ #define PF_STARTING 0x00000002 /* being created */
+ #define PF_EXITING 0x00000004 /* getting shut down */
+ #define PF_EXITPIDONE 0x00000008 /* pi exit done on shut down */
++#define PF_VCPU 0x00000010 /* I'm a virtual CPU */
+ #define PF_FORKNOEXEC 0x00000040 /* forked but didn't exec */
+ #define PF_SUPERPRIV 0x00000100 /* used super-user privileges */
+ #define PF_DUMPCORE 0x00000200 /* dumped core */
+ #define PF_SIGNALED 0x00000400 /* killed by a signal */
+ #define PF_MEMALLOC 0x00000800 /* Allocating memory */
+@@ -1399,19 +1448,30 @@ extern void idle_task_exit(void);
+ static inline void idle_task_exit(void) {}
+ #endif
+
+ extern void sched_idle_next(void);
+
++#ifdef CONFIG_SCHED_DEBUG
+ extern unsigned int sysctl_sched_latency;
+ extern unsigned int sysctl_sched_min_granularity;
+ extern unsigned int sysctl_sched_wakeup_granularity;
+ extern unsigned int sysctl_sched_batch_wakeup_granularity;
+-extern unsigned int sysctl_sched_stat_granularity;
+-extern unsigned int sysctl_sched_runtime_limit;
+-extern unsigned int sysctl_sched_compat_yield;
+ extern unsigned int sysctl_sched_child_runs_first;
+ extern unsigned int sysctl_sched_features;
++extern unsigned int sysctl_sched_migration_cost;
++extern unsigned int sysctl_sched_nr_migrate;
++#ifdef CONFIG_FAIR_GROUP_SCHED
++extern unsigned int sysctl_sched_min_bal_int_shares;
++extern unsigned int sysctl_sched_max_bal_int_shares;
++#endif
++
++int sched_nr_latency_handler(struct ctl_table *table, int write,
++ struct file *file, void __user *buffer, size_t *length,
++ loff_t *ppos);
++#endif
++
++extern unsigned int sysctl_sched_compat_yield;
+
+ #ifdef CONFIG_RT_MUTEXES
+ extern int rt_mutex_getprio(struct task_struct *p);
+ extern void rt_mutex_setprio(struct task_struct *p, int prio);
+ extern void rt_mutex_adjust_pi(struct task_struct *p);
+@@ -1841,10 +1901,22 @@ extern long sched_getaffinity(pid_t pid,
+
+ extern int sched_mc_power_savings, sched_smt_power_savings;
+
+ extern void normalize_rt_tasks(void);
+
++#ifdef CONFIG_FAIR_GROUP_SCHED
++
++extern struct task_group init_task_group;
++
++extern struct task_group *sched_create_group(void);
++extern void sched_destroy_group(struct task_group *tg);
++extern void sched_move_task(struct task_struct *tsk);
++extern int sched_group_set_shares(struct task_group *tg, unsigned long shares);
++extern unsigned long sched_group_shares(struct task_group *tg);
++
++#endif
++
+ #ifdef CONFIG_TASK_XACCT
+ static inline void add_rchar(struct task_struct *tsk, ssize_t amt)
+ {
+ tsk->rchar += amt;
+ }
+@@ -1879,8 +1951,16 @@ static inline void inc_syscr(struct task
+ static inline void inc_syscw(struct task_struct *tsk)
+ {
+ }
+ #endif
+
++#ifdef CONFIG_SMP
++void migration_init(void);
++#else
++static inline void migration_init(void)
++{
++}
++#endif
++
+ #endif /* __KERNEL__ */
+
+ #endif
+--- linux-2.6.23.orig/include/linux/taskstats.h
++++ linux-2.6.23/include/linux/taskstats.h
+@@ -29,11 +29,11 @@
+ * b) add comment indicating new version number at end of struct
+ * c) add new fields after version comment; maintain 64-bit alignment
+ */
+
+
+-#define TASKSTATS_VERSION 5
++#define TASKSTATS_VERSION 6
+ #define TS_COMM_LEN 32 /* should be >= TASK_COMM_LEN
+ * in linux/sched.h */
+
+ struct taskstats {
+
+@@ -150,10 +150,15 @@ struct taskstats {
+ __u64 write_bytes; /* bytes of write I/O */
+ __u64 cancelled_write_bytes; /* bytes of cancelled write I/O */
+
+ __u64 nvcsw; /* voluntary_ctxt_switches */
+ __u64 nivcsw; /* nonvoluntary_ctxt_switches */
++
++ /* time accounting for SMT machines */
++ __u64 ac_utimescaled; /* utime scaled on frequency etc */
++ __u64 ac_stimescaled; /* stime scaled on frequency etc */
++ __u64 cpu_scaled_run_real_total; /* scaled cpu_run_real_total */
+ };
+
+
+ /*
+ * Commands sent from userspace
+--- linux-2.6.23.orig/include/linux/topology.h
++++ linux-2.6.23/include/linux/topology.h
+@@ -157,19 +157,18 @@
+ .max_interval = 4, \
+ .busy_factor = 64, \
+ .imbalance_pct = 125, \
+ .cache_nice_tries = 1, \
+ .busy_idx = 2, \
+- .idle_idx = 0, \
+- .newidle_idx = 0, \
++ .idle_idx = 1, \
++ .newidle_idx = 2, \
+ .wake_idx = 1, \
+ .forkexec_idx = 1, \
+ .flags = SD_LOAD_BALANCE \
+ | SD_BALANCE_NEWIDLE \
+ | SD_BALANCE_EXEC \
+ | SD_WAKE_AFFINE \
+- | SD_WAKE_IDLE \
+ | BALANCE_FOR_PKG_POWER,\
+ .last_balance = jiffies, \
+ .balance_interval = 1, \
+ .nr_balance_failed = 0, \
+ }
+--- linux-2.6.23.orig/init/Kconfig
++++ linux-2.6.23/init/Kconfig
+@@ -271,18 +271,44 @@ config LOG_BUF_SHIFT
+ 12 => 4 KB
+
+ config CPUSETS
+ bool "Cpuset support"
+ depends on SMP
++ #
++ # disabled for now - depends on control groups, which
++ # are hard to backport:
++ #
++ depends on 0
+ help
+ This option will let you create and manage CPUSETs which
+ allow dynamically partitioning a system into sets of CPUs and
+ Memory Nodes and assigning tasks to run only within those sets.
+ This is primarily useful on large SMP or NUMA systems.
+
+ Say N if unsure.
+
++config FAIR_GROUP_SCHED
++ bool "Fair group CPU scheduler"
++ default y
++ depends on EXPERIMENTAL
++ help
++ This feature lets CPU scheduler recognize task groups and control CPU
++ bandwidth allocation to such task groups.
++
++choice
++ depends on FAIR_GROUP_SCHED
++ prompt "Basis for grouping tasks"
++ default FAIR_USER_SCHED
++
++config FAIR_USER_SCHED
++ bool "user id"
++ help
++ This option will choose userid as the basis for grouping
++ tasks, thus providing equal CPU bandwidth to each user.
++
++endchoice
++
+ config SYSFS_DEPRECATED
+ bool "Create deprecated sysfs files"
+ default y
+ help
+ This option creates deprecated symlinks such as the
+--- linux-2.6.23.orig/init/main.c
++++ linux-2.6.23/init/main.c
+@@ -750,15 +750,12 @@ static int __init nosoftlockup_setup(cha
+ __setup("nosoftlockup", nosoftlockup_setup);
+
+ static void __init do_pre_smp_initcalls(void)
+ {
+ extern int spawn_ksoftirqd(void);
+-#ifdef CONFIG_SMP
+- extern int migration_init(void);
+
+ migration_init();
+-#endif
+ spawn_ksoftirqd();
+ if (!nosoftlockup)
+ spawn_softlockup_task();
+ }
+
+--- linux-2.6.23.orig/kernel/delayacct.c
++++ linux-2.6.23/kernel/delayacct.c
+@@ -113,15 +113,21 @@ int __delayacct_add_tsk(struct taskstats
+ tmp = (s64)d->cpu_run_real_total;
+ cputime_to_timespec(tsk->utime + tsk->stime, &ts);
+ tmp += timespec_to_ns(&ts);
+ d->cpu_run_real_total = (tmp < (s64)d->cpu_run_real_total) ? 0 : tmp;
+
++ tmp = (s64)d->cpu_scaled_run_real_total;
++ cputime_to_timespec(tsk->utimescaled + tsk->stimescaled, &ts);
++ tmp += timespec_to_ns(&ts);
++ d->cpu_scaled_run_real_total =
++ (tmp < (s64)d->cpu_scaled_run_real_total) ? 0 : tmp;
++
+ /*
+ * No locking available for sched_info (and too expensive to add one)
+ * Mitigate by taking snapshot of values
+ */
+- t1 = tsk->sched_info.pcnt;
++ t1 = tsk->sched_info.pcount;
+ t2 = tsk->sched_info.run_delay;
+ t3 = tsk->sched_info.cpu_time;
+
+ d->cpu_count += t1;
+
+--- linux-2.6.23.orig/kernel/exit.c
++++ linux-2.6.23/kernel/exit.c
+@@ -109,10 +109,11 @@ static void __exit_signal(struct task_st
+ * We won't ever get here for the group leader, since it
+ * will have been the last reference on the signal_struct.
+ */
+ sig->utime = cputime_add(sig->utime, tsk->utime);
+ sig->stime = cputime_add(sig->stime, tsk->stime);
++ sig->gtime = cputime_add(sig->gtime, tsk->gtime);
+ sig->min_flt += tsk->min_flt;
+ sig->maj_flt += tsk->maj_flt;
+ sig->nvcsw += tsk->nvcsw;
+ sig->nivcsw += tsk->nivcsw;
+ sig->inblock += task_io_get_inblock(tsk);
+@@ -1240,10 +1241,15 @@ static int wait_task_zombie(struct task_
+ psig->cstime =
+ cputime_add(psig->cstime,
+ cputime_add(p->stime,
+ cputime_add(sig->stime,
+ sig->cstime)));
++ psig->cgtime =
++ cputime_add(psig->cgtime,
++ cputime_add(p->gtime,
++ cputime_add(sig->gtime,
++ sig->cgtime)));
+ psig->cmin_flt +=
+ p->min_flt + sig->min_flt + sig->cmin_flt;
+ psig->cmaj_flt +=
+ p->maj_flt + sig->maj_flt + sig->cmaj_flt;
+ psig->cnvcsw +=
+--- linux-2.6.23.orig/kernel/fork.c
++++ linux-2.6.23/kernel/fork.c
+@@ -875,10 +875,12 @@ static inline int copy_signal(unsigned l
+
+ sig->leader = 0; /* session leadership doesn't inherit */
+ sig->tty_old_pgrp = NULL;
+
+ sig->utime = sig->stime = sig->cutime = sig->cstime = cputime_zero;
++ sig->gtime = cputime_zero;
++ sig->cgtime = cputime_zero;
+ sig->nvcsw = sig->nivcsw = sig->cnvcsw = sig->cnivcsw = 0;
+ sig->min_flt = sig->maj_flt = sig->cmin_flt = sig->cmaj_flt = 0;
+ sig->inblock = sig->oublock = sig->cinblock = sig->coublock = 0;
+ sig->sum_sched_runtime = 0;
+ INIT_LIST_HEAD(&sig->cpu_timers[0]);
+@@ -1045,10 +1047,13 @@ static struct task_struct *copy_process(
+
+ p->utime = cputime_zero;
+ p->stime = cputime_zero;
+ p->prev_utime = cputime_zero;
+ p->prev_stime = cputime_zero;
++ p->gtime = cputime_zero;
++ p->utimescaled = cputime_zero;
++ p->stimescaled = cputime_zero;
+
+ #ifdef CONFIG_TASK_XACCT
+ p->rchar = 0; /* I/O counter: bytes read */
+ p->wchar = 0; /* I/O counter: bytes written */
+ p->syscr = 0; /* I/O counter: read syscalls */
+--- linux-2.6.23.orig/kernel/ksysfs.c
++++ linux-2.6.23/kernel/ksysfs.c
+@@ -12,10 +12,11 @@
+ #include <linux/string.h>
+ #include <linux/sysfs.h>
+ #include <linux/module.h>
+ #include <linux/init.h>
+ #include <linux/kexec.h>
++#include <linux/sched.h>
+
+ #define KERNEL_ATTR_RO(_name) \
+ static struct subsys_attribute _name##_attr = __ATTR_RO(_name)
+
+ #define KERNEL_ATTR_RW(_name) \
+@@ -114,9 +115,16 @@ static int __init ksysfs_init(void)
+ notes_attr.size = notes_size;
+ error = sysfs_create_bin_file(&kernel_subsys.kobj,
+ &notes_attr);
+ }
+
++ /*
++ * Create "/sys/kernel/uids" directory and corresponding root user's
++ * directory under it.
++ */
++ if (!error)
++ error = uids_kobject_init();
++
+ return error;
+ }
+
+ core_initcall(ksysfs_init);
+--- linux-2.6.23.orig/kernel/sched.c
++++ linux-2.6.23/kernel/sched.c
+@@ -42,10 +42,11 @@
+ #include <linux/profile.h>
+ #include <linux/freezer.h>
+ #include <linux/vmalloc.h>
+ #include <linux/blkdev.h>
+ #include <linux/delay.h>
++#include <linux/pid_namespace.h>
+ #include <linux/smp.h>
+ #include <linux/threads.h>
+ #include <linux/timer.h>
+ #include <linux/rcupdate.h>
+ #include <linux/cpu.h>
+@@ -59,21 +60,23 @@
+ #include <linux/tsacct_kern.h>
+ #include <linux/kprobes.h>
+ #include <linux/delayacct.h>
+ #include <linux/reciprocal_div.h>
+ #include <linux/unistd.h>
++#include <linux/pagemap.h>
+
+ #include <asm/tlb.h>
++#include <asm/irq_regs.h>
+
+ /*
+ * Scheduler clock - returns current time in nanosec units.
+ * This is default implementation.
+ * Architectures and sub-architectures can override this.
+ */
+ unsigned long long __attribute__((weak)) sched_clock(void)
+ {
+- return (unsigned long long)jiffies * (1000000000 / HZ);
++ return (unsigned long long)jiffies * (NSEC_PER_SEC / HZ);
+ }
+
+ /*
+ * Convert user-nice values [ -20 ... 0 ... 19 ]
+ * to static priority [ MAX_RT_PRIO..MAX_PRIO-1 ],
+@@ -93,24 +96,22 @@ unsigned long long __attribute__((weak))
+ #define MAX_USER_PRIO (USER_PRIO(MAX_PRIO))
+
+ /*
+ * Some helpers for converting nanosecond timing to jiffy resolution
+ */
+-#define NS_TO_JIFFIES(TIME) ((TIME) / (1000000000 / HZ))
+-#define JIFFIES_TO_NS(TIME) ((TIME) * (1000000000 / HZ))
++#define NS_TO_JIFFIES(TIME) ((unsigned long)(TIME) / (NSEC_PER_SEC / HZ))
++#define JIFFIES_TO_NS(TIME) ((TIME) * (NSEC_PER_SEC / HZ))
+
+ #define NICE_0_LOAD SCHED_LOAD_SCALE
+ #define NICE_0_SHIFT SCHED_LOAD_SHIFT
+
+ /*
+ * These are the 'tuning knobs' of the scheduler:
+ *
+- * Minimum timeslice is 5 msecs (or 1 jiffy, whichever is larger),
+- * default timeslice is 100 msecs, maximum timeslice is 800 msecs.
++ * default timeslice is 100 msecs (used only for SCHED_RR tasks).
+ * Timeslices get refilled after they expire.
+ */
+-#define MIN_TIMESLICE max(5 * HZ / 1000, 1)
+ #define DEF_TIMESLICE (100 * HZ / 1000)
+
+ #ifdef CONFIG_SMP
+ /*
+ * Divide a load by a sched group cpu_power : (load / sg->__cpu_power)
+@@ -130,28 +131,10 @@ static inline void sg_inc_cpu_power(stru
+ sg->__cpu_power += val;
+ sg->reciprocal_cpu_power = reciprocal_value(sg->__cpu_power);
+ }
+ #endif
+
+-#define SCALE_PRIO(x, prio) \
+- max(x * (MAX_PRIO - prio) / (MAX_USER_PRIO / 2), MIN_TIMESLICE)
+-
+-/*
+- * static_prio_timeslice() scales user-nice values [ -20 ... 0 ... 19 ]
+- * to time slice values: [800ms ... 100ms ... 5ms]
+- */
+-static unsigned int static_prio_timeslice(int static_prio)
+-{
+- if (static_prio == NICE_TO_PRIO(19))
+- return 1;
+-
+- if (static_prio < NICE_TO_PRIO(0))
+- return SCALE_PRIO(DEF_TIMESLICE * 4, static_prio);
+- else
+- return SCALE_PRIO(DEF_TIMESLICE, static_prio);
+-}
+-
+ static inline int rt_policy(int policy)
+ {
+ if (unlikely(policy == SCHED_FIFO) || unlikely(policy == SCHED_RR))
+ return 1;
+ return 0;
+@@ -168,45 +151,115 @@ static inline int task_has_rt_policy(str
+ struct rt_prio_array {
+ DECLARE_BITMAP(bitmap, MAX_RT_PRIO+1); /* include 1 bit for delimiter */
+ struct list_head queue[MAX_RT_PRIO];
+ };
+
+-struct load_stat {
+- struct load_weight load;
+- u64 load_update_start, load_update_last;
+- unsigned long delta_fair, delta_exec, delta_stat;
++#ifdef CONFIG_FAIR_GROUP_SCHED
++
++#include <linux/cgroup.h>
++
++struct cfs_rq;
++
++/* task group related information */
++struct task_group {
++#ifdef CONFIG_FAIR_CGROUP_SCHED
++ struct cgroup_subsys_state css;
++#endif
++ /* schedulable entities of this group on each cpu */
++ struct sched_entity **se;
++ /* runqueue "owned" by this group on each cpu */
++ struct cfs_rq **cfs_rq;
++ unsigned long shares;
++ /* spinlock to serialize modification to shares */
++ spinlock_t lock;
++ struct rcu_head rcu;
++};
++
++/* Default task group's sched entity on each cpu */
++static DEFINE_PER_CPU(struct sched_entity, init_sched_entity);
++/* Default task group's cfs_rq on each cpu */
++static DEFINE_PER_CPU(struct cfs_rq, init_cfs_rq) ____cacheline_aligned_in_smp;
++
++static struct sched_entity *init_sched_entity_p[NR_CPUS];
++static struct cfs_rq *init_cfs_rq_p[NR_CPUS];
++
++/* Default task group.
++ * Every task in system belong to this group at bootup.
++ */
++struct task_group init_task_group = {
++ .se = init_sched_entity_p,
++ .cfs_rq = init_cfs_rq_p,
+ };
+
++#ifdef CONFIG_FAIR_USER_SCHED
++# define INIT_TASK_GRP_LOAD 2*NICE_0_LOAD
++#else
++# define INIT_TASK_GRP_LOAD NICE_0_LOAD
++#endif
++
++static int init_task_group_load = INIT_TASK_GRP_LOAD;
++
++/* return group to which a task belongs */
++static inline struct task_group *task_group(struct task_struct *p)
++{
++ struct task_group *tg;
++
++#ifdef CONFIG_FAIR_USER_SCHED
++ tg = p->user->tg;
++#elif defined(CONFIG_FAIR_CGROUP_SCHED)
++ tg = container_of(task_subsys_state(p, cpu_cgroup_subsys_id),
++ struct task_group, css);
++#else
++ tg = &init_task_group;
++#endif
++ return tg;
++}
++
++/* Change a task's cfs_rq and parent entity if it moves across CPUs/groups */
++static inline void set_task_cfs_rq(struct task_struct *p, unsigned int cpu)
++{
++ p->se.cfs_rq = task_group(p)->cfs_rq[cpu];
++ p->se.parent = task_group(p)->se[cpu];
++}
++
++#else
++
++static inline void set_task_cfs_rq(struct task_struct *p, unsigned int cpu) { }
++
++#endif /* CONFIG_FAIR_GROUP_SCHED */
++
+ /* CFS-related fields in a runqueue */
+ struct cfs_rq {
+ struct load_weight load;
+ unsigned long nr_running;
+
+- s64 fair_clock;
+ u64 exec_clock;
+- s64 wait_runtime;
+- u64 sleeper_bonus;
+- unsigned long wait_runtime_overruns, wait_runtime_underruns;
++ u64 min_vruntime;
+
+ struct rb_root tasks_timeline;
+ struct rb_node *rb_leftmost;
+ struct rb_node *rb_load_balance_curr;
+-#ifdef CONFIG_FAIR_GROUP_SCHED
+ /* 'curr' points to currently running entity on this cfs_rq.
+ * It is set to NULL otherwise (i.e when none are currently running).
+ */
+ struct sched_entity *curr;
++
++ unsigned long nr_spread_over;
++
++#ifdef CONFIG_FAIR_GROUP_SCHED
+ struct rq *rq; /* cpu runqueue to which this cfs_rq is attached */
+
+- /* leaf cfs_rqs are those that hold tasks (lowest schedulable entity in
++ /*
++ * leaf cfs_rqs are those that hold tasks (lowest schedulable entity in
+ * a hierarchy). Non-leaf lrqs hold other higher schedulable entities
+ * (like users, containers etc.)
+ *
+ * leaf_cfs_rq_list ties together list of leaf cfs_rq's in a cpu. This
+ * list is used during load balance.
+ */
+- struct list_head leaf_cfs_rq_list; /* Better name : task_cfs_rq_list? */
++ struct list_head leaf_cfs_rq_list;
++ struct task_group *tg; /* group that "owns" this runqueue */
+ #endif
+ };
+
+ /* Real-Time classes' related field in a runqueue: */
+ struct rt_rq {
+@@ -221,11 +274,12 @@ struct rt_rq {
+ * Locking rule: those places that want to lock multiple runqueues
+ * (such as the load balancing or the thread migration code), lock
+ * acquire operations must be ordered by ascending &runqueue.
+ */
+ struct rq {
+- spinlock_t lock; /* runqueue lock */
++ /* runqueue lock: */
++ spinlock_t lock;
+
+ /*
+ * nr_running and cpu_load should be in the same cacheline because
+ * remote CPUs use both these fields when doing load calculation.
+ */
+@@ -234,19 +288,21 @@ struct rq {
+ unsigned long cpu_load[CPU_LOAD_IDX_MAX];
+ unsigned char idle_at_tick;
+ #ifdef CONFIG_NO_HZ
+ unsigned char in_nohz_recently;
+ #endif
+- struct load_stat ls; /* capture load from *all* tasks on this cpu */
++ /* capture load from *all* tasks on this cpu: */
++ struct load_weight load;
+ unsigned long nr_load_updates;
+ u64 nr_switches;
+
+ struct cfs_rq cfs;
+ #ifdef CONFIG_FAIR_GROUP_SCHED
+- struct list_head leaf_cfs_rq_list; /* list of leaf cfs_rq on this cpu */
++ /* list of leaf cfs_rq on this cpu: */
++ struct list_head leaf_cfs_rq_list;
+ #endif
+- struct rt_rq rt;
++ struct rt_rq rt;
+
+ /*
+ * This is part of a global counter where only the total sum
+ * over all CPUs matters. A task can increase this counter on
+ * one CPU and if it got migrated afterwards it may decrease
+@@ -272,34 +328,38 @@ struct rq {
+ struct sched_domain *sd;
+
+ /* For active balancing */
+ int active_balance;
+ int push_cpu;
+- int cpu; /* cpu of this runqueue */
++ /* cpu of this runqueue: */
++ int cpu;
+
+ struct task_struct *migration_thread;
+ struct list_head migration_queue;
+ #endif
+
+ #ifdef CONFIG_SCHEDSTATS
+ /* latency stats */
+ struct sched_info rq_sched_info;
+
+ /* sys_sched_yield() stats */
+- unsigned long yld_exp_empty;
+- unsigned long yld_act_empty;
+- unsigned long yld_both_empty;
+- unsigned long yld_cnt;
++ unsigned int yld_exp_empty;
++ unsigned int yld_act_empty;
++ unsigned int yld_both_empty;
++ unsigned int yld_count;
+
+ /* schedule() stats */
+- unsigned long sched_switch;
+- unsigned long sched_cnt;
+- unsigned long sched_goidle;
++ unsigned int sched_switch;
++ unsigned int sched_count;
++ unsigned int sched_goidle;
+
+ /* try_to_wake_up() stats */
+- unsigned long ttwu_cnt;
+- unsigned long ttwu_local;
++ unsigned int ttwu_count;
++ unsigned int ttwu_local;
++
++ /* BKL stats */
++ unsigned int bkl_count;
+ #endif
+ struct lock_class_key rq_lock_key;
+ };
+
+ static DEFINE_PER_CPU_SHARED_ALIGNED(struct rq, runqueues);
+@@ -380,10 +440,45 @@ static void update_rq_clock(struct rq *r
+ #define this_rq() (&__get_cpu_var(runqueues))
+ #define task_rq(p) cpu_rq(task_cpu(p))
+ #define cpu_curr(cpu) (cpu_rq(cpu)->curr)
+
+ /*
++ * Tunables that become constants when CONFIG_SCHED_DEBUG is off:
++ */
++#ifdef CONFIG_SCHED_DEBUG
++# define const_debug __read_mostly
++#else
++# define const_debug static const
++#endif
++
++/*
++ * Debugging: various feature bits
++ */
++enum {
++ SCHED_FEAT_NEW_FAIR_SLEEPERS = 1,
++ SCHED_FEAT_WAKEUP_PREEMPT = 2,
++ SCHED_FEAT_START_DEBIT = 4,
++ SCHED_FEAT_TREE_AVG = 8,
++ SCHED_FEAT_APPROX_AVG = 16,
++};
++
++const_debug unsigned int sysctl_sched_features =
++ SCHED_FEAT_NEW_FAIR_SLEEPERS * 1 |
++ SCHED_FEAT_WAKEUP_PREEMPT * 1 |
++ SCHED_FEAT_START_DEBIT * 1 |
++ SCHED_FEAT_TREE_AVG * 0 |
++ SCHED_FEAT_APPROX_AVG * 0;
++
++#define sched_feat(x) (sysctl_sched_features & SCHED_FEAT_##x)
++
++/*
++ * Number of tasks to iterate in a single balance run.
++ * Limited because this is done with IRQs disabled.
++ */
++const_debug unsigned int sysctl_sched_nr_migrate = 32;
++
++/*
+ * For kernel-internal use: high-speed (but slightly incorrect) per-cpu
+ * clock constructed from sched_clock():
+ */
+ unsigned long long cpu_clock(int cpu)
+ {
+@@ -391,40 +486,39 @@ unsigned long long cpu_clock(int cpu)
+ unsigned long flags;
+ struct rq *rq;
+
+ local_irq_save(flags);
+ rq = cpu_rq(cpu);
+- update_rq_clock(rq);
++ /*
++ * Only call sched_clock() if the scheduler has already been
++ * initialized (some code might call cpu_clock() very early):
++ */
++ if (rq->idle)
++ update_rq_clock(rq);
+ now = rq->clock;
+ local_irq_restore(flags);
+
+ return now;
+ }
+-
+-#ifdef CONFIG_FAIR_GROUP_SCHED
+-/* Change a task's ->cfs_rq if it moves across CPUs */
+-static inline void set_task_cfs_rq(struct task_struct *p)
+-{
+- p->se.cfs_rq = &task_rq(p)->cfs;
+-}
+-#else
+-static inline void set_task_cfs_rq(struct task_struct *p)
+-{
+-}
+-#endif
++EXPORT_SYMBOL_GPL(cpu_clock);
+
+ #ifndef prepare_arch_switch
+ # define prepare_arch_switch(next) do { } while (0)
+ #endif
+ #ifndef finish_arch_switch
+ # define finish_arch_switch(prev) do { } while (0)
+ #endif
+
++static inline int task_current(struct rq *rq, struct task_struct *p)
++{
++ return rq->curr == p;
++}
++
+ #ifndef __ARCH_WANT_UNLOCKED_CTXSW
+ static inline int task_running(struct rq *rq, struct task_struct *p)
+ {
+- return rq->curr == p;
++ return task_current(rq, p);
+ }
+
+ static inline void prepare_lock_switch(struct rq *rq, struct task_struct *next)
+ {
+ }
+@@ -449,11 +543,11 @@ static inline void finish_lock_switch(st
+ static inline int task_running(struct rq *rq, struct task_struct *p)
+ {
+ #ifdef CONFIG_SMP
+ return p->oncpu;
+ #else
+- return rq->curr == p;
++ return task_current(rq, p);
+ #endif
+ }
+
+ static inline void prepare_lock_switch(struct rq *rq, struct task_struct *next)
+ {
+@@ -494,44 +588,40 @@ static inline void finish_lock_switch(st
+ * Must be called interrupts disabled.
+ */
+ static inline struct rq *__task_rq_lock(struct task_struct *p)
+ __acquires(rq->lock)
+ {
+- struct rq *rq;
+-
+-repeat_lock_task:
+- rq = task_rq(p);
+- spin_lock(&rq->lock);
+- if (unlikely(rq != task_rq(p))) {
++ for (;;) {
++ struct rq *rq = task_rq(p);
++ spin_lock(&rq->lock);
++ if (likely(rq == task_rq(p)))
++ return rq;
+ spin_unlock(&rq->lock);
+- goto repeat_lock_task;
+ }
+- return rq;
+ }
+
+ /*
+ * task_rq_lock - lock the runqueue a given task resides on and disable
+- * interrupts. Note the ordering: we can safely lookup the task_rq without
++ * interrupts. Note the ordering: we can safely lookup the task_rq without
+ * explicitly disabling preemption.
+ */
+ static struct rq *task_rq_lock(struct task_struct *p, unsigned long *flags)
+ __acquires(rq->lock)
+ {
+ struct rq *rq;
+
+-repeat_lock_task:
+- local_irq_save(*flags);
+- rq = task_rq(p);
+- spin_lock(&rq->lock);
+- if (unlikely(rq != task_rq(p))) {
++ for (;;) {
++ local_irq_save(*flags);
++ rq = task_rq(p);
++ spin_lock(&rq->lock);
++ if (likely(rq == task_rq(p)))
++ return rq;
+ spin_unlock_irqrestore(&rq->lock, *flags);
+- goto repeat_lock_task;
+ }
+- return rq;
+ }
+
+-static inline void __task_rq_unlock(struct rq *rq)
++static void __task_rq_unlock(struct rq *rq)
+ __releases(rq->lock)
+ {
+ spin_unlock(&rq->lock);
+ }
+
+@@ -542,11 +632,11 @@ static inline void task_rq_unlock(struct
+ }
+
+ /*
+ * this_rq_lock - lock this runqueue and disable interrupts.
+ */
+-static inline struct rq *this_rq_lock(void)
++static struct rq *this_rq_lock(void)
+ __acquires(rq->lock)
+ {
+ struct rq *rq;
+
+ local_irq_disable();
+@@ -576,10 +666,11 @@ EXPORT_SYMBOL_GPL(sched_clock_idle_sleep
+ void sched_clock_idle_wakeup_event(u64 delta_ns)
+ {
+ struct rq *rq = cpu_rq(smp_processor_id());
+ u64 now = sched_clock();
+
++ touch_softlockup_watchdog();
+ rq->idle_clock += delta_ns;
+ /*
+ * Override the previous timestamp and ignore all
+ * sched_clock() deltas that occured while we idled,
+ * and use the PM-provided delta_ns to advance the
+@@ -642,23 +733,10 @@ static inline void resched_task(struct t
+ assert_spin_locked(&task_rq(p)->lock);
+ set_tsk_need_resched(p);
+ }
+ #endif
+
+-static u64 div64_likely32(u64 divident, unsigned long divisor)
+-{
+-#if BITS_PER_LONG == 32
+- if (likely(divident <= 0xffffffffULL))
+- return (u32)divident / divisor;
+- do_div(divident, divisor);
+-
+- return divident;
+-#else
+- return divident / divisor;
+-#endif
+-}
+-
+ #if BITS_PER_LONG == 32
+ # define WMULT_CONST (~0UL)
+ #else
+ # define WMULT_CONST (1UL << 32)
+ #endif
+@@ -696,27 +774,25 @@ static inline unsigned long
+ calc_delta_fair(unsigned long delta_exec, struct load_weight *lw)
+ {
+ return calc_delta_mine(delta_exec, NICE_0_LOAD, lw);
+ }
+
+-static void update_load_add(struct load_weight *lw, unsigned long inc)
++static inline void update_load_add(struct load_weight *lw, unsigned long inc)
+ {
+ lw->weight += inc;
+- lw->inv_weight = 0;
+ }
+
+-static void update_load_sub(struct load_weight *lw, unsigned long dec)
++static inline void update_load_sub(struct load_weight *lw, unsigned long dec)
+ {
+ lw->weight -= dec;
+- lw->inv_weight = 0;
+ }
+
+ /*
+ * To aid in avoiding the subversion of "niceness" due to uneven distribution
+ * of tasks with abnormal "nice" values across CPUs the contribution that
+ * each task makes to its run queue's load is weighted according to its
+- * scheduling class and "nice" value. For SCHED_NORMAL tasks this is just a
++ * scheduling class and "nice" value. For SCHED_NORMAL tasks this is just a
+ * scaled version of the new time slice allocation that they receive on time
+ * slice expiry etc.
+ */
+
+ #define WEIGHT_IDLEPRIO 2
+@@ -774,76 +850,62 @@ struct rq_iterator {
+ void *arg;
+ struct task_struct *(*start)(void *);
+ struct task_struct *(*next)(void *);
+ };
+
+-static int balance_tasks(struct rq *this_rq, int this_cpu, struct rq *busiest,
+- unsigned long max_nr_move, unsigned long max_load_move,
+- struct sched_domain *sd, enum cpu_idle_type idle,
+- int *all_pinned, unsigned long *load_moved,
+- int *this_best_prio, struct rq_iterator *iterator);
++#ifdef CONFIG_SMP
++static unsigned long
++balance_tasks(struct rq *this_rq, int this_cpu, struct rq *busiest,
++ unsigned long max_load_move, struct sched_domain *sd,
++ enum cpu_idle_type idle, int *all_pinned,
++ int *this_best_prio, struct rq_iterator *iterator);
++
++static int
++iter_move_one_task(struct rq *this_rq, int this_cpu, struct rq *busiest,
++ struct sched_domain *sd, enum cpu_idle_type idle,
++ struct rq_iterator *iterator);
++#endif
++
++#ifdef CONFIG_CGROUP_CPUACCT
++static void cpuacct_charge(struct task_struct *tsk, u64 cputime);
++#else
++static inline void cpuacct_charge(struct task_struct *tsk, u64 cputime) {}
++#endif
+
+ #include "sched_stats.h"
+-#include "sched_rt.c"
+-#include "sched_fair.c"
+ #include "sched_idletask.c"
++#include "sched_fair.c"
++#include "sched_rt.c"
+ #ifdef CONFIG_SCHED_DEBUG
+ # include "sched_debug.c"
+ #endif
+
+ #define sched_class_highest (&rt_sched_class)
+
+-static void __update_curr_load(struct rq *rq, struct load_stat *ls)
+-{
+- if (rq->curr != rq->idle && ls->load.weight) {
+- ls->delta_exec += ls->delta_stat;
+- ls->delta_fair += calc_delta_fair(ls->delta_stat, &ls->load);
+- ls->delta_stat = 0;
+- }
+-}
+-
+ /*
+ * Update delta_exec, delta_fair fields for rq.
+ *
+ * delta_fair clock advances at a rate inversely proportional to
+- * total load (rq->ls.load.weight) on the runqueue, while
++ * total load (rq->load.weight) on the runqueue, while
+ * delta_exec advances at the same rate as wall-clock (provided
+ * cpu is not idle).
+ *
+ * delta_exec / delta_fair is a measure of the (smoothened) load on this
+ * runqueue over any given interval. This (smoothened) load is used
+ * during load balance.
+ *
+- * This function is called /before/ updating rq->ls.load
++ * This function is called /before/ updating rq->load
+ * and when switching tasks.
+ */
+-static void update_curr_load(struct rq *rq)
+-{
+- struct load_stat *ls = &rq->ls;
+- u64 start;
+-
+- start = ls->load_update_start;
+- ls->load_update_start = rq->clock;
+- ls->delta_stat += rq->clock - start;
+- /*
+- * Stagger updates to ls->delta_fair. Very frequent updates
+- * can be expensive.
+- */
+- if (ls->delta_stat >= sysctl_sched_stat_granularity)
+- __update_curr_load(rq, ls);
+-}
+-
+ static inline void inc_load(struct rq *rq, const struct task_struct *p)
+ {
+- update_curr_load(rq);
+- update_load_add(&rq->ls.load, p->se.load.weight);
++ update_load_add(&rq->load, p->se.load.weight);
+ }
+
+ static inline void dec_load(struct rq *rq, const struct task_struct *p)
+ {
+- update_curr_load(rq);
+- update_load_sub(&rq->ls.load, p->se.load.weight);
++ update_load_sub(&rq->load, p->se.load.weight);
+ }
+
+ static void inc_nr_running(struct task_struct *p, struct rq *rq)
+ {
+ rq->nr_running++;
+@@ -856,12 +918,10 @@ static void dec_nr_running(struct task_s
+ dec_load(rq, p);
+ }
+
+ static void set_load_weight(struct task_struct *p)
+ {
+- p->se.wait_runtime = 0;
+-
+ if (task_has_rt_policy(p)) {
+ p->se.load.weight = prio_to_weight[0] * 2;
+ p->se.load.inv_weight = prio_to_wmult[0] >> 1;
+ return;
+ }
+@@ -949,24 +1009,10 @@ static void activate_task(struct rq *rq,
+ enqueue_task(rq, p, wakeup);
+ inc_nr_running(p, rq);
+ }
+
+ /*
+- * activate_idle_task - move idle task to the _front_ of runqueue.
+- */
+-static inline void activate_idle_task(struct task_struct *p, struct rq *rq)
+-{
+- update_rq_clock(rq);
+-
+- if (p->state == TASK_UNINTERRUPTIBLE)
+- rq->nr_uninterruptible--;
+-
+- enqueue_task(rq, p, 0);
+- inc_nr_running(p, rq);
+-}
+-
+-/*
+ * deactivate_task - remove a task from the runqueue.
+ */
+ static void deactivate_task(struct rq *rq, struct task_struct *p, int sleep)
+ {
+ if (p->state == TASK_UNINTERRUPTIBLE)
+@@ -986,45 +1032,76 @@ inline int task_curr(const struct task_s
+ }
+
+ /* Used instead of source_load when we know the type == 0 */
+ unsigned long weighted_cpuload(const int cpu)
+ {
+- return cpu_rq(cpu)->ls.load.weight;
++ return cpu_rq(cpu)->load.weight;
+ }
+
+ static inline void __set_task_cpu(struct task_struct *p, unsigned int cpu)
+ {
++ set_task_cfs_rq(p, cpu);
+ #ifdef CONFIG_SMP
++ /*
++ * After ->cpu is set up to a new value, task_rq_lock(p, ...) can be
++ * successfuly executed on another CPU. We must ensure that updates of
++ * per-task data have been completed by this moment.
++ */
++ smp_wmb();
+ task_thread_info(p)->cpu = cpu;
+- set_task_cfs_rq(p);
+ #endif
+ }
+
+ #ifdef CONFIG_SMP
+
++/*
++ * Is this task likely cache-hot:
++ */
++static inline int
++task_hot(struct task_struct *p, u64 now, struct sched_domain *sd)
++{
++ s64 delta;
++
++ if (p->sched_class != &fair_sched_class)
++ return 0;
++
++ if (sysctl_sched_migration_cost == -1)
++ return 1;
++ if (sysctl_sched_migration_cost == 0)
++ return 0;
++
++ delta = now - p->se.exec_start;
++
++ return delta < (s64)sysctl_sched_migration_cost;
++}
++
++
+ void set_task_cpu(struct task_struct *p, unsigned int new_cpu)
+ {
+ int old_cpu = task_cpu(p);
+ struct rq *old_rq = cpu_rq(old_cpu), *new_rq = cpu_rq(new_cpu);
+- u64 clock_offset, fair_clock_offset;
++ struct cfs_rq *old_cfsrq = task_cfs_rq(p),
++ *new_cfsrq = cpu_cfs_rq(old_cfsrq, new_cpu);
++ u64 clock_offset;
+
+ clock_offset = old_rq->clock - new_rq->clock;
+- fair_clock_offset = old_rq->cfs.fair_clock - new_rq->cfs.fair_clock;
+-
+- if (p->se.wait_start_fair)
+- p->se.wait_start_fair -= fair_clock_offset;
+- if (p->se.sleep_start_fair)
+- p->se.sleep_start_fair -= fair_clock_offset;
+
+ #ifdef CONFIG_SCHEDSTATS
+ if (p->se.wait_start)
+ p->se.wait_start -= clock_offset;
+ if (p->se.sleep_start)
+ p->se.sleep_start -= clock_offset;
+ if (p->se.block_start)
+ p->se.block_start -= clock_offset;
++ if (old_cpu != new_cpu) {
++ schedstat_inc(p, se.nr_migrations);
++ if (task_hot(p, old_rq->clock, NULL))
++ schedstat_inc(p, se.nr_forced2_migrations);
++ }
+ #endif
++ p->se.vruntime -= old_cfsrq->min_vruntime -
++ new_cfsrq->min_vruntime;
+
+ __set_task_cpu(p, new_cpu);
+ }
+
+ struct migration_req {
+@@ -1075,73 +1152,75 @@ void wait_task_inactive(struct task_stru
+ {
+ unsigned long flags;
+ int running, on_rq;
+ struct rq *rq;
+
+-repeat:
+- /*
+- * We do the initial early heuristics without holding
+- * any task-queue locks at all. We'll only try to get
+- * the runqueue lock when things look like they will
+- * work out!
+- */
+- rq = task_rq(p);
++ for (;;) {
++ /*
++ * We do the initial early heuristics without holding
++ * any task-queue locks at all. We'll only try to get
++ * the runqueue lock when things look like they will
++ * work out!
++ */
++ rq = task_rq(p);
+
+- /*
+- * If the task is actively running on another CPU
+- * still, just relax and busy-wait without holding
+- * any locks.
+- *
+- * NOTE! Since we don't hold any locks, it's not
+- * even sure that "rq" stays as the right runqueue!
+- * But we don't care, since "task_running()" will
+- * return false if the runqueue has changed and p
+- * is actually now running somewhere else!
+- */
+- while (task_running(rq, p))
+- cpu_relax();
++ /*
++ * If the task is actively running on another CPU
++ * still, just relax and busy-wait without holding
++ * any locks.
++ *
++ * NOTE! Since we don't hold any locks, it's not
++ * even sure that "rq" stays as the right runqueue!
++ * But we don't care, since "task_running()" will
++ * return false if the runqueue has changed and p
++ * is actually now running somewhere else!
++ */
++ while (task_running(rq, p))
++ cpu_relax();
+
+- /*
+- * Ok, time to look more closely! We need the rq
+- * lock now, to be *sure*. If we're wrong, we'll
+- * just go back and repeat.
+- */
+- rq = task_rq_lock(p, &flags);
+- running = task_running(rq, p);
+- on_rq = p->se.on_rq;
+- task_rq_unlock(rq, &flags);
++ /*
++ * Ok, time to look more closely! We need the rq
++ * lock now, to be *sure*. If we're wrong, we'll
++ * just go back and repeat.
++ */
++ rq = task_rq_lock(p, &flags);
++ running = task_running(rq, p);
++ on_rq = p->se.on_rq;
++ task_rq_unlock(rq, &flags);
+
+- /*
+- * Was it really running after all now that we
+- * checked with the proper locks actually held?
+- *
+- * Oops. Go back and try again..
+- */
+- if (unlikely(running)) {
+- cpu_relax();
+- goto repeat;
+- }
++ /*
++ * Was it really running after all now that we
++ * checked with the proper locks actually held?
++ *
++ * Oops. Go back and try again..
++ */
++ if (unlikely(running)) {
++ cpu_relax();
++ continue;
++ }
+
+- /*
+- * It's not enough that it's not actively running,
+- * it must be off the runqueue _entirely_, and not
+- * preempted!
+- *
+- * So if it wa still runnable (but just not actively
+- * running right now), it's preempted, and we should
+- * yield - it could be a while.
+- */
+- if (unlikely(on_rq)) {
+- yield();
+- goto repeat;
+- }
++ /*
++ * It's not enough that it's not actively running,
++ * it must be off the runqueue _entirely_, and not
++ * preempted!
++ *
++ * So if it wa still runnable (but just not actively
++ * running right now), it's preempted, and we should
++ * yield - it could be a while.
++ */
++ if (unlikely(on_rq)) {
++ schedule_timeout_uninterruptible(1);
++ continue;
++ }
+
+- /*
+- * Ahh, all good. It wasn't running, and it wasn't
+- * runnable, which means that it will never become
+- * running in the future either. We're all done!
+- */
++ /*
++ * Ahh, all good. It wasn't running, and it wasn't
++ * runnable, which means that it will never become
++ * running in the future either. We're all done!
++ */
++ break;
++ }
+ }
+
+ /***
+ * kick_process - kick a running thread to enter/exit the kernel
+ * @p: the to-be-kicked thread
+@@ -1171,11 +1250,11 @@ void kick_process(struct task_struct *p)
+ * according to the scheduling class and "nice" value.
+ *
+ * We want to under-estimate the load of migration sources, to
+ * balance conservatively.
+ */
+-static inline unsigned long source_load(int cpu, int type)
++static unsigned long source_load(int cpu, int type)
+ {
+ struct rq *rq = cpu_rq(cpu);
+ unsigned long total = weighted_cpuload(cpu);
+
+ if (type == 0)
+@@ -1186,11 +1265,11 @@ static inline unsigned long source_load(
+
+ /*
+ * Return a high guess at the load of a migration-target cpu weighted
+ * according to the scheduling class and "nice" value.
+ */
+-static inline unsigned long target_load(int cpu, int type)
++static unsigned long target_load(int cpu, int type)
+ {
+ struct rq *rq = cpu_rq(cpu);
+ unsigned long total = weighted_cpuload(cpu);
+
+ if (type == 0)
+@@ -1228,11 +1307,11 @@ find_idlest_group(struct sched_domain *s
+ int local_group;
+ int i;
+
+ /* Skip over this group if it has no CPUs allowed */
+ if (!cpus_intersects(group->cpumask, p->cpus_allowed))
+- goto nextgroup;
++ continue;
+
+ local_group = cpu_isset(this_cpu, group->cpumask);
+
+ /* Tally up the load of all CPUs in the group */
+ avg_load = 0;
+@@ -1256,13 +1335,11 @@ find_idlest_group(struct sched_domain *s
+ this = group;
+ } else if (avg_load < min_load) {
+ min_load = avg_load;
+ idlest = group;
+ }
+-nextgroup:
+- group = group->next;
+- } while (group != sd->groups);
++ } while (group = group->next, group != sd->groups);
+
+ if (!idlest || 100*this_load < imbalance*min_load)
+ return NULL;
+ return idlest;
+ }
+@@ -1390,12 +1467,17 @@ static int wake_idle(int cpu, struct tas
+
+ for_each_domain(cpu, sd) {
+ if (sd->flags & SD_WAKE_IDLE) {
+ cpus_and(tmp, sd->span, p->cpus_allowed);
+ for_each_cpu_mask(i, tmp) {
+- if (idle_cpu(i))
++ if (idle_cpu(i)) {
++ if (i != task_cpu(p)) {
++ schedstat_inc(p,
++ se.nr_wakeups_idle);
++ }
+ return i;
++ }
+ }
+ } else {
+ break;
+ }
+ }
+@@ -1422,11 +1504,11 @@ static inline int wake_idle(int cpu, str
+ *
+ * returns failure only if the task is already active.
+ */
+ static int try_to_wake_up(struct task_struct *p, unsigned int state, int sync)
+ {
+- int cpu, this_cpu, success = 0;
++ int cpu, orig_cpu, this_cpu, success = 0;
+ unsigned long flags;
+ long old_state;
+ struct rq *rq;
+ #ifdef CONFIG_SMP
+ struct sched_domain *sd, *this_sd = NULL;
+@@ -1441,19 +1523,20 @@ static int try_to_wake_up(struct task_st
+
+ if (p->se.on_rq)
+ goto out_running;
+
+ cpu = task_cpu(p);
++ orig_cpu = cpu;
+ this_cpu = smp_processor_id();
+
+ #ifdef CONFIG_SMP
+ if (unlikely(task_running(rq, p)))
+ goto out_activate;
+
+ new_cpu = cpu;
+
+- schedstat_inc(rq, ttwu_cnt);
++ schedstat_inc(rq, ttwu_count);
+ if (cpu == this_cpu) {
+ schedstat_inc(rq, ttwu_local);
+ goto out_set_cpu;
+ }
+
+@@ -1484,10 +1567,17 @@ static int try_to_wake_up(struct task_st
+
+ if (this_sd->flags & SD_WAKE_AFFINE) {
+ unsigned long tl = this_load;
+ unsigned long tl_per_task;
+
++ /*
++ * Attract cache-cold tasks on sync wakeups:
++ */
++ if (sync && !task_hot(p, rq->clock, this_sd))
++ goto out_set_cpu;
++
++ schedstat_inc(p, se.nr_wakeups_affine_attempts);
+ tl_per_task = cpu_avg_load_per_task(this_cpu);
+
+ /*
+ * If sync wakeup then subtract the (maximum possible)
+ * effect of the currently running task from the load
+@@ -1503,10 +1593,11 @@ static int try_to_wake_up(struct task_st
+ * This domain has SD_WAKE_AFFINE and
+ * p is cache cold in this domain, and
+ * there is no bad imbalance.
+ */
+ schedstat_inc(this_sd, ttwu_move_affine);
++ schedstat_inc(p, se.nr_wakeups_affine);
+ goto out_set_cpu;
+ }
+ }
+
+ /*
+@@ -1514,10 +1605,11 @@ static int try_to_wake_up(struct task_st
+ * limit is reached.
+ */
+ if (this_sd->flags & SD_WAKE_BALANCE) {
+ if (imbalance*this_load <= 100*load) {
+ schedstat_inc(this_sd, ttwu_move_balance);
++ schedstat_inc(p, se.nr_wakeups_passive);
+ goto out_set_cpu;
+ }
+ }
+ }
+
+@@ -1539,22 +1631,22 @@ out_set_cpu:
+ cpu = task_cpu(p);
+ }
+
+ out_activate:
+ #endif /* CONFIG_SMP */
++ schedstat_inc(p, se.nr_wakeups);
++ if (sync)
++ schedstat_inc(p, se.nr_wakeups_sync);
++ if (orig_cpu != cpu)
++ schedstat_inc(p, se.nr_wakeups_migrate);
++ if (cpu == this_cpu)
++ schedstat_inc(p, se.nr_wakeups_local);
++ else
++ schedstat_inc(p, se.nr_wakeups_remote);
+ update_rq_clock(rq);
+ activate_task(rq, p, 1);
+- /*
+- * Sync wakeups (i.e. those types of wakeups where the waker
+- * has indicated that it will leave the CPU in short order)
+- * don't trigger a preemption, if the woken up task will run on
+- * this cpu. (in this case the 'I will reschedule' promise of
+- * the waker guarantees that the freshly woken up task is going
+- * to be considered on this CPU.)
+- */
+- if (!sync || cpu != this_cpu)
+- check_preempt_curr(rq, p);
++ check_preempt_curr(rq, p);
+ success = 1;
+
+ out_running:
+ p->state = TASK_RUNNING;
+ out:
+@@ -1581,32 +1673,24 @@ int fastcall wake_up_state(struct task_s
+ *
+ * __sched_fork() is basic setup used by init_idle() too:
+ */
+ static void __sched_fork(struct task_struct *p)
+ {
+- p->se.wait_start_fair = 0;
+ p->se.exec_start = 0;
+ p->se.sum_exec_runtime = 0;
+ p->se.prev_sum_exec_runtime = 0;
+- p->se.delta_exec = 0;
+- p->se.delta_fair_run = 0;
+- p->se.delta_fair_sleep = 0;
+- p->se.wait_runtime = 0;
+- p->se.sleep_start_fair = 0;
+
+ #ifdef CONFIG_SCHEDSTATS
+ p->se.wait_start = 0;
+- p->se.sum_wait_runtime = 0;
+ p->se.sum_sleep_runtime = 0;
+ p->se.sleep_start = 0;
+ p->se.block_start = 0;
+ p->se.sleep_max = 0;
+ p->se.block_max = 0;
+ p->se.exec_max = 0;
++ p->se.slice_max = 0;
+ p->se.wait_max = 0;
+- p->se.wait_runtime_overruns = 0;
+- p->se.wait_runtime_underruns = 0;
+ #endif
+
+ INIT_LIST_HEAD(&p->run_list);
+ p->se.on_rq = 0;
+
+@@ -1633,16 +1717,18 @@ void sched_fork(struct task_struct *p, i
+ __sched_fork(p);
+
+ #ifdef CONFIG_SMP
+ cpu = sched_balance_self(cpu, SD_BALANCE_FORK);
+ #endif
+- __set_task_cpu(p, cpu);
++ set_task_cpu(p, cpu);
+
+ /*
+ * Make sure we do not leak PI boosting priority to the child:
+ */
+ p->prio = current->normal_prio;
++ if (!rt_prio(p->prio))
++ p->sched_class = &fair_sched_class;
+
+ #if defined(CONFIG_SCHEDSTATS) || defined(CONFIG_TASK_DELAY_ACCT)
+ if (likely(sched_info_on()))
+ memset(&p->sched_info, 0, sizeof(p->sched_info));
+ #endif
+@@ -1655,44 +1741,28 @@ void sched_fork(struct task_struct *p, i
+ #endif
+ put_cpu();
+ }
+
+ /*
+- * After fork, child runs first. (default) If set to 0 then
+- * parent will (try to) run first.
+- */
+-unsigned int __read_mostly sysctl_sched_child_runs_first = 1;
+-
+-/*
+ * wake_up_new_task - wake up a newly created task for the first time.
+ *
+ * This function will do some initial scheduler statistics housekeeping
+ * that must be done for every newly created context, then puts the task
+ * on the runqueue and wakes it.
+ */
+ void fastcall wake_up_new_task(struct task_struct *p, unsigned long clone_flags)
+ {
+ unsigned long flags;
+ struct rq *rq;
+- int this_cpu;
+
+ rq = task_rq_lock(p, &flags);
+ BUG_ON(p->state != TASK_RUNNING);
+- this_cpu = smp_processor_id(); /* parent's CPU */
+ update_rq_clock(rq);
+
+ p->prio = effective_prio(p);
+
+- if (rt_prio(p->prio))
+- p->sched_class = &rt_sched_class;
+- else
+- p->sched_class = &fair_sched_class;
+-
+- if (!p->sched_class->task_new || !sysctl_sched_child_runs_first ||
+- (clone_flags & CLONE_VM) || task_cpu(p) != this_cpu ||
+- !current->se.on_rq) {
+-
++ if (!p->sched_class->task_new || !current->se.on_rq) {
+ activate_task(rq, p, 0);
+ } else {
+ /*
+ * Let the scheduling class do new task startup
+ * management (if any):
+@@ -1793,15 +1863,15 @@ prepare_task_switch(struct rq *rq, struc
+ * with a prepare_task_switch call before the context switch.
+ * finish_task_switch will reconcile locking set up by prepare_task_switch,
+ * and do any other architecture-specific cleanup actions.
+ *
+ * Note that we may have delayed dropping an mm in context_switch(). If
+- * so, we finish that here outside of the runqueue lock. (Doing it
++ * so, we finish that here outside of the runqueue lock. (Doing it
+ * with the lock held can cause deadlocks; see schedule() for
+ * details.)
+ */
+-static inline void finish_task_switch(struct rq *rq, struct task_struct *prev)
++static void finish_task_switch(struct rq *rq, struct task_struct *prev)
+ __releases(rq->lock)
+ {
+ struct mm_struct *mm = rq->prev_mm;
+ long prev_state;
+
+@@ -1847,11 +1917,11 @@ asmlinkage void schedule_tail(struct tas
+ #ifdef __ARCH_WANT_UNLOCKED_CTXSW
+ /* In this case, finish_task_switch does not reenable preemption */
+ preempt_enable();
+ #endif
+ if (current->set_child_tid)
+- put_user(current->pid, current->set_child_tid);
++ put_user(task_pid_vnr(current), current->set_child_tid);
+ }
+
+ /*
+ * context_switch - switch to the new MM and the new
+ * thread's register state.
+@@ -1979,56 +2049,30 @@ unsigned long nr_active(void)
+ * Update rq->cpu_load[] statistics. This function is usually called every
+ * scheduler tick (TICK_NSEC).
+ */
+ static void update_cpu_load(struct rq *this_rq)
+ {
+- u64 fair_delta64, exec_delta64, idle_delta64, sample_interval64, tmp64;
+- unsigned long total_load = this_rq->ls.load.weight;
+- unsigned long this_load = total_load;
+- struct load_stat *ls = &this_rq->ls;
++ unsigned long this_load = this_rq->load.weight;
+ int i, scale;
+
+ this_rq->nr_load_updates++;
+- if (unlikely(!(sysctl_sched_features & SCHED_FEAT_PRECISE_CPU_LOAD)))
+- goto do_avg;
+-
+- /* Update delta_fair/delta_exec fields first */
+- update_curr_load(this_rq);
+-
+- fair_delta64 = ls->delta_fair + 1;
+- ls->delta_fair = 0;
+-
+- exec_delta64 = ls->delta_exec + 1;
+- ls->delta_exec = 0;
+-
+- sample_interval64 = this_rq->clock - ls->load_update_last;
+- ls->load_update_last = this_rq->clock;
+-
+- if ((s64)sample_interval64 < (s64)TICK_NSEC)
+- sample_interval64 = TICK_NSEC;
+-
+- if (exec_delta64 > sample_interval64)
+- exec_delta64 = sample_interval64;
+-
+- idle_delta64 = sample_interval64 - exec_delta64;
+-
+- tmp64 = div64_64(SCHED_LOAD_SCALE * exec_delta64, fair_delta64);
+- tmp64 = div64_64(tmp64 * exec_delta64, sample_interval64);
+-
+- this_load = (unsigned long)tmp64;
+-
+-do_avg:
+
+ /* Update our load: */
+ for (i = 0, scale = 1; i < CPU_LOAD_IDX_MAX; i++, scale += scale) {
+ unsigned long old_load, new_load;
+
+ /* scale is effectively 1 << i now, and >> i divides by scale */
+
+ old_load = this_rq->cpu_load[i];
+ new_load = this_load;
+-
++ /*
++ * Round up the averaging division if load is increasing. This
++ * prevents us from getting stuck on 9 if the load is 10, for
++ * example.
++ */
++ if (new_load > old_load)
++ new_load += scale-1;
+ this_rq->cpu_load[i] = (old_load*(scale-1) + new_load) >> i;
+ }
+ }
+
+ #ifdef CONFIG_SMP
+@@ -2101,11 +2145,11 @@ static void double_lock_balance(struct r
+ }
+
+ /*
+ * If dest_cpu is allowed for this process, migrate the task to it.
+ * This is accomplished by forcing the cpu_allowed mask to only
+- * allow dest_cpu, which will force the cpu onto dest_cpu. Then
++ * allow dest_cpu, which will force the cpu onto dest_cpu. Then
+ * the cpu_allowed mask is restored.
+ */
+ static void sched_migrate_task(struct task_struct *p, int dest_cpu)
+ {
+ struct migration_req req;
+@@ -2176,44 +2220,69 @@ int can_migrate_task(struct task_struct
+ * We do not migrate tasks that are:
+ * 1) running (obviously), or
+ * 2) cannot be migrated to this CPU due to cpus_allowed, or
+ * 3) are cache-hot on their current CPU.
+ */
+- if (!cpu_isset(this_cpu, p->cpus_allowed))
++ if (!cpu_isset(this_cpu, p->cpus_allowed)) {
++ schedstat_inc(p, se.nr_failed_migrations_affine);
+ return 0;
++ }
+ *all_pinned = 0;
+
+- if (task_running(rq, p))
++ if (task_running(rq, p)) {
++ schedstat_inc(p, se.nr_failed_migrations_running);
+ return 0;
++ }
++
++ /*
++ * Aggressive migration if:
++ * 1) task is cache cold, or
++ * 2) too many balance attempts have failed.
++ */
++
++ if (!task_hot(p, rq->clock, sd) ||
++ sd->nr_balance_failed > sd->cache_nice_tries) {
++#ifdef CONFIG_SCHEDSTATS
++ if (task_hot(p, rq->clock, sd)) {
++ schedstat_inc(sd, lb_hot_gained[idle]);
++ schedstat_inc(p, se.nr_forced_migrations);
++ }
++#endif
++ return 1;
++ }
+
++ if (task_hot(p, rq->clock, sd)) {
++ schedstat_inc(p, se.nr_failed_migrations_hot);
++ return 0;
++ }
+ return 1;
+ }
+
+-static int balance_tasks(struct rq *this_rq, int this_cpu, struct rq *busiest,
+- unsigned long max_nr_move, unsigned long max_load_move,
+- struct sched_domain *sd, enum cpu_idle_type idle,
+- int *all_pinned, unsigned long *load_moved,
+- int *this_best_prio, struct rq_iterator *iterator)
++static unsigned long
++balance_tasks(struct rq *this_rq, int this_cpu, struct rq *busiest,
++ unsigned long max_load_move, struct sched_domain *sd,
++ enum cpu_idle_type idle, int *all_pinned,
++ int *this_best_prio, struct rq_iterator *iterator)
+ {
+- int pulled = 0, pinned = 0, skip_for_load;
++ int loops = 0, pulled = 0, pinned = 0, skip_for_load;
+ struct task_struct *p;
+ long rem_load_move = max_load_move;
+
+- if (max_nr_move == 0 || max_load_move == 0)
++ if (max_load_move == 0)
+ goto out;
+
+ pinned = 1;
+
+ /*
+ * Start the load-balancing iterator:
+ */
+ p = iterator->start(iterator->arg);
+ next:
+- if (!p)
++ if (!p || loops++ > sysctl_sched_nr_migrate)
+ goto out;
+ /*
+- * To help distribute high priority tasks accross CPUs we don't
++ * To help distribute high priority tasks across CPUs we don't
+ * skip a task if it will be the highest priority task (i.e. smallest
+ * prio value) on its new queue regardless of its load weight
+ */
+ skip_for_load = (p->se.load.weight >> 1) > rem_load_move +
+ SCHED_LOAD_SCALE_FUZZ;
+@@ -2226,31 +2295,30 @@ next:
+ pull_task(busiest, p, this_rq, this_cpu);
+ pulled++;
+ rem_load_move -= p->se.load.weight;
+
+ /*
+- * We only want to steal up to the prescribed number of tasks
+- * and the prescribed amount of weighted load.
++ * We only want to steal up to the prescribed amount of weighted load.
+ */
+- if (pulled < max_nr_move && rem_load_move > 0) {
++ if (rem_load_move > 0) {
+ if (p->prio < *this_best_prio)
+ *this_best_prio = p->prio;
+ p = iterator->next(iterator->arg);
+ goto next;
+ }
+ out:
+ /*
+- * Right now, this is the only place pull_task() is called,
++ * Right now, this is one of only two places pull_task() is called,
+ * so we can safely collect pull_task() stats here rather than
+ * inside pull_task().
+ */
+ schedstat_add(sd, lb_gained[idle], pulled);
+
+ if (all_pinned)
+ *all_pinned = pinned;
+- *load_moved = max_load_move - rem_load_move;
+- return pulled;
++
++ return max_load_move - rem_load_move;
+ }
+
+ /*
+ * move_tasks tries to move up to max_load_move weighted load from busiest to
+ * this_rq, as part of a balancing operation within domain "sd".
+@@ -2261,42 +2329,65 @@ out:
+ static int move_tasks(struct rq *this_rq, int this_cpu, struct rq *busiest,
+ unsigned long max_load_move,
+ struct sched_domain *sd, enum cpu_idle_type idle,
+ int *all_pinned)
+ {
+- struct sched_class *class = sched_class_highest;
++ const struct sched_class *class = sched_class_highest;
+ unsigned long total_load_moved = 0;
+ int this_best_prio = this_rq->curr->prio;
+
+ do {
+ total_load_moved +=
+ class->load_balance(this_rq, this_cpu, busiest,
+- ULONG_MAX, max_load_move - total_load_moved,
++ max_load_move - total_load_moved,
+ sd, idle, all_pinned, &this_best_prio);
+ class = class->next;
+ } while (class && max_load_move > total_load_moved);
+
+ return total_load_moved > 0;
+ }
+
++static int
++iter_move_one_task(struct rq *this_rq, int this_cpu, struct rq *busiest,
++ struct sched_domain *sd, enum cpu_idle_type idle,
++ struct rq_iterator *iterator)
++{
++ struct task_struct *p = iterator->start(iterator->arg);
++ int pinned = 0;
++
++ while (p) {
++ if (can_migrate_task(p, busiest, this_cpu, sd, idle, &pinned)) {
++ pull_task(busiest, p, this_rq, this_cpu);
++ /*
++ * Right now, this is only the second place pull_task()
++ * is called, so we can safely collect pull_task()
++ * stats here rather than inside pull_task().
++ */
++ schedstat_inc(sd, lb_gained[idle]);
++
++ return 1;
++ }
++ p = iterator->next(iterator->arg);
++ }
++
++ return 0;
++}
++
+ /*
+ * move_one_task tries to move exactly one task from busiest to this_rq, as
+ * part of active balancing operations within "domain".
+ * Returns 1 if successful and 0 otherwise.
+ *
+ * Called with both runqueues locked.
+ */
+ static int move_one_task(struct rq *this_rq, int this_cpu, struct rq *busiest,
+ struct sched_domain *sd, enum cpu_idle_type idle)
+ {
+- struct sched_class *class;
+- int this_best_prio = MAX_PRIO;
++ const struct sched_class *class;
+
+ for (class = sched_class_highest; class; class = class->next)
+- if (class->load_balance(this_rq, this_cpu, busiest,
+- 1, ULONG_MAX, sd, idle, NULL,
+- &this_best_prio))
++ if (class->move_one_task(this_rq, this_cpu, busiest, sd, idle))
+ return 1;
+
+ return 0;
+ }
+
+@@ -2313,11 +2404,11 @@ find_busiest_group(struct sched_domain *
+ struct sched_group *busiest = NULL, *this = NULL, *group = sd->groups;
+ unsigned long max_load, avg_load, total_load, this_load, total_pwr;
+ unsigned long max_pull;
+ unsigned long busiest_load_per_task, busiest_nr_running;
+ unsigned long this_load_per_task, this_nr_running;
+- int load_idx;
++ int load_idx, group_imb = 0;
+ #if defined(CONFIG_SCHED_MC) || defined(CONFIG_SCHED_SMT)
+ int power_savings_balance = 1;
+ unsigned long leader_nr_running = 0, min_load_per_task = 0;
+ unsigned long min_nr_running = ULONG_MAX;
+ struct sched_group *group_min = NULL, *group_leader = NULL;
+@@ -2332,23 +2423,26 @@ find_busiest_group(struct sched_domain *
+ load_idx = sd->newidle_idx;
+ else
+ load_idx = sd->idle_idx;
+
+ do {
+- unsigned long load, group_capacity;
++ unsigned long load, group_capacity, max_cpu_load, min_cpu_load;
+ int local_group;
+ int i;
++ int __group_imb = 0;
+ unsigned int balance_cpu = -1, first_idle_cpu = 0;
+ unsigned long sum_nr_running, sum_weighted_load;
+
+ local_group = cpu_isset(this_cpu, group->cpumask);
+
+ if (local_group)
+ balance_cpu = first_cpu(group->cpumask);
+
+ /* Tally up the load of all CPUs in the group */
+ sum_weighted_load = sum_nr_running = avg_load = 0;
++ max_cpu_load = 0;
++ min_cpu_load = ~0UL;
+
+ for_each_cpu_mask(i, group->cpumask) {
+ struct rq *rq;
+
+ if (!cpu_isset(i, *cpus))
+@@ -2365,12 +2459,17 @@ find_busiest_group(struct sched_domain *
+ first_idle_cpu = 1;
+ balance_cpu = i;
+ }
+
+ load = target_load(i, load_idx);
+- } else
++ } else {
+ load = source_load(i, load_idx);
++ if (load > max_cpu_load)
++ max_cpu_load = load;
++ if (min_cpu_load > load)
++ min_cpu_load = load;
++ }
+
+ avg_load += load;
+ sum_nr_running += rq->nr_running;
+ sum_weighted_load += weighted_cpuload(i);
+ }
+@@ -2392,23 +2491,27 @@ find_busiest_group(struct sched_domain *
+
+ /* Adjust by relative CPU power of the group */
+ avg_load = sg_div_cpu_power(group,
+ avg_load * SCHED_LOAD_SCALE);
+
++ if ((max_cpu_load - min_cpu_load) > SCHED_LOAD_SCALE)
++ __group_imb = 1;
++
+ group_capacity = group->__cpu_power / SCHED_LOAD_SCALE;
+
+ if (local_group) {
+ this_load = avg_load;
+ this = group;
+ this_nr_running = sum_nr_running;
+ this_load_per_task = sum_weighted_load;
+ } else if (avg_load > max_load &&
+- sum_nr_running > group_capacity) {
++ (sum_nr_running > group_capacity || __group_imb)) {
+ max_load = avg_load;
+ busiest = group;
+ busiest_nr_running = sum_nr_running;
+ busiest_load_per_task = sum_weighted_load;
++ group_imb = __group_imb;
+ }
+
+ #if defined(CONFIG_SCHED_MC) || defined(CONFIG_SCHED_SMT)
+ /*
+ * Busy processors will not participate in power savings
+@@ -2476,19 +2579,22 @@ group_next:
+ if (this_load >= avg_load ||
+ 100*max_load <= sd->imbalance_pct*this_load)
+ goto out_balanced;
+
+ busiest_load_per_task /= busiest_nr_running;
++ if (group_imb)
++ busiest_load_per_task = min(busiest_load_per_task, avg_load);
++
+ /*
+ * We're trying to get all the cpus to the average_load, so we don't
+ * want to push ourselves above the average load, nor do we wish to
+ * reduce the max loaded cpu below the average load, as either of these
+ * actions would just result in more rebalancing later, and ping-pong
+ * tasks around. Thus we look for the minimum possible imbalance.
+ * Negative imbalances (*we* are more loaded than anyone else) will
+ * be counted as no imbalance for these purposes -- we can't fix that
+- * by pulling tasks to us. Be careful of negative numbers as they'll
++ * by pulling tasks to us. Be careful of negative numbers as they'll
+ * appear as very large values with unsigned longs.
+ */
+ if (max_load <= busiest_load_per_task)
+ goto out_balanced;
+
+@@ -2650,11 +2756,11 @@ static int load_balance(int this_cpu, st
+ */
+ if (idle != CPU_NOT_IDLE && sd->flags & SD_SHARE_CPUPOWER &&
+ !test_sd_parent(sd, SD_POWERSAVINGS_BALANCE))
+ sd_idle = 1;
+
+- schedstat_inc(sd, lb_cnt[idle]);
++ schedstat_inc(sd, lb_count[idle]);
+
+ redo:
+ group = find_busiest_group(sd, this_cpu, &imbalance, idle, &sd_idle,
+ &cpus, balance);
+
+@@ -2803,11 +2909,11 @@ load_balance_newidle(int this_cpu, struc
+ */
+ if (sd->flags & SD_SHARE_CPUPOWER &&
+ !test_sd_parent(sd, SD_POWERSAVINGS_BALANCE))
+ sd_idle = 1;
+
+- schedstat_inc(sd, lb_cnt[CPU_NEWLY_IDLE]);
++ schedstat_inc(sd, lb_count[CPU_NEWLY_IDLE]);
+ redo:
+ group = find_busiest_group(sd, this_cpu, &imbalance, CPU_NEWLY_IDLE,
+ &sd_idle, &cpus, NULL);
+ if (!group) {
+ schedstat_inc(sd, lb_nobusyg[CPU_NEWLY_IDLE]);
+@@ -2919,11 +3025,11 @@ static void active_load_balance(struct r
+
+ target_rq = cpu_rq(target_cpu);
+
+ /*
+ * This condition is "impossible", if it occurs
+- * we need to fix it. Originally reported by
++ * we need to fix it. Originally reported by
+ * Bjorn Helgaas on a 128-cpu setup.
+ */
+ BUG_ON(busiest_rq == target_rq);
+
+ /* move a task from busiest_rq to target_rq */
+@@ -2937,11 +3043,11 @@ static void active_load_balance(struct r
+ cpu_isset(busiest_cpu, sd->span))
+ break;
+ }
+
+ if (likely(sd)) {
+- schedstat_inc(sd, alb_cnt);
++ schedstat_inc(sd, alb_count);
+
+ if (move_one_task(target_rq, target_cpu, busiest_rq,
+ sd, CPU_IDLE))
+ schedstat_inc(sd, alb_pushed);
+ else
+@@ -2951,11 +3057,11 @@ static void active_load_balance(struct r
+ }
+
+ #ifdef CONFIG_NO_HZ
+ static struct {
+ atomic_t load_balancer;
+- cpumask_t cpu_mask;
++ cpumask_t cpu_mask;
+ } nohz ____cacheline_aligned = {
+ .load_balancer = ATOMIC_INIT(-1),
+ .cpu_mask = CPU_MASK_NONE,
+ };
+
+@@ -3030,11 +3136,11 @@ static DEFINE_SPINLOCK(balancing);
+ * It checks each scheduling domain to see if it is due to be balanced,
+ * and initiates a balancing operation if so.
+ *
+ * Balancing parameters are set up in arch_init_sched_domains.
+ */
+-static inline void rebalance_domains(int cpu, enum cpu_idle_type idle)
++static void rebalance_domains(int cpu, enum cpu_idle_type idle)
+ {
+ int balance = 1;
+ struct rq *rq = cpu_rq(cpu);
+ unsigned long interval;
+ struct sched_domain *sd;
+@@ -3214,22 +3320,10 @@ static inline void trigger_load_balance(
+ */
+ static inline void idle_balance(int cpu, struct rq *rq)
+ {
+ }
+
+-/* Avoid "used but not defined" warning on UP */
+-static int balance_tasks(struct rq *this_rq, int this_cpu, struct rq *busiest,
+- unsigned long max_nr_move, unsigned long max_load_move,
+- struct sched_domain *sd, enum cpu_idle_type idle,
+- int *all_pinned, unsigned long *load_moved,
+- int *this_best_prio, struct rq_iterator *iterator)
+-{
+- *load_moved = 0;
+-
+- return 0;
+-}
+-
+ #endif
+
+ DEFINE_PER_CPU(struct kernel_stat, kstat);
+
+ EXPORT_PER_CPU_SYMBOL(kstat);
+@@ -3244,11 +3338,11 @@ unsigned long long task_sched_runtime(st
+ u64 ns, delta_exec;
+ struct rq *rq;
+
+ rq = task_rq_lock(p, &flags);
+ ns = p->se.sum_exec_runtime;
+- if (rq->curr == p) {
++ if (task_current(rq, p)) {
+ update_rq_clock(rq);
+ delta_exec = rq->clock - p->se.exec_start;
+ if ((s64)delta_exec > 0)
+ ns += delta_exec;
+ }
+@@ -3258,11 +3352,10 @@ unsigned long long task_sched_runtime(st
+ }
+
+ /*
+ * Account user cpu time to a process.
+ * @p: the process that the cpu time gets accounted to
+- * @hardirq_offset: the offset to subtract from hardirq_count()
+ * @cputime: the cpu time spent in user space since the last update
+ */
+ void account_user_time(struct task_struct *p, cputime_t cputime)
+ {
+ struct cpu_usage_stat *cpustat = &kstat_this_cpu.cpustat;
+@@ -3277,10 +3370,39 @@ void account_user_time(struct task_struc
+ else
+ cpustat->user = cputime64_add(cpustat->user, tmp);
+ }
+
+ /*
++ * Account guest cpu time to a process.
++ * @p: the process that the cpu time gets accounted to
++ * @cputime: the cpu time spent in virtual machine since the last update
++ */
++static void account_guest_time(struct task_struct *p, cputime_t cputime)
++{
++ cputime64_t tmp;
++ struct cpu_usage_stat *cpustat = &kstat_this_cpu.cpustat;
++
++ tmp = cputime_to_cputime64(cputime);
++
++ p->utime = cputime_add(p->utime, cputime);
++ p->gtime = cputime_add(p->gtime, cputime);
++
++ cpustat->user = cputime64_add(cpustat->user, tmp);
++ cpustat->guest = cputime64_add(cpustat->guest, tmp);
++}
++
++/*
++ * Account scaled user cpu time to a process.
++ * @p: the process that the cpu time gets accounted to
++ * @cputime: the cpu time spent in user space since the last update
++ */
++void account_user_time_scaled(struct task_struct *p, cputime_t cputime)
++{
++ p->utimescaled = cputime_add(p->utimescaled, cputime);
++}
++
++/*
+ * Account system cpu time to a process.
+ * @p: the process that the cpu time gets accounted to
+ * @hardirq_offset: the offset to subtract from hardirq_count()
+ * @cputime: the cpu time spent in kernel space since the last update
+ */
+@@ -3289,10 +3411,13 @@ void account_system_time(struct task_str
+ {
+ struct cpu_usage_stat *cpustat = &kstat_this_cpu.cpustat;
+ struct rq *rq = this_rq();
+ cputime64_t tmp;
+
++ if ((p->flags & PF_VCPU) && (irq_count() - hardirq_offset == 0))
++ return account_guest_time(p, cputime);
++
+ p->stime = cputime_add(p->stime, cputime);
+
+ /* Add system time to cpustat. */
+ tmp = cputime_to_cputime64(cputime);
+ if (hardirq_count() - hardirq_offset)
+@@ -3308,10 +3433,21 @@ void account_system_time(struct task_str
+ /* Account for system time used */
+ acct_update_integrals(p);
+ }
+
+ /*
++ * Account scaled system cpu time to a process.
++ * @p: the process that the cpu time gets accounted to
++ * @hardirq_offset: the offset to subtract from hardirq_count()
++ * @cputime: the cpu time spent in kernel space since the last update
++ */
++void account_system_time_scaled(struct task_struct *p, cputime_t cputime)
++{
++ p->stimescaled = cputime_add(p->stimescaled, cputime);
++}
++
++/*
+ * Account for involuntary wait time.
+ * @p: the process from which the cpu time has been stolen
+ * @steal: the cpu time spent in involuntary wait
+ */
+ void account_steal_time(struct task_struct *p, cputime_t steal)
+@@ -3404,43 +3540,56 @@ EXPORT_SYMBOL(sub_preempt_count);
+ /*
+ * Print scheduling while atomic bug:
+ */
+ static noinline void __schedule_bug(struct task_struct *prev)
+ {
+- printk(KERN_ERR "BUG: scheduling while atomic: %s/0x%08x/%d\n",
+- prev->comm, preempt_count(), prev->pid);
++ struct pt_regs *regs = get_irq_regs();
++
++ printk(KERN_ERR "BUG: scheduling while atomic: %s/%d/0x%08x\n",
++ prev->comm, prev->pid, preempt_count());
++
+ debug_show_held_locks(prev);
+ if (irqs_disabled())
+ print_irqtrace_events(prev);
+- dump_stack();
++
++ if (regs)
++ show_regs(regs);
++ else
++ dump_stack();
+ }
+
+ /*
+ * Various schedule()-time debugging checks and statistics:
+ */
+ static inline void schedule_debug(struct task_struct *prev)
+ {
+ /*
+- * Test if we are atomic. Since do_exit() needs to call into
++ * Test if we are atomic. Since do_exit() needs to call into
+ * schedule() atomically, we ignore that path for now.
+ * Otherwise, whine if we are scheduling when we should not be.
+ */
+ if (unlikely(in_atomic_preempt_off()) && unlikely(!prev->exit_state))
+ __schedule_bug(prev);
+
+ profile_hit(SCHED_PROFILING, __builtin_return_address(0));
+
+- schedstat_inc(this_rq(), sched_cnt);
++ schedstat_inc(this_rq(), sched_count);
++#ifdef CONFIG_SCHEDSTATS
++ if (unlikely(prev->lock_depth >= 0)) {
++ schedstat_inc(this_rq(), bkl_count);
++ schedstat_inc(prev, sched_info.bkl_count);
++ }
++#endif
+ }
+
+ /*
+ * Pick up the highest-prio task:
+ */
+ static inline struct task_struct *
+ pick_next_task(struct rq *rq, struct task_struct *prev)
+ {
+- struct sched_class *class;
++ const struct sched_class *class;
+ struct task_struct *p;
+
+ /*
+ * Optimization: we know that if all tasks are in
+ * the fair class we can call that function directly:
+@@ -3485,13 +3634,17 @@ need_resched:
+ release_kernel_lock(prev);
+ need_resched_nonpreemptible:
+
+ schedule_debug(prev);
+
+- spin_lock_irq(&rq->lock);
+- clear_tsk_need_resched(prev);
++ /*
++ * Do the rq-clock update outside the rq lock:
++ */
++ local_irq_disable();
+ __update_rq_clock(rq);
++ spin_lock(&rq->lock);
++ clear_tsk_need_resched(prev);
+
+ if (prev->state && !(preempt_count() & PREEMPT_ACTIVE)) {
+ if (unlikely((prev->state & TASK_INTERRUPTIBLE) &&
+ unlikely(signal_pending(prev)))) {
+ prev->state = TASK_RUNNING;
+@@ -3530,11 +3683,11 @@ need_resched_nonpreemptible:
+ EXPORT_SYMBOL(schedule);
+
+ #ifdef CONFIG_PREEMPT
+ /*
+ * this is the entry point to schedule() from in-kernel preemption
+- * off of preempt_enable. Kernel preemptions off return from interrupt
++ * off of preempt_enable. Kernel preemptions off return from interrupt
+ * occur there and call schedule directly.
+ */
+ asmlinkage void __sched preempt_schedule(void)
+ {
+ struct thread_info *ti = current_thread_info();
+@@ -3542,36 +3695,39 @@ asmlinkage void __sched preempt_schedule
+ struct task_struct *task = current;
+ int saved_lock_depth;
+ #endif
+ /*
+ * If there is a non-zero preempt_count or interrupts are disabled,
+- * we do not want to preempt the current task. Just return..
++ * we do not want to preempt the current task. Just return..
+ */
+ if (likely(ti->preempt_count || irqs_disabled()))
+ return;
+
+-need_resched:
+- add_preempt_count(PREEMPT_ACTIVE);
+- /*
+- * We keep the big kernel semaphore locked, but we
+- * clear ->lock_depth so that schedule() doesnt
+- * auto-release the semaphore:
+- */
++ do {
++ add_preempt_count(PREEMPT_ACTIVE);
++
++ /*
++ * We keep the big kernel semaphore locked, but we
++ * clear ->lock_depth so that schedule() doesnt
++ * auto-release the semaphore:
++ */
+ #ifdef CONFIG_PREEMPT_BKL
+- saved_lock_depth = task->lock_depth;
+- task->lock_depth = -1;
++ saved_lock_depth = task->lock_depth;
++ task->lock_depth = -1;
+ #endif
+- schedule();
++ schedule();
+ #ifdef CONFIG_PREEMPT_BKL
+- task->lock_depth = saved_lock_depth;
++ task->lock_depth = saved_lock_depth;
+ #endif
+- sub_preempt_count(PREEMPT_ACTIVE);
++ sub_preempt_count(PREEMPT_ACTIVE);
+
+- /* we could miss a preemption opportunity between schedule and now */
+- barrier();
+- if (unlikely(test_thread_flag(TIF_NEED_RESCHED)))
+- goto need_resched;
++ /*
++ * Check again in case we missed a preemption opportunity
++ * between schedule and now.
++ */
++ barrier();
++ } while (unlikely(test_thread_flag(TIF_NEED_RESCHED)));
+ }
+ EXPORT_SYMBOL(preempt_schedule);
+
+ /*
+ * this is the entry point to schedule() from kernel preemption
+@@ -3587,33 +3743,36 @@ asmlinkage void __sched preempt_schedule
+ int saved_lock_depth;
+ #endif
+ /* Catch callers which need to be fixed */
+ BUG_ON(ti->preempt_count || !irqs_disabled());
+
+-need_resched:
+- add_preempt_count(PREEMPT_ACTIVE);
+- /*
+- * We keep the big kernel semaphore locked, but we
+- * clear ->lock_depth so that schedule() doesnt
+- * auto-release the semaphore:
+- */
++ do {
++ add_preempt_count(PREEMPT_ACTIVE);
++
++ /*
++ * We keep the big kernel semaphore locked, but we
++ * clear ->lock_depth so that schedule() doesnt
++ * auto-release the semaphore:
++ */
+ #ifdef CONFIG_PREEMPT_BKL
+- saved_lock_depth = task->lock_depth;
+- task->lock_depth = -1;
++ saved_lock_depth = task->lock_depth;
++ task->lock_depth = -1;
+ #endif
+- local_irq_enable();
+- schedule();
+- local_irq_disable();
++ local_irq_enable();
++ schedule();
++ local_irq_disable();
+ #ifdef CONFIG_PREEMPT_BKL
+- task->lock_depth = saved_lock_depth;
++ task->lock_depth = saved_lock_depth;
+ #endif
+- sub_preempt_count(PREEMPT_ACTIVE);
++ sub_preempt_count(PREEMPT_ACTIVE);
+
+- /* we could miss a preemption opportunity between schedule and now */
+- barrier();
+- if (unlikely(test_thread_flag(TIF_NEED_RESCHED)))
+- goto need_resched;
++ /*
++ * Check again in case we missed a preemption opportunity
++ * between schedule and now.
++ */
++ barrier();
++ } while (unlikely(test_thread_flag(TIF_NEED_RESCHED)));
+ }
+
+ #endif /* CONFIG_PREEMPT */
+
+ int default_wake_function(wait_queue_t *curr, unsigned mode, int sync,
+@@ -3622,25 +3781,24 @@ int default_wake_function(wait_queue_t *
+ return try_to_wake_up(curr->private, mode, sync);
+ }
+ EXPORT_SYMBOL(default_wake_function);
+
+ /*
+- * The core wakeup function. Non-exclusive wakeups (nr_exclusive == 0) just
+- * wake everything up. If it's an exclusive wakeup (nr_exclusive == small +ve
++ * The core wakeup function. Non-exclusive wakeups (nr_exclusive == 0) just
++ * wake everything up. If it's an exclusive wakeup (nr_exclusive == small +ve
+ * number) then we wake all the non-exclusive tasks and one exclusive task.
+ *
+ * There are circumstances in which we can try to wake a task which has already
+- * started to run but is not in state TASK_RUNNING. try_to_wake_up() returns
++ * started to run but is not in state TASK_RUNNING. try_to_wake_up() returns
+ * zero in this (rare) case, and we handle it by continuing to scan the queue.
+ */
+ static void __wake_up_common(wait_queue_head_t *q, unsigned int mode,
+ int nr_exclusive, int sync, void *key)
+ {
+- struct list_head *tmp, *next;
++ wait_queue_t *curr, *next;
+
+- list_for_each_safe(tmp, next, &q->task_list) {
+- wait_queue_t *curr = list_entry(tmp, wait_queue_t, task_list);
++ list_for_each_entry_safe(curr, next, &q->task_list, task_list) {
+ unsigned flags = curr->flags;
+
+ if (curr->func(curr, mode, sync, key) &&
+ (flags & WQ_FLAG_EXCLUSIVE) && !--nr_exclusive)
+ break;
+@@ -3702,11 +3860,11 @@ __wake_up_sync(wait_queue_head_t *q, uns
+ __wake_up_common(q, mode, nr_exclusive, sync, NULL);
+ spin_unlock_irqrestore(&q->lock, flags);
+ }
+ EXPORT_SYMBOL_GPL(__wake_up_sync); /* For internal use only */
+
+-void fastcall complete(struct completion *x)
++void complete(struct completion *x)
+ {
+ unsigned long flags;
+
+ spin_lock_irqsave(&x->wait.lock, flags);
+ x->done++;
+@@ -3714,11 +3872,11 @@ void fastcall complete(struct completion
+ 1, 0, NULL);
+ spin_unlock_irqrestore(&x->wait.lock, flags);
+ }
+ EXPORT_SYMBOL(complete);
+
+-void fastcall complete_all(struct completion *x)
++void complete_all(struct completion *x)
+ {
+ unsigned long flags;
+
+ spin_lock_irqsave(&x->wait.lock, flags);
+ x->done += UINT_MAX/2;
+@@ -3726,210 +3884,123 @@ void fastcall complete_all(struct comple
+ 0, 0, NULL);
+ spin_unlock_irqrestore(&x->wait.lock, flags);
+ }
+ EXPORT_SYMBOL(complete_all);
+
+-void fastcall __sched wait_for_completion(struct completion *x)
+-{
+- might_sleep();
+-
+- spin_lock_irq(&x->wait.lock);
+- if (!x->done) {
+- DECLARE_WAITQUEUE(wait, current);
+-
+- wait.flags |= WQ_FLAG_EXCLUSIVE;
+- __add_wait_queue_tail(&x->wait, &wait);
+- do {
+- __set_current_state(TASK_UNINTERRUPTIBLE);
+- spin_unlock_irq(&x->wait.lock);
+- schedule();
+- spin_lock_irq(&x->wait.lock);
+- } while (!x->done);
+- __remove_wait_queue(&x->wait, &wait);
+- }
+- x->done--;
+- spin_unlock_irq(&x->wait.lock);
+-}
+-EXPORT_SYMBOL(wait_for_completion);
+-
+-unsigned long fastcall __sched
+-wait_for_completion_timeout(struct completion *x, unsigned long timeout)
++static inline long __sched
++do_wait_for_common(struct completion *x, long timeout, int state)
+ {
+- might_sleep();
+-
+- spin_lock_irq(&x->wait.lock);
+ if (!x->done) {
+ DECLARE_WAITQUEUE(wait, current);
+
+ wait.flags |= WQ_FLAG_EXCLUSIVE;
+ __add_wait_queue_tail(&x->wait, &wait);
+ do {
+- __set_current_state(TASK_UNINTERRUPTIBLE);
++ if (state == TASK_INTERRUPTIBLE &&
++ signal_pending(current)) {
++ __remove_wait_queue(&x->wait, &wait);
++ return -ERESTARTSYS;
++ }
++ __set_current_state(state);
+ spin_unlock_irq(&x->wait.lock);
+ timeout = schedule_timeout(timeout);
+ spin_lock_irq(&x->wait.lock);
+ if (!timeout) {
+ __remove_wait_queue(&x->wait, &wait);
+- goto out;
++ return timeout;
+ }
+ } while (!x->done);
+ __remove_wait_queue(&x->wait, &wait);
+ }
+ x->done--;
+-out:
+- spin_unlock_irq(&x->wait.lock);
+ return timeout;
+ }
+-EXPORT_SYMBOL(wait_for_completion_timeout);
+
+-int fastcall __sched wait_for_completion_interruptible(struct completion *x)
++static long __sched
++wait_for_common(struct completion *x, long timeout, int state)
+ {
+- int ret = 0;
+-
+ might_sleep();
+
+ spin_lock_irq(&x->wait.lock);
+- if (!x->done) {
+- DECLARE_WAITQUEUE(wait, current);
+-
+- wait.flags |= WQ_FLAG_EXCLUSIVE;
+- __add_wait_queue_tail(&x->wait, &wait);
+- do {
+- if (signal_pending(current)) {
+- ret = -ERESTARTSYS;
+- __remove_wait_queue(&x->wait, &wait);
+- goto out;
+- }
+- __set_current_state(TASK_INTERRUPTIBLE);
+- spin_unlock_irq(&x->wait.lock);
+- schedule();
+- spin_lock_irq(&x->wait.lock);
+- } while (!x->done);
+- __remove_wait_queue(&x->wait, &wait);
+- }
+- x->done--;
+-out:
++ timeout = do_wait_for_common(x, timeout, state);
+ spin_unlock_irq(&x->wait.lock);
+-
+- return ret;
++ return timeout;
+ }
+-EXPORT_SYMBOL(wait_for_completion_interruptible);
+
+-unsigned long fastcall __sched
+-wait_for_completion_interruptible_timeout(struct completion *x,
+- unsigned long timeout)
++void __sched wait_for_completion(struct completion *x)
+ {
+- might_sleep();
+-
+- spin_lock_irq(&x->wait.lock);
+- if (!x->done) {
+- DECLARE_WAITQUEUE(wait, current);
++ wait_for_common(x, MAX_SCHEDULE_TIMEOUT, TASK_UNINTERRUPTIBLE);
++}
++EXPORT_SYMBOL(wait_for_completion);
+
+- wait.flags |= WQ_FLAG_EXCLUSIVE;
+- __add_wait_queue_tail(&x->wait, &wait);
+- do {
+- if (signal_pending(current)) {
+- timeout = -ERESTARTSYS;
+- __remove_wait_queue(&x->wait, &wait);
+- goto out;
+- }
+- __set_current_state(TASK_INTERRUPTIBLE);
+- spin_unlock_irq(&x->wait.lock);
+- timeout = schedule_timeout(timeout);
+- spin_lock_irq(&x->wait.lock);
+- if (!timeout) {
+- __remove_wait_queue(&x->wait, &wait);
+- goto out;
+- }
+- } while (!x->done);
+- __remove_wait_queue(&x->wait, &wait);
+- }
+- x->done--;
+-out:
+- spin_unlock_irq(&x->wait.lock);
+- return timeout;
++unsigned long __sched
++wait_for_completion_timeout(struct completion *x, unsigned long timeout)
++{
++ return wait_for_common(x, timeout, TASK_UNINTERRUPTIBLE);
+ }
+-EXPORT_SYMBOL(wait_for_completion_interruptible_timeout);
++EXPORT_SYMBOL(wait_for_completion_timeout);
+
+-static inline void
+-sleep_on_head(wait_queue_head_t *q, wait_queue_t *wait, unsigned long *flags)
++int __sched wait_for_completion_interruptible(struct completion *x)
+ {
+- spin_lock_irqsave(&q->lock, *flags);
+- __add_wait_queue(q, wait);
+- spin_unlock(&q->lock);
++ long t = wait_for_common(x, MAX_SCHEDULE_TIMEOUT, TASK_INTERRUPTIBLE);
++ if (t == -ERESTARTSYS)
++ return t;
++ return 0;
+ }
++EXPORT_SYMBOL(wait_for_completion_interruptible);
+
+-static inline void
+-sleep_on_tail(wait_queue_head_t *q, wait_queue_t *wait, unsigned long *flags)
++unsigned long __sched
++wait_for_completion_interruptible_timeout(struct completion *x,
++ unsigned long timeout)
+ {
+- spin_lock_irq(&q->lock);
+- __remove_wait_queue(q, wait);
+- spin_unlock_irqrestore(&q->lock, *flags);
++ return wait_for_common(x, timeout, TASK_INTERRUPTIBLE);
+ }
++EXPORT_SYMBOL(wait_for_completion_interruptible_timeout);
+
+-void __sched interruptible_sleep_on(wait_queue_head_t *q)
++static long __sched
++sleep_on_common(wait_queue_head_t *q, int state, long timeout)
+ {
+ unsigned long flags;
+ wait_queue_t wait;
+
+ init_waitqueue_entry(&wait, current);
+
+- current->state = TASK_INTERRUPTIBLE;
++ __set_current_state(state);
+
+- sleep_on_head(q, &wait, &flags);
+- schedule();
+- sleep_on_tail(q, &wait, &flags);
++ spin_lock_irqsave(&q->lock, flags);
++ __add_wait_queue(q, &wait);
++ spin_unlock(&q->lock);
++ timeout = schedule_timeout(timeout);
++ spin_lock_irq(&q->lock);
++ __remove_wait_queue(q, &wait);
++ spin_unlock_irqrestore(&q->lock, flags);
++
++ return timeout;
++}
++
++void __sched interruptible_sleep_on(wait_queue_head_t *q)
++{
++ sleep_on_common(q, TASK_INTERRUPTIBLE, MAX_SCHEDULE_TIMEOUT);
+ }
+ EXPORT_SYMBOL(interruptible_sleep_on);
+
+ long __sched
+ interruptible_sleep_on_timeout(wait_queue_head_t *q, long timeout)
+ {
+- unsigned long flags;
+- wait_queue_t wait;
+-
+- init_waitqueue_entry(&wait, current);
+-
+- current->state = TASK_INTERRUPTIBLE;
+-
+- sleep_on_head(q, &wait, &flags);
+- timeout = schedule_timeout(timeout);
+- sleep_on_tail(q, &wait, &flags);
+-
+- return timeout;
++ return sleep_on_common(q, TASK_INTERRUPTIBLE, timeout);
+ }
+ EXPORT_SYMBOL(interruptible_sleep_on_timeout);
+
+ void __sched sleep_on(wait_queue_head_t *q)
+ {
+- unsigned long flags;
+- wait_queue_t wait;
+-
+- init_waitqueue_entry(&wait, current);
+-
+- current->state = TASK_UNINTERRUPTIBLE;
+-
+- sleep_on_head(q, &wait, &flags);
+- schedule();
+- sleep_on_tail(q, &wait, &flags);
++ sleep_on_common(q, TASK_UNINTERRUPTIBLE, MAX_SCHEDULE_TIMEOUT);
+ }
+ EXPORT_SYMBOL(sleep_on);
+
+ long __sched sleep_on_timeout(wait_queue_head_t *q, long timeout)
+ {
+- unsigned long flags;
+- wait_queue_t wait;
+-
+- init_waitqueue_entry(&wait, current);
+-
+- current->state = TASK_UNINTERRUPTIBLE;
+-
+- sleep_on_head(q, &wait, &flags);
+- timeout = schedule_timeout(timeout);
+- sleep_on_tail(q, &wait, &flags);
+-
+- return timeout;
++ return sleep_on_common(q, TASK_UNINTERRUPTIBLE, timeout);
+ }
+ EXPORT_SYMBOL(sleep_on_timeout);
+
+ #ifdef CONFIG_RT_MUTEXES
+
+@@ -3944,38 +4015,44 @@ EXPORT_SYMBOL(sleep_on_timeout);
+ * Used by the rt_mutex code to implement priority inheritance logic.
+ */
+ void rt_mutex_setprio(struct task_struct *p, int prio)
+ {
+ unsigned long flags;
+- int oldprio, on_rq;
++ int oldprio, on_rq, running;
+ struct rq *rq;
+
+ BUG_ON(prio < 0 || prio > MAX_PRIO);
+
+ rq = task_rq_lock(p, &flags);
+ update_rq_clock(rq);
+
+ oldprio = p->prio;
+ on_rq = p->se.on_rq;
+- if (on_rq)
++ running = task_current(rq, p);
++ if (on_rq) {
+ dequeue_task(rq, p, 0);
++ if (running)
++ p->sched_class->put_prev_task(rq, p);
++ }
+
+ if (rt_prio(prio))
+ p->sched_class = &rt_sched_class;
+ else
+ p->sched_class = &fair_sched_class;
+
+ p->prio = prio;
+
+ if (on_rq) {
++ if (running)
++ p->sched_class->set_curr_task(rq);
+ enqueue_task(rq, p, 0);
+ /*
+ * Reschedule if we are currently running on this runqueue and
+ * our priority decreased, or if we are not currently running on
+ * this runqueue and our priority is higher than the current's
+ */
+- if (task_running(rq, p)) {
++ if (running) {
+ if (p->prio > oldprio)
+ resched_task(rq->curr);
+ } else {
+ check_preempt_curr(rq, p);
+ }
+@@ -4135,13 +4212,13 @@ struct task_struct *idle_task(int cpu)
+
+ /**
+ * find_process_by_pid - find a process with a matching PID value.
+ * @pid: the pid in question.
+ */
+-static inline struct task_struct *find_process_by_pid(pid_t pid)
++static struct task_struct *find_process_by_pid(pid_t pid)
+ {
+- return pid ? find_task_by_pid(pid) : current;
++ return pid ? find_task_by_vpid(pid) : current;
+ }
+
+ /* Actually do priority change: must hold rq lock. */
+ static void
+ __setscheduler(struct rq *rq, struct task_struct *p, int policy, int prio)
+@@ -4177,11 +4254,11 @@ __setscheduler(struct rq *rq, struct tas
+ * NOTE that the task may be already dead.
+ */
+ int sched_setscheduler(struct task_struct *p, int policy,
+ struct sched_param *param)
+ {
+- int retval, oldprio, oldpolicy = -1, on_rq;
++ int retval, oldprio, oldpolicy = -1, on_rq, running;
+ unsigned long flags;
+ struct rq *rq;
+
+ /* may grab non-irq protected spin_locks */
+ BUG_ON(in_interrupt());
+@@ -4259,22 +4336,30 @@ recheck:
+ spin_unlock_irqrestore(&p->pi_lock, flags);
+ goto recheck;
+ }
+ update_rq_clock(rq);
+ on_rq = p->se.on_rq;
+- if (on_rq)
++ running = task_current(rq, p);
++ if (on_rq) {
+ deactivate_task(rq, p, 0);
++ if (running)
++ p->sched_class->put_prev_task(rq, p);
++ }
++
+ oldprio = p->prio;
+ __setscheduler(rq, p, policy, param->sched_priority);
++
+ if (on_rq) {
++ if (running)
++ p->sched_class->set_curr_task(rq);
+ activate_task(rq, p, 0);
+ /*
+ * Reschedule if we are currently running on this runqueue and
+ * our priority decreased, or if we are not currently running on
+ * this runqueue and our priority is higher than the current's
+ */
+- if (task_running(rq, p)) {
++ if (running) {
+ if (p->prio > oldprio)
+ resched_task(rq->curr);
+ } else {
+ check_preempt_curr(rq, p);
+ }
+@@ -4314,12 +4399,12 @@ do_sched_setscheduler(pid_t pid, int pol
+ * sys_sched_setscheduler - set/change the scheduler policy and RT priority
+ * @pid: the pid in question.
+ * @policy: new policy.
+ * @param: structure containing the new RT priority.
+ */
+-asmlinkage long sys_sched_setscheduler(pid_t pid, int policy,
+- struct sched_param __user *param)
++asmlinkage long
++sys_sched_setscheduler(pid_t pid, int policy, struct sched_param __user *param)
+ {
+ /* negative values for policy are not valid */
+ if (policy < 0)
+ return -EINVAL;
+
+@@ -4341,26 +4426,24 @@ asmlinkage long sys_sched_setparam(pid_t
+ * @pid: the pid in question.
+ */
+ asmlinkage long sys_sched_getscheduler(pid_t pid)
+ {
+ struct task_struct *p;
+- int retval = -EINVAL;
++ int retval;
+
+ if (pid < 0)
+- goto out_nounlock;
++ return -EINVAL;
+
+ retval = -ESRCH;
+ read_lock(&tasklist_lock);
+ p = find_process_by_pid(pid);
+ if (p) {
+ retval = security_task_getscheduler(p);
+ if (!retval)
+ retval = p->policy;
+ }
+ read_unlock(&tasklist_lock);
+-
+-out_nounlock:
+ return retval;
+ }
+
+ /**
+ * sys_sched_getscheduler - get the RT priority of a thread
+@@ -4369,14 +4452,14 @@ out_nounlock:
+ */
+ asmlinkage long sys_sched_getparam(pid_t pid, struct sched_param __user *param)
+ {
+ struct sched_param lp;
+ struct task_struct *p;
+- int retval = -EINVAL;
++ int retval;
+
+ if (!param || pid < 0)
+- goto out_nounlock;
++ return -EINVAL;
+
+ read_lock(&tasklist_lock);
+ p = find_process_by_pid(pid);
+ retval = -ESRCH;
+ if (!p)
+@@ -4392,11 +4475,10 @@ asmlinkage long sys_sched_getparam(pid_t
+ /*
+ * This one might sleep, we cannot do it with a spinlock held ...
+ */
+ retval = copy_to_user(param, &lp, sizeof(*param)) ? -EFAULT : 0;
+
+-out_nounlock:
+ return retval;
+
+ out_unlock:
+ read_unlock(&tasklist_lock);
+ return retval;
+@@ -4418,11 +4500,11 @@ long sched_setaffinity(pid_t pid, cpumas
+ return -ESRCH;
+ }
+
+ /*
+ * It is not safe to call set_cpus_allowed with the
+- * tasklist_lock held. We will bump the task_struct's
++ * tasklist_lock held. We will bump the task_struct's
+ * usage count and then drop tasklist_lock.
+ */
+ get_task_struct(p);
+ read_unlock(&tasklist_lock);
+
+@@ -4435,12 +4517,25 @@ long sched_setaffinity(pid_t pid, cpumas
+ if (retval)
+ goto out_unlock;
+
+ cpus_allowed = cpuset_cpus_allowed(p);
+ cpus_and(new_mask, new_mask, cpus_allowed);
++ again:
+ retval = set_cpus_allowed(p, new_mask);
+
++ if (!retval) {
++ cpus_allowed = cpuset_cpus_allowed(p);
++ if (!cpus_subset(new_mask, cpus_allowed)) {
++ /*
++ * We must have raced with a concurrent cpuset
++ * update. Just reset the cpus_allowed to the
++ * cpuset's cpus_allowed
++ */
++ new_mask = cpus_allowed;
++ goto again;
++ }
++ }
+ out_unlock:
+ put_task_struct(p);
+ mutex_unlock(&sched_hotcpu_mutex);
+ return retval;
+ }
+@@ -4552,12 +4647,12 @@ asmlinkage long sys_sched_getaffinity(pi
+ */
+ asmlinkage long sys_sched_yield(void)
+ {
+ struct rq *rq = this_rq_lock();
+
+- schedstat_inc(rq, yld_cnt);
+- current->sched_class->yield_task(rq, current);
++ schedstat_inc(rq, yld_count);
++ current->sched_class->yield_task(rq);
+
+ /*
+ * Since we are going to call schedule() anyway, there's
+ * no need to preempt or enable interrupts:
+ */
+@@ -4601,11 +4696,11 @@ EXPORT_SYMBOL(cond_resched);
+
+ /*
+ * cond_resched_lock() - if a reschedule is pending, drop the given lock,
+ * call schedule, and on return reacquire the lock.
+ *
+- * This works OK both with and without CONFIG_PREEMPT. We do strange low-level
++ * This works OK both with and without CONFIG_PREEMPT. We do strange low-level
+ * operations here to prevent schedule() from being called twice (once via
+ * spin_unlock(), once by hand).
+ */
+ int cond_resched_lock(spinlock_t *lock)
+ {
+@@ -4655,11 +4750,11 @@ void __sched yield(void)
+ sys_sched_yield();
+ }
+ EXPORT_SYMBOL(yield);
+
+ /*
+- * This task is about to go to sleep on IO. Increment rq->nr_iowait so
++ * This task is about to go to sleep on IO. Increment rq->nr_iowait so
+ * that process accounting knows that this is a task in IO wait state.
+ *
+ * But don't do that if it is a deliberate, throttling IO wait (this task
+ * has set its backing_dev_info: the queue against which it should throttle)
+ */
+@@ -4747,15 +4842,16 @@ asmlinkage long sys_sched_get_priority_m
+ */
+ asmlinkage
+ long sys_sched_rr_get_interval(pid_t pid, struct timespec __user *interval)
+ {
+ struct task_struct *p;
+- int retval = -EINVAL;
++ unsigned int time_slice;
++ int retval;
+ struct timespec t;
+
+ if (pid < 0)
+- goto out_nounlock;
++ return -EINVAL;
+
+ retval = -ESRCH;
+ read_lock(&tasklist_lock);
+ p = find_process_by_pid(pid);
+ if (!p)
+@@ -4763,16 +4859,32 @@ long sys_sched_rr_get_interval(pid_t pid
+
+ retval = security_task_getscheduler(p);
+ if (retval)
+ goto out_unlock;
+
+- jiffies_to_timespec(p->policy == SCHED_FIFO ?
+- 0 : static_prio_timeslice(p->static_prio), &t);
++ /*
++ * Time slice is 0 for SCHED_FIFO tasks and for SCHED_OTHER
++ * tasks that are on an otherwise idle runqueue:
++ */
++ time_slice = 0;
++ if (p->policy == SCHED_RR) {
++ time_slice = DEF_TIMESLICE;
++ } else {
++ struct sched_entity *se = &p->se;
++ unsigned long flags;
++ struct rq *rq;
++
++ rq = task_rq_lock(p, &flags);
++ if (rq->cfs.load.weight)
++ time_slice = NS_TO_JIFFIES(sched_slice(&rq->cfs, se));
++ task_rq_unlock(rq, &flags);
++ }
+ read_unlock(&tasklist_lock);
++ jiffies_to_timespec(time_slice, &t);
+ retval = copy_to_user(interval, &t, sizeof(t)) ? -EFAULT : 0;
+-out_nounlock:
+ return retval;
++
+ out_unlock:
+ read_unlock(&tasklist_lock);
+ return retval;
+ }
+
+@@ -4782,32 +4894,33 @@ static void show_task(struct task_struct
+ {
+ unsigned long free = 0;
+ unsigned state;
+
+ state = p->state ? __ffs(p->state) + 1 : 0;
+- printk("%-13.13s %c", p->comm,
++ printk(KERN_INFO "%-13.13s %c", p->comm,
+ state < sizeof(stat_nam) - 1 ? stat_nam[state] : '?');
+ #if BITS_PER_LONG == 32
+ if (state == TASK_RUNNING)
+- printk(" running ");
++ printk(KERN_CONT " running ");
+ else
+- printk(" %08lx ", thread_saved_pc(p));
++ printk(KERN_CONT " %08lx ", thread_saved_pc(p));
+ #else
+ if (state == TASK_RUNNING)
+- printk(" running task ");
++ printk(KERN_CONT " running task ");
+ else
+- printk(" %016lx ", thread_saved_pc(p));
++ printk(KERN_CONT " %016lx ", thread_saved_pc(p));
+ #endif
+ #ifdef CONFIG_DEBUG_STACK_USAGE
+ {
+ unsigned long *n = end_of_stack(p);
+ while (!*n)
+ n++;
+ free = (unsigned long)n - (unsigned long)end_of_stack(p);
+ }
+ #endif
+- printk("%5lu %5d %6d\n", free, p->pid, p->parent->pid);
++ printk(KERN_CONT "%5lu %5d %6d\n", free,
++ task_pid_nr(p), task_pid_nr(p->parent));
+
+ if (state != TASK_RUNNING)
+ show_stack(p, NULL);
+ }
+
+@@ -4909,22 +5022,22 @@ cpumask_t nohz_cpu_mask = CPU_MASK_NONE;
+ * This idea comes from the SD scheduler of Con Kolivas:
+ */
+ static inline void sched_init_granularity(void)
+ {
+ unsigned int factor = 1 + ilog2(num_online_cpus());
+- const unsigned long limit = 100000000;
++ const unsigned long limit = 200000000;
+
+ sysctl_sched_min_granularity *= factor;
+ if (sysctl_sched_min_granularity > limit)
+ sysctl_sched_min_granularity = limit;
+
+ sysctl_sched_latency *= factor;
+ if (sysctl_sched_latency > limit)
+ sysctl_sched_latency = limit;
+
+- sysctl_sched_runtime_limit = sysctl_sched_latency;
+- sysctl_sched_wakeup_granularity = sysctl_sched_min_granularity / 2;
++ sysctl_sched_wakeup_granularity *= factor;
++ sysctl_sched_batch_wakeup_granularity *= factor;
+ }
+
+ #ifdef CONFIG_SMP
+ /*
+ * This is how migration works:
+@@ -4946,11 +5059,11 @@ static inline void sched_init_granularit
+ * Change a given task's CPU affinity. Migrate the thread to a
+ * proper CPU and schedule it away if the CPU it's executing on
+ * is removed from the allowed bitmask.
+ *
+ * NOTE: the caller must have a valid reference to the task, the
+- * task must not exit() & deallocate itself prematurely. The
++ * task must not exit() & deallocate itself prematurely. The
+ * call is not atomic; no spinlocks may be held.
+ */
+ int set_cpus_allowed(struct task_struct *p, cpumask_t new_mask)
+ {
+ struct migration_req req;
+@@ -4983,11 +5096,11 @@ out:
+ return ret;
+ }
+ EXPORT_SYMBOL_GPL(set_cpus_allowed);
+
+ /*
+- * Move (not current) task off this cpu, onto dest cpu. We're doing
++ * Move (not current) task off this cpu, onto dest cpu. We're doing
+ * this because either it can't run here any more (set_cpus_allowed()
+ * away from this CPU, or CPU going down), or because we're
+ * attempting to rebalance this task on exec (sched_exec).
+ *
+ * So we race with normal scheduler movements, but that's OK, as long
+@@ -5045,10 +5158,12 @@ static int migration_thread(void *data)
+ set_current_state(TASK_INTERRUPTIBLE);
+ while (!kthread_should_stop()) {
+ struct migration_req *req;
+ struct list_head *head;
+
++ try_to_freeze();
++
+ spin_lock_irq(&rq->lock);
+
+ if (cpu_is_offline(cpu)) {
+ spin_unlock_irq(&rq->lock);
+ goto wait_to_die;
+@@ -5089,50 +5204,69 @@ wait_to_die:
+ __set_current_state(TASK_RUNNING);
+ return 0;
+ }
+
+ #ifdef CONFIG_HOTPLUG_CPU
++
++static int __migrate_task_irq(struct task_struct *p, int src_cpu, int dest_cpu)
++{
++ int ret;
++
++ local_irq_disable();
++ ret = __migrate_task(p, src_cpu, dest_cpu);
++ local_irq_enable();
++ return ret;
++}
++
+ /*
+- * Figure out where task on dead CPU should go, use force if neccessary.
++ * Figure out where task on dead CPU should go, use force if necessary.
+ * NOTE: interrupts should be disabled by the caller
+ */
+ static void move_task_off_dead_cpu(int dead_cpu, struct task_struct *p)
+ {
+ unsigned long flags;
+ cpumask_t mask;
+ struct rq *rq;
+ int dest_cpu;
+
+-restart:
+- /* On same node? */
+- mask = node_to_cpumask(cpu_to_node(dead_cpu));
+- cpus_and(mask, mask, p->cpus_allowed);
+- dest_cpu = any_online_cpu(mask);
+-
+- /* On any allowed CPU? */
+- if (dest_cpu == NR_CPUS)
+- dest_cpu = any_online_cpu(p->cpus_allowed);
++ do {
++ /* On same node? */
++ mask = node_to_cpumask(cpu_to_node(dead_cpu));
++ cpus_and(mask, mask, p->cpus_allowed);
++ dest_cpu = any_online_cpu(mask);
++
++ /* On any allowed CPU? */
++ if (dest_cpu == NR_CPUS)
++ dest_cpu = any_online_cpu(p->cpus_allowed);
++
++ /* No more Mr. Nice Guy. */
++ if (dest_cpu == NR_CPUS) {
++ cpumask_t cpus_allowed = cpuset_cpus_allowed_locked(p);
++ /*
++ * Try to stay on the same cpuset, where the
++ * current cpuset may be a subset of all cpus.
++ * The cpuset_cpus_allowed_locked() variant of
++ * cpuset_cpus_allowed() will not block. It must be
++ * called within calls to cpuset_lock/cpuset_unlock.
++ */
++ rq = task_rq_lock(p, &flags);
++ p->cpus_allowed = cpus_allowed;
++ dest_cpu = any_online_cpu(p->cpus_allowed);
++ task_rq_unlock(rq, &flags);
+
+- /* No more Mr. Nice Guy. */
+- if (dest_cpu == NR_CPUS) {
+- rq = task_rq_lock(p, &flags);
+- cpus_setall(p->cpus_allowed);
+- dest_cpu = any_online_cpu(p->cpus_allowed);
+- task_rq_unlock(rq, &flags);
+-
+- /*
+- * Don't tell them about moving exiting tasks or
+- * kernel threads (both mm NULL), since they never
+- * leave kernel.
+- */
+- if (p->mm && printk_ratelimit())
+- printk(KERN_INFO "process %d (%s) no "
+- "longer affine to cpu%d\n",
+- p->pid, p->comm, dead_cpu);
+- }
+- if (!__migrate_task(p, dead_cpu, dest_cpu))
+- goto restart;
++ /*
++ * Don't tell them about moving exiting tasks or
++ * kernel threads (both mm NULL), since they never
++ * leave kernel.
++ */
++ if (p->mm && printk_ratelimit()) {
++ printk(KERN_INFO "process %d (%s) no "
++ "longer affine to cpu%d\n",
++ task_pid_nr(p), p->comm, dead_cpu);
++ }
++ }
++ } while (!__migrate_task_irq(p, dead_cpu, dest_cpu));
+ }
+
+ /*
+ * While a dead CPU has no uninterruptible tasks queued at this point,
+ * it might still have a nonzero ->nr_uninterruptible counter, because
+@@ -5156,27 +5290,27 @@ static void migrate_nr_uninterruptible(s
+ /* Run through task list and migrate tasks from the dead cpu. */
+ static void migrate_live_tasks(int src_cpu)
+ {
+ struct task_struct *p, *t;
+
+- write_lock_irq(&tasklist_lock);
++ read_lock(&tasklist_lock);
+
+ do_each_thread(t, p) {
+ if (p == current)
+ continue;
+
+ if (task_cpu(p) == src_cpu)
+ move_task_off_dead_cpu(src_cpu, p);
+ } while_each_thread(t, p);
+
+- write_unlock_irq(&tasklist_lock);
++ read_unlock(&tasklist_lock);
+ }
+
+ /*
+ * Schedules idle task to be the next runnable task on current CPU.
+- * It does so by boosting its priority to highest possible and adding it to
+- * the _front_ of the runqueue. Used by CPU offline code.
++ * It does so by boosting its priority to highest possible.
++ * Used by CPU offline code.
+ */
+ void sched_idle_next(void)
+ {
+ int this_cpu = smp_processor_id();
+ struct rq *rq = cpu_rq(this_cpu);
+@@ -5192,12 +5326,12 @@ void sched_idle_next(void)
+ */
+ spin_lock_irqsave(&rq->lock, flags);
+
+ __setscheduler(rq, p, SCHED_FIFO, MAX_RT_PRIO-1);
+
+- /* Add idle task to the _front_ of its priority queue: */
+- activate_idle_task(p, rq);
++ update_rq_clock(rq);
++ activate_task(rq, p, 0);
+
+ spin_unlock_irqrestore(&rq->lock, flags);
+ }
+
+ /*
+@@ -5219,26 +5353,25 @@ void idle_task_exit(void)
+ static void migrate_dead(unsigned int dead_cpu, struct task_struct *p)
+ {
+ struct rq *rq = cpu_rq(dead_cpu);
+
+ /* Must be exiting, otherwise would be on tasklist. */
+- BUG_ON(p->exit_state != EXIT_ZOMBIE && p->exit_state != EXIT_DEAD);
++ BUG_ON(!p->exit_state);
+
+ /* Cannot have done final schedule yet: would have vanished. */
+ BUG_ON(p->state == TASK_DEAD);
+
+ get_task_struct(p);
+
+ /*
+ * Drop lock around migration; if someone else moves it,
+- * that's OK. No task can be added to this CPU, so iteration is
++ * that's OK. No task can be added to this CPU, so iteration is
+ * fine.
+- * NOTE: interrupts should be left disabled --dev@
+ */
+- spin_unlock(&rq->lock);
++ spin_unlock_irq(&rq->lock);
+ move_task_off_dead_cpu(dead_cpu, p);
+- spin_lock(&rq->lock);
++ spin_lock_irq(&rq->lock);
+
+ put_task_struct(p);
+ }
+
+ /* release_task() removes task from tasklist, so we won't find dead tasks. */
+@@ -5265,34 +5398,52 @@ static void migrate_dead_tasks(unsigned
+ static struct ctl_table sd_ctl_dir[] = {
+ {
+ .procname = "sched_domain",
+ .mode = 0555,
+ },
+- {0,},
++ {0, },
+ };
+
+ static struct ctl_table sd_ctl_root[] = {
+ {
+ .ctl_name = CTL_KERN,
+ .procname = "kernel",
+ .mode = 0555,
+ .child = sd_ctl_dir,
+ },
+- {0,},
++ {0, },
+ };
+
+ static struct ctl_table *sd_alloc_ctl_entry(int n)
+ {
+ struct ctl_table *entry =
+- kmalloc(n * sizeof(struct ctl_table), GFP_KERNEL);
+-
+- BUG_ON(!entry);
+- memset(entry, 0, n * sizeof(struct ctl_table));
++ kcalloc(n, sizeof(struct ctl_table), GFP_KERNEL);
+
+ return entry;
+ }
+
++static void sd_free_ctl_entry(struct ctl_table **tablep)
++{
++ struct ctl_table *entry;
++
++ /*
++ * In the intermediate directories, both the child directory and
++ * procname are dynamically allocated and could fail but the mode
++ * will always be set. In the lowest directory the names are
++ * static strings and all have proc handlers.
++ */
++ for (entry = *tablep; entry->mode; entry++) {
++ if (entry->child)
++ sd_free_ctl_entry(&entry->child);
++ if (entry->proc_handler == NULL)
++ kfree(entry->procname);
++ }
++
++ kfree(*tablep);
++ *tablep = NULL;
++}
++
+ static void
+ set_table_entry(struct ctl_table *entry,
+ const char *procname, void *data, int maxlen,
+ mode_t mode, proc_handler *proc_handler)
+ {
+@@ -5306,10 +5457,13 @@ set_table_entry(struct ctl_table *entry,
+ static struct ctl_table *
+ sd_alloc_ctl_domain_table(struct sched_domain *sd)
+ {
+ struct ctl_table *table = sd_alloc_ctl_entry(12);
+
++ if (table == NULL)
++ return NULL;
++
+ set_table_entry(&table[0], "min_interval", &sd->min_interval,
+ sizeof(long), 0644, proc_doulongvec_minmax);
+ set_table_entry(&table[1], "max_interval", &sd->max_interval,
+ sizeof(long), 0644, proc_doulongvec_minmax);
+ set_table_entry(&table[2], "busy_idx", &sd->busy_idx,
+@@ -5329,10 +5483,11 @@ sd_alloc_ctl_domain_table(struct sched_d
+ set_table_entry(&table[9], "cache_nice_tries",
+ &sd->cache_nice_tries,
+ sizeof(int), 0644, proc_dointvec_minmax);
+ set_table_entry(&table[10], "flags", &sd->flags,
+ sizeof(int), 0644, proc_dointvec_minmax);
++ /* &table[11] is terminator */
+
+ return table;
+ }
+
+ static ctl_table *sd_alloc_ctl_cpu_table(int cpu)
+@@ -5343,10 +5498,12 @@ static ctl_table *sd_alloc_ctl_cpu_table
+ char buf[32];
+
+ for_each_domain(cpu, sd)
+ domain_num++;
+ entry = table = sd_alloc_ctl_entry(domain_num + 1);
++ if (table == NULL)
++ return NULL;
+
+ i = 0;
+ for_each_domain(cpu, sd) {
+ snprintf(buf, 32, "domain%d", i);
+ entry->procname = kstrdup(buf, GFP_KERNEL);
+@@ -5357,28 +5514,48 @@ static ctl_table *sd_alloc_ctl_cpu_table
+ }
+ return table;
+ }
+
+ static struct ctl_table_header *sd_sysctl_header;
+-static void init_sched_domain_sysctl(void)
++static void register_sched_domain_sysctl(void)
+ {
+ int i, cpu_num = num_online_cpus();
+ struct ctl_table *entry = sd_alloc_ctl_entry(cpu_num + 1);
+ char buf[32];
+
++ WARN_ON(sd_ctl_dir[0].child);
+ sd_ctl_dir[0].child = entry;
+
+- for (i = 0; i < cpu_num; i++, entry++) {
++ if (entry == NULL)
++ return;
++
++ for_each_online_cpu(i) {
+ snprintf(buf, 32, "cpu%d", i);
+ entry->procname = kstrdup(buf, GFP_KERNEL);
+ entry->mode = 0555;
+ entry->child = sd_alloc_ctl_cpu_table(i);
++ entry++;
+ }
++
++ WARN_ON(sd_sysctl_header);
+ sd_sysctl_header = register_sysctl_table(sd_ctl_root);
+ }
++
++/* may be called multiple times per register */
++static void unregister_sched_domain_sysctl(void)
++{
++ if (sd_sysctl_header)
++ unregister_sysctl_table(sd_sysctl_header);
++ sd_sysctl_header = NULL;
++ if (sd_ctl_dir[0].child)
++ sd_free_ctl_entry(&sd_ctl_dir[0].child);
++}
+ #else
+-static void init_sched_domain_sysctl(void)
++static void register_sched_domain_sysctl(void)
++{
++}
++static void unregister_sched_domain_sysctl(void)
+ {
+ }
+ #endif
+
+ /*
+@@ -5401,57 +5578,62 @@ migration_call(struct notifier_block *nf
+ case CPU_UP_PREPARE:
+ case CPU_UP_PREPARE_FROZEN:
+ p = kthread_create(migration_thread, hcpu, "migration/%d", cpu);
+ if (IS_ERR(p))
+ return NOTIFY_BAD;
++ p->flags |= PF_NOFREEZE;
+ kthread_bind(p, cpu);
+ /* Must be high prio: stop_machine expects to yield to it. */
+ rq = task_rq_lock(p, &flags);
+ __setscheduler(rq, p, SCHED_FIFO, MAX_RT_PRIO-1);
+ task_rq_unlock(rq, &flags);
+ cpu_rq(cpu)->migration_thread = p;
+ break;
+
+ case CPU_ONLINE:
+ case CPU_ONLINE_FROZEN:
+- /* Strictly unneccessary, as first user will wake it. */
++ /* Strictly unnecessary, as first user will wake it. */
+ wake_up_process(cpu_rq(cpu)->migration_thread);
+ break;
+
+ #ifdef CONFIG_HOTPLUG_CPU
+ case CPU_UP_CANCELED:
+ case CPU_UP_CANCELED_FROZEN:
+ if (!cpu_rq(cpu)->migration_thread)
+ break;
+- /* Unbind it from offline cpu so it can run. Fall thru. */
++ /* Unbind it from offline cpu so it can run. Fall thru. */
+ kthread_bind(cpu_rq(cpu)->migration_thread,
+ any_online_cpu(cpu_online_map));
+ kthread_stop(cpu_rq(cpu)->migration_thread);
+ cpu_rq(cpu)->migration_thread = NULL;
+ break;
+
+ case CPU_DEAD:
+ case CPU_DEAD_FROZEN:
++ cpuset_lock(); /* around calls to cpuset_cpus_allowed_lock() */
+ migrate_live_tasks(cpu);
+ rq = cpu_rq(cpu);
+ kthread_stop(rq->migration_thread);
+ rq->migration_thread = NULL;
+ /* Idle task back to normal (off runqueue, low prio) */
+- rq = task_rq_lock(rq->idle, &flags);
++ spin_lock_irq(&rq->lock);
+ update_rq_clock(rq);
+ deactivate_task(rq, rq->idle, 0);
+ rq->idle->static_prio = MAX_PRIO;
+ __setscheduler(rq, rq->idle, SCHED_NORMAL, 0);
+ rq->idle->sched_class = &idle_sched_class;
+ migrate_dead_tasks(cpu);
+- task_rq_unlock(rq, &flags);
++ spin_unlock_irq(&rq->lock);
++ cpuset_unlock();
+ migrate_nr_uninterruptible(rq);
+ BUG_ON(rq->nr_running != 0);
+
+- /* No need to migrate the tasks: it was best-effort if
+- * they didn't take sched_hotcpu_mutex. Just wake up
+- * the requestors. */
++ /*
++ * No need to migrate the tasks: it was best-effort if
++ * they didn't take sched_hotcpu_mutex. Just wake up
++ * the requestors.
++ */
+ spin_lock_irq(&rq->lock);
+ while (!list_empty(&rq->migration_queue)) {
+ struct migration_req *req;
+
+ req = list_entry(rq->migration_queue.next,
+@@ -5475,125 +5657,125 @@ migration_call(struct notifier_block *nf
+ static struct notifier_block __cpuinitdata migration_notifier = {
+ .notifier_call = migration_call,
+ .priority = 10
+ };
+
+-int __init migration_init(void)
++void __init migration_init(void)
+ {
+ void *cpu = (void *)(long)smp_processor_id();
+ int err;
+
+ /* Start one for the boot CPU: */
+ err = migration_call(&migration_notifier, CPU_UP_PREPARE, cpu);
+ BUG_ON(err == NOTIFY_BAD);
+ migration_call(&migration_notifier, CPU_ONLINE, cpu);
+ register_cpu_notifier(&migration_notifier);
+-
+- return 0;
+ }
+ #endif
+
+ #ifdef CONFIG_SMP
+
+ /* Number of possible processor ids */
+ int nr_cpu_ids __read_mostly = NR_CPUS;
+ EXPORT_SYMBOL(nr_cpu_ids);
+
+-#undef SCHED_DOMAIN_DEBUG
+-#ifdef SCHED_DOMAIN_DEBUG
+-static void sched_domain_debug(struct sched_domain *sd, int cpu)
+-{
+- int level = 0;
++#ifdef CONFIG_SCHED_DEBUG
+
+- if (!sd) {
+- printk(KERN_DEBUG "CPU%d attaching NULL sched-domain.\n", cpu);
+- return;
++static int sched_domain_debug_one(struct sched_domain *sd, int cpu, int level)
++{
++ struct sched_group *group = sd->groups;
++ cpumask_t groupmask;
++ char str[NR_CPUS];
++
++ cpumask_scnprintf(str, NR_CPUS, sd->span);
++ cpus_clear(groupmask);
++
++ printk(KERN_DEBUG "%*s domain %d: ", level, "", level);
++
++ if (!(sd->flags & SD_LOAD_BALANCE)) {
++ printk("does not load-balance\n");
++ if (sd->parent)
++ printk(KERN_ERR "ERROR: !SD_LOAD_BALANCE domain"
++ " has parent");
++ return -1;
+ }
+
+- printk(KERN_DEBUG "CPU%d attaching sched-domain:\n", cpu);
++ printk(KERN_CONT "span %s\n", str);
+
++ if (!cpu_isset(cpu, sd->span)) {
++ printk(KERN_ERR "ERROR: domain->span does not contain "
++ "CPU%d\n", cpu);
++ }
++ if (!cpu_isset(cpu, group->cpumask)) {
++ printk(KERN_ERR "ERROR: domain->groups does not contain"
++ " CPU%d\n", cpu);
++ }
++
++ printk(KERN_DEBUG "%*s groups:", level + 1, "");
+ do {
+- int i;
+- char str[NR_CPUS];
+- struct sched_group *group = sd->groups;
+- cpumask_t groupmask;
+-
+- cpumask_scnprintf(str, NR_CPUS, sd->span);
+- cpus_clear(groupmask);
+-
+- printk(KERN_DEBUG);
+- for (i = 0; i < level + 1; i++)
+- printk(" ");
+- printk("domain %d: ", level);
+-
+- if (!(sd->flags & SD_LOAD_BALANCE)) {
+- printk("does not load-balance\n");
+- if (sd->parent)
+- printk(KERN_ERR "ERROR: !SD_LOAD_BALANCE domain"
+- " has parent");
++ if (!group) {
++ printk("\n");
++ printk(KERN_ERR "ERROR: group is NULL\n");
+ break;
+ }
+
+- printk("span %s\n", str);
++ if (!group->__cpu_power) {
++ printk(KERN_CONT "\n");
++ printk(KERN_ERR "ERROR: domain->cpu_power not "
++ "set\n");
++ break;
++ }
+
+- if (!cpu_isset(cpu, sd->span))
+- printk(KERN_ERR "ERROR: domain->span does not contain "
+- "CPU%d\n", cpu);
+- if (!cpu_isset(cpu, group->cpumask))
+- printk(KERN_ERR "ERROR: domain->groups does not contain"
+- " CPU%d\n", cpu);
+-
+- printk(KERN_DEBUG);
+- for (i = 0; i < level + 2; i++)
+- printk(" ");
+- printk("groups:");
+- do {
+- if (!group) {
+- printk("\n");
+- printk(KERN_ERR "ERROR: group is NULL\n");
+- break;
+- }
++ if (!cpus_weight(group->cpumask)) {
++ printk(KERN_CONT "\n");
++ printk(KERN_ERR "ERROR: empty group\n");
++ break;
++ }
+
+- if (!group->__cpu_power) {
+- printk("\n");
+- printk(KERN_ERR "ERROR: domain->cpu_power not "
+- "set\n");
+- }
++ if (cpus_intersects(groupmask, group->cpumask)) {
++ printk(KERN_CONT "\n");
++ printk(KERN_ERR "ERROR: repeated CPUs\n");
++ break;
++ }
+
+- if (!cpus_weight(group->cpumask)) {
+- printk("\n");
+- printk(KERN_ERR "ERROR: empty group\n");
+- }
++ cpus_or(groupmask, groupmask, group->cpumask);
+
+- if (cpus_intersects(groupmask, group->cpumask)) {
+- printk("\n");
+- printk(KERN_ERR "ERROR: repeated CPUs\n");
+- }
++ cpumask_scnprintf(str, NR_CPUS, group->cpumask);
++ printk(KERN_CONT " %s", str);
++
++ group = group->next;
++ } while (group != sd->groups);
++ printk(KERN_CONT "\n");
++
++ if (!cpus_equal(sd->span, groupmask))
++ printk(KERN_ERR "ERROR: groups don't span domain->span\n");
++
++ if (sd->parent && !cpus_subset(groupmask, sd->parent->span))
++ printk(KERN_ERR "ERROR: parent span is not a superset "
++ "of domain->span\n");
++ return 0;
++}
+
+- cpus_or(groupmask, groupmask, group->cpumask);
++static void sched_domain_debug(struct sched_domain *sd, int cpu)
++{
++ int level = 0;
+
+- cpumask_scnprintf(str, NR_CPUS, group->cpumask);
+- printk(" %s", str);
++ if (!sd) {
++ printk(KERN_DEBUG "CPU%d attaching NULL sched-domain.\n", cpu);
++ return;
++ }
+
+- group = group->next;
+- } while (group != sd->groups);
+- printk("\n");
+-
+- if (!cpus_equal(sd->span, groupmask))
+- printk(KERN_ERR "ERROR: groups don't span "
+- "domain->span\n");
++ printk(KERN_DEBUG "CPU%d attaching sched-domain:\n", cpu);
+
++ for (;;) {
++ if (sched_domain_debug_one(sd, cpu, level))
++ break;
+ level++;
+ sd = sd->parent;
+ if (!sd)
+- continue;
+-
+- if (!cpus_subset(groupmask, sd->span))
+- printk(KERN_ERR "ERROR: parent span is not a superset "
+- "of domain->span\n");
+-
+- } while (sd);
++ break;
++ }
+ }
+ #else
+ # define sched_domain_debug(sd, cpu) do { } while (0)
+ #endif
+
+@@ -5698,11 +5880,11 @@ static int __init isolated_cpu_setup(cha
+ if (ints[i] < NR_CPUS)
+ cpu_set(ints[i], cpu_isolated_map);
+ return 1;
+ }
+
+-__setup ("isolcpus=", isolated_cpu_setup);
++__setup("isolcpus=", isolated_cpu_setup);
+
+ /*
+ * init_sched_build_groups takes the cpumask we wish to span, and a pointer
+ * to a function which identifies what group(along with sched group) a CPU
+ * belongs to. The return value of group_fn must be a >= 0 and < NR_CPUS
+@@ -5755,11 +5937,11 @@ init_sched_build_groups(cpumask_t span,
+ /**
+ * find_next_best_node - find the next node to include in a sched_domain
+ * @node: node whose sched_domain we're building
+ * @used_nodes: nodes already in the sched_domain
+ *
+- * Find the next node to include in a given scheduling domain. Simply
++ * Find the next node to include in a given scheduling domain. Simply
+ * finds the closest node not already in the @used_nodes map.
+ *
+ * Should use nodemask_t.
+ */
+ static int find_next_best_node(int node, unsigned long *used_nodes)
+@@ -5795,11 +5977,11 @@ static int find_next_best_node(int node,
+ /**
+ * sched_domain_node_span - get a cpumask for a node's sched_domain
+ * @node: node whose cpumask we're constructing
+ * @size: number of nodes to include in this span
+ *
+- * Given a node, construct a good cpumask for its sched_domain to span. It
++ * Given a node, construct a good cpumask for its sched_domain to span. It
+ * should be one that prevents unnecessary balancing, but also spreads tasks
+ * out optimally.
+ */
+ static cpumask_t sched_domain_node_span(int node)
+ {
+@@ -5832,12 +6014,12 @@ int sched_smt_power_savings = 0, sched_m
+ */
+ #ifdef CONFIG_SCHED_SMT
+ static DEFINE_PER_CPU(struct sched_domain, cpu_domains);
+ static DEFINE_PER_CPU(struct sched_group, sched_group_cpus);
+
+-static int cpu_to_cpu_group(int cpu, const cpumask_t *cpu_map,
+- struct sched_group **sg)
++static int
++cpu_to_cpu_group(int cpu, const cpumask_t *cpu_map, struct sched_group **sg)
+ {
+ if (sg)
+ *sg = &per_cpu(sched_group_cpus, cpu);
+ return cpu;
+ }
+@@ -5850,44 +6032,44 @@ static int cpu_to_cpu_group(int cpu, con
+ static DEFINE_PER_CPU(struct sched_domain, core_domains);
+ static DEFINE_PER_CPU(struct sched_group, sched_group_core);
+ #endif
+
+ #if defined(CONFIG_SCHED_MC) && defined(CONFIG_SCHED_SMT)
+-static int cpu_to_core_group(int cpu, const cpumask_t *cpu_map,
+- struct sched_group **sg)
++static int
++cpu_to_core_group(int cpu, const cpumask_t *cpu_map, struct sched_group **sg)
+ {
+ int group;
+- cpumask_t mask = cpu_sibling_map[cpu];
++ cpumask_t mask = cpu_sibling_map(cpu);
+ cpus_and(mask, mask, *cpu_map);
+ group = first_cpu(mask);
+ if (sg)
+ *sg = &per_cpu(sched_group_core, group);
+ return group;
+ }
+ #elif defined(CONFIG_SCHED_MC)
+-static int cpu_to_core_group(int cpu, const cpumask_t *cpu_map,
+- struct sched_group **sg)
++static int
++cpu_to_core_group(int cpu, const cpumask_t *cpu_map, struct sched_group **sg)
+ {
+ if (sg)
+ *sg = &per_cpu(sched_group_core, cpu);
+ return cpu;
+ }
+ #endif
+
+ static DEFINE_PER_CPU(struct sched_domain, phys_domains);
+ static DEFINE_PER_CPU(struct sched_group, sched_group_phys);
+
+-static int cpu_to_phys_group(int cpu, const cpumask_t *cpu_map,
+- struct sched_group **sg)
++static int
++cpu_to_phys_group(int cpu, const cpumask_t *cpu_map, struct sched_group **sg)
+ {
+ int group;
+ #ifdef CONFIG_SCHED_MC
+ cpumask_t mask = cpu_coregroup_map(cpu);
+ cpus_and(mask, mask, *cpu_map);
+ group = first_cpu(mask);
+ #elif defined(CONFIG_SCHED_SMT)
+- cpumask_t mask = cpu_sibling_map[cpu];
++ cpumask_t mask = cpu_sibling_map(cpu);
+ cpus_and(mask, mask, *cpu_map);
+ group = first_cpu(mask);
+ #else
+ group = cpu;
+ #endif
+@@ -5927,28 +6109,27 @@ static void init_numa_sched_groups_power
+ struct sched_group *sg = group_head;
+ int j;
+
+ if (!sg)
+ return;
+-next_sg:
+- for_each_cpu_mask(j, sg->cpumask) {
+- struct sched_domain *sd;
++ do {
++ for_each_cpu_mask(j, sg->cpumask) {
++ struct sched_domain *sd;
+
+- sd = &per_cpu(phys_domains, j);
+- if (j != first_cpu(sd->groups->cpumask)) {
+- /*
+- * Only add "power" once for each
+- * physical package.
+- */
+- continue;
+- }
++ sd = &per_cpu(phys_domains, j);
++ if (j != first_cpu(sd->groups->cpumask)) {
++ /*
++ * Only add "power" once for each
++ * physical package.
++ */
++ continue;
++ }
+
+- sg_inc_cpu_power(sg, sd->groups->__cpu_power);
+- }
+- sg = sg->next;
+- if (sg != group_head)
+- goto next_sg;
++ sg_inc_cpu_power(sg, sd->groups->__cpu_power);
++ }
++ sg = sg->next;
++ } while (sg != group_head);
+ }
+ #endif
+
+ #ifdef CONFIG_NUMA
+ /* Free memory allocated for various sched_group structures */
+@@ -6055,12 +6236,12 @@ static int build_sched_domains(const cpu
+ int sd_allnodes = 0;
+
+ /*
+ * Allocate the per-node list of sched groups
+ */
+- sched_group_nodes = kzalloc(sizeof(struct sched_group *)*MAX_NUMNODES,
+- GFP_KERNEL);
++ sched_group_nodes = kcalloc(MAX_NUMNODES, sizeof(struct sched_group *),
++ GFP_KERNEL);
+ if (!sched_group_nodes) {
+ printk(KERN_WARNING "Can not alloc sched group node list\n");
+ return -ENOMEM;
+ }
+ sched_group_nodes_bycpu[first_cpu(*cpu_map)] = sched_group_nodes;
+@@ -6118,22 +6299,22 @@ static int build_sched_domains(const cpu
+
+ #ifdef CONFIG_SCHED_SMT
+ p = sd;
+ sd = &per_cpu(cpu_domains, i);
+ *sd = SD_SIBLING_INIT;
+- sd->span = cpu_sibling_map[i];
++ sd->span = cpu_sibling_map(i);
+ cpus_and(sd->span, sd->span, *cpu_map);
+ sd->parent = p;
+ p->child = sd;
+ cpu_to_cpu_group(i, cpu_map, &sd->groups);
+ #endif
+ }
+
+ #ifdef CONFIG_SCHED_SMT
+ /* Set up CPU (sibling) groups */
+ for_each_cpu_mask(i, *cpu_map) {
+- cpumask_t this_sibling_map = cpu_sibling_map[i];
++ cpumask_t this_sibling_map = cpu_sibling_map(i);
+ cpus_and(this_sibling_map, this_sibling_map, *cpu_map);
+ if (i != first_cpu(this_sibling_map))
+ continue;
+
+ init_sched_build_groups(this_sibling_map, cpu_map,
+@@ -6291,26 +6472,37 @@ static int build_sched_domains(const cpu
+ error:
+ free_sched_groups(cpu_map);
+ return -ENOMEM;
+ #endif
+ }
++
++static cpumask_t *doms_cur; /* current sched domains */
++static int ndoms_cur; /* number of sched domains in 'doms_cur' */
++
++/*
++ * Special case: If a kmalloc of a doms_cur partition (array of
++ * cpumask_t) fails, then fallback to a single sched domain,
++ * as determined by the single cpumask_t fallback_doms.
++ */
++static cpumask_t fallback_doms;
++
+ /*
+- * Set up scheduler domains and groups. Callers must hold the hotplug lock.
++ * Set up scheduler domains and groups. Callers must hold the hotplug lock.
++ * For now this just excludes isolated cpus, but could be used to
++ * exclude other special cases in the future.
+ */
+ static int arch_init_sched_domains(const cpumask_t *cpu_map)
+ {
+- cpumask_t cpu_default_map;
+ int err;
+
+- /*
+- * Setup mask for cpus without special case scheduling requirements.
+- * For now this just excludes isolated cpus, but could be used to
+- * exclude other special cases in the future.
+- */
+- cpus_andnot(cpu_default_map, *cpu_map, cpu_isolated_map);
+-
+- err = build_sched_domains(&cpu_default_map);
++ ndoms_cur = 1;
++ doms_cur = kmalloc(sizeof(cpumask_t), GFP_KERNEL);
++ if (!doms_cur)
++ doms_cur = &fallback_doms;
++ cpus_andnot(*doms_cur, *cpu_map, cpu_isolated_map);
++ err = build_sched_domains(doms_cur);
++ register_sched_domain_sysctl();
+
+ return err;
+ }
+
+ static void arch_destroy_sched_domains(const cpumask_t *cpu_map)
+@@ -6324,41 +6516,83 @@ static void arch_destroy_sched_domains(c
+ */
+ static void detach_destroy_domains(const cpumask_t *cpu_map)
+ {
+ int i;
+
++ unregister_sched_domain_sysctl();
++
+ for_each_cpu_mask(i, *cpu_map)
+ cpu_attach_domain(NULL, i);
+ synchronize_sched();
+ arch_destroy_sched_domains(cpu_map);
+ }
+
+ /*
+- * Partition sched domains as specified by the cpumasks below.
+- * This attaches all cpus from the cpumasks to the NULL domain,
+- * waits for a RCU quiescent period, recalculates sched
+- * domain information and then attaches them back to the
+- * correct sched domains
++ * Partition sched domains as specified by the 'ndoms_new'
++ * cpumasks in the array doms_new[] of cpumasks. This compares
++ * doms_new[] to the current sched domain partitioning, doms_cur[].
++ * It destroys each deleted domain and builds each new domain.
++ *
++ * 'doms_new' is an array of cpumask_t's of length 'ndoms_new'.
++ * The masks don't intersect (don't overlap.) We should setup one
++ * sched domain for each mask. CPUs not in any of the cpumasks will
++ * not be load balanced. If the same cpumask appears both in the
++ * current 'doms_cur' domains and in the new 'doms_new', we can leave
++ * it as it is.
++ *
++ * The passed in 'doms_new' should be kmalloc'd. This routine takes
++ * ownership of it and will kfree it when done with it. If the caller
++ * failed the kmalloc call, then it can pass in doms_new == NULL,
++ * and partition_sched_domains() will fallback to the single partition
++ * 'fallback_doms'.
++ *
+ * Call with hotplug lock held
+ */
+-int partition_sched_domains(cpumask_t *partition1, cpumask_t *partition2)
++void partition_sched_domains(int ndoms_new, cpumask_t *doms_new)
+ {
+- cpumask_t change_map;
+- int err = 0;
++ int i, j;
+
+- cpus_and(*partition1, *partition1, cpu_online_map);
+- cpus_and(*partition2, *partition2, cpu_online_map);
+- cpus_or(change_map, *partition1, *partition2);
+-
+- /* Detach sched domains from all of the affected cpus */
+- detach_destroy_domains(&change_map);
+- if (!cpus_empty(*partition1))
+- err = build_sched_domains(partition1);
+- if (!err && !cpus_empty(*partition2))
+- err = build_sched_domains(partition2);
++ /* always unregister in case we don't destroy any domains */
++ unregister_sched_domain_sysctl();
+
+- return err;
++ if (doms_new == NULL) {
++ ndoms_new = 1;
++ doms_new = &fallback_doms;
++ cpus_andnot(doms_new[0], cpu_online_map, cpu_isolated_map);
++ }
++
++ /* Destroy deleted domains */
++ for (i = 0; i < ndoms_cur; i++) {
++ for (j = 0; j < ndoms_new; j++) {
++ if (cpus_equal(doms_cur[i], doms_new[j]))
++ goto match1;
++ }
++ /* no match - a current sched domain not in new doms_new[] */
++ detach_destroy_domains(doms_cur + i);
++match1:
++ ;
++ }
++
++ /* Build new domains */
++ for (i = 0; i < ndoms_new; i++) {
++ for (j = 0; j < ndoms_cur; j++) {
++ if (cpus_equal(doms_new[i], doms_cur[j]))
++ goto match2;
++ }
++ /* no match - add a new doms_new */
++ build_sched_domains(doms_new + i);
++match2:
++ ;
++ }
++
++ /* Remember the new sched domains */
++ if (doms_cur != &fallback_doms)
++ kfree(doms_cur);
++ doms_cur = doms_new;
++ ndoms_cur = ndoms_new;
++
++ register_sched_domain_sysctl();
+ }
+
+ #if defined(CONFIG_SCHED_MC) || defined(CONFIG_SCHED_SMT)
+ static int arch_reinit_sched_domains(void)
+ {
+@@ -6434,11 +6668,11 @@ int sched_create_sysfs_power_savings_ent
+ return err;
+ }
+ #endif
+
+ /*
+- * Force a reinitialization of the sched domains hierarchy. The domains
++ * Force a reinitialization of the sched domains hierarchy. The domains
+ * and groups cannot be updated in place without racing with the balancing
+ * code, so we temporarily attach all running cpus to the NULL domain
+ * which will prevent rebalancing while the sched domains are recalculated.
+ */
+ static int update_sched_domains(struct notifier_block *nfb,
+@@ -6485,12 +6719,10 @@ void __init sched_init_smp(void)
+ cpu_set(smp_processor_id(), non_isolated_cpus);
+ mutex_unlock(&sched_hotcpu_mutex);
+ /* XXX: Theoretical race here - CPU may be hotplugged now */
+ hotcpu_notifier(update_sched_domains, 0);
+
+- init_sched_domain_sysctl();
+-
+ /* Move init over to a non-isolated CPU */
+ if (set_cpus_allowed(current, non_isolated_cpus) < 0)
+ BUG();
+ sched_init_granularity();
+ }
+@@ -6501,40 +6733,29 @@ void __init sched_init_smp(void)
+ }
+ #endif /* CONFIG_SMP */
+
+ int in_sched_functions(unsigned long addr)
+ {
+- /* Linker adds these: start and end of __sched functions */
+- extern char __sched_text_start[], __sched_text_end[];
+-
+ return in_lock_functions(addr) ||
+ (addr >= (unsigned long)__sched_text_start
+ && addr < (unsigned long)__sched_text_end);
+ }
+
+-static inline void init_cfs_rq(struct cfs_rq *cfs_rq, struct rq *rq)
++static void init_cfs_rq(struct cfs_rq *cfs_rq, struct rq *rq)
+ {
+ cfs_rq->tasks_timeline = RB_ROOT;
+- cfs_rq->fair_clock = 1;
+ #ifdef CONFIG_FAIR_GROUP_SCHED
+ cfs_rq->rq = rq;
+ #endif
++ cfs_rq->min_vruntime = (u64)(-(1LL << 20));
+ }
+
+ void __init sched_init(void)
+ {
+- u64 now = sched_clock();
+ int highest_cpu = 0;
+ int i, j;
+
+- /*
+- * Link up the scheduling class hierarchy:
+- */
+- rt_sched_class.next = &fair_sched_class;
+- fair_sched_class.next = &idle_sched_class;
+- idle_sched_class.next = NULL;
+-
+ for_each_possible_cpu(i) {
+ struct rt_prio_array *array;
+ struct rq *rq;
+
+ rq = cpu_rq(i);
+@@ -6543,14 +6764,32 @@ void __init sched_init(void)
+ rq->nr_running = 0;
+ rq->clock = 1;
+ init_cfs_rq(&rq->cfs, rq);
+ #ifdef CONFIG_FAIR_GROUP_SCHED
+ INIT_LIST_HEAD(&rq->leaf_cfs_rq_list);
+- list_add(&rq->cfs.leaf_cfs_rq_list, &rq->leaf_cfs_rq_list);
++ {
++ struct cfs_rq *cfs_rq = &per_cpu(init_cfs_rq, i);
++ struct sched_entity *se =
++ &per_cpu(init_sched_entity, i);
++
++ init_cfs_rq_p[i] = cfs_rq;
++ init_cfs_rq(cfs_rq, rq);
++ cfs_rq->tg = &init_task_group;
++ list_add(&cfs_rq->leaf_cfs_rq_list,
++ &rq->leaf_cfs_rq_list);
++
++ init_sched_entity_p[i] = se;
++ se->cfs_rq = &rq->cfs;
++ se->my_q = cfs_rq;
++ se->load.weight = init_task_group_load;
++ se->load.inv_weight =
++ div64_64(1ULL<<32, init_task_group_load);
++ se->parent = NULL;
++ }
++ init_task_group.shares = init_task_group_load;
++ spin_lock_init(&init_task_group.lock);
+ #endif
+- rq->ls.load_update_last = now;
+- rq->ls.load_update_start = now;
+
+ for (j = 0; j < CPU_LOAD_IDX_MAX; j++)
+ rq->cpu_load[j] = 0;
+ #ifdef CONFIG_SMP
+ rq->sd = NULL;
+@@ -6631,30 +6870,44 @@ void __might_sleep(char *file, int line)
+ }
+ EXPORT_SYMBOL(__might_sleep);
+ #endif
+
+ #ifdef CONFIG_MAGIC_SYSRQ
++static void normalize_task(struct rq *rq, struct task_struct *p)
++{
++ int on_rq;
++ update_rq_clock(rq);
++ on_rq = p->se.on_rq;
++ if (on_rq)
++ deactivate_task(rq, p, 0);
++ __setscheduler(rq, p, SCHED_NORMAL, 0);
++ if (on_rq) {
++ activate_task(rq, p, 0);
++ resched_task(rq->curr);
++ }
++}
++
+ void normalize_rt_tasks(void)
+ {
+ struct task_struct *g, *p;
+ unsigned long flags;
+ struct rq *rq;
+- int on_rq;
+
+ read_lock_irq(&tasklist_lock);
+ do_each_thread(g, p) {
+- p->se.fair_key = 0;
+- p->se.wait_runtime = 0;
++ /*
++ * Only normalize user tasks:
++ */
++ if (!p->mm)
++ continue;
++
+ p->se.exec_start = 0;
+- p->se.wait_start_fair = 0;
+- p->se.sleep_start_fair = 0;
+ #ifdef CONFIG_SCHEDSTATS
+ p->se.wait_start = 0;
+ p->se.sleep_start = 0;
+ p->se.block_start = 0;
+ #endif
+- task_rq(p)->cfs.fair_clock = 0;
+ task_rq(p)->clock = 0;
+
+ if (!rt_task(p)) {
+ /*
+ * Renice negative nice level userspace
+@@ -6665,30 +6918,13 @@ void normalize_rt_tasks(void)
+ continue;
+ }
+
+ spin_lock_irqsave(&p->pi_lock, flags);
+ rq = __task_rq_lock(p);
+-#ifdef CONFIG_SMP
+- /*
+- * Do not touch the migration thread:
+- */
+- if (p == rq->migration_thread)
+- goto out_unlock;
+-#endif
+
+- update_rq_clock(rq);
+- on_rq = p->se.on_rq;
+- if (on_rq)
+- deactivate_task(rq, p, 0);
+- __setscheduler(rq, p, SCHED_NORMAL, 0);
+- if (on_rq) {
+- activate_task(rq, p, 0);
+- resched_task(rq->curr);
+- }
+-#ifdef CONFIG_SMP
+- out_unlock:
+-#endif
++ normalize_task(rq, p);
++
+ __task_rq_unlock(rq);
+ spin_unlock_irqrestore(&p->pi_lock, flags);
+ } while_each_thread(g, p);
+
+ read_unlock_irq(&tasklist_lock);
+@@ -6722,12 +6958,12 @@ struct task_struct *curr_task(int cpu)
+ * set_curr_task - set the current task for a given cpu.
+ * @cpu: the processor in question.
+ * @p: the task pointer to set.
+ *
+ * Description: This function must only be used when non-maskable interrupts
+- * are serviced on a separate stack. It allows the architecture to switch the
+- * notion of the current task on a cpu in a non-blocking manner. This function
++ * are serviced on a separate stack. It allows the architecture to switch the
++ * notion of the current task on a cpu in a non-blocking manner. This function
+ * must be called with all CPU's synchronized, and interrupts disabled, the
+ * and caller must save the original value of the current task (see
+ * curr_task() above) and restore that value before reenabling interrupts and
+ * re-starting the system.
+ *
+@@ -6737,5 +6973,427 @@ void set_curr_task(int cpu, struct task_
+ {
+ cpu_curr(cpu) = p;
+ }
+
+ #endif
++
++#ifdef CONFIG_FAIR_GROUP_SCHED
++
++/* allocate runqueue etc for a new task group */
++struct task_group *sched_create_group(void)
++{
++ struct task_group *tg;
++ struct cfs_rq *cfs_rq;
++ struct sched_entity *se;
++ struct rq *rq;
++ int i;
++
++ tg = kzalloc(sizeof(*tg), GFP_KERNEL);
++ if (!tg)
++ return ERR_PTR(-ENOMEM);
++
++ tg->cfs_rq = kzalloc(sizeof(cfs_rq) * NR_CPUS, GFP_KERNEL);
++ if (!tg->cfs_rq)
++ goto err;
++ tg->se = kzalloc(sizeof(se) * NR_CPUS, GFP_KERNEL);
++ if (!tg->se)
++ goto err;
++
++ for_each_possible_cpu(i) {
++ rq = cpu_rq(i);
++
++ cfs_rq = kmalloc_node(sizeof(struct cfs_rq), GFP_KERNEL,
++ cpu_to_node(i));
++ if (!cfs_rq)
++ goto err;
++
++ se = kmalloc_node(sizeof(struct sched_entity), GFP_KERNEL,
++ cpu_to_node(i));
++ if (!se)
++ goto err;
++
++ memset(cfs_rq, 0, sizeof(struct cfs_rq));
++ memset(se, 0, sizeof(struct sched_entity));
++
++ tg->cfs_rq[i] = cfs_rq;
++ init_cfs_rq(cfs_rq, rq);
++ cfs_rq->tg = tg;
++
++ tg->se[i] = se;
++ se->cfs_rq = &rq->cfs;
++ se->my_q = cfs_rq;
++ se->load.weight = NICE_0_LOAD;
++ se->load.inv_weight = div64_64(1ULL<<32, NICE_0_LOAD);
++ se->parent = NULL;
++ }
++
++ for_each_possible_cpu(i) {
++ rq = cpu_rq(i);
++ cfs_rq = tg->cfs_rq[i];
++ list_add_rcu(&cfs_rq->leaf_cfs_rq_list, &rq->leaf_cfs_rq_list);
++ }
++
++ tg->shares = NICE_0_LOAD;
++ spin_lock_init(&tg->lock);
++
++ return tg;
++
++err:
++ for_each_possible_cpu(i) {
++ if (tg->cfs_rq)
++ kfree(tg->cfs_rq[i]);
++ if (tg->se)
++ kfree(tg->se[i]);
++ }
++ kfree(tg->cfs_rq);
++ kfree(tg->se);
++ kfree(tg);
++
++ return ERR_PTR(-ENOMEM);
++}
++
++/* rcu callback to free various structures associated with a task group */
++static void free_sched_group(struct rcu_head *rhp)
++{
++ struct task_group *tg = container_of(rhp, struct task_group, rcu);
++ struct cfs_rq *cfs_rq;
++ struct sched_entity *se;
++ int i;
++
++ /* now it should be safe to free those cfs_rqs */
++ for_each_possible_cpu(i) {
++ cfs_rq = tg->cfs_rq[i];
++ kfree(cfs_rq);
++
++ se = tg->se[i];
++ kfree(se);
++ }
++
++ kfree(tg->cfs_rq);
++ kfree(tg->se);
++ kfree(tg);
++}
++
++/* Destroy runqueue etc associated with a task group */
++void sched_destroy_group(struct task_group *tg)
++{
++ struct cfs_rq *cfs_rq = NULL;
++ int i;
++
++ for_each_possible_cpu(i) {
++ cfs_rq = tg->cfs_rq[i];
++ list_del_rcu(&cfs_rq->leaf_cfs_rq_list);
++ }
++
++ BUG_ON(!cfs_rq);
++
++ /* wait for possible concurrent references to cfs_rqs complete */
++ call_rcu(&tg->rcu, free_sched_group);
++}
++
++/* change task's runqueue when it moves between groups.
++ * The caller of this function should have put the task in its new group
++ * by now. This function just updates tsk->se.cfs_rq and tsk->se.parent to
++ * reflect its new group.
++ */
++void sched_move_task(struct task_struct *tsk)
++{
++ int on_rq, running;
++ unsigned long flags;
++ struct rq *rq;
++
++ rq = task_rq_lock(tsk, &flags);
++
++ if (tsk->sched_class != &fair_sched_class) {
++ set_task_cfs_rq(tsk, task_cpu(tsk));
++ goto done;
++ }
++
++ update_rq_clock(rq);
++
++ running = task_current(rq, tsk);
++ on_rq = tsk->se.on_rq;
++
++ if (on_rq) {
++ dequeue_task(rq, tsk, 0);
++ if (unlikely(running))
++ tsk->sched_class->put_prev_task(rq, tsk);
++ }
++
++ set_task_cfs_rq(tsk, task_cpu(tsk));
++
++ if (on_rq) {
++ if (unlikely(running))
++ tsk->sched_class->set_curr_task(rq);
++ enqueue_task(rq, tsk, 0);
++ }
++
++done:
++ task_rq_unlock(rq, &flags);
++}
++
++static void set_se_shares(struct sched_entity *se, unsigned long shares)
++{
++ struct cfs_rq *cfs_rq = se->cfs_rq;
++ struct rq *rq = cfs_rq->rq;
++ int on_rq;
++
++ spin_lock_irq(&rq->lock);
++
++ on_rq = se->on_rq;
++ if (on_rq)
++ dequeue_entity(cfs_rq, se, 0);
++
++ se->load.weight = shares;
++ se->load.inv_weight = div64_64((1ULL<<32), shares);
++
++ if (on_rq)
++ enqueue_entity(cfs_rq, se, 0);
++
++ spin_unlock_irq(&rq->lock);
++}
++
++int sched_group_set_shares(struct task_group *tg, unsigned long shares)
++{
++ int i;
++
++ spin_lock(&tg->lock);
++ if (tg->shares == shares)
++ goto done;
++
++ tg->shares = shares;
++ for_each_possible_cpu(i)
++ set_se_shares(tg->se[i], shares);
++
++done:
++ spin_unlock(&tg->lock);
++ return 0;
++}
++
++unsigned long sched_group_shares(struct task_group *tg)
++{
++ return tg->shares;
++}
++
++#endif /* CONFIG_FAIR_GROUP_SCHED */
++
++#ifdef CONFIG_FAIR_CGROUP_SCHED
++
++/* return corresponding task_group object of a cgroup */
++static inline struct task_group *cgroup_tg(struct cgroup *cgrp)
++{
++ return container_of(cgroup_subsys_state(cgrp, cpu_cgroup_subsys_id),
++ struct task_group, css);
++}
++
++static struct cgroup_subsys_state *
++cpu_cgroup_create(struct cgroup_subsys *ss, struct cgroup *cgrp)
++{
++ struct task_group *tg;
++
++ if (!cgrp->parent) {
++ /* This is early initialization for the top cgroup */
++ init_task_group.css.cgroup = cgrp;
++ return &init_task_group.css;
++ }
++
++ /* we support only 1-level deep hierarchical scheduler atm */
++ if (cgrp->parent->parent)
++ return ERR_PTR(-EINVAL);
++
++ tg = sched_create_group();
++ if (IS_ERR(tg))
++ return ERR_PTR(-ENOMEM);
++
++ /* Bind the cgroup to task_group object we just created */
++ tg->css.cgroup = cgrp;
++
++ return &tg->css;
++}
++
++static void
++cpu_cgroup_destroy(struct cgroup_subsys *ss, struct cgroup *cgrp)
++{
++ struct task_group *tg = cgroup_tg(cgrp);
++
++ sched_destroy_group(tg);
++}
++
++static int
++cpu_cgroup_can_attach(struct cgroup_subsys *ss, struct cgroup *cgrp,
++ struct task_struct *tsk)
++{
++ /* We don't support RT-tasks being in separate groups */
++ if (tsk->sched_class != &fair_sched_class)
++ return -EINVAL;
++
++ return 0;
++}
++
++static void
++cpu_cgroup_attach(struct cgroup_subsys *ss, struct cgroup *cgrp,
++ struct cgroup *old_cont, struct task_struct *tsk)
++{
++ sched_move_task(tsk);
++}
++
++static int cpu_shares_write_uint(struct cgroup *cgrp, struct cftype *cftype,
++ u64 shareval)
++{
++ return sched_group_set_shares(cgroup_tg(cgrp), shareval);
++}
++
++static u64 cpu_shares_read_uint(struct cgroup *cgrp, struct cftype *cft)
++{
++ struct task_group *tg = cgroup_tg(cgrp);
++
++ return (u64) tg->shares;
++}
++
++static struct cftype cpu_files[] = {
++ {
++ .name = "shares",
++ .read_uint = cpu_shares_read_uint,
++ .write_uint = cpu_shares_write_uint,
++ },
++};
++
++static int cpu_cgroup_populate(struct cgroup_subsys *ss, struct cgroup *cont)
++{
++ return cgroup_add_files(cont, ss, cpu_files, ARRAY_SIZE(cpu_files));
++}
++
++struct cgroup_subsys cpu_cgroup_subsys = {
++ .name = "cpu",
++ .create = cpu_cgroup_create,
++ .destroy = cpu_cgroup_destroy,
++ .can_attach = cpu_cgroup_can_attach,
++ .attach = cpu_cgroup_attach,
++ .populate = cpu_cgroup_populate,
++ .subsys_id = cpu_cgroup_subsys_id,
++ .early_init = 1,
++};
++
++#endif /* CONFIG_FAIR_CGROUP_SCHED */
++
++#ifdef CONFIG_CGROUP_CPUACCT
++
++/*
++ * CPU accounting code for task groups.
++ *
++ * Based on the work by Paul Menage (menage@google.com) and Balbir Singh
++ * (balbir@in.ibm.com).
++ */
++
++/* track cpu usage of a group of tasks */
++struct cpuacct {
++ struct cgroup_subsys_state css;
++ /* cpuusage holds pointer to a u64-type object on every cpu */
++ u64 *cpuusage;
++};
++
++struct cgroup_subsys cpuacct_subsys;
++
++/* return cpu accounting group corresponding to this container */
++static inline struct cpuacct *cgroup_ca(struct cgroup *cont)
++{
++ return container_of(cgroup_subsys_state(cont, cpuacct_subsys_id),
++ struct cpuacct, css);
++}
++
++/* return cpu accounting group to which this task belongs */
++static inline struct cpuacct *task_ca(struct task_struct *tsk)
++{
++ return container_of(task_subsys_state(tsk, cpuacct_subsys_id),
++ struct cpuacct, css);
++}
++
++/* create a new cpu accounting group */
++static struct cgroup_subsys_state *cpuacct_create(
++ struct cgroup_subsys *ss, struct cgroup *cont)
++{
++ struct cpuacct *ca = kzalloc(sizeof(*ca), GFP_KERNEL);
++
++ if (!ca)
++ return ERR_PTR(-ENOMEM);
++
++ ca->cpuusage = alloc_percpu(u64);
++ if (!ca->cpuusage) {
++ kfree(ca);
++ return ERR_PTR(-ENOMEM);
++ }
++
++ return &ca->css;
++}
++
++/* destroy an existing cpu accounting group */
++static void
++cpuacct_destroy(struct cgroup_subsys *ss, struct cgroup *cont)
++{
++ struct cpuacct *ca = cgroup_ca(cont);
++
++ free_percpu(ca->cpuusage);
++ kfree(ca);
++}
++
++/* return total cpu usage (in nanoseconds) of a group */
++static u64 cpuusage_read(struct cgroup *cont, struct cftype *cft)
++{
++ struct cpuacct *ca = cgroup_ca(cont);
++ u64 totalcpuusage = 0;
++ int i;
++
++ for_each_possible_cpu(i) {
++ u64 *cpuusage = percpu_ptr(ca->cpuusage, i);
++
++ /*
++ * Take rq->lock to make 64-bit addition safe on 32-bit
++ * platforms.
++ */
++ spin_lock_irq(&cpu_rq(i)->lock);
++ totalcpuusage += *cpuusage;
++ spin_unlock_irq(&cpu_rq(i)->lock);
++ }
++
++ return totalcpuusage;
++}
++
++static struct cftype files[] = {
++ {
++ .name = "usage",
++ .read_uint = cpuusage_read,
++ },
++};
++
++static int cpuacct_populate(struct cgroup_subsys *ss, struct cgroup *cont)
++{
++ return cgroup_add_files(cont, ss, files, ARRAY_SIZE(files));
++}
++
++/*
++ * charge this task's execution time to its accounting group.
++ *
++ * called with rq->lock held.
++ */
++static void cpuacct_charge(struct task_struct *tsk, u64 cputime)
++{
++ struct cpuacct *ca;
++
++ if (!cpuacct_subsys.active)
++ return;
++
++ ca = task_ca(tsk);
++ if (ca) {
++ u64 *cpuusage = percpu_ptr(ca->cpuusage, task_cpu(tsk));
++
++ *cpuusage += cputime;
++ }
++}
++
++struct cgroup_subsys cpuacct_subsys = {
++ .name = "cpuacct",
++ .create = cpuacct_create,
++ .destroy = cpuacct_destroy,
++ .populate = cpuacct_populate,
++ .subsys_id = cpuacct_subsys_id,
++};
++#endif /* CONFIG_CGROUP_CPUACCT */
+--- linux-2.6.23.orig/kernel/sched_debug.c
++++ linux-2.6.23/kernel/sched_debug.c
+@@ -26,104 +26,125 @@
+ seq_printf(m, x); \
+ else \
+ printk(x); \
+ } while (0)
+
++/*
++ * Ease the printing of nsec fields:
++ */
++static long long nsec_high(long long nsec)
++{
++ if (nsec < 0) {
++ nsec = -nsec;
++ do_div(nsec, 1000000);
++ return -nsec;
++ }
++ do_div(nsec, 1000000);
++
++ return nsec;
++}
++
++static unsigned long nsec_low(long long nsec)
++{
++ if (nsec < 0)
++ nsec = -nsec;
++
++ return do_div(nsec, 1000000);
++}
++
++#define SPLIT_NS(x) nsec_high(x), nsec_low(x)
++
+ static void
+ print_task(struct seq_file *m, struct rq *rq, struct task_struct *p)
+ {
+ if (rq->curr == p)
+ SEQ_printf(m, "R");
+ else
+ SEQ_printf(m, " ");
+
+- SEQ_printf(m, "%15s %5d %15Ld %13Ld %13Ld %9Ld %5d ",
++ SEQ_printf(m, "%15s %5d %9Ld.%06ld %9Ld %5d ",
+ p->comm, p->pid,
+- (long long)p->se.fair_key,
+- (long long)(p->se.fair_key - rq->cfs.fair_clock),
+- (long long)p->se.wait_runtime,
++ SPLIT_NS(p->se.vruntime),
+ (long long)(p->nvcsw + p->nivcsw),
+ p->prio);
+ #ifdef CONFIG_SCHEDSTATS
+- SEQ_printf(m, "%15Ld %15Ld %15Ld %15Ld %15Ld\n",
+- (long long)p->se.sum_exec_runtime,
+- (long long)p->se.sum_wait_runtime,
+- (long long)p->se.sum_sleep_runtime,
+- (long long)p->se.wait_runtime_overruns,
+- (long long)p->se.wait_runtime_underruns);
++ SEQ_printf(m, "%9Ld.%06ld %9Ld.%06ld %9Ld.%06ld\n",
++ SPLIT_NS(p->se.vruntime),
++ SPLIT_NS(p->se.sum_exec_runtime),
++ SPLIT_NS(p->se.sum_sleep_runtime));
+ #else
+- SEQ_printf(m, "%15Ld %15Ld %15Ld %15Ld %15Ld\n",
+- 0LL, 0LL, 0LL, 0LL, 0LL);
++ SEQ_printf(m, "%15Ld %15Ld %15Ld.%06ld %15Ld.%06ld %15Ld.%06ld\n",
++ 0LL, 0LL, 0LL, 0L, 0LL, 0L, 0LL, 0L);
+ #endif
+ }
+
+ static void print_rq(struct seq_file *m, struct rq *rq, int rq_cpu)
+ {
+ struct task_struct *g, *p;
++ unsigned long flags;
+
+ SEQ_printf(m,
+ "\nrunnable tasks:\n"
+- " task PID tree-key delta waiting"
+- " switches prio"
+- " sum-exec sum-wait sum-sleep"
+- " wait-overrun wait-underrun\n"
+- "------------------------------------------------------------------"
+- "----------------"
+- "------------------------------------------------"
+- "--------------------------------\n");
++ " task PID tree-key switches prio"
++ " exec-runtime sum-exec sum-sleep\n"
++ "------------------------------------------------------"
++ "----------------------------------------------------\n");
+
+- read_lock_irq(&tasklist_lock);
++ read_lock_irqsave(&tasklist_lock, flags);
+
+ do_each_thread(g, p) {
+ if (!p->se.on_rq || task_cpu(p) != rq_cpu)
+ continue;
+
+ print_task(m, rq, p);
+ } while_each_thread(g, p);
+
+- read_unlock_irq(&tasklist_lock);
++ read_unlock_irqrestore(&tasklist_lock, flags);
+ }
+
+-static void
+-print_cfs_rq_runtime_sum(struct seq_file *m, int cpu, struct cfs_rq *cfs_rq)
++void print_cfs_rq(struct seq_file *m, int cpu, struct cfs_rq *cfs_rq)
+ {
+- s64 wait_runtime_rq_sum = 0;
+- struct task_struct *p;
+- struct rb_node *curr;
+- unsigned long flags;
++ s64 MIN_vruntime = -1, min_vruntime, max_vruntime = -1,
++ spread, rq0_min_vruntime, spread0;
+ struct rq *rq = &per_cpu(runqueues, cpu);
++ struct sched_entity *last;
++ unsigned long flags;
+
+- spin_lock_irqsave(&rq->lock, flags);
+- curr = first_fair(cfs_rq);
+- while (curr) {
+- p = rb_entry(curr, struct task_struct, se.run_node);
+- wait_runtime_rq_sum += p->se.wait_runtime;
+-
+- curr = rb_next(curr);
+- }
+- spin_unlock_irqrestore(&rq->lock, flags);
+-
+- SEQ_printf(m, " .%-30s: %Ld\n", "wait_runtime_rq_sum",
+- (long long)wait_runtime_rq_sum);
+-}
+-
+-void print_cfs_rq(struct seq_file *m, int cpu, struct cfs_rq *cfs_rq)
+-{
+ SEQ_printf(m, "\ncfs_rq\n");
+
+-#define P(x) \
+- SEQ_printf(m, " .%-30s: %Ld\n", #x, (long long)(cfs_rq->x))
+-
+- P(fair_clock);
+- P(exec_clock);
+- P(wait_runtime);
+- P(wait_runtime_overruns);
+- P(wait_runtime_underruns);
+- P(sleeper_bonus);
+-#undef P
++ SEQ_printf(m, " .%-30s: %Ld.%06ld\n", "exec_clock",
++ SPLIT_NS(cfs_rq->exec_clock));
+
+- print_cfs_rq_runtime_sum(m, cpu, cfs_rq);
++ spin_lock_irqsave(&rq->lock, flags);
++ if (cfs_rq->rb_leftmost)
++ MIN_vruntime = (__pick_next_entity(cfs_rq))->vruntime;
++ last = __pick_last_entity(cfs_rq);
++ if (last)
++ max_vruntime = last->vruntime;
++ min_vruntime = rq->cfs.min_vruntime;
++ rq0_min_vruntime = per_cpu(runqueues, 0).cfs.min_vruntime;
++ spin_unlock_irqrestore(&rq->lock, flags);
++ SEQ_printf(m, " .%-30s: %Ld.%06ld\n", "MIN_vruntime",
++ SPLIT_NS(MIN_vruntime));
++ SEQ_printf(m, " .%-30s: %Ld.%06ld\n", "min_vruntime",
++ SPLIT_NS(min_vruntime));
++ SEQ_printf(m, " .%-30s: %Ld.%06ld\n", "max_vruntime",
++ SPLIT_NS(max_vruntime));
++ spread = max_vruntime - MIN_vruntime;
++ SEQ_printf(m, " .%-30s: %Ld.%06ld\n", "spread",
++ SPLIT_NS(spread));
++ spread0 = min_vruntime - rq0_min_vruntime;
++ SEQ_printf(m, " .%-30s: %Ld.%06ld\n", "spread0",
++ SPLIT_NS(spread0));
++ SEQ_printf(m, " .%-30s: %ld\n", "nr_running", cfs_rq->nr_running);
++ SEQ_printf(m, " .%-30s: %ld\n", "load", cfs_rq->load.weight);
++#ifdef CONFIG_SCHEDSTATS
++ SEQ_printf(m, " .%-30s: %d\n", "bkl_count",
++ rq->bkl_count);
++#endif
++ SEQ_printf(m, " .%-30s: %ld\n", "nr_spread_over",
++ cfs_rq->nr_spread_over);
+ }
+
+ static void print_cpu(struct seq_file *m, int cpu)
+ {
+ struct rq *rq = &per_cpu(runqueues, cpu);
+@@ -139,35 +160,36 @@ static void print_cpu(struct seq_file *m
+ SEQ_printf(m, "\ncpu#%d\n", cpu);
+ #endif
+
+ #define P(x) \
+ SEQ_printf(m, " .%-30s: %Ld\n", #x, (long long)(rq->x))
++#define PN(x) \
++ SEQ_printf(m, " .%-30s: %Ld.%06ld\n", #x, SPLIT_NS(rq->x))
+
+ P(nr_running);
+ SEQ_printf(m, " .%-30s: %lu\n", "load",
+- rq->ls.load.weight);
+- P(ls.delta_fair);
+- P(ls.delta_exec);
++ rq->load.weight);
+ P(nr_switches);
+ P(nr_load_updates);
+ P(nr_uninterruptible);
+ SEQ_printf(m, " .%-30s: %lu\n", "jiffies", jiffies);
+- P(next_balance);
++ PN(next_balance);
+ P(curr->pid);
+- P(clock);
+- P(idle_clock);
+- P(prev_clock_raw);
++ PN(clock);
++ PN(idle_clock);
++ PN(prev_clock_raw);
+ P(clock_warps);
+ P(clock_overflows);
+ P(clock_deep_idle_events);
+- P(clock_max_delta);
++ PN(clock_max_delta);
+ P(cpu_load[0]);
+ P(cpu_load[1]);
+ P(cpu_load[2]);
+ P(cpu_load[3]);
+ P(cpu_load[4]);
+ #undef P
++#undef PN
+
+ print_cfs_stats(m, cpu);
+
+ print_rq(m, rq, cpu);
+ }
+@@ -175,16 +197,29 @@ static void print_cpu(struct seq_file *m
+ static int sched_debug_show(struct seq_file *m, void *v)
+ {
+ u64 now = ktime_to_ns(ktime_get());
+ int cpu;
+
+- SEQ_printf(m, "Sched Debug Version: v0.05-v20, %s %.*s\n",
++ SEQ_printf(m, "Sched Debug Version: v0.07, %s %.*s\n",
+ init_utsname()->release,
+ (int)strcspn(init_utsname()->version, " "),
+ init_utsname()->version);
+
+- SEQ_printf(m, "now at %Lu nsecs\n", (unsigned long long)now);
++ SEQ_printf(m, "now at %Lu.%06ld msecs\n", SPLIT_NS(now));
++
++#define P(x) \
++ SEQ_printf(m, " .%-40s: %Ld\n", #x, (long long)(x))
++#define PN(x) \
++ SEQ_printf(m, " .%-40s: %Ld.%06ld\n", #x, SPLIT_NS(x))
++ PN(sysctl_sched_latency);
++ PN(sysctl_sched_min_granularity);
++ PN(sysctl_sched_wakeup_granularity);
++ PN(sysctl_sched_batch_wakeup_granularity);
++ PN(sysctl_sched_child_runs_first);
++ P(sysctl_sched_features);
++#undef PN
++#undef P
+
+ for_each_online_cpu(cpu)
+ print_cpu(m, cpu);
+
+ SEQ_printf(m, "\n");
+@@ -200,11 +235,11 @@ static void sysrq_sched_debug_show(void)
+ static int sched_debug_open(struct inode *inode, struct file *filp)
+ {
+ return single_open(filp, sched_debug_show, NULL);
+ }
+
+-static struct file_operations sched_debug_fops = {
++static const struct file_operations sched_debug_fops = {
+ .open = sched_debug_open,
+ .read = seq_read,
+ .llseek = seq_lseek,
+ .release = single_release,
+ };
+@@ -224,10 +259,11 @@ static int __init init_sched_debug_procf
+
+ __initcall(init_sched_debug_procfs);
+
+ void proc_sched_show_task(struct task_struct *p, struct seq_file *m)
+ {
++ unsigned long nr_switches;
+ unsigned long flags;
+ int num_threads = 1;
+
+ rcu_read_lock();
+ if (lock_task_sighand(p, &flags)) {
+@@ -235,53 +271,126 @@ void proc_sched_show_task(struct task_st
+ unlock_task_sighand(p, &flags);
+ }
+ rcu_read_unlock();
+
+ SEQ_printf(m, "%s (%d, #threads: %d)\n", p->comm, p->pid, num_threads);
+- SEQ_printf(m, "----------------------------------------------\n");
++ SEQ_printf(m,
++ "---------------------------------------------------------\n");
++#define __P(F) \
++ SEQ_printf(m, "%-35s:%21Ld\n", #F, (long long)F)
+ #define P(F) \
+- SEQ_printf(m, "%-25s:%20Ld\n", #F, (long long)p->F)
++ SEQ_printf(m, "%-35s:%21Ld\n", #F, (long long)p->F)
++#define __PN(F) \
++ SEQ_printf(m, "%-35s:%14Ld.%06ld\n", #F, SPLIT_NS((long long)F))
++#define PN(F) \
++ SEQ_printf(m, "%-35s:%14Ld.%06ld\n", #F, SPLIT_NS((long long)p->F))
++
++ PN(se.exec_start);
++ PN(se.vruntime);
++ PN(se.sum_exec_runtime);
+
+- P(se.wait_runtime);
+- P(se.wait_start_fair);
+- P(se.exec_start);
+- P(se.sleep_start_fair);
+- P(se.sum_exec_runtime);
++ nr_switches = p->nvcsw + p->nivcsw;
+
+ #ifdef CONFIG_SCHEDSTATS
+- P(se.wait_start);
+- P(se.sleep_start);
+- P(se.block_start);
+- P(se.sleep_max);
+- P(se.block_max);
+- P(se.exec_max);
+- P(se.wait_max);
+- P(se.wait_runtime_overruns);
+- P(se.wait_runtime_underruns);
+- P(se.sum_wait_runtime);
++ PN(se.wait_start);
++ PN(se.sleep_start);
++ PN(se.block_start);
++ PN(se.sleep_max);
++ PN(se.block_max);
++ PN(se.exec_max);
++ PN(se.slice_max);
++ PN(se.wait_max);
++ P(sched_info.bkl_count);
++ P(se.nr_migrations);
++ P(se.nr_migrations_cold);
++ P(se.nr_failed_migrations_affine);
++ P(se.nr_failed_migrations_running);
++ P(se.nr_failed_migrations_hot);
++ P(se.nr_forced_migrations);
++ P(se.nr_forced2_migrations);
++ P(se.nr_wakeups);
++ P(se.nr_wakeups_sync);
++ P(se.nr_wakeups_migrate);
++ P(se.nr_wakeups_local);
++ P(se.nr_wakeups_remote);
++ P(se.nr_wakeups_affine);
++ P(se.nr_wakeups_affine_attempts);
++ P(se.nr_wakeups_passive);
++ P(se.nr_wakeups_idle);
++
++ {
++ u64 avg_atom, avg_per_cpu;
++
++ avg_atom = p->se.sum_exec_runtime;
++ if (nr_switches)
++ do_div(avg_atom, nr_switches);
++ else
++ avg_atom = -1LL;
++
++ avg_per_cpu = p->se.sum_exec_runtime;
++ if (p->se.nr_migrations) {
++ avg_per_cpu = div64_64(avg_per_cpu,
++ p->se.nr_migrations);
++ } else {
++ avg_per_cpu = -1LL;
++ }
++
++ __PN(avg_atom);
++ __PN(avg_per_cpu);
++ }
+ #endif
+- SEQ_printf(m, "%-25s:%20Ld\n",
+- "nr_switches", (long long)(p->nvcsw + p->nivcsw));
++ __P(nr_switches);
++ SEQ_printf(m, "%-35s:%21Ld\n",
++ "nr_voluntary_switches", (long long)p->nvcsw);
++ SEQ_printf(m, "%-35s:%21Ld\n",
++ "nr_involuntary_switches", (long long)p->nivcsw);
++
+ P(se.load.weight);
+ P(policy);
+ P(prio);
++#undef PN
++#undef __PN
+ #undef P
++#undef __P
+
+ {
+ u64 t0, t1;
+
+ t0 = sched_clock();
+ t1 = sched_clock();
+- SEQ_printf(m, "%-25s:%20Ld\n",
++ SEQ_printf(m, "%-35s:%21Ld\n",
+ "clock-delta", (long long)(t1-t0));
+ }
+ }
+
+ void proc_sched_set_task(struct task_struct *p)
+ {
+ #ifdef CONFIG_SCHEDSTATS
+- p->se.sleep_max = p->se.block_max = p->se.exec_max = p->se.wait_max = 0;
+- p->se.wait_runtime_overruns = p->se.wait_runtime_underruns = 0;
++ p->se.wait_max = 0;
++ p->se.sleep_max = 0;
++ p->se.sum_sleep_runtime = 0;
++ p->se.block_max = 0;
++ p->se.exec_max = 0;
++ p->se.slice_max = 0;
++ p->se.nr_migrations = 0;
++ p->se.nr_migrations_cold = 0;
++ p->se.nr_failed_migrations_affine = 0;
++ p->se.nr_failed_migrations_running = 0;
++ p->se.nr_failed_migrations_hot = 0;
++ p->se.nr_forced_migrations = 0;
++ p->se.nr_forced2_migrations = 0;
++ p->se.nr_wakeups = 0;
++ p->se.nr_wakeups_sync = 0;
++ p->se.nr_wakeups_migrate = 0;
++ p->se.nr_wakeups_local = 0;
++ p->se.nr_wakeups_remote = 0;
++ p->se.nr_wakeups_affine = 0;
++ p->se.nr_wakeups_affine_attempts = 0;
++ p->se.nr_wakeups_passive = 0;
++ p->se.nr_wakeups_idle = 0;
++ p->sched_info.bkl_count = 0;
+ #endif
+- p->se.sum_exec_runtime = 0;
+- p->se.prev_sum_exec_runtime = 0;
++ p->se.sum_exec_runtime = 0;
++ p->se.prev_sum_exec_runtime = 0;
++ p->nvcsw = 0;
++ p->nivcsw = 0;
+ }
+--- linux-2.6.23.orig/kernel/sched_fair.c
++++ linux-2.6.23/kernel/sched_fair.c
+@@ -20,29 +20,38 @@
+ * Copyright (C) 2007 Red Hat, Inc., Peter Zijlstra <pzijlstr@redhat.com>
+ */
+
+ /*
+ * Targeted preemption latency for CPU-bound tasks:
+- * (default: 20ms, units: nanoseconds)
++ * (default: 20ms * (1 + ilog(ncpus)), units: nanoseconds)
+ *
+ * NOTE: this latency value is not the same as the concept of
+- * 'timeslice length' - timeslices in CFS are of variable length.
+- * (to see the precise effective timeslice length of your workload,
+- * run vmstat and monitor the context-switches field)
++ * 'timeslice length' - timeslices in CFS are of variable length
++ * and have no persistent notion like in traditional, time-slice
++ * based scheduling concepts.
+ *
+- * On SMP systems the value of this is multiplied by the log2 of the
+- * number of CPUs. (i.e. factor 2x on 2-way systems, 3x on 4-way
+- * systems, 4x on 8-way systems, 5x on 16-way systems, etc.)
+- * Targeted preemption latency for CPU-bound tasks:
++ * (to see the precise effective timeslice length of your workload,
++ * run vmstat and monitor the context-switches (cs) field)
+ */
+-unsigned int sysctl_sched_latency __read_mostly = 20000000ULL;
++unsigned int sysctl_sched_latency = 20000000ULL;
+
+ /*
+ * Minimal preemption granularity for CPU-bound tasks:
+- * (default: 2 msec, units: nanoseconds)
++ * (default: 4 msec * (1 + ilog(ncpus)), units: nanoseconds)
++ */
++unsigned int sysctl_sched_min_granularity = 4000000ULL;
++
++/*
++ * is kept at sysctl_sched_latency / sysctl_sched_min_granularity
+ */
+-unsigned int sysctl_sched_min_granularity __read_mostly = 2000000ULL;
++static unsigned int sched_nr_latency = 5;
++
++/*
++ * After fork, child runs first. (default) If set to 0 then
++ * parent will (try to) run first.
++ */
++const_debug unsigned int sysctl_sched_child_runs_first = 1;
+
+ /*
+ * sys_sched_yield() compat mode
+ *
+ * This option switches the agressive yield implementation of the
+@@ -50,56 +59,29 @@ unsigned int sysctl_sched_min_granularit
+ */
+ unsigned int __read_mostly sysctl_sched_compat_yield;
+
+ /*
+ * SCHED_BATCH wake-up granularity.
+- * (default: 25 msec, units: nanoseconds)
++ * (default: 10 msec * (1 + ilog(ncpus)), units: nanoseconds)
+ *
+ * This option delays the preemption effects of decoupled workloads
+ * and reduces their over-scheduling. Synchronous workloads will still
+ * have immediate wakeup/sleep latencies.
+ */
+-unsigned int sysctl_sched_batch_wakeup_granularity __read_mostly = 25000000UL;
++unsigned int sysctl_sched_batch_wakeup_granularity = 10000000UL;
+
+ /*
+ * SCHED_OTHER wake-up granularity.
+- * (default: 1 msec, units: nanoseconds)
++ * (default: 10 msec * (1 + ilog(ncpus)), units: nanoseconds)
+ *
+ * This option delays the preemption effects of decoupled workloads
+ * and reduces their over-scheduling. Synchronous workloads will still
+ * have immediate wakeup/sleep latencies.
+ */
+-unsigned int sysctl_sched_wakeup_granularity __read_mostly = 1000000UL;
+-
+-unsigned int sysctl_sched_stat_granularity __read_mostly;
+-
+-/*
+- * Initialized in sched_init_granularity() [to 5 times the base granularity]:
+- */
+-unsigned int sysctl_sched_runtime_limit __read_mostly;
+-
+-/*
+- * Debugging: various feature bits
+- */
+-enum {
+- SCHED_FEAT_FAIR_SLEEPERS = 1,
+- SCHED_FEAT_SLEEPER_AVG = 2,
+- SCHED_FEAT_SLEEPER_LOAD_AVG = 4,
+- SCHED_FEAT_PRECISE_CPU_LOAD = 8,
+- SCHED_FEAT_START_DEBIT = 16,
+- SCHED_FEAT_SKIP_INITIAL = 32,
+-};
+-
+-unsigned int sysctl_sched_features __read_mostly =
+- SCHED_FEAT_FAIR_SLEEPERS *1 |
+- SCHED_FEAT_SLEEPER_AVG *0 |
+- SCHED_FEAT_SLEEPER_LOAD_AVG *1 |
+- SCHED_FEAT_PRECISE_CPU_LOAD *0 |
+- SCHED_FEAT_START_DEBIT *1 |
+- SCHED_FEAT_SKIP_INITIAL *0;
++unsigned int sysctl_sched_wakeup_granularity = 10000000UL;
+
+-extern struct sched_class fair_sched_class;
++const_debug unsigned int sysctl_sched_migration_cost = 500000UL;
+
+ /**************************************************************
+ * CFS operations on generic schedulable entities:
+ */
+
+@@ -109,47 +91,22 @@ extern struct sched_class fair_sched_cla
+ static inline struct rq *rq_of(struct cfs_rq *cfs_rq)
+ {
+ return cfs_rq->rq;
+ }
+
+-/* currently running entity (if any) on this cfs_rq */
+-static inline struct sched_entity *cfs_rq_curr(struct cfs_rq *cfs_rq)
+-{
+- return cfs_rq->curr;
+-}
+-
+ /* An entity is a task if it doesn't "own" a runqueue */
+ #define entity_is_task(se) (!se->my_q)
+
+-static inline void
+-set_cfs_rq_curr(struct cfs_rq *cfs_rq, struct sched_entity *se)
+-{
+- cfs_rq->curr = se;
+-}
+-
+ #else /* CONFIG_FAIR_GROUP_SCHED */
+
+ static inline struct rq *rq_of(struct cfs_rq *cfs_rq)
+ {
+ return container_of(cfs_rq, struct rq, cfs);
+ }
+
+-static inline struct sched_entity *cfs_rq_curr(struct cfs_rq *cfs_rq)
+-{
+- struct rq *rq = rq_of(cfs_rq);
+-
+- if (unlikely(rq->curr->sched_class != &fair_sched_class))
+- return NULL;
+-
+- return &rq->curr->se;
+-}
+-
+ #define entity_is_task(se) 1
+
+-static inline void
+-set_cfs_rq_curr(struct cfs_rq *cfs_rq, struct sched_entity *se) { }
+-
+ #endif /* CONFIG_FAIR_GROUP_SCHED */
+
+ static inline struct task_struct *task_of(struct sched_entity *se)
+ {
+ return container_of(se, struct task_struct, se);
+@@ -158,20 +115,42 @@ static inline struct task_struct *task_o
+
+ /**************************************************************
+ * Scheduling class tree data structure manipulation methods:
+ */
+
++static inline u64 max_vruntime(u64 min_vruntime, u64 vruntime)
++{
++ s64 delta = (s64)(vruntime - min_vruntime);
++ if (delta > 0)
++ min_vruntime = vruntime;
++
++ return min_vruntime;
++}
++
++static inline u64 min_vruntime(u64 min_vruntime, u64 vruntime)
++{
++ s64 delta = (s64)(vruntime - min_vruntime);
++ if (delta < 0)
++ min_vruntime = vruntime;
++
++ return min_vruntime;
++}
++
++static inline s64 entity_key(struct cfs_rq *cfs_rq, struct sched_entity *se)
++{
++ return se->vruntime - cfs_rq->min_vruntime;
++}
++
+ /*
+ * Enqueue an entity into the rb-tree:
+ */
+-static inline void
+-__enqueue_entity(struct cfs_rq *cfs_rq, struct sched_entity *se)
++static void __enqueue_entity(struct cfs_rq *cfs_rq, struct sched_entity *se)
+ {
+ struct rb_node **link = &cfs_rq->tasks_timeline.rb_node;
+ struct rb_node *parent = NULL;
+ struct sched_entity *entry;
+- s64 key = se->fair_key;
++ s64 key = entity_key(cfs_rq, se);
+ int leftmost = 1;
+
+ /*
+ * Find the right place in the rbtree:
+ */
+@@ -180,11 +159,11 @@ __enqueue_entity(struct cfs_rq *cfs_rq,
+ entry = rb_entry(parent, struct sched_entity, run_node);
+ /*
+ * We dont care about collisions. Nodes with
+ * the same key stay together.
+ */
+- if (key - entry->fair_key < 0) {
++ if (key < entity_key(cfs_rq, entry)) {
+ link = &parent->rb_left;
+ } else {
+ link = &parent->rb_right;
+ leftmost = 0;
+ }
+@@ -197,28 +176,18 @@ __enqueue_entity(struct cfs_rq *cfs_rq,
+ if (leftmost)
+ cfs_rq->rb_leftmost = &se->run_node;
+
+ rb_link_node(&se->run_node, parent, link);
+ rb_insert_color(&se->run_node, &cfs_rq->tasks_timeline);
+- update_load_add(&cfs_rq->load, se->load.weight);
+- cfs_rq->nr_running++;
+- se->on_rq = 1;
+-
+- schedstat_add(cfs_rq, wait_runtime, se->wait_runtime);
+ }
+
+-static inline void
+-__dequeue_entity(struct cfs_rq *cfs_rq, struct sched_entity *se)
++static void __dequeue_entity(struct cfs_rq *cfs_rq, struct sched_entity *se)
+ {
+ if (cfs_rq->rb_leftmost == &se->run_node)
+ cfs_rq->rb_leftmost = rb_next(&se->run_node);
+- rb_erase(&se->run_node, &cfs_rq->tasks_timeline);
+- update_load_sub(&cfs_rq->load, se->load.weight);
+- cfs_rq->nr_running--;
+- se->on_rq = 0;
+
+- schedstat_add(cfs_rq, wait_runtime, -se->wait_runtime);
++ rb_erase(&se->run_node, &cfs_rq->tasks_timeline);
+ }
+
+ static inline struct rb_node *first_fair(struct cfs_rq *cfs_rq)
+ {
+ return cfs_rq->rb_leftmost;
+@@ -227,308 +196,206 @@ static inline struct rb_node *first_fair
+ static struct sched_entity *__pick_next_entity(struct cfs_rq *cfs_rq)
+ {
+ return rb_entry(first_fair(cfs_rq), struct sched_entity, run_node);
+ }
+
++static inline struct sched_entity *__pick_last_entity(struct cfs_rq *cfs_rq)
++{
++ struct rb_node **link = &cfs_rq->tasks_timeline.rb_node;
++ struct sched_entity *se = NULL;
++ struct rb_node *parent;
++
++ while (*link) {
++ parent = *link;
++ se = rb_entry(parent, struct sched_entity, run_node);
++ link = &parent->rb_right;
++ }
++
++ return se;
++}
++
+ /**************************************************************
+ * Scheduling class statistics methods:
+ */
+
++#ifdef CONFIG_SCHED_DEBUG
++int sched_nr_latency_handler(struct ctl_table *table, int write,
++ struct file *filp, void __user *buffer, size_t *lenp,
++ loff_t *ppos)
++{
++ int ret = proc_dointvec_minmax(table, write, filp, buffer, lenp, ppos);
++
++ if (ret || !write)
++ return ret;
++
++ sched_nr_latency = DIV_ROUND_UP(sysctl_sched_latency,
++ sysctl_sched_min_granularity);
++
++ return 0;
++}
++#endif
++
+ /*
+- * Calculate the preemption granularity needed to schedule every
+- * runnable task once per sysctl_sched_latency amount of time.
+- * (down to a sensible low limit on granularity)
+- *
+- * For example, if there are 2 tasks running and latency is 10 msecs,
+- * we switch tasks every 5 msecs. If we have 3 tasks running, we have
+- * to switch tasks every 3.33 msecs to get a 10 msecs observed latency
+- * for each task. We do finer and finer scheduling up to until we
+- * reach the minimum granularity value.
+- *
+- * To achieve this we use the following dynamic-granularity rule:
+- *
+- * gran = lat/nr - lat/nr/nr
++ * The idea is to set a period in which each task runs once.
+ *
+- * This comes out of the following equations:
++ * When there are too many tasks (sysctl_sched_nr_latency) we have to stretch
++ * this period because otherwise the slices get too small.
+ *
+- * kA1 + gran = kB1
+- * kB2 + gran = kA2
+- * kA2 = kA1
+- * kB2 = kB1 - d + d/nr
+- * lat = d * nr
+- *
+- * Where 'k' is key, 'A' is task A (waiting), 'B' is task B (running),
+- * '1' is start of time, '2' is end of time, 'd' is delay between
+- * 1 and 2 (during which task B was running), 'nr' is number of tasks
+- * running, 'lat' is the the period of each task. ('lat' is the
+- * sched_latency that we aim for.)
++ * p = (nr <= nl) ? l : l*nr/nl
+ */
+-static long
+-sched_granularity(struct cfs_rq *cfs_rq)
++static u64 __sched_period(unsigned long nr_running)
+ {
+- unsigned int gran = sysctl_sched_latency;
+- unsigned int nr = cfs_rq->nr_running;
++ u64 period = sysctl_sched_latency;
++ unsigned long nr_latency = sched_nr_latency;
+
+- if (nr > 1) {
+- gran = gran/nr - gran/nr/nr;
+- gran = max(gran, sysctl_sched_min_granularity);
++ if (unlikely(nr_running > nr_latency)) {
++ period *= nr_running;
++ do_div(period, nr_latency);
+ }
+
+- return gran;
++ return period;
+ }
+
+ /*
+- * We rescale the rescheduling granularity of tasks according to their
+- * nice level, but only linearly, not exponentially:
++ * We calculate the wall-time slice from the period by taking a part
++ * proportional to the weight.
++ *
++ * s = p*w/rw
+ */
+-static long
+-niced_granularity(struct sched_entity *curr, unsigned long granularity)
++static u64 sched_slice(struct cfs_rq *cfs_rq, struct sched_entity *se)
+ {
+- u64 tmp;
++ u64 slice = __sched_period(cfs_rq->nr_running);
+
+- if (likely(curr->load.weight == NICE_0_LOAD))
+- return granularity;
+- /*
+- * Positive nice levels get the same granularity as nice-0:
+- */
+- if (likely(curr->load.weight < NICE_0_LOAD)) {
+- tmp = curr->load.weight * (u64)granularity;
+- return (long) (tmp >> NICE_0_SHIFT);
+- }
+- /*
+- * Negative nice level tasks get linearly finer
+- * granularity:
+- */
+- tmp = curr->load.inv_weight * (u64)granularity;
++ slice *= se->load.weight;
++ do_div(slice, cfs_rq->load.weight);
+
+- /*
+- * It will always fit into 'long':
+- */
+- return (long) (tmp >> (WMULT_SHIFT-NICE_0_SHIFT));
++ return slice;
+ }
+
+-static inline void
+-limit_wait_runtime(struct cfs_rq *cfs_rq, struct sched_entity *se)
++/*
++ * We calculate the vruntime slice.
++ *
++ * vs = s/w = p/rw
++ */
++static u64 __sched_vslice(unsigned long rq_weight, unsigned long nr_running)
+ {
+- long limit = sysctl_sched_runtime_limit;
++ u64 vslice = __sched_period(nr_running);
+
+- /*
+- * Niced tasks have the same history dynamic range as
+- * non-niced tasks:
+- */
+- if (unlikely(se->wait_runtime > limit)) {
+- se->wait_runtime = limit;
+- schedstat_inc(se, wait_runtime_overruns);
+- schedstat_inc(cfs_rq, wait_runtime_overruns);
+- }
+- if (unlikely(se->wait_runtime < -limit)) {
+- se->wait_runtime = -limit;
+- schedstat_inc(se, wait_runtime_underruns);
+- schedstat_inc(cfs_rq, wait_runtime_underruns);
+- }
++ vslice *= NICE_0_LOAD;
++ do_div(vslice, rq_weight);
++
++ return vslice;
+ }
+
+-static inline void
+-__add_wait_runtime(struct cfs_rq *cfs_rq, struct sched_entity *se, long delta)
++static u64 sched_vslice(struct cfs_rq *cfs_rq)
+ {
+- se->wait_runtime += delta;
+- schedstat_add(se, sum_wait_runtime, delta);
+- limit_wait_runtime(cfs_rq, se);
++ return __sched_vslice(cfs_rq->load.weight, cfs_rq->nr_running);
+ }
+
+-static void
+-add_wait_runtime(struct cfs_rq *cfs_rq, struct sched_entity *se, long delta)
++static u64 sched_vslice_add(struct cfs_rq *cfs_rq, struct sched_entity *se)
+ {
+- schedstat_add(cfs_rq, wait_runtime, -se->wait_runtime);
+- __add_wait_runtime(cfs_rq, se, delta);
+- schedstat_add(cfs_rq, wait_runtime, se->wait_runtime);
++ return __sched_vslice(cfs_rq->load.weight + se->load.weight,
++ cfs_rq->nr_running + 1);
+ }
+
+ /*
+ * Update the current task's runtime statistics. Skip current tasks that
+ * are not in our scheduling class.
+ */
+ static inline void
+-__update_curr(struct cfs_rq *cfs_rq, struct sched_entity *curr)
++__update_curr(struct cfs_rq *cfs_rq, struct sched_entity *curr,
++ unsigned long delta_exec)
+ {
+- unsigned long delta, delta_exec, delta_fair, delta_mine;
+- struct load_weight *lw = &cfs_rq->load;
+- unsigned long load = lw->weight;
++ unsigned long delta_exec_weighted;
++ u64 vruntime;
+
+- delta_exec = curr->delta_exec;
+ schedstat_set(curr->exec_max, max((u64)delta_exec, curr->exec_max));
+
+ curr->sum_exec_runtime += delta_exec;
+- cfs_rq->exec_clock += delta_exec;
+-
+- if (unlikely(!load))
+- return;
+-
+- delta_fair = calc_delta_fair(delta_exec, lw);
+- delta_mine = calc_delta_mine(delta_exec, curr->load.weight, lw);
+-
+- if (cfs_rq->sleeper_bonus > sysctl_sched_min_granularity) {
+- delta = min((u64)delta_mine, cfs_rq->sleeper_bonus);
+- delta = min(delta, (unsigned long)(
+- (long)sysctl_sched_runtime_limit - curr->wait_runtime));
+- cfs_rq->sleeper_bonus -= delta;
+- delta_mine -= delta;
++ schedstat_add(cfs_rq, exec_clock, delta_exec);
++ delta_exec_weighted = delta_exec;
++ if (unlikely(curr->load.weight != NICE_0_LOAD)) {
++ delta_exec_weighted = calc_delta_fair(delta_exec_weighted,
++ &curr->load);
+ }
++ curr->vruntime += delta_exec_weighted;
+
+- cfs_rq->fair_clock += delta_fair;
+ /*
+- * We executed delta_exec amount of time on the CPU,
+- * but we were only entitled to delta_mine amount of
+- * time during that period (if nr_running == 1 then
+- * the two values are equal)
+- * [Note: delta_mine - delta_exec is negative]:
++ * maintain cfs_rq->min_vruntime to be a monotonic increasing
++ * value tracking the leftmost vruntime in the tree.
+ */
+- add_wait_runtime(cfs_rq, curr, delta_mine - delta_exec);
++ if (first_fair(cfs_rq)) {
++ vruntime = min_vruntime(curr->vruntime,
++ __pick_next_entity(cfs_rq)->vruntime);
++ } else
++ vruntime = curr->vruntime;
++
++ cfs_rq->min_vruntime =
++ max_vruntime(cfs_rq->min_vruntime, vruntime);
+ }
+
+ static void update_curr(struct cfs_rq *cfs_rq)
+ {
+- struct sched_entity *curr = cfs_rq_curr(cfs_rq);
++ struct sched_entity *curr = cfs_rq->curr;
++ u64 now = rq_of(cfs_rq)->clock;
+ unsigned long delta_exec;
+
+ if (unlikely(!curr))
+ return;
+
+ /*
+ * Get the amount of time the current task was running
+ * since the last time we changed load (this cannot
+ * overflow on 32 bits):
+ */
+- delta_exec = (unsigned long)(rq_of(cfs_rq)->clock - curr->exec_start);
++ delta_exec = (unsigned long)(now - curr->exec_start);
++
++ __update_curr(cfs_rq, curr, delta_exec);
++ curr->exec_start = now;
+
+- curr->delta_exec += delta_exec;
++ if (entity_is_task(curr)) {
++ struct task_struct *curtask = task_of(curr);
+
+- if (unlikely(curr->delta_exec > sysctl_sched_stat_granularity)) {
+- __update_curr(cfs_rq, curr);
+- curr->delta_exec = 0;
++ cpuacct_charge(curtask, delta_exec);
+ }
+- curr->exec_start = rq_of(cfs_rq)->clock;
+ }
+
+ static inline void
+ update_stats_wait_start(struct cfs_rq *cfs_rq, struct sched_entity *se)
+ {
+- se->wait_start_fair = cfs_rq->fair_clock;
+ schedstat_set(se->wait_start, rq_of(cfs_rq)->clock);
+ }
+
+ /*
+- * We calculate fair deltas here, so protect against the random effects
+- * of a multiplication overflow by capping it to the runtime limit:
+- */
+-#if BITS_PER_LONG == 32
+-static inline unsigned long
+-calc_weighted(unsigned long delta, unsigned long weight, int shift)
+-{
+- u64 tmp = (u64)delta * weight >> shift;
+-
+- if (unlikely(tmp > sysctl_sched_runtime_limit*2))
+- return sysctl_sched_runtime_limit*2;
+- return tmp;
+-}
+-#else
+-static inline unsigned long
+-calc_weighted(unsigned long delta, unsigned long weight, int shift)
+-{
+- return delta * weight >> shift;
+-}
+-#endif
+-
+-/*
+ * Task is being enqueued - update stats:
+ */
+ static void update_stats_enqueue(struct cfs_rq *cfs_rq, struct sched_entity *se)
+ {
+- s64 key;
+-
+ /*
+ * Are we enqueueing a waiting task? (for current tasks
+ * a dequeue/enqueue event is a NOP)
+ */
+- if (se != cfs_rq_curr(cfs_rq))
++ if (se != cfs_rq->curr)
+ update_stats_wait_start(cfs_rq, se);
+- /*
+- * Update the key:
+- */
+- key = cfs_rq->fair_clock;
+-
+- /*
+- * Optimize the common nice 0 case:
+- */
+- if (likely(se->load.weight == NICE_0_LOAD)) {
+- key -= se->wait_runtime;
+- } else {
+- u64 tmp;
+-
+- if (se->wait_runtime < 0) {
+- tmp = -se->wait_runtime;
+- key += (tmp * se->load.inv_weight) >>
+- (WMULT_SHIFT - NICE_0_SHIFT);
+- } else {
+- tmp = se->wait_runtime;
+- key -= (tmp * se->load.inv_weight) >>
+- (WMULT_SHIFT - NICE_0_SHIFT);
+- }
+- }
+-
+- se->fair_key = key;
+-}
+-
+-/*
+- * Note: must be called with a freshly updated rq->fair_clock.
+- */
+-static inline void
+-__update_stats_wait_end(struct cfs_rq *cfs_rq, struct sched_entity *se)
+-{
+- unsigned long delta_fair = se->delta_fair_run;
+-
+- schedstat_set(se->wait_max, max(se->wait_max,
+- rq_of(cfs_rq)->clock - se->wait_start));
+-
+- if (unlikely(se->load.weight != NICE_0_LOAD))
+- delta_fair = calc_weighted(delta_fair, se->load.weight,
+- NICE_0_SHIFT);
+-
+- add_wait_runtime(cfs_rq, se, delta_fair);
+ }
+
+ static void
+ update_stats_wait_end(struct cfs_rq *cfs_rq, struct sched_entity *se)
+ {
+- unsigned long delta_fair;
+-
+- if (unlikely(!se->wait_start_fair))
+- return;
+-
+- delta_fair = (unsigned long)min((u64)(2*sysctl_sched_runtime_limit),
+- (u64)(cfs_rq->fair_clock - se->wait_start_fair));
+-
+- se->delta_fair_run += delta_fair;
+- if (unlikely(abs(se->delta_fair_run) >=
+- sysctl_sched_stat_granularity)) {
+- __update_stats_wait_end(cfs_rq, se);
+- se->delta_fair_run = 0;
+- }
+-
+- se->wait_start_fair = 0;
++ schedstat_set(se->wait_max, max(se->wait_max,
++ rq_of(cfs_rq)->clock - se->wait_start));
+ schedstat_set(se->wait_start, 0);
+ }
+
+ static inline void
+ update_stats_dequeue(struct cfs_rq *cfs_rq, struct sched_entity *se)
+ {
+- update_curr(cfs_rq);
+ /*
+ * Mark the end of the wait period if dequeueing a
+ * waiting task:
+ */
+- if (se != cfs_rq_curr(cfs_rq))
++ if (se != cfs_rq->curr)
+ update_stats_wait_end(cfs_rq, se);
+ }
+
+ /*
+ * We are picking a new current task - update its stats:
+@@ -540,83 +407,32 @@ update_stats_curr_start(struct cfs_rq *c
+ * We are starting a new run period:
+ */
+ se->exec_start = rq_of(cfs_rq)->clock;
+ }
+
+-/*
+- * We are descheduling a task - update its stats:
+- */
+-static inline void
+-update_stats_curr_end(struct cfs_rq *cfs_rq, struct sched_entity *se)
+-{
+- se->exec_start = 0;
+-}
+-
+ /**************************************************
+ * Scheduling class queueing methods:
+ */
+
+-static void __enqueue_sleeper(struct cfs_rq *cfs_rq, struct sched_entity *se)
++static void
++account_entity_enqueue(struct cfs_rq *cfs_rq, struct sched_entity *se)
+ {
+- unsigned long load = cfs_rq->load.weight, delta_fair;
+- long prev_runtime;
+-
+- /*
+- * Do not boost sleepers if there's too much bonus 'in flight'
+- * already:
+- */
+- if (unlikely(cfs_rq->sleeper_bonus > sysctl_sched_runtime_limit))
+- return;
+-
+- if (sysctl_sched_features & SCHED_FEAT_SLEEPER_LOAD_AVG)
+- load = rq_of(cfs_rq)->cpu_load[2];
+-
+- delta_fair = se->delta_fair_sleep;
+-
+- /*
+- * Fix up delta_fair with the effect of us running
+- * during the whole sleep period:
+- */
+- if (sysctl_sched_features & SCHED_FEAT_SLEEPER_AVG)
+- delta_fair = div64_likely32((u64)delta_fair * load,
+- load + se->load.weight);
+-
+- if (unlikely(se->load.weight != NICE_0_LOAD))
+- delta_fair = calc_weighted(delta_fair, se->load.weight,
+- NICE_0_SHIFT);
+-
+- prev_runtime = se->wait_runtime;
+- __add_wait_runtime(cfs_rq, se, delta_fair);
+- delta_fair = se->wait_runtime - prev_runtime;
++ update_load_add(&cfs_rq->load, se->load.weight);
++ cfs_rq->nr_running++;
++ se->on_rq = 1;
++}
+
+- /*
+- * Track the amount of bonus we've given to sleepers:
+- */
+- cfs_rq->sleeper_bonus += delta_fair;
++static void
++account_entity_dequeue(struct cfs_rq *cfs_rq, struct sched_entity *se)
++{
++ update_load_sub(&cfs_rq->load, se->load.weight);
++ cfs_rq->nr_running--;
++ se->on_rq = 0;
+ }
+
+ static void enqueue_sleeper(struct cfs_rq *cfs_rq, struct sched_entity *se)
+ {
+- struct task_struct *tsk = task_of(se);
+- unsigned long delta_fair;
+-
+- if ((entity_is_task(se) && tsk->policy == SCHED_BATCH) ||
+- !(sysctl_sched_features & SCHED_FEAT_FAIR_SLEEPERS))
+- return;
+-
+- delta_fair = (unsigned long)min((u64)(2*sysctl_sched_runtime_limit),
+- (u64)(cfs_rq->fair_clock - se->sleep_start_fair));
+-
+- se->delta_fair_sleep += delta_fair;
+- if (unlikely(abs(se->delta_fair_sleep) >=
+- sysctl_sched_stat_granularity)) {
+- __enqueue_sleeper(cfs_rq, se);
+- se->delta_fair_sleep = 0;
+- }
+-
+- se->sleep_start_fair = 0;
+-
+ #ifdef CONFIG_SCHEDSTATS
+ if (se->sleep_start) {
+ u64 delta = rq_of(cfs_rq)->clock - se->sleep_start;
+
+ if ((s64)delta < 0)
+@@ -644,38 +460,99 @@ static void enqueue_sleeper(struct cfs_r
+ * Blocking time is in units of nanosecs, so shift by 20 to
+ * get a milliseconds-range estimation of the amount of
+ * time that the task spent sleeping:
+ */
+ if (unlikely(prof_on == SLEEP_PROFILING)) {
++ struct task_struct *tsk = task_of(se);
++
+ profile_hits(SLEEP_PROFILING, (void *)get_wchan(tsk),
+ delta >> 20);
+ }
+ }
+ #endif
+ }
+
++static void check_spread(struct cfs_rq *cfs_rq, struct sched_entity *se)
++{
++#ifdef CONFIG_SCHED_DEBUG
++ s64 d = se->vruntime - cfs_rq->min_vruntime;
++
++ if (d < 0)
++ d = -d;
++
++ if (d > 3*sysctl_sched_latency)
++ schedstat_inc(cfs_rq, nr_spread_over);
++#endif
++}
++
++static void
++place_entity(struct cfs_rq *cfs_rq, struct sched_entity *se, int initial)
++{
++ u64 vruntime;
++
++ vruntime = cfs_rq->min_vruntime;
++
++ if (sched_feat(TREE_AVG)) {
++ struct sched_entity *last = __pick_last_entity(cfs_rq);
++ if (last) {
++ vruntime += last->vruntime;
++ vruntime >>= 1;
++ }
++ } else if (sched_feat(APPROX_AVG) && cfs_rq->nr_running)
++ vruntime += sched_vslice(cfs_rq)/2;
++
++ /*
++ * The 'current' period is already promised to the current tasks,
++ * however the extra weight of the new task will slow them down a
++ * little, place the new task so that it fits in the slot that
++ * stays open at the end.
++ */
++ if (initial && sched_feat(START_DEBIT))
++ vruntime += sched_vslice_add(cfs_rq, se);
++
++ if (!initial) {
++ /* sleeps upto a single latency don't count. */
++ if (sched_feat(NEW_FAIR_SLEEPERS) && entity_is_task(se))
++ vruntime -= sysctl_sched_latency;
++
++ /* ensure we never gain time by being placed backwards. */
++ vruntime = max_vruntime(se->vruntime, vruntime);
++ }
++
++ se->vruntime = vruntime;
++}
++
+ static void
+ enqueue_entity(struct cfs_rq *cfs_rq, struct sched_entity *se, int wakeup)
+ {
+ /*
+- * Update the fair clock.
++ * Update run-time statistics of the 'current'.
+ */
+ update_curr(cfs_rq);
+
+- if (wakeup)
++ if (wakeup) {
++ place_entity(cfs_rq, se, 0);
+ enqueue_sleeper(cfs_rq, se);
++ }
+
+ update_stats_enqueue(cfs_rq, se);
+- __enqueue_entity(cfs_rq, se);
++ check_spread(cfs_rq, se);
++ if (se != cfs_rq->curr)
++ __enqueue_entity(cfs_rq, se);
++ account_entity_enqueue(cfs_rq, se);
+ }
+
+ static void
+ dequeue_entity(struct cfs_rq *cfs_rq, struct sched_entity *se, int sleep)
+ {
++ /*
++ * Update run-time statistics of the 'current'.
++ */
++ update_curr(cfs_rq);
++
+ update_stats_dequeue(cfs_rq, se);
+ if (sleep) {
+- se->sleep_start_fair = cfs_rq->fair_clock;
+ #ifdef CONFIG_SCHEDSTATS
+ if (entity_is_task(se)) {
+ struct task_struct *tsk = task_of(se);
+
+ if (tsk->state & TASK_INTERRUPTIBLE)
+@@ -683,72 +560,68 @@ dequeue_entity(struct cfs_rq *cfs_rq, st
+ if (tsk->state & TASK_UNINTERRUPTIBLE)
+ se->block_start = rq_of(cfs_rq)->clock;
+ }
+ #endif
+ }
+- __dequeue_entity(cfs_rq, se);
++
++ if (se != cfs_rq->curr)
++ __dequeue_entity(cfs_rq, se);
++ account_entity_dequeue(cfs_rq, se);
+ }
+
+ /*
+ * Preempt the current task with a newly woken task if needed:
+ */
+ static void
+-__check_preempt_curr_fair(struct cfs_rq *cfs_rq, struct sched_entity *se,
+- struct sched_entity *curr, unsigned long granularity)
++check_preempt_tick(struct cfs_rq *cfs_rq, struct sched_entity *curr)
+ {
+- s64 __delta = curr->fair_key - se->fair_key;
+ unsigned long ideal_runtime, delta_exec;
+
+- /*
+- * ideal_runtime is compared against sum_exec_runtime, which is
+- * walltime, hence do not scale.
+- */
+- ideal_runtime = max(sysctl_sched_latency / cfs_rq->nr_running,
+- (unsigned long)sysctl_sched_min_granularity);
+-
+- /*
+- * If we executed more than what the latency constraint suggests,
+- * reduce the rescheduling granularity. This way the total latency
+- * of how much a task is not scheduled converges to
+- * sysctl_sched_latency:
+- */
++ ideal_runtime = sched_slice(cfs_rq, curr);
+ delta_exec = curr->sum_exec_runtime - curr->prev_sum_exec_runtime;
+ if (delta_exec > ideal_runtime)
+- granularity = 0;
+-
+- /*
+- * Take scheduling granularity into account - do not
+- * preempt the current task unless the best task has
+- * a larger than sched_granularity fairness advantage:
+- *
+- * scale granularity as key space is in fair_clock.
+- */
+- if (__delta > niced_granularity(curr, granularity))
+ resched_task(rq_of(cfs_rq)->curr);
+ }
+
+-static inline void
++static void
+ set_next_entity(struct cfs_rq *cfs_rq, struct sched_entity *se)
+ {
+- /*
+- * Any task has to be enqueued before it get to execute on
+- * a CPU. So account for the time it spent waiting on the
+- * runqueue. (note, here we rely on pick_next_task() having
+- * done a put_prev_task_fair() shortly before this, which
+- * updated rq->fair_clock - used by update_stats_wait_end())
+- */
+- update_stats_wait_end(cfs_rq, se);
++ /* 'current' is not kept within the tree. */
++ if (se->on_rq) {
++ /*
++ * Any task has to be enqueued before it get to execute on
++ * a CPU. So account for the time it spent waiting on the
++ * runqueue.
++ */
++ update_stats_wait_end(cfs_rq, se);
++ __dequeue_entity(cfs_rq, se);
++ }
++
+ update_stats_curr_start(cfs_rq, se);
+- set_cfs_rq_curr(cfs_rq, se);
++ cfs_rq->curr = se;
++#ifdef CONFIG_SCHEDSTATS
++ /*
++ * Track our maximum slice length, if the CPU's load is at
++ * least twice that of our own weight (i.e. dont track it
++ * when there are only lesser-weight tasks around):
++ */
++ if (rq_of(cfs_rq)->load.weight >= 2*se->load.weight) {
++ se->slice_max = max(se->slice_max,
++ se->sum_exec_runtime - se->prev_sum_exec_runtime);
++ }
++#endif
+ se->prev_sum_exec_runtime = se->sum_exec_runtime;
+ }
+
+ static struct sched_entity *pick_next_entity(struct cfs_rq *cfs_rq)
+ {
+- struct sched_entity *se = __pick_next_entity(cfs_rq);
++ struct sched_entity *se = NULL;
+
+- set_next_entity(cfs_rq, se);
++ if (first_fair(cfs_rq)) {
++ se = __pick_next_entity(cfs_rq);
++ set_next_entity(cfs_rq, se);
++ }
+
+ return se;
+ }
+
+ static void put_prev_entity(struct cfs_rq *cfs_rq, struct sched_entity *prev)
+@@ -758,37 +631,28 @@ static void put_prev_entity(struct cfs_r
+ * was not called and update_curr() has to be done:
+ */
+ if (prev->on_rq)
+ update_curr(cfs_rq);
+
+- update_stats_curr_end(cfs_rq, prev);
+-
+- if (prev->on_rq)
++ check_spread(cfs_rq, prev);
++ if (prev->on_rq) {
+ update_stats_wait_start(cfs_rq, prev);
+- set_cfs_rq_curr(cfs_rq, NULL);
++ /* Put 'current' back into the tree. */
++ __enqueue_entity(cfs_rq, prev);
++ }
++ cfs_rq->curr = NULL;
+ }
+
+ static void entity_tick(struct cfs_rq *cfs_rq, struct sched_entity *curr)
+ {
+- struct sched_entity *next;
+-
+- /*
+- * Dequeue and enqueue the task to update its
+- * position within the tree:
+- */
+- dequeue_entity(cfs_rq, curr, 0);
+- enqueue_entity(cfs_rq, curr, 0);
+-
+ /*
+- * Reschedule if another task tops the current one.
++ * Update run-time statistics of the 'current'.
+ */
+- next = __pick_next_entity(cfs_rq);
+- if (next == curr)
+- return;
++ update_curr(cfs_rq);
+
+- __check_preempt_curr_fair(cfs_rq, next, curr,
+- sched_granularity(cfs_rq));
++ if (cfs_rq->nr_running > 1 || !sched_feat(WAKEUP_PREEMPT))
++ check_preempt_tick(cfs_rq, curr);
+ }
+
+ /**************************************************
+ * CFS operations on tasks:
+ */
+@@ -819,27 +683,32 @@ static inline struct cfs_rq *group_cfs_r
+ /* Given a group's cfs_rq on one cpu, return its corresponding cfs_rq on
+ * another cpu ('this_cpu')
+ */
+ static inline struct cfs_rq *cpu_cfs_rq(struct cfs_rq *cfs_rq, int this_cpu)
+ {
+- /* A later patch will take group into account */
+- return &cpu_rq(this_cpu)->cfs;
++ return cfs_rq->tg->cfs_rq[this_cpu];
+ }
+
+ /* Iterate thr' all leaf cfs_rq's on a runqueue */
+ #define for_each_leaf_cfs_rq(rq, cfs_rq) \
+ list_for_each_entry(cfs_rq, &rq->leaf_cfs_rq_list, leaf_cfs_rq_list)
+
+-/* Do the two (enqueued) tasks belong to the same group ? */
+-static inline int is_same_group(struct task_struct *curr, struct task_struct *p)
++/* Do the two (enqueued) entities belong to the same group ? */
++static inline int
++is_same_group(struct sched_entity *se, struct sched_entity *pse)
+ {
+- if (curr->se.cfs_rq == p->se.cfs_rq)
++ if (se->cfs_rq == pse->cfs_rq)
+ return 1;
+
+ return 0;
+ }
+
++static inline struct sched_entity *parent_entity(struct sched_entity *se)
++{
++ return se->parent;
++}
++
+ #else /* CONFIG_FAIR_GROUP_SCHED */
+
+ #define for_each_sched_entity(se) \
+ for (; se; se = NULL)
+
+@@ -868,15 +737,21 @@ static inline struct cfs_rq *cpu_cfs_rq(
+ }
+
+ #define for_each_leaf_cfs_rq(rq, cfs_rq) \
+ for (cfs_rq = &rq->cfs; cfs_rq; cfs_rq = NULL)
+
+-static inline int is_same_group(struct task_struct *curr, struct task_struct *p)
++static inline int
++is_same_group(struct sched_entity *se, struct sched_entity *pse)
+ {
+ return 1;
+ }
+
++static inline struct sched_entity *parent_entity(struct sched_entity *se)
++{
++ return NULL;
++}
++
+ #endif /* CONFIG_FAIR_GROUP_SCHED */
+
+ /*
+ * The enqueue_task method is called before nr_running is
+ * increased. Here we update the fair scheduling stats and
+@@ -890,10 +765,11 @@ static void enqueue_task_fair(struct rq
+ for_each_sched_entity(se) {
+ if (se->on_rq)
+ break;
+ cfs_rq = cfs_rq_of(se);
+ enqueue_entity(cfs_rq, se, wakeup);
++ wakeup = 1;
+ }
+ }
+
+ /*
+ * The dequeue_task method is called before nr_running is
+@@ -909,97 +785,95 @@ static void dequeue_task_fair(struct rq
+ cfs_rq = cfs_rq_of(se);
+ dequeue_entity(cfs_rq, se, sleep);
+ /* Don't dequeue parent if it has other entities besides us */
+ if (cfs_rq->load.weight)
+ break;
++ sleep = 1;
+ }
+ }
+
+ /*
+ * sched_yield() support is very simple - we dequeue and enqueue.
+ *
+ * If compat_yield is turned on then we requeue to the end of the tree.
+ */
+-static void yield_task_fair(struct rq *rq, struct task_struct *p)
++static void yield_task_fair(struct rq *rq)
+ {
+- struct cfs_rq *cfs_rq = task_cfs_rq(p);
+- struct rb_node **link = &cfs_rq->tasks_timeline.rb_node;
+- struct sched_entity *rightmost, *se = &p->se;
+- struct rb_node *parent;
++ struct task_struct *curr = rq->curr;
++ struct cfs_rq *cfs_rq = task_cfs_rq(curr);
++ struct sched_entity *rightmost, *se = &curr->se;
+
+ /*
+ * Are we the only task in the tree?
+ */
+ if (unlikely(cfs_rq->nr_running == 1))
+ return;
+
+- if (likely(!sysctl_sched_compat_yield)) {
++ if (likely(!sysctl_sched_compat_yield) && curr->policy != SCHED_BATCH) {
+ __update_rq_clock(rq);
+ /*
+- * Dequeue and enqueue the task to update its
+- * position within the tree:
++ * Update run-time statistics of the 'current'.
+ */
+- dequeue_entity(cfs_rq, &p->se, 0);
+- enqueue_entity(cfs_rq, &p->se, 0);
++ update_curr(cfs_rq);
+
+ return;
+ }
+ /*
+ * Find the rightmost entry in the rbtree:
+ */
+- do {
+- parent = *link;
+- link = &parent->rb_right;
+- } while (*link);
+-
+- rightmost = rb_entry(parent, struct sched_entity, run_node);
++ rightmost = __pick_last_entity(cfs_rq);
+ /*
+ * Already in the rightmost position?
+ */
+- if (unlikely(rightmost == se))
++ if (unlikely(rightmost->vruntime < se->vruntime))
+ return;
+
+ /*
+ * Minimally necessary key value to be last in the tree:
++ * Upon rescheduling, sched_class::put_prev_task() will place
++ * 'current' within the tree based on its new key value.
+ */
+- se->fair_key = rightmost->fair_key + 1;
+-
+- if (cfs_rq->rb_leftmost == &se->run_node)
+- cfs_rq->rb_leftmost = rb_next(&se->run_node);
+- /*
+- * Relink the task to the rightmost position:
+- */
+- rb_erase(&se->run_node, &cfs_rq->tasks_timeline);
+- rb_link_node(&se->run_node, parent, link);
+- rb_insert_color(&se->run_node, &cfs_rq->tasks_timeline);
++ se->vruntime = rightmost->vruntime + 1;
+ }
+
+ /*
+ * Preempt the current task with a newly woken task if needed:
+ */
+-static void check_preempt_curr_fair(struct rq *rq, struct task_struct *p)
++static void check_preempt_wakeup(struct rq *rq, struct task_struct *p)
+ {
+ struct task_struct *curr = rq->curr;
+ struct cfs_rq *cfs_rq = task_cfs_rq(curr);
++ struct sched_entity *se = &curr->se, *pse = &p->se;
+ unsigned long gran;
+
+ if (unlikely(rt_prio(p->prio))) {
+ update_rq_clock(rq);
+ update_curr(cfs_rq);
+ resched_task(curr);
+ return;
+ }
+-
+- gran = sysctl_sched_wakeup_granularity;
+ /*
+- * Batch tasks prefer throughput over latency:
++ * Batch tasks do not preempt (their preemption is driven by
++ * the tick):
+ */
+ if (unlikely(p->policy == SCHED_BATCH))
+- gran = sysctl_sched_batch_wakeup_granularity;
++ return;
++
++ if (!sched_feat(WAKEUP_PREEMPT))
++ return;
++
++ while (!is_same_group(se, pse)) {
++ se = parent_entity(se);
++ pse = parent_entity(pse);
++ }
+
+- if (is_same_group(curr, p))
+- __check_preempt_curr_fair(cfs_rq, &p->se, &curr->se, gran);
++ gran = sysctl_sched_wakeup_granularity;
++ if (unlikely(se->load.weight != NICE_0_LOAD))
++ gran = calc_delta_fair(gran, &se->load);
++
++ if (pse->vruntime + gran < se->vruntime)
++ resched_task(curr);
+ }
+
+ static struct task_struct *pick_next_task_fair(struct rq *rq)
+ {
+ struct cfs_rq *cfs_rq = &rq->cfs;
+@@ -1028,10 +902,11 @@ static void put_prev_task_fair(struct rq
+ cfs_rq = cfs_rq_of(se);
+ put_prev_entity(cfs_rq, se);
+ }
+ }
+
++#ifdef CONFIG_SMP
+ /**************************************************
+ * Fair scheduling class load-balancing methods:
+ */
+
+ /*
+@@ -1039,11 +914,11 @@ static void put_prev_task_fair(struct rq
+ * during the whole iteration, the current task might be
+ * dequeued so the iterator has to be dequeue-safe. Here we
+ * achieve that by always pre-iterating before returning
+ * the current task:
+ */
+-static inline struct task_struct *
++static struct task_struct *
+ __load_balance_iterator(struct cfs_rq *cfs_rq, struct rb_node *curr)
+ {
+ struct task_struct *p;
+
+ if (!curr)
+@@ -1076,25 +951,27 @@ static int cfs_rq_best_prio(struct cfs_r
+ struct task_struct *p;
+
+ if (!cfs_rq->nr_running)
+ return MAX_PRIO;
+
+- curr = __pick_next_entity(cfs_rq);
++ curr = cfs_rq->curr;
++ if (!curr)
++ curr = __pick_next_entity(cfs_rq);
++
+ p = task_of(curr);
+
+ return p->prio;
+ }
+ #endif
+
+ static unsigned long
+ load_balance_fair(struct rq *this_rq, int this_cpu, struct rq *busiest,
+- unsigned long max_nr_move, unsigned long max_load_move,
++ unsigned long max_load_move,
+ struct sched_domain *sd, enum cpu_idle_type idle,
+ int *all_pinned, int *this_best_prio)
+ {
+ struct cfs_rq *busy_cfs_rq;
+- unsigned long load_moved, total_nr_moved = 0, nr_moved;
+ long rem_load_move = max_load_move;
+ struct rq_iterator cfs_rq_iterator;
+
+ cfs_rq_iterator.start = load_balance_start_fair;
+ cfs_rq_iterator.next = load_balance_next_fair;
+@@ -1118,29 +995,52 @@ load_balance_fair(struct rq *this_rq, in
+
+ *this_best_prio = cfs_rq_best_prio(this_cfs_rq);
+ #else
+ # define maxload rem_load_move
+ #endif
+- /* pass busy_cfs_rq argument into
++ /*
++ * pass busy_cfs_rq argument into
+ * load_balance_[start|next]_fair iterators
+ */
+ cfs_rq_iterator.arg = busy_cfs_rq;
+- nr_moved = balance_tasks(this_rq, this_cpu, busiest,
+- max_nr_move, maxload, sd, idle, all_pinned,
+- &load_moved, this_best_prio, &cfs_rq_iterator);
+-
+- total_nr_moved += nr_moved;
+- max_nr_move -= nr_moved;
+- rem_load_move -= load_moved;
++ rem_load_move -= balance_tasks(this_rq, this_cpu, busiest,
++ maxload, sd, idle, all_pinned,
++ this_best_prio,
++ &cfs_rq_iterator);
+
+- if (max_nr_move <= 0 || rem_load_move <= 0)
++ if (rem_load_move <= 0)
+ break;
+ }
+
+ return max_load_move - rem_load_move;
+ }
+
++static int
++move_one_task_fair(struct rq *this_rq, int this_cpu, struct rq *busiest,
++ struct sched_domain *sd, enum cpu_idle_type idle)
++{
++ struct cfs_rq *busy_cfs_rq;
++ struct rq_iterator cfs_rq_iterator;
++
++ cfs_rq_iterator.start = load_balance_start_fair;
++ cfs_rq_iterator.next = load_balance_next_fair;
++
++ for_each_leaf_cfs_rq(busiest, busy_cfs_rq) {
++ /*
++ * pass busy_cfs_rq argument into
++ * load_balance_[start|next]_fair iterators
++ */
++ cfs_rq_iterator.arg = busy_cfs_rq;
++ if (iter_move_one_task(this_rq, this_cpu, busiest, sd, idle,
++ &cfs_rq_iterator))
++ return 1;
++ }
++
++ return 0;
++}
++#endif
++
+ /*
+ * scheduler tick hitting a task of our scheduling class:
+ */
+ static void task_tick_fair(struct rq *rq, struct task_struct *curr)
+ {
+@@ -1151,51 +1051,44 @@ static void task_tick_fair(struct rq *rq
+ cfs_rq = cfs_rq_of(se);
+ entity_tick(cfs_rq, se);
+ }
+ }
+
++#define swap(a, b) do { typeof(a) tmp = (a); (a) = (b); (b) = tmp; } while (0)
++
+ /*
+ * Share the fairness runtime between parent and child, thus the
+ * total amount of pressure for CPU stays equal - new tasks
+ * get a chance to run but frequent forkers are not allowed to
+ * monopolize the CPU. Note: the parent runqueue is locked,
+ * the child is not running yet.
+ */
+ static void task_new_fair(struct rq *rq, struct task_struct *p)
+ {
+ struct cfs_rq *cfs_rq = task_cfs_rq(p);
+- struct sched_entity *se = &p->se, *curr = cfs_rq_curr(cfs_rq);
++ struct sched_entity *se = &p->se, *curr = cfs_rq->curr;
++ int this_cpu = smp_processor_id();
+
+ sched_info_queued(p);
+
+ update_curr(cfs_rq);
+- update_stats_enqueue(cfs_rq, se);
+- /*
+- * Child runs first: we let it run before the parent
+- * until it reschedules once. We set up the key so that
+- * it will preempt the parent:
+- */
+- se->fair_key = curr->fair_key -
+- niced_granularity(curr, sched_granularity(cfs_rq)) - 1;
+- /*
+- * The first wait is dominated by the child-runs-first logic,
+- * so do not credit it with that waiting time yet:
+- */
+- if (sysctl_sched_features & SCHED_FEAT_SKIP_INITIAL)
+- se->wait_start_fair = 0;
++ place_entity(cfs_rq, se, 1);
+
+- /*
+- * The statistical average of wait_runtime is about
+- * -granularity/2, so initialize the task with that:
+- */
+- if (sysctl_sched_features & SCHED_FEAT_START_DEBIT)
+- se->wait_runtime = -(sched_granularity(cfs_rq) / 2);
++ /* 'curr' will be NULL if the child belongs to a different group */
++ if (sysctl_sched_child_runs_first && this_cpu == task_cpu(p) &&
++ curr && curr->vruntime < se->vruntime) {
++ /*
++ * Upon rescheduling, sched_class::put_prev_task() will place
++ * 'current' within the tree based on its new key value.
++ */
++ swap(curr->vruntime, se->vruntime);
++ }
+
+- __enqueue_entity(cfs_rq, se);
++ enqueue_task_fair(rq, p, 0);
++ resched_task(rq->curr);
+ }
+
+-#ifdef CONFIG_FAIR_GROUP_SCHED
+ /* Account for a task changing its policy or group.
+ *
+ * This routine is mostly called to set cfs_rq->curr field when a task
+ * migrates between groups/classes.
+ */
+@@ -1204,30 +1097,29 @@ static void set_curr_task_fair(struct rq
+ struct sched_entity *se = &rq->curr->se;
+
+ for_each_sched_entity(se)
+ set_next_entity(cfs_rq_of(se), se);
+ }
+-#else
+-static void set_curr_task_fair(struct rq *rq)
+-{
+-}
+-#endif
+
+ /*
+ * All the scheduling class methods:
+ */
+-struct sched_class fair_sched_class __read_mostly = {
++static const struct sched_class fair_sched_class = {
++ .next = &idle_sched_class,
+ .enqueue_task = enqueue_task_fair,
+ .dequeue_task = dequeue_task_fair,
+ .yield_task = yield_task_fair,
+
+- .check_preempt_curr = check_preempt_curr_fair,
++ .check_preempt_curr = check_preempt_wakeup,
+
+ .pick_next_task = pick_next_task_fair,
+ .put_prev_task = put_prev_task_fair,
+
++#ifdef CONFIG_SMP
+ .load_balance = load_balance_fair,
++ .move_one_task = move_one_task_fair,
++#endif
+
+ .set_curr_task = set_curr_task_fair,
+ .task_tick = task_tick_fair,
+ .task_new = task_new_fair,
+ };
+@@ -1235,9 +1127,12 @@ struct sched_class fair_sched_class __re
+ #ifdef CONFIG_SCHED_DEBUG
+ static void print_cfs_stats(struct seq_file *m, int cpu)
+ {
+ struct cfs_rq *cfs_rq;
+
++#ifdef CONFIG_FAIR_GROUP_SCHED
++ print_cfs_rq(m, cpu, &cpu_rq(cpu)->cfs);
++#endif
+ for_each_leaf_cfs_rq(cpu_rq(cpu), cfs_rq)
+ print_cfs_rq(m, cpu, cfs_rq);
+ }
+ #endif
+--- linux-2.6.23.orig/kernel/sched_idletask.c
++++ linux-2.6.23/kernel/sched_idletask.c
+@@ -35,37 +35,55 @@ dequeue_task_idle(struct rq *rq, struct
+
+ static void put_prev_task_idle(struct rq *rq, struct task_struct *prev)
+ {
+ }
+
++#ifdef CONFIG_SMP
+ static unsigned long
+ load_balance_idle(struct rq *this_rq, int this_cpu, struct rq *busiest,
+- unsigned long max_nr_move, unsigned long max_load_move,
+- struct sched_domain *sd, enum cpu_idle_type idle,
+- int *all_pinned, int *this_best_prio)
++ unsigned long max_load_move,
++ struct sched_domain *sd, enum cpu_idle_type idle,
++ int *all_pinned, int *this_best_prio)
+ {
+ return 0;
+ }
+
++static int
++move_one_task_idle(struct rq *this_rq, int this_cpu, struct rq *busiest,
++ struct sched_domain *sd, enum cpu_idle_type idle)
++{
++ return 0;
++}
++#endif
++
+ static void task_tick_idle(struct rq *rq, struct task_struct *curr)
+ {
+ }
+
++static void set_curr_task_idle(struct rq *rq)
++{
++}
++
+ /*
+ * Simple, special scheduling class for the per-CPU idle tasks:
+ */
+-static struct sched_class idle_sched_class __read_mostly = {
++const struct sched_class idle_sched_class = {
++ /* .next is NULL */
+ /* no enqueue/yield_task for idle tasks */
+
+ /* dequeue is not valid, we print a debug message there: */
+ .dequeue_task = dequeue_task_idle,
+
+ .check_preempt_curr = check_preempt_curr_idle,
+
+ .pick_next_task = pick_next_task_idle,
+ .put_prev_task = put_prev_task_idle,
+
++#ifdef CONFIG_SMP
+ .load_balance = load_balance_idle,
++ .move_one_task = move_one_task_idle,
++#endif
+
++ .set_curr_task = set_curr_task_idle,
+ .task_tick = task_tick_idle,
+ /* no .task_new for idle tasks */
+ };
+--- linux-2.6.23.orig/kernel/sched_rt.c
++++ linux-2.6.23/kernel/sched_rt.c
+@@ -5,11 +5,11 @@
+
+ /*
+ * Update the current task's runtime statistics. Skip current tasks that
+ * are not in our scheduling class.
+ */
+-static inline void update_curr_rt(struct rq *rq)
++static void update_curr_rt(struct rq *rq)
+ {
+ struct task_struct *curr = rq->curr;
+ u64 delta_exec;
+
+ if (!task_has_rt_policy(curr))
+@@ -21,10 +21,11 @@ static inline void update_curr_rt(struct
+
+ schedstat_set(curr->se.exec_max, max(curr->se.exec_max, delta_exec));
+
+ curr->se.sum_exec_runtime += delta_exec;
+ curr->se.exec_start = rq->clock;
++ cpuacct_charge(curr, delta_exec);
+ }
+
+ static void enqueue_task_rt(struct rq *rq, struct task_struct *p, int wakeup)
+ {
+ struct rt_prio_array *array = &rq->rt.active;
+@@ -57,13 +58,13 @@ static void requeue_task_rt(struct rq *r
+
+ list_move_tail(&p->run_list, array->queue + p->prio);
+ }
+
+ static void
+-yield_task_rt(struct rq *rq, struct task_struct *p)
++yield_task_rt(struct rq *rq)
+ {
+- requeue_task_rt(rq, p);
++ requeue_task_rt(rq, rq->curr);
+ }
+
+ /*
+ * Preempt the current task with a newly woken task if needed:
+ */
+@@ -96,10 +97,11 @@ static void put_prev_task_rt(struct rq *
+ {
+ update_curr_rt(rq);
+ p->se.exec_start = 0;
+ }
+
++#ifdef CONFIG_SMP
+ /*
+ * Load-balancing iterator. Note: while the runqueue stays locked
+ * during the whole iteration, the current task might be
+ * dequeued so the iterator has to be dequeue-safe. Here we
+ * achieve that by always pre-iterating before returning
+@@ -170,45 +172,57 @@ static struct task_struct *load_balance_
+ return p;
+ }
+
+ static unsigned long
+ load_balance_rt(struct rq *this_rq, int this_cpu, struct rq *busiest,
+- unsigned long max_nr_move, unsigned long max_load_move,
+- struct sched_domain *sd, enum cpu_idle_type idle,
+- int *all_pinned, int *this_best_prio)
++ unsigned long max_load_move,
++ struct sched_domain *sd, enum cpu_idle_type idle,
++ int *all_pinned, int *this_best_prio)
+ {
+- int nr_moved;
+ struct rq_iterator rt_rq_iterator;
+- unsigned long load_moved;
+
+ rt_rq_iterator.start = load_balance_start_rt;
+ rt_rq_iterator.next = load_balance_next_rt;
+ /* pass 'busiest' rq argument into
+ * load_balance_[start|next]_rt iterators
+ */
+ rt_rq_iterator.arg = busiest;
+
+- nr_moved = balance_tasks(this_rq, this_cpu, busiest, max_nr_move,
+- max_load_move, sd, idle, all_pinned, &load_moved,
+- this_best_prio, &rt_rq_iterator);
++ return balance_tasks(this_rq, this_cpu, busiest, max_load_move, sd,
++ idle, all_pinned, this_best_prio, &rt_rq_iterator);
++}
++
++static int
++move_one_task_rt(struct rq *this_rq, int this_cpu, struct rq *busiest,
++ struct sched_domain *sd, enum cpu_idle_type idle)
++{
++ struct rq_iterator rt_rq_iterator;
++
++ rt_rq_iterator.start = load_balance_start_rt;
++ rt_rq_iterator.next = load_balance_next_rt;
++ rt_rq_iterator.arg = busiest;
+
+- return load_moved;
++ return iter_move_one_task(this_rq, this_cpu, busiest, sd, idle,
++ &rt_rq_iterator);
+ }
++#endif
+
+ static void task_tick_rt(struct rq *rq, struct task_struct *p)
+ {
++ update_curr_rt(rq);
++
+ /*
+ * RR tasks need a special form of timeslice management.
+ * FIFO tasks have no timeslices.
+ */
+ if (p->policy != SCHED_RR)
+ return;
+
+ if (--p->time_slice)
+ return;
+
+- p->time_slice = static_prio_timeslice(p->static_prio);
++ p->time_slice = DEF_TIMESLICE;
+
+ /*
+ * Requeue to the end of queue if we are not the only element
+ * on the queue:
+ */
+@@ -216,19 +230,31 @@ static void task_tick_rt(struct rq *rq,
+ requeue_task_rt(rq, p);
+ set_tsk_need_resched(p);
+ }
+ }
+
+-static struct sched_class rt_sched_class __read_mostly = {
++static void set_curr_task_rt(struct rq *rq)
++{
++ struct task_struct *p = rq->curr;
++
++ p->se.exec_start = rq->clock;
++}
++
++const struct sched_class rt_sched_class = {
++ .next = &fair_sched_class,
+ .enqueue_task = enqueue_task_rt,
+ .dequeue_task = dequeue_task_rt,
+ .yield_task = yield_task_rt,
+
+ .check_preempt_curr = check_preempt_curr_rt,
+
+ .pick_next_task = pick_next_task_rt,
+ .put_prev_task = put_prev_task_rt,
+
++#ifdef CONFIG_SMP
+ .load_balance = load_balance_rt,
++ .move_one_task = move_one_task_rt,
++#endif
+
++ .set_curr_task = set_curr_task_rt,
+ .task_tick = task_tick_rt,
+ };
+--- linux-2.6.23.orig/kernel/sched_stats.h
++++ linux-2.6.23/kernel/sched_stats.h
+@@ -14,22 +14,22 @@ static int show_schedstat(struct seq_fil
+ seq_printf(seq, "timestamp %lu\n", jiffies);
+ for_each_online_cpu(cpu) {
+ struct rq *rq = cpu_rq(cpu);
+ #ifdef CONFIG_SMP
+ struct sched_domain *sd;
+- int dcnt = 0;
++ int dcount = 0;
+ #endif
+
+ /* runqueue-specific stats */
+ seq_printf(seq,
+- "cpu%d %lu %lu %lu %lu %lu %lu %lu %lu %lu %llu %llu %lu",
++ "cpu%d %u %u %u %u %u %u %u %u %u %llu %llu %lu",
+ cpu, rq->yld_both_empty,
+- rq->yld_act_empty, rq->yld_exp_empty, rq->yld_cnt,
+- rq->sched_switch, rq->sched_cnt, rq->sched_goidle,
+- rq->ttwu_cnt, rq->ttwu_local,
++ rq->yld_act_empty, rq->yld_exp_empty, rq->yld_count,
++ rq->sched_switch, rq->sched_count, rq->sched_goidle,
++ rq->ttwu_count, rq->ttwu_local,
+ rq->rq_sched_info.cpu_time,
+- rq->rq_sched_info.run_delay, rq->rq_sched_info.pcnt);
++ rq->rq_sched_info.run_delay, rq->rq_sched_info.pcount);
+
+ seq_printf(seq, "\n");
+
+ #ifdef CONFIG_SMP
+ /* domain-specific stats */
+@@ -37,29 +37,28 @@ static int show_schedstat(struct seq_fil
+ for_each_domain(cpu, sd) {
+ enum cpu_idle_type itype;
+ char mask_str[NR_CPUS];
+
+ cpumask_scnprintf(mask_str, NR_CPUS, sd->span);
+- seq_printf(seq, "domain%d %s", dcnt++, mask_str);
++ seq_printf(seq, "domain%d %s", dcount++, mask_str);
+ for (itype = CPU_IDLE; itype < CPU_MAX_IDLE_TYPES;
+ itype++) {
+- seq_printf(seq, " %lu %lu %lu %lu %lu %lu %lu "
+- "%lu",
+- sd->lb_cnt[itype],
++ seq_printf(seq, " %u %u %u %u %u %u %u %u",
++ sd->lb_count[itype],
+ sd->lb_balanced[itype],
+ sd->lb_failed[itype],
+ sd->lb_imbalance[itype],
+ sd->lb_gained[itype],
+ sd->lb_hot_gained[itype],
+ sd->lb_nobusyq[itype],
+ sd->lb_nobusyg[itype]);
+ }
+- seq_printf(seq, " %lu %lu %lu %lu %lu %lu %lu %lu %lu"
+- " %lu %lu %lu\n",
+- sd->alb_cnt, sd->alb_failed, sd->alb_pushed,
+- sd->sbe_cnt, sd->sbe_balanced, sd->sbe_pushed,
+- sd->sbf_cnt, sd->sbf_balanced, sd->sbf_pushed,
++ seq_printf(seq,
++ " %u %u %u %u %u %u %u %u %u %u %u %u\n",
++ sd->alb_count, sd->alb_failed, sd->alb_pushed,
++ sd->sbe_count, sd->sbe_balanced, sd->sbe_pushed,
++ sd->sbf_count, sd->sbf_balanced, sd->sbf_pushed,
+ sd->ttwu_wake_remote, sd->ttwu_move_affine,
+ sd->ttwu_move_balance);
+ }
+ preempt_enable();
+ #endif
+@@ -99,11 +98,11 @@ const struct file_operations proc_scheds
+ static inline void
+ rq_sched_info_arrive(struct rq *rq, unsigned long long delta)
+ {
+ if (rq) {
+ rq->rq_sched_info.run_delay += delta;
+- rq->rq_sched_info.pcnt++;
++ rq->rq_sched_info.pcount++;
+ }
+ }
+
+ /*
+ * Expects runqueue lock to be held for atomicity of update
+@@ -155,18 +154,18 @@ static inline void sched_info_dequeued(s
+ * long it was waiting to run. We also note when it began so that we
+ * can keep stats on how long its timeslice is.
+ */
+ static void sched_info_arrive(struct task_struct *t)
+ {
+- unsigned long long now = sched_clock(), delta = 0;
++ unsigned long long now = task_rq(t)->clock, delta = 0;
+
+ if (t->sched_info.last_queued)
+ delta = now - t->sched_info.last_queued;
+ sched_info_dequeued(t);
+ t->sched_info.run_delay += delta;
+ t->sched_info.last_arrival = now;
+- t->sched_info.pcnt++;
++ t->sched_info.pcount++;
+
+ rq_sched_info_arrive(task_rq(t), delta);
+ }
+
+ /*
+@@ -186,20 +185,21 @@ static void sched_info_arrive(struct tas
+ */
+ static inline void sched_info_queued(struct task_struct *t)
+ {
+ if (unlikely(sched_info_on()))
+ if (!t->sched_info.last_queued)
+- t->sched_info.last_queued = sched_clock();
++ t->sched_info.last_queued = task_rq(t)->clock;
+ }
+
+ /*
+ * Called when a process ceases being the active-running process, either
+ * voluntarily or involuntarily. Now we can calculate how long we ran.
+ */
+ static inline void sched_info_depart(struct task_struct *t)
+ {
+- unsigned long long delta = sched_clock() - t->sched_info.last_arrival;
++ unsigned long long delta = task_rq(t)->clock -
++ t->sched_info.last_arrival;
+
+ t->sched_info.cpu_time += delta;
+ rq_sched_info_depart(task_rq(t), delta);
+ }
+
+--- linux-2.6.23.orig/kernel/sysctl.c
++++ linux-2.6.23/kernel/sysctl.c
+@@ -211,35 +211,35 @@ static ctl_table root_table[] = {
+ { .ctl_name = 0 }
+ };
+
+ #ifdef CONFIG_SCHED_DEBUG
+ static unsigned long min_sched_granularity_ns = 100000; /* 100 usecs */
+-static unsigned long max_sched_granularity_ns = 1000000000; /* 1 second */
++static unsigned long max_sched_granularity_ns = NSEC_PER_SEC; /* 1 second */
+ static unsigned long min_wakeup_granularity_ns; /* 0 usecs */
+-static unsigned long max_wakeup_granularity_ns = 1000000000; /* 1 second */
++static unsigned long max_wakeup_granularity_ns = NSEC_PER_SEC; /* 1 second */
+ #endif
+
+-static ctl_table kern_table[] = {
++static struct ctl_table kern_table[] = {
+ #ifdef CONFIG_SCHED_DEBUG
+ {
+ .ctl_name = CTL_UNNUMBERED,
+ .procname = "sched_min_granularity_ns",
+ .data = &sysctl_sched_min_granularity,
+ .maxlen = sizeof(unsigned int),
+ .mode = 0644,
+- .proc_handler = &proc_dointvec_minmax,
++ .proc_handler = &sched_nr_latency_handler,
+ .strategy = &sysctl_intvec,
+ .extra1 = &min_sched_granularity_ns,
+ .extra2 = &max_sched_granularity_ns,
+ },
+ {
+ .ctl_name = CTL_UNNUMBERED,
+ .procname = "sched_latency_ns",
+ .data = &sysctl_sched_latency,
+ .maxlen = sizeof(unsigned int),
+ .mode = 0644,
+- .proc_handler = &proc_dointvec_minmax,
++ .proc_handler = &sched_nr_latency_handler,
+ .strategy = &sysctl_intvec,
+ .extra1 = &min_sched_granularity_ns,
+ .extra2 = &max_sched_granularity_ns,
+ },
+ {
+@@ -264,47 +264,43 @@ static ctl_table kern_table[] = {
+ .extra1 = &min_wakeup_granularity_ns,
+ .extra2 = &max_wakeup_granularity_ns,
+ },
+ {
+ .ctl_name = CTL_UNNUMBERED,
+- .procname = "sched_stat_granularity_ns",
+- .data = &sysctl_sched_stat_granularity,
++ .procname = "sched_child_runs_first",
++ .data = &sysctl_sched_child_runs_first,
+ .maxlen = sizeof(unsigned int),
+ .mode = 0644,
+- .proc_handler = &proc_dointvec_minmax,
+- .strategy = &sysctl_intvec,
+- .extra1 = &min_wakeup_granularity_ns,
+- .extra2 = &max_wakeup_granularity_ns,
++ .proc_handler = &proc_dointvec,
+ },
+ {
+ .ctl_name = CTL_UNNUMBERED,
+- .procname = "sched_runtime_limit_ns",
+- .data = &sysctl_sched_runtime_limit,
++ .procname = "sched_features",
++ .data = &sysctl_sched_features,
+ .maxlen = sizeof(unsigned int),
+ .mode = 0644,
+- .proc_handler = &proc_dointvec_minmax,
+- .strategy = &sysctl_intvec,
+- .extra1 = &min_sched_granularity_ns,
+- .extra2 = &max_sched_granularity_ns,
++ .proc_handler = &proc_dointvec,
+ },
+ {
+ .ctl_name = CTL_UNNUMBERED,
+- .procname = "sched_child_runs_first",
+- .data = &sysctl_sched_child_runs_first,
++ .procname = "sched_migration_cost",
++ .data = &sysctl_sched_migration_cost,
+ .maxlen = sizeof(unsigned int),
+ .mode = 0644,
+ .proc_handler = &proc_dointvec,
+ },
++#if defined(CONFIG_FAIR_GROUP_SCHED) && defined(CONFIG_SMP)
+ {
+ .ctl_name = CTL_UNNUMBERED,
+- .procname = "sched_features",
+- .data = &sysctl_sched_features,
++ .procname = "sched_nr_migrate",
++ .data = &sysctl_sched_nr_migrate,
+ .maxlen = sizeof(unsigned int),
+- .mode = 0644,
++ .mode = 644,
+ .proc_handler = &proc_dointvec,
+ },
+ #endif
++#endif
+ {
+ .ctl_name = CTL_UNNUMBERED,
+ .procname = "sched_compat_yield",
+ .data = &sysctl_sched_compat_yield,
+ .maxlen = sizeof(unsigned int),
+--- linux-2.6.23.orig/kernel/timer.c
++++ linux-2.6.23/kernel/timer.c
+@@ -824,14 +824,17 @@ void update_process_times(int user_tick)
+ {
+ struct task_struct *p = current;
+ int cpu = smp_processor_id();
+
+ /* Note: this timer irq context must be accounted for as well. */
+- if (user_tick)
++ if (user_tick) {
+ account_user_time(p, jiffies_to_cputime(1));
+- else
++ account_user_time_scaled(p, jiffies_to_cputime(1));
++ } else {
+ account_system_time(p, HARDIRQ_OFFSET, jiffies_to_cputime(1));
++ account_system_time_scaled(p, jiffies_to_cputime(1));
++ }
+ run_local_timers();
+ if (rcu_pending(cpu))
+ rcu_check_callbacks(cpu, user_tick);
+ scheduler_tick();
+ run_posix_cpu_timers(p);
+--- linux-2.6.23.orig/kernel/tsacct.c
++++ linux-2.6.23/kernel/tsacct.c
+@@ -60,10 +60,14 @@ void bacct_add_tsk(struct taskstats *sta
+ stats->ac_ppid = pid_alive(tsk) ?
+ rcu_dereference(tsk->real_parent)->tgid : 0;
+ rcu_read_unlock();
+ stats->ac_utime = cputime_to_msecs(tsk->utime) * USEC_PER_MSEC;
+ stats->ac_stime = cputime_to_msecs(tsk->stime) * USEC_PER_MSEC;
++ stats->ac_utimescaled =
++ cputime_to_msecs(tsk->utimescaled) * USEC_PER_MSEC;
++ stats->ac_stimescaled =
++ cputime_to_msecs(tsk->stimescaled) * USEC_PER_MSEC;
+ stats->ac_minflt = tsk->min_flt;
+ stats->ac_majflt = tsk->maj_flt;
+
+ strncpy(stats->ac_comm, tsk->comm, sizeof(stats->ac_comm));
+ }
+--- linux-2.6.23.orig/kernel/user.c
++++ linux-2.6.23/kernel/user.c
+@@ -48,40 +48,242 @@ struct user_struct root_user = {
+ .locked_shm = 0,
+ #ifdef CONFIG_KEYS
+ .uid_keyring = &root_user_keyring,
+ .session_keyring = &root_session_keyring,
+ #endif
++#ifdef CONFIG_FAIR_USER_SCHED
++ .tg = &init_task_group,
++#endif
+ };
+
+ /*
+ * These routines must be called with the uidhash spinlock held!
+ */
+-static inline void uid_hash_insert(struct user_struct *up, struct hlist_head *hashent)
++static inline void uid_hash_insert(struct user_struct *up,
++ struct hlist_head *hashent)
+ {
+ hlist_add_head(&up->uidhash_node, hashent);
+ }
+
+ static inline void uid_hash_remove(struct user_struct *up)
+ {
+ hlist_del_init(&up->uidhash_node);
+ }
+
+-static inline struct user_struct *uid_hash_find(uid_t uid, struct hlist_head *hashent)
++static inline struct user_struct *uid_hash_find(uid_t uid,
++ struct hlist_head *hashent)
+ {
+ struct user_struct *user;
+ struct hlist_node *h;
+
+ hlist_for_each_entry(user, h, hashent, uidhash_node) {
+- if(user->uid == uid) {
++ if (user->uid == uid) {
+ atomic_inc(&user->__count);
+ return user;
+ }
+ }
+
+ return NULL;
+ }
+
++#ifdef CONFIG_FAIR_USER_SCHED
++
++static struct kobject uids_kobject; /* represents /sys/kernel/uids directory */
++static DEFINE_MUTEX(uids_mutex);
++
++static void sched_destroy_user(struct user_struct *up)
++{
++ sched_destroy_group(up->tg);
++}
++
++static int sched_create_user(struct user_struct *up)
++{
++ int rc = 0;
++
++ up->tg = sched_create_group();
++ if (IS_ERR(up->tg))
++ rc = -ENOMEM;
++
++ return rc;
++}
++
++static void sched_switch_user(struct task_struct *p)
++{
++ sched_move_task(p);
++}
++
++static inline void uids_mutex_lock(void)
++{
++ mutex_lock(&uids_mutex);
++}
++
++static inline void uids_mutex_unlock(void)
++{
++ mutex_unlock(&uids_mutex);
++}
++
++/* return cpu shares held by the user */
++ssize_t cpu_shares_show(struct kset *kset, char *buffer)
++{
++ struct user_struct *up = container_of(kset, struct user_struct, kset);
++
++ return sprintf(buffer, "%lu\n", sched_group_shares(up->tg));
++}
++
++/* modify cpu shares held by the user */
++ssize_t cpu_shares_store(struct kset *kset, const char *buffer, size_t size)
++{
++ struct user_struct *up = container_of(kset, struct user_struct, kset);
++ unsigned long shares;
++ int rc;
++
++ sscanf(buffer, "%lu", &shares);
++
++ rc = sched_group_set_shares(up->tg, shares);
++
++ return (rc ? rc : size);
++}
++
++static void user_attr_init(struct subsys_attribute *sa, char *name, int mode)
++{
++ sa->attr.name = name; sa->attr.owner = NULL;
++ sa->attr.mode = mode;
++ sa->show = cpu_shares_show;
++ sa->store = cpu_shares_store;
++}
++
++/* Create "/sys/kernel/uids/<uid>" directory and
++ * "/sys/kernel/uids/<uid>/cpu_share" file for this user.
++ */
++static int user_kobject_create(struct user_struct *up)
++{
++ struct kset *kset = &up->kset;
++ struct kobject *kobj = &kset->kobj;
++ int error;
++
++ memset(kset, 0, sizeof(struct kset));
++ kobj->parent = &uids_kobject; /* create under /sys/kernel/uids dir */
++ kobject_set_name(kobj, "%d", up->uid);
++ kset_init(kset);
++ user_attr_init(&up->user_attr, "cpu_share", 0644);
++
++ error = kobject_add(kobj);
++ if (error)
++ goto done;
++
++ error = sysfs_create_file(kobj, &up->user_attr.attr);
++ if (error)
++ kobject_del(kobj);
++
++ kobject_uevent(kobj, KOBJ_ADD);
++
++done:
++ return error;
++}
++
++/* create these in sysfs filesystem:
++ * "/sys/kernel/uids" directory
++ * "/sys/kernel/uids/0" directory (for root user)
++ * "/sys/kernel/uids/0/cpu_share" file (for root user)
++ */
++int __init uids_kobject_init(void)
++{
++ int error;
++
++ /* create under /sys/kernel dir */
++ uids_kobject.parent = &kernel_subsys.kobj;
++ uids_kobject.kset = &kernel_subsys;
++ kobject_set_name(&uids_kobject, "uids");
++ kobject_init(&uids_kobject);
++
++ error = kobject_add(&uids_kobject);
++ if (!error)
++ error = user_kobject_create(&root_user);
++
++ return error;
++}
++
++/* work function to remove sysfs directory for a user and free up
++ * corresponding structures.
++ */
++static void remove_user_sysfs_dir(struct work_struct *w)
++{
++ struct user_struct *up = container_of(w, struct user_struct, work);
++ struct kobject *kobj = &up->kset.kobj;
++ unsigned long flags;
++ int remove_user = 0;
++
++ /* Make uid_hash_remove() + sysfs_remove_file() + kobject_del()
++ * atomic.
++ */
++ uids_mutex_lock();
++
++ local_irq_save(flags);
++
++ if (atomic_dec_and_lock(&up->__count, &uidhash_lock)) {
++ uid_hash_remove(up);
++ remove_user = 1;
++ spin_unlock_irqrestore(&uidhash_lock, flags);
++ } else {
++ local_irq_restore(flags);
++ }
++
++ if (!remove_user)
++ goto done;
++
++ sysfs_remove_file(kobj, &up->user_attr.attr);
++ kobject_uevent(kobj, KOBJ_REMOVE);
++ kobject_del(kobj);
++
++ sched_destroy_user(up);
++ key_put(up->uid_keyring);
++ key_put(up->session_keyring);
++ kmem_cache_free(uid_cachep, up);
++
++done:
++ uids_mutex_unlock();
++}
++
++/* IRQs are disabled and uidhash_lock is held upon function entry.
++ * IRQ state (as stored in flags) is restored and uidhash_lock released
++ * upon function exit.
++ */
++static inline void free_user(struct user_struct *up, unsigned long flags)
++{
++ /* restore back the count */
++ atomic_inc(&up->__count);
++ spin_unlock_irqrestore(&uidhash_lock, flags);
++
++ INIT_WORK(&up->work, remove_user_sysfs_dir);
++ schedule_work(&up->work);
++}
++
++#else /* CONFIG_FAIR_USER_SCHED */
++
++static void sched_destroy_user(struct user_struct *up) { }
++static int sched_create_user(struct user_struct *up) { return 0; }
++static void sched_switch_user(struct task_struct *p) { }
++static inline int user_kobject_create(struct user_struct *up) { return 0; }
++static inline void uids_mutex_lock(void) { }
++static inline void uids_mutex_unlock(void) { }
++
++/* IRQs are disabled and uidhash_lock is held upon function entry.
++ * IRQ state (as stored in flags) is restored and uidhash_lock released
++ * upon function exit.
++ */
++static inline void free_user(struct user_struct *up, unsigned long flags)
++{
++ uid_hash_remove(up);
++ spin_unlock_irqrestore(&uidhash_lock, flags);
++ sched_destroy_user(up);
++ key_put(up->uid_keyring);
++ key_put(up->session_keyring);
++ kmem_cache_free(uid_cachep, up);
++}
++
++#endif /* CONFIG_FAIR_USER_SCHED */
++
+ /*
+ * Locate the user_struct for the passed UID. If found, take a ref on it. The
+ * caller must undo that ref with free_uid().
+ *
+ * If the user_struct could not be found, return NULL.
+@@ -104,26 +306,26 @@ void free_uid(struct user_struct *up)
+
+ if (!up)
+ return;
+
+ local_irq_save(flags);
+- if (atomic_dec_and_lock(&up->__count, &uidhash_lock)) {
+- uid_hash_remove(up);
+- spin_unlock_irqrestore(&uidhash_lock, flags);
+- key_put(up->uid_keyring);
+- key_put(up->session_keyring);
+- kmem_cache_free(uid_cachep, up);
+- } else {
++ if (atomic_dec_and_lock(&up->__count, &uidhash_lock))
++ free_user(up, flags);
++ else
+ local_irq_restore(flags);
+- }
+ }
+
+ struct user_struct * alloc_uid(struct user_namespace *ns, uid_t uid)
+ {
+ struct hlist_head *hashent = uidhashentry(ns, uid);
+ struct user_struct *up;
+
++ /* Make uid_hash_find() + user_kobject_create() + uid_hash_insert()
++ * atomic.
++ */
++ uids_mutex_lock();
++
+ spin_lock_irq(&uidhash_lock);
+ up = uid_hash_find(uid, hashent);
+ spin_unlock_irq(&uidhash_lock);
+
+ if (!up) {
+@@ -148,27 +350,51 @@ struct user_struct * alloc_uid(struct us
+ if (alloc_uid_keyring(new, current) < 0) {
+ kmem_cache_free(uid_cachep, new);
+ return NULL;
+ }
+
++ if (sched_create_user(new) < 0) {
++ key_put(new->uid_keyring);
++ key_put(new->session_keyring);
++ kmem_cache_free(uid_cachep, new);
++ return NULL;
++ }
++
++ if (user_kobject_create(new)) {
++ sched_destroy_user(new);
++ key_put(new->uid_keyring);
++ key_put(new->session_keyring);
++ kmem_cache_free(uid_cachep, new);
++ uids_mutex_unlock();
++ return NULL;
++ }
++
+ /*
+ * Before adding this, check whether we raced
+ * on adding the same user already..
+ */
+ spin_lock_irq(&uidhash_lock);
+ up = uid_hash_find(uid, hashent);
+ if (up) {
++ /* This case is not possible when CONFIG_FAIR_USER_SCHED
++ * is defined, since we serialize alloc_uid() using
++ * uids_mutex. Hence no need to call
++ * sched_destroy_user() or remove_user_sysfs_dir().
++ */
+ key_put(new->uid_keyring);
+ key_put(new->session_keyring);
+ kmem_cache_free(uid_cachep, new);
+ } else {
+ uid_hash_insert(new, hashent);
+ up = new;
+ }
+ spin_unlock_irq(&uidhash_lock);
+
+ }
++
++ uids_mutex_unlock();
++
+ return up;
+ }
+
+ void switch_uid(struct user_struct *new_user)
+ {
+@@ -182,10 +408,11 @@ void switch_uid(struct user_struct *new_
+ old_user = current->user;
+ atomic_inc(&new_user->processes);
+ atomic_dec(&old_user->processes);
+ switch_uid_keyring(new_user);
+ current->user = new_user;
++ sched_switch_user(current);
+
+ /*
+ * We need to synchronize with __sigqueue_alloc()
+ * doing a get_uid(p->user).. If that saw the old
+ * user value, we need to wait until it has exited
+--- linux-2.6.23.orig/mm/memory_hotplug.c
++++ linux-2.6.23/mm/memory_hotplug.c
+@@ -215,10 +215,14 @@ int online_pages(unsigned long pfn, unsi
+ }
+ zone->present_pages += onlined_pages;
+ zone->zone_pgdat->node_present_pages += onlined_pages;
+
+ setup_per_zone_pages_min();
++ if (onlined_pages) {
++ kswapd_run(zone_to_nid(zone));
++ node_set_state(zone_to_nid(zone), N_HIGH_MEMORY);
++ }
+
+ if (need_zonelists_rebuild)
+ build_all_zonelists();
+ vm_total_pages = nr_free_pagecache_pages();
+ writeback_set_ratelimit();
+@@ -269,13 +273,10 @@ int add_memory(int nid, u64 start, u64 s
+ if (!node_online(nid)) {
+ pgdat = hotadd_new_pgdat(nid, start);
+ if (!pgdat)
+ return -ENOMEM;
+ new_pgdat = 1;
+- ret = kswapd_run(nid);
+- if (ret)
+- goto error;
+ }
+
+ /* call arch's memory hotadd */
+ ret = arch_add_memory(nid, start, size);
+
+--- linux-2.6.23.orig/mm/page_alloc.c
++++ linux-2.6.23/mm/page_alloc.c
+@@ -45,17 +45,25 @@
+ #include <asm/tlbflush.h>
+ #include <asm/div64.h>
+ #include "internal.h"
+
+ /*
+- * MCD - HACK: Find somewhere to initialize this EARLY, or make this
+- * initializer cleaner
++ * Array of node states.
+ */
+-nodemask_t node_online_map __read_mostly = { { [0] = 1UL } };
+-EXPORT_SYMBOL(node_online_map);
+-nodemask_t node_possible_map __read_mostly = NODE_MASK_ALL;
+-EXPORT_SYMBOL(node_possible_map);
++nodemask_t node_states[NR_NODE_STATES] __read_mostly = {
++ [N_POSSIBLE] = NODE_MASK_ALL,
++ [N_ONLINE] = { { [0] = 1UL } },
++#ifndef CONFIG_NUMA
++ [N_NORMAL_MEMORY] = { { [0] = 1UL } },
++#ifdef CONFIG_HIGHMEM
++ [N_HIGH_MEMORY] = { { [0] = 1UL } },
++#endif
++ [N_CPU] = { { [0] = 1UL } },
++#endif /* NUMA */
++};
++EXPORT_SYMBOL(node_states);
++
+ unsigned long totalram_pages __read_mostly;
+ unsigned long totalreserve_pages __read_mostly;
+ long nr_swap_pages;
+ int percpu_pagelist_fraction;
+
+@@ -2070,18 +2078,39 @@ static void build_zonelist_cache(pg_data
+ pgdat->node_zonelists[i].zlcache_ptr = NULL;
+ }
+
+ #endif /* CONFIG_NUMA */
+
++/* Any regular memory on that node ? */
++static void check_for_regular_memory(pg_data_t *pgdat)
++{
++#ifdef CONFIG_HIGHMEM
++ enum zone_type zone_type;
++
++ for (zone_type = 0; zone_type <= ZONE_NORMAL; zone_type++) {
++ struct zone *zone = &pgdat->node_zones[zone_type];
++ if (zone->present_pages)
++ node_set_state(zone_to_nid(zone), N_NORMAL_MEMORY);
++ }
++#endif
++}
++
+ /* return values int ....just for stop_machine_run() */
+ static int __build_all_zonelists(void *dummy)
+ {
+ int nid;
+
+ for_each_online_node(nid) {
+- build_zonelists(NODE_DATA(nid));
+- build_zonelist_cache(NODE_DATA(nid));
++ pg_data_t *pgdat = NODE_DATA(nid);
++
++ build_zonelists(pgdat);
++ build_zonelist_cache(pgdat);
++
++ /* Any memory on that node */
++ if (pgdat->node_present_pages)
++ node_set_state(nid, N_HIGH_MEMORY);
++ check_for_regular_memory(pgdat);
+ }
+ return 0;
+ }
+
+ void build_all_zonelists(void)
+@@ -2322,18 +2351,21 @@ static struct per_cpu_pageset boot_pages
+ * per cpu pageset array in struct zone.
+ */
+ static int __cpuinit process_zones(int cpu)
+ {
+ struct zone *zone, *dzone;
++ int node = cpu_to_node(cpu);
++
++ node_set_state(node, N_CPU); /* this node has a cpu */
+
+ for_each_zone(zone) {
+
+ if (!populated_zone(zone))
+ continue;
+
+ zone_pcp(zone, cpu) = kmalloc_node(sizeof(struct per_cpu_pageset),
+- GFP_KERNEL, cpu_to_node(cpu));
++ GFP_KERNEL, node);
+ if (!zone_pcp(zone, cpu))
+ goto bad;
+
+ setup_pageset(zone_pcp(zone, cpu), zone_batchsize(zone));
+
+--- linux-2.6.23.orig/mm/vmscan.c
++++ linux-2.6.23/mm/vmscan.c
+@@ -1845,11 +1845,10 @@ static int __zone_reclaim(struct zone *z
+ return nr_reclaimed >= nr_pages;
+ }
+
+ int zone_reclaim(struct zone *zone, gfp_t gfp_mask, unsigned int order)
+ {
+- cpumask_t mask;
+ int node_id;
+
+ /*
+ * Zone reclaim reclaims unmapped file backed pages and
+ * slab pages if we are over the defined limits.
+@@ -1882,11 +1881,10 @@ int zone_reclaim(struct zone *zone, gfp_
+ * have associated processors. This will favor the local processor
+ * over remote processors and spread off node memory allocations
+ * as wide as possible.
+ */
+ node_id = zone_to_nid(zone);
+- mask = node_to_cpumask(node_id);
+- if (!cpus_empty(mask) && node_id != numa_node_id())
++ if (node_state(node_id, N_CPU) && node_id != numa_node_id())
+ return 0;
+ return __zone_reclaim(zone, gfp_mask, order);
+ }
+ #endif
+--- linux-2.6.23.orig/net/unix/af_unix.c
++++ linux-2.6.23/net/unix/af_unix.c
+@@ -331,11 +331,11 @@ static inline int unix_writable(struct s
+ static void unix_write_space(struct sock *sk)
+ {
+ read_lock(&sk->sk_callback_lock);
+ if (unix_writable(sk)) {
+ if (sk->sk_sleep && waitqueue_active(sk->sk_sleep))
+- wake_up_interruptible(sk->sk_sleep);
++ wake_up_interruptible_sync(sk->sk_sleep);
+ sk_wake_async(sk, 2, POLL_OUT);
+ }
+ read_unlock(&sk->sk_callback_lock);
+ }
+
+@@ -1640,11 +1640,11 @@ static int unix_dgram_recvmsg(struct kio
+ err = 0;
+ unix_state_unlock(sk);
+ goto out_unlock;
+ }
+
+- wake_up_interruptible(&u->peer_wait);
++ wake_up_interruptible_sync(&u->peer_wait);
+
+ if (msg->msg_name)
+ unix_copy_addr(msg, skb->sk);
+
+ if (size > skb->len)
diff --git a/recipes/linux/linux-2.6.24/time.h.patch b/recipes/linux/linux-2.6.23/time.h.patch
index fd22f3a01d..fd22f3a01d 100644
--- a/recipes/linux/linux-2.6.24/time.h.patch
+++ b/recipes/linux/linux-2.6.23/time.h.patch
diff --git a/recipes/linux/linux-2.6.24/hipox/defconfig b/recipes/linux/linux-2.6.24/hipox/defconfig
index 94a50dcd78..8778456c56 100644
--- a/recipes/linux/linux-2.6.24/hipox/defconfig
+++ b/recipes/linux/linux-2.6.24/hipox/defconfig
@@ -1,7 +1,7 @@
#
# Automatically generated make config: don't edit
# Linux kernel version: 2.6.24.4
-# Tue Dec 1 12:22:00 2009
+# Mon Dec 7 15:30:43 2009
#
CONFIG_ARM=y
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
@@ -1173,9 +1173,9 @@ CONFIG_ZISOFS=y
#
# DOS/FAT/NT Filesystems
#
-CONFIG_FAT_FS=m
+CONFIG_FAT_FS=y
CONFIG_MSDOS_FS=m
-CONFIG_VFAT_FS=m
+CONFIG_VFAT_FS=y
CONFIG_FAT_DEFAULT_CODEPAGE=437
CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
CONFIG_NTFS_FS=m
@@ -1273,10 +1273,10 @@ CONFIG_EFI_PARTITION=y
# CONFIG_SYSV68_PARTITION is not set
CONFIG_NLS=y
CONFIG_NLS_DEFAULT="iso8859-1"
-CONFIG_NLS_CODEPAGE_437=m
+CONFIG_NLS_CODEPAGE_437=y
# CONFIG_NLS_CODEPAGE_737 is not set
# CONFIG_NLS_CODEPAGE_775 is not set
-CONFIG_NLS_CODEPAGE_850=m
+CONFIG_NLS_CODEPAGE_850=y
# CONFIG_NLS_CODEPAGE_852 is not set
# CONFIG_NLS_CODEPAGE_855 is not set
# CONFIG_NLS_CODEPAGE_857 is not set
@@ -1297,7 +1297,7 @@ CONFIG_NLS_CODEPAGE_850=m
# CONFIG_NLS_CODEPAGE_1250 is not set
# CONFIG_NLS_CODEPAGE_1251 is not set
# CONFIG_NLS_ASCII is not set
-CONFIG_NLS_ISO8859_1=m
+CONFIG_NLS_ISO8859_1=y
# CONFIG_NLS_ISO8859_2 is not set
# CONFIG_NLS_ISO8859_3 is not set
# CONFIG_NLS_ISO8859_4 is not set
@@ -1307,7 +1307,7 @@ CONFIG_NLS_ISO8859_1=m
# CONFIG_NLS_ISO8859_9 is not set
# CONFIG_NLS_ISO8859_13 is not set
# CONFIG_NLS_ISO8859_14 is not set
-CONFIG_NLS_ISO8859_15=m
+CONFIG_NLS_ISO8859_15=y
# CONFIG_NLS_KOI8_R is not set
# CONFIG_NLS_KOI8_U is not set
CONFIG_NLS_UTF8=y
diff --git a/recipes/linux/linux-2.6.25.20/ronetix-pm9261/defconfig b/recipes/linux/linux-2.6.25/ronetix-pm9261/defconfig
index 77cb9fafe5..77cb9fafe5 100644
--- a/recipes/linux/linux-2.6.25.20/ronetix-pm9261/defconfig
+++ b/recipes/linux/linux-2.6.25/ronetix-pm9261/defconfig
diff --git a/recipes/linux/linux-2.6.25.20/ronetix-pm9263/defconfig b/recipes/linux/linux-2.6.25/ronetix-pm9263/defconfig
index c7171cd4ae..c7171cd4ae 100644
--- a/recipes/linux/linux-2.6.25.20/ronetix-pm9263/defconfig
+++ b/recipes/linux/linux-2.6.25/ronetix-pm9263/defconfig
diff --git a/recipes/linux/linux-2.6.29/micro2440/0005-920T-Temp-fix-for-the-40-relocation-binutils-pro.patch b/recipes/linux/linux-2.6.29/micro2440/0005-920T-Temp-fix-for-the-40-relocation-binutils-pro.patch
deleted file mode 100644
index 6b8aaf4445..0000000000
--- a/recipes/linux/linux-2.6.29/micro2440/0005-920T-Temp-fix-for-the-40-relocation-binutils-pro.patch
+++ /dev/null
@@ -1,49 +0,0 @@
-From a4cba996cb77da4afc26c35402a70c3f008afe96 Mon Sep 17 00:00:00 2001
-From: Michel Pollet <buserror@gmail.com>
-Date: Sat, 14 Mar 2009 10:34:32 +0000
-Subject: [PATCH] 920T: Temp(?) fix for the 40 relocation binutils problem
-
-This prevents the modules failing to load when made
-with modern toolchains. There is no way to prevent binutils
-to generate these relocations, and on the 920t they are
-in fact not needed. So this patch just skip them.
-
-Signed-off-by: Michel Pollet <buserror@gmail.com>
----
- arch/arm/include/asm/elf.h | 1 +
- arch/arm/kernel/module.c | 7 +++++++
- 2 files changed, 8 insertions(+), 0 deletions(-)
-
-diff --git a/arch/arm/include/asm/elf.h b/arch/arm/include/asm/elf.h
-index a58378c..ce3b36e 100644
---- a/arch/arm/include/asm/elf.h
-+++ b/arch/arm/include/asm/elf.h
-@@ -50,6 +50,7 @@ typedef struct user_fp elf_fpregset_t;
- #define R_ARM_ABS32 2
- #define R_ARM_CALL 28
- #define R_ARM_JUMP24 29
-+#define R_ARM_V4BX 40
-
- /*
- * These are used to set parameters in the core dumps.
-diff --git a/arch/arm/kernel/module.c b/arch/arm/kernel/module.c
-index dab48f2..fa03392 100644
---- a/arch/arm/kernel/module.c
-+++ b/arch/arm/kernel/module.c
-@@ -132,6 +132,13 @@ apply_relocate(Elf32_Shdr *sechdrs, const char *strtab, unsigned int symindex,
- *(u32 *)loc |= offset & 0x00ffffff;
- break;
-
-+#ifdef CONFIG_CPU_ARM920T
-+ /* modern toolchain generate V4BX for the modules, and there is no
-+ * way to skip them being generated in the .ko, so in our case, we just
-+ * can ignore them */
-+ case R_ARM_V4BX: /* Ignore these sections */
-+ break;
-+#endif
- default:
- printk(KERN_ERR "%s: unknown relocation: %u\n",
- module->name, ELF32_R_TYPE(rel->r_info));
---
-1.5.6.3
-
diff --git a/recipes/linux/linux-2.6.29/micro2440/0012-GRO-Disable-GRO-on-legacy-netif_rx-path.patch b/recipes/linux/linux-2.6.29/micro2440/0012-GRO-Disable-GRO-on-legacy-netif_rx-path.patch
deleted file mode 100644
index bfad6d80eb..0000000000
--- a/recipes/linux/linux-2.6.29/micro2440/0012-GRO-Disable-GRO-on-legacy-netif_rx-path.patch
+++ /dev/null
@@ -1,54 +0,0 @@
-From 11c0b33d2a046a37bcd96528faa0e93359ef4a4b Mon Sep 17 00:00:00 2001
-From: Herbert Xu <herbert@gondor.apana.org.au>
-Date: Thu, 26 Mar 2009 00:59:10 -0700
-Subject: [PATCH] GRO: Disable GRO on legacy netif_rx path
-
-When I fixed the GRO crash in the legacy receive path I used
-napi_complete to replace __napi_complete. Unfortunately they're
-not the same when NETPOLL is enabled, which may result in us
-not calling __napi_complete at all.
-
-What's more, we really do need to keep the __napi_complete call
-within the IRQ-off section since in theory an IRQ can occur in
-between and fill up the backlog to the maximum, causing us to
-lock up.
-
-Since we can't seem to find a fix that works properly right now,
-this patch reverts all the GRO support from the netif_rx path.
-
-Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
-Signed-off-by: David S. Miller <davem@davemloft.net>
-Signed-off-by: Michel Pollet <buserror@gmail.com>
----
- net/core/dev.c | 9 +++------
- 1 files changed, 3 insertions(+), 6 deletions(-)
-
-diff --git a/net/core/dev.c b/net/core/dev.c
-index e3fe5c7..e438f54 100644
---- a/net/core/dev.c
-+++ b/net/core/dev.c
-@@ -2588,18 +2588,15 @@ static int process_backlog(struct napi_struct *napi, int quota)
- local_irq_disable();
- skb = __skb_dequeue(&queue->input_pkt_queue);
- if (!skb) {
-+ __napi_complete(napi);
- local_irq_enable();
-- napi_complete(napi);
-- goto out;
-+ break;
- }
- local_irq_enable();
-
-- napi_gro_receive(napi, skb);
-+ netif_receive_skb(skb);
- } while (++work < quota && jiffies == start_time);
-
-- napi_gro_flush(napi);
--
--out:
- return work;
- }
-
---
-1.5.6.3
-
diff --git a/recipes/linux/linux-davinci_git.bb b/recipes/linux/linux-davinci_git.bb
index e6f4b9f79a..572d4400de 100644
--- a/recipes/linux/linux-davinci_git.bb
+++ b/recipes/linux/linux-davinci_git.bb
@@ -8,8 +8,7 @@ COMPATIBLE_MACHINE = "(dm355-evm|dm365-evm|dm6446-evm|dm6467-evm|dm6467t-evm|da8
DEFAULT_PREFERENCE = "1"
BRANCH = "master"
-
-# DAVINCI
+SRC_URI = "file://defconfig "
# dm355-evm/dm365-evm/dm6446-evm/dm6467-evm/dm6467t-evm Davinci PSP.03.01.00.28 (Phase 3 Build r28)
SRCREV_dm355-evm = "7b2683fd0168df1576fcea947ef9f63e905de807"
@@ -26,38 +25,34 @@ PV_dm6446-evm = "2.6.31+2.6.32-rc2-${PR}+gitr${SRCPV}"
PV_dm6467-evm = "2.6.31+2.6.32-rc2-${PR}+gitr${SRCPV}"
PV_dm6467t-evm = "2.6.31+2.6.32-rc2-${PR}+gitr${SRCPV}"
-SRC_URI_dm355-evm = "git://arago-project.org/git/projects/linux-davinci.git;protocol=git \
- file://defconfig"
-SRC_URI_dm365-evm = "git://arago-project.org/git/projects/linux-davinci.git;protocol=git \
- file://defconfig"
-SRC_URI_dm6446-evm = "git://arago-project.org/git/projects/linux-davinci.git;protocol=git \
- file://defconfig"
-SRC_URI_dm6467-evm = "git://arago-project.org/git/projects/linux-davinci.git;protocol=git \
- file://defconfig"
-SRC_URI_dm6467t-evm = "git://arago-project.org/git/projects/linux-davinci.git;protocol=git \
- file://defconfig"
+BRANCH_dm355-evm = "r28"
+BRANCH_dm365-evm = "r28"
+BRANCH_dm6446-evm = "r28"
+BRANCH_dm6467-evm = "r28"
+BRANCH_dm6467t-evm = "r28"
+
+SRC_URI_append_dm355-evm = "git://arago-project.org/git/projects/linux-davinci.git;protocol=git;branch=${BRANCH}"
+SRC_URI_append_dm365-evm = "git://arago-project.org/git/projects/linux-davinci.git;protocol=git;branch=${BRANCH}"
+SRC_URI_append_dm6446-evm = "git://arago-project.org/git/projects/linux-davinci.git;protocol=git;branch=${BRANCH}"
+SRC_URI_append_dm6467-evm = "git://arago-project.org/git/projects/linux-davinci.git;protocol=git;branch=${BRANCH}"
+SRC_URI_append_dm6467t-evm = "git://arago-project.org/git/projects/linux-davinci.git;protocol=git;branch=${BRANCH}"
# OMAPL
# da830-omapl137-evm/da850-omapl138-evm/hawkboard OMAPL PSP.3.20.00.07 (Beta)
-SRCREV_da830-omapl137-evm = "b60234a5b0ee985912ecb59d3e689c1ed4baa46c"
-SRCREV_da850-omapl138-evm = "b60234a5b0ee985912ecb59d3e689c1ed4baa46c"
-SRCREV_hawkboard = "b60234a5b0ee985912ecb59d3e689c1ed4baa46c"
+SRCREV_da830-omapl137-evm = "b306b47248ef6b4e5927a6baa2849ff434c12ddb"
+SRCREV_da850-omapl138-evm = "b306b47248ef6b4e5927a6baa2849ff434c12ddb"
+SRCREV_hawkboard = "b306b47248ef6b4e5927a6baa2849ff434c12ddb"
# The main PR is now using MACHINE_KERNEL_PR, for davinci see conf/machine/include/davinci.inc
PV_da830-omapl137-evm = "2.6.31+2.6.32-rc6-${PR}+gitr${SRCPV}"
PV_da850-omapl138-evm = "2.6.31+2.6.32-rc6-${PR}+gitr${SRCPV}"
PV_hawkboard = "2.6.31+2.6.32-rc6-${PR}+gitr${SRCPV}"
-SRC_URI_da830-omapl137-evm = "git://arago-project.org/git/people/sekhar/linux-omapl1.git;protocol=git;branch=${BRANCH} \
- file://defconfig"
-
-SRC_URI_da850-omapl138-evm = "git://arago-project.org/git/people/sekhar/linux-omapl1.git;protocol=git;branch=${BRANCH} \
- file://defconfig"
-
-SRC_URI_hawkboard = "git://arago-project.org/git/people/sekhar/linux-omapl1.git;protocol=git;branch=${BRANCH} \
- file://patch_hawk.diff;patch=1 \
- file://defconfig"
+SRC_URI_append_da830-omapl137-evm = "git://arago-project.org/git/people/sekhar/linux-omapl1.git;protocol=git;branch=${BRANCH}"
+SRC_URI_append_da850-omapl138-evm = "git://arago-project.org/git/people/sekhar/linux-omapl1.git;protocol=git;branch=${BRANCH}"
+SRC_URI_append_hawkboard = "git://arago-project.org/git/people/sekhar/linux-omapl1.git;protocol=git;branch=${BRANCH} \
+ file://patch_hawk.diff;patch=1"
S = "${WORKDIR}/git"
diff --git a/recipes/linux/linux-h1940_2.6.14-h1940.bb b/recipes/linux/linux-h1940_2.6.14-h1940.bb
index 5a657eb0b5..0669600a98 100644
--- a/recipes/linux/linux-h1940_2.6.14-h1940.bb
+++ b/recipes/linux/linux-h1940_2.6.14-h1940.bb
@@ -6,8 +6,8 @@ COMPATIBLE_HOST = "arm.*-linux"
COMPATIBLE_MACHINE = "h1940"
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.14.tar.bz2 \
- http://rtpnet.nerim.net/ipaq/patches/2.6.14-3/v2.6.14-gitcurrent.patch;patch=1 \
- http://rtpnet.nerim.net/ipaq/patches/2.6.14-3/full.patch;patch=1 \
+ http://rtp-net.org/ipaq/patches/2.6.14-3/v2.6.14-gitcurrent.patch;patch=1 \
+ http://rtp-net.org/ipaq/patches/2.6.14-3/full.patch;patch=1 \
file://defconfig"
S = "${WORKDIR}/linux-2.6.14"
diff --git a/recipes/linux/linux-handhelds-2.6_cvs.bb b/recipes/linux/linux-handhelds-2.6_cvs.bb
index 89cb68548f..93e884e994 100644
--- a/recipes/linux/linux-handhelds-2.6_cvs.bb
+++ b/recipes/linux/linux-handhelds-2.6_cvs.bb
@@ -2,7 +2,7 @@ SECTION = "kernel"
DESCRIPTION = "handhelds.org Linux kernel 2.6 for PocketPCs and other consumer handheld devices."
LICENSE = "GPL"
PV = "${K_MAJOR}.${K_MINOR}.${K_MICRO}-hh${HHV}+cvs${SRCDATE}"
-PR = "r0"
+PR = "r1"
DEFAULT_PREFERENCE = "-1"
@@ -15,7 +15,11 @@ K_MINOR = "6"
K_MICRO = "21"
HHV = "20"
-SRC_URI = "${HANDHELDS_CVS};module=linux/kernel26 \
+SRC_URI = "${HANDHELDS_CVS};module=linux/kernel26 \
+ file://linux-2.6.git-9d20fdd58e74d4d26dc5216efaaa0f800c23dd3a.patch;patch=1 \
+ http://www.rpsys.net/openzaurus/patches/archive/export_atags-r0a.patch;patch=1 \
+ file://gcc4x-limits.patch;patch=1 \
+ file://0001-time-prevent-the-loop-in-timespec_add_ns-from-bei.patch;patch=1 \
file://defconfig"
require linux-handhelds-2.6.inc
diff --git a/recipes/linux/linux-omap-2.6.32/beagleboard/defconfig b/recipes/linux/linux-omap-2.6.32/beagleboard/defconfig
index ba019559d3..29082720f6 100644
--- a/recipes/linux/linux-omap-2.6.32/beagleboard/defconfig
+++ b/recipes/linux/linux-omap-2.6.32/beagleboard/defconfig
@@ -1,7 +1,7 @@
#
# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.32-rc8
-# Thu Dec 3 15:15:52 2009
+# Linux kernel version: 2.6.32
+# Thu Dec 10 10:50:29 2009
#
CONFIG_ARM=y
CONFIG_SYS_SUPPORTS_APM_EMULATION=y
@@ -51,6 +51,7 @@ CONFIG_TASK_IO_ACCOUNTING=y
#
CONFIG_TREE_RCU=y
# CONFIG_TREE_PREEMPT_RCU is not set
+# CONFIG_TINY_RCU is not set
# CONFIG_RCU_TRACE is not set
CONFIG_RCU_FANOUT=32
# CONFIG_RCU_FANOUT_EXACT is not set
@@ -116,6 +117,7 @@ CONFIG_HAVE_CLK=y
#
# CONFIG_GCOV_KERNEL is not set
CONFIG_SLOW_WORK=y
+# CONFIG_SLOW_WORK_DEBUG is not set
CONFIG_HAVE_GENERIC_DMA_COHERENT=y
CONFIG_SLABINFO=y
CONFIG_RT_MUTEXES=y
@@ -143,6 +145,35 @@ CONFIG_IOSCHED_CFQ=y
CONFIG_DEFAULT_CFQ=y
# CONFIG_DEFAULT_NOOP is not set
CONFIG_DEFAULT_IOSCHED="cfq"
+# CONFIG_INLINE_SPIN_TRYLOCK is not set
+# CONFIG_INLINE_SPIN_TRYLOCK_BH is not set
+# CONFIG_INLINE_SPIN_LOCK is not set
+# CONFIG_INLINE_SPIN_LOCK_BH is not set
+# CONFIG_INLINE_SPIN_LOCK_IRQ is not set
+# CONFIG_INLINE_SPIN_LOCK_IRQSAVE is not set
+# CONFIG_INLINE_SPIN_UNLOCK is not set
+# CONFIG_INLINE_SPIN_UNLOCK_BH is not set
+# CONFIG_INLINE_SPIN_UNLOCK_IRQ is not set
+# CONFIG_INLINE_SPIN_UNLOCK_IRQRESTORE is not set
+# CONFIG_INLINE_READ_TRYLOCK is not set
+# CONFIG_INLINE_READ_LOCK is not set
+# CONFIG_INLINE_READ_LOCK_BH is not set
+# CONFIG_INLINE_READ_LOCK_IRQ is not set
+# CONFIG_INLINE_READ_LOCK_IRQSAVE is not set
+# CONFIG_INLINE_READ_UNLOCK is not set
+# CONFIG_INLINE_READ_UNLOCK_BH is not set
+# CONFIG_INLINE_READ_UNLOCK_IRQ is not set
+# CONFIG_INLINE_READ_UNLOCK_IRQRESTORE is not set
+# CONFIG_INLINE_WRITE_TRYLOCK is not set
+# CONFIG_INLINE_WRITE_LOCK is not set
+# CONFIG_INLINE_WRITE_LOCK_BH is not set
+# CONFIG_INLINE_WRITE_LOCK_IRQ is not set
+# CONFIG_INLINE_WRITE_LOCK_IRQSAVE is not set
+# CONFIG_INLINE_WRITE_UNLOCK is not set
+# CONFIG_INLINE_WRITE_UNLOCK_BH is not set
+# CONFIG_INLINE_WRITE_UNLOCK_IRQ is not set
+# CONFIG_INLINE_WRITE_UNLOCK_IRQRESTORE is not set
+# CONFIG_MUTEX_SPIN_ON_OWNER is not set
CONFIG_FREEZER=y
#
@@ -171,6 +202,7 @@ CONFIG_MMU=y
# CONFIG_ARCH_IXP2000 is not set
# CONFIG_ARCH_IXP4XX is not set
# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_DOVE is not set
# CONFIG_ARCH_KIRKWOOD is not set
# CONFIG_ARCH_LOKI is not set
# CONFIG_ARCH_MV78XX0 is not set
@@ -193,6 +225,7 @@ CONFIG_MMU=y
# CONFIG_ARCH_DAVINCI is not set
CONFIG_ARCH_OMAP=y
# CONFIG_ARCH_BCMRING is not set
+# CONFIG_ARCH_U8500 is not set
#
# TI OMAP Implementations
@@ -224,6 +257,7 @@ CONFIG_OMAP_LL_DEBUG_UART3=y
CONFIG_OMAP_PM_NOOP=y
CONFIG_ARCH_OMAP34XX=y
CONFIG_ARCH_OMAP3430=y
+CONFIG_OMAP_PACKAGE_CBB=y
#
# OMAP Board Type
@@ -234,6 +268,7 @@ CONFIG_MACH_OVERO=y
CONFIG_MACH_OMAP3EVM=y
# CONFIG_MACH_OMAP3517EVM is not set
CONFIG_MACH_OMAP3_PANDORA=y
+# CONFIG_MACH_OMAP3_TOUCHBOOK is not set
# CONFIG_MACH_OMAP_3430SDP is not set
# CONFIG_MACH_NOKIA_RX51 is not set
CONFIG_MACH_OMAP_ZOOM2=y
@@ -241,6 +276,7 @@ CONFIG_MACH_OMAP_ZOOM2=y
# CONFIG_MACH_CM_T35 is not set
CONFIG_MACH_IGEP0020=y
# CONFIG_MACH_OMAP_3630SDP is not set
+# CONFIG_OMAP3_EMU is not set
#
# Processor Type
@@ -458,6 +494,7 @@ CONFIG_INET6_XFRM_MODE_TUNNEL=m
CONFIG_INET6_XFRM_MODE_BEET=m
CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=m
CONFIG_IPV6_SIT=m
+# CONFIG_IPV6_SIT_6RD is not set
CONFIG_IPV6_NDISC_NODETYPE=y
CONFIG_IPV6_TUNNEL=m
CONFIG_IPV6_MULTIPLE_TABLES=y
@@ -826,15 +863,19 @@ CONFIG_AF_RXRPC=m
# CONFIG_RXKAD is not set
CONFIG_FIB_RULES=y
CONFIG_WIRELESS=y
+CONFIG_WIRELESS_EXT=y
+CONFIG_WEXT_CORE=y
+CONFIG_WEXT_PROC=y
+CONFIG_WEXT_SPY=y
+CONFIG_WEXT_PRIV=y
CONFIG_CFG80211=y
# CONFIG_NL80211_TESTMODE is not set
# CONFIG_CFG80211_DEVELOPER_WARNINGS is not set
# CONFIG_CFG80211_REG_DEBUG is not set
CONFIG_CFG80211_DEFAULT_PS=y
-CONFIG_CFG80211_DEFAULT_PS_VALUE=1
# CONFIG_CFG80211_DEBUGFS is not set
CONFIG_WIRELESS_OLD_REGULATORY=y
-CONFIG_WIRELESS_EXT=y
+CONFIG_CFG80211_WEXT=y
CONFIG_WIRELESS_EXT_SYSFS=y
CONFIG_LIB80211=y
CONFIG_LIB80211_CRYPT_WEP=y
@@ -992,6 +1033,7 @@ CONFIG_MISC_DEVICES=y
# CONFIG_ICS932S401 is not set
# CONFIG_ENCLOSURE_SERVICES is not set
# CONFIG_ISL29003 is not set
+# CONFIG_DS1682 is not set
# CONFIG_C2PORT is not set
#
@@ -1002,6 +1044,7 @@ CONFIG_MISC_DEVICES=y
# CONFIG_EEPROM_LEGACY is not set
# CONFIG_EEPROM_MAX6875 is not set
CONFIG_EEPROM_93CX6=y
+# CONFIG_IWMC3200TOP is not set
CONFIG_HAVE_IDE=y
# CONFIG_IDE is not set
@@ -1122,13 +1165,6 @@ CONFIG_SMSC911X=y
# CONFIG_NETDEV_1000 is not set
# CONFIG_NETDEV_10000 is not set
CONFIG_WLAN=y
-# CONFIG_WLAN_PRE80211 is not set
-CONFIG_WLAN_80211=y
-CONFIG_LIBERTAS=y
-CONFIG_LIBERTAS_USB=y
-# CONFIG_LIBERTAS_SDIO is not set
-# CONFIG_LIBERTAS_SPI is not set
-# CONFIG_LIBERTAS_DEBUG is not set
# CONFIG_LIBERTAS_THINFIRM is not set
# CONFIG_AT76C50X_USB is not set
CONFIG_USB_ZD1201=y
@@ -1136,14 +1172,7 @@ CONFIG_USB_NET_RNDIS_WLAN=y
CONFIG_RTL8187=y
CONFIG_RTL8187_LEDS=y
# CONFIG_MAC80211_HWSIM is not set
-CONFIG_P54_COMMON=y
-CONFIG_P54_USB=y
-# CONFIG_P54_SPI is not set
-CONFIG_P54_LEDS=y
# CONFIG_ATH_COMMON is not set
-CONFIG_HOSTAP=y
-CONFIG_HOSTAP_FIRMWARE=y
-CONFIG_HOSTAP_FIRMWARE_NVRAM=y
CONFIG_B43=y
# CONFIG_B43_SDIO is not set
CONFIG_B43_PHY_LP=y
@@ -1151,8 +1180,19 @@ CONFIG_B43_LEDS=y
CONFIG_B43_HWRNG=y
# CONFIG_B43_DEBUG is not set
# CONFIG_B43LEGACY is not set
-CONFIG_ZD1211RW=y
-# CONFIG_ZD1211RW_DEBUG is not set
+CONFIG_HOSTAP=y
+CONFIG_HOSTAP_FIRMWARE=y
+CONFIG_HOSTAP_FIRMWARE_NVRAM=y
+# CONFIG_IWM is not set
+CONFIG_LIBERTAS=y
+CONFIG_LIBERTAS_USB=y
+# CONFIG_LIBERTAS_SDIO is not set
+# CONFIG_LIBERTAS_SPI is not set
+# CONFIG_LIBERTAS_DEBUG is not set
+CONFIG_P54_COMMON=y
+CONFIG_P54_USB=y
+# CONFIG_P54_SPI is not set
+CONFIG_P54_LEDS=y
CONFIG_RT2X00=y
CONFIG_RT2500USB=y
CONFIG_RT73USB=y
@@ -1164,7 +1204,8 @@ CONFIG_RT2X00_LIB_CRYPTO=y
CONFIG_RT2X00_LIB_LEDS=y
# CONFIG_RT2X00_DEBUG is not set
# CONFIG_WL12XX is not set
-# CONFIG_IWM is not set
+CONFIG_ZD1211RW=y
+# CONFIG_ZD1211RW_DEBUG is not set
#
# WiMAX Wireless Broadband devices
@@ -1372,7 +1413,6 @@ CONFIG_I2C_OMAP=y
#
# Miscellaneous I2C Chip support
#
-# CONFIG_DS1682 is not set
# CONFIG_SENSORS_TSL2550 is not set
# CONFIG_I2C_DEBUG_CORE is not set
# CONFIG_I2C_DEBUG_ALGO is not set
@@ -1537,7 +1577,7 @@ CONFIG_SSB_SDIOHOST_POSSIBLE=y
#
# Multifunction device drivers
#
-# CONFIG_MFD_CORE is not set
+CONFIG_MFD_CORE=y
# CONFIG_MFD_SM501 is not set
# CONFIG_MFD_ASIC3 is not set
# CONFIG_HTC_EGPIO is not set
@@ -1545,7 +1585,7 @@ CONFIG_SSB_SDIOHOST_POSSIBLE=y
# CONFIG_TPS65010 is not set
CONFIG_TWL4030_CORE=y
CONFIG_TWL4030_POWER=y
-# CONFIG_TWL4030_CODEC is not set
+CONFIG_TWL4030_CODEC=y
# CONFIG_MFD_TMIO is not set
# CONFIG_MFD_T7L66XB is not set
# CONFIG_MFD_TC6387XB is not set
@@ -1822,6 +1862,7 @@ CONFIG_FB_MODE_HELPERS=y
# Frame buffer hardware drivers
#
# CONFIG_FB_S1D13XXX is not set
+# CONFIG_FB_TMIO is not set
# CONFIG_FB_VIRTUAL is not set
# CONFIG_FB_METRONOME is not set
# CONFIG_FB_MB862XX is not set
@@ -1852,6 +1893,7 @@ CONFIG_PANEL_GENERIC=y
CONFIG_PANEL_SAMSUNG_LTE430WQ_F0C=y
CONFIG_PANEL_SHARP_LS037V7DW01=y
# CONFIG_PANEL_TAAL is not set
+# CONFIG_PANEL_TOPPOLY_TDO35S is not set
# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
#
@@ -1926,6 +1968,7 @@ CONFIG_SND_OMAP_SOC_MCBSP=y
# CONFIG_SND_OMAP_SOC_OMAP3_PANDORA is not set
CONFIG_SND_OMAP_SOC_OMAP3_BEAGLE=y
# CONFIG_SND_OMAP_SOC_ZOOM2 is not set
+# CONFIG_SND_OMAP_SOC_IGEP0020 is not set
CONFIG_SND_SOC_I2C_AND_SPI=y
# CONFIG_SND_SOC_ALL_CODECS is not set
CONFIG_SND_SOC_TWL4030=y
@@ -2311,7 +2354,9 @@ CONFIG_RTC_DRV_TWL4030=m
# CONFIG_RTC_DRV_M48T86 is not set
# CONFIG_RTC_DRV_M48T35 is not set
# CONFIG_RTC_DRV_M48T59 is not set
+# CONFIG_RTC_DRV_MSM6242 is not set
# CONFIG_RTC_DRV_BQ4802 is not set
+# CONFIG_RTC_DRV_RP5C01 is not set
# CONFIG_RTC_DRV_V3020 is not set
#
@@ -2366,6 +2411,7 @@ CONFIG_OTUS=m
#
# CONFIG_RAR_REGISTER is not set
# CONFIG_IIO is not set
+# CONFIG_STRIP is not set
#
# CBUS support
@@ -2692,6 +2738,7 @@ CONFIG_STACKTRACE=y
# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
# CONFIG_FAULT_INJECTION is not set
# CONFIG_LATENCYTOP is not set
+# CONFIG_SYSCTL_SYSCALL_CHECK is not set
# CONFIG_PAGE_POISONING is not set
CONFIG_NOP_TRACER=y
CONFIG_HAVE_FUNCTION_TRACER=y
@@ -2725,6 +2772,7 @@ CONFIG_ARM_UNWIND=y
# CONFIG_DEBUG_ERRORS is not set
# CONFIG_DEBUG_STACK_USAGE is not set
# CONFIG_DEBUG_LL is not set
+# CONFIG_OC_ETM is not set
#
# Security options
@@ -2733,7 +2781,11 @@ CONFIG_KEYS=y
# CONFIG_KEYS_DEBUG_PROC_KEYS is not set
# CONFIG_SECURITY is not set
# CONFIG_SECURITYFS is not set
-# CONFIG_SECURITY_FILE_CAPABILITIES is not set
+# CONFIG_DEFAULT_SECURITY_SELINUX is not set
+# CONFIG_DEFAULT_SECURITY_SMACK is not set
+# CONFIG_DEFAULT_SECURITY_TOMOYO is not set
+CONFIG_DEFAULT_SECURITY_DAC=y
+CONFIG_DEFAULT_SECURITY=""
CONFIG_XOR_BLOCKS=m
CONFIG_ASYNC_CORE=m
CONFIG_ASYNC_MEMCPY=m
diff --git a/recipes/linux/linux-omap-2.6.32/cm-t35/0001-OMAP-DSS2-add-Toppoly-TDO35S-panel.patch b/recipes/linux/linux-omap-2.6.32/cm-t35/0001-OMAP-DSS2-add-Toppoly-TDO35S-panel.patch
new file mode 100644
index 0000000000..423b29f841
--- /dev/null
+++ b/recipes/linux/linux-omap-2.6.32/cm-t35/0001-OMAP-DSS2-add-Toppoly-TDO35S-panel.patch
@@ -0,0 +1,159 @@
+From 971595be3dc245cfa095747263b94535d27a3f1c Mon Sep 17 00:00:00 2001
+From: Mike Rapoport <mike@compulab.co.il>
+Date: Tue, 1 Dec 2009 12:14:10 +0200
+Subject: [PATCH 1/6] OMAP: DSS2: add Toppoly TDO35S panel
+
+Signed-off-by: Mike Rapoport <mike@compulab.co.il>
+---
+ drivers/video/omap2/displays/Kconfig | 6 +
+ drivers/video/omap2/displays/Makefile | 1 +
+ .../video/omap2/displays/panel-toppoly-tdo35s.c | 112 ++++++++++++++++++++
+ 3 files changed, 119 insertions(+), 0 deletions(-)
+ create mode 100644 drivers/video/omap2/displays/panel-toppoly-tdo35s.c
+
+diff --git a/drivers/video/omap2/displays/Kconfig b/drivers/video/omap2/displays/Kconfig
+index 79d2861..0d0d4f3 100644
+--- a/drivers/video/omap2/displays/Kconfig
++++ b/drivers/video/omap2/displays/Kconfig
+@@ -25,4 +25,10 @@ config PANEL_TAAL
+ help
+ Taal DSI command mode panel from TPO.
+
++config PANEL_TOPPOLY_TDO35S
++ tristate "Toppoly TDO35S LCD Panel support"
++ depends on OMAP2_DSS
++ help
++ LCD Panel used in CM-T35
++
+ endmenu
+diff --git a/drivers/video/omap2/displays/Makefile b/drivers/video/omap2/displays/Makefile
+index d44e765..e299454 100644
+--- a/drivers/video/omap2/displays/Makefile
++++ b/drivers/video/omap2/displays/Makefile
+@@ -3,3 +3,4 @@ obj-$(CONFIG_PANEL_SAMSUNG_LTE430WQ_F0C) += panel-samsung-lte430wq-f0c.o
+ obj-$(CONFIG_PANEL_SHARP_LS037V7DW01) += panel-sharp-ls037v7dw01.o
+
+ obj-$(CONFIG_PANEL_TAAL) += panel-taal.o
++obj-$(CONFIG_PANEL_TOPPOLY_TDO35S) += panel-toppoly-tdo35s.o
+\ No newline at end of file
+diff --git a/drivers/video/omap2/displays/panel-toppoly-tdo35s.c b/drivers/video/omap2/displays/panel-toppoly-tdo35s.c
+new file mode 100644
+index 0000000..e744b8c
+--- /dev/null
++++ b/drivers/video/omap2/displays/panel-toppoly-tdo35s.c
+@@ -0,0 +1,112 @@
++/*
++ * LCD panel driver for Toppoly TDO35S
++ *
++ * Copyright (C) 2009 CompuLab, Ltd.
++ * Author: Mike Rapoport <mike@compulab.co.il>
++ *
++ * Based on generic panel support
++ * Copyright (C) 2008 Nokia Corporation
++ * Author: Tomi Valkeinen <tomi.valkeinen@nokia.com>
++ *
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License version 2 as published by
++ * the Free Software Foundation.
++ *
++ * This program is distributed in the hope that it will be useful, but WITHOUT
++ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
++ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
++ * more details.
++ *
++ * You should have received a copy of the GNU General Public License along with
++ * this program. If not, see <http://www.gnu.org/licenses/>.
++ */
++
++#include <linux/module.h>
++#include <linux/delay.h>
++
++#include <plat/display.h>
++
++static struct omap_video_timings toppoly_tdo_panel_timings = {
++ /* 640 x 480 @ 60 Hz Reduced blanking VESA CVT 0.31M3-R */
++ .x_res = 480,
++ .y_res = 640,
++
++ .pixel_clock = 26000,
++
++ .hfp = 104,
++ .hsw = 8,
++ .hbp = 8,
++
++ .vfp = 4,
++ .vsw = 2,
++ .vbp = 2,
++};
++
++static int toppoly_tdo_panel_probe(struct omap_dss_device *dssdev)
++{
++ dssdev->panel.config = OMAP_DSS_LCD_TFT | OMAP_DSS_LCD_IVS |
++ OMAP_DSS_LCD_IHS;
++ dssdev->panel.timings = toppoly_tdo_panel_timings;
++
++ return 0;
++}
++
++static void toppoly_tdo_panel_remove(struct omap_dss_device *dssdev)
++{
++}
++
++static int toppoly_tdo_panel_enable(struct omap_dss_device *dssdev)
++{
++ int r = 0;
++
++ if (dssdev->platform_enable)
++ r = dssdev->platform_enable(dssdev);
++
++ return r;
++}
++
++static void toppoly_tdo_panel_disable(struct omap_dss_device *dssdev)
++{
++ if (dssdev->platform_disable)
++ dssdev->platform_disable(dssdev);
++}
++
++static int toppoly_tdo_panel_suspend(struct omap_dss_device *dssdev)
++{
++ toppoly_tdo_panel_disable(dssdev);
++ return 0;
++}
++
++static int toppoly_tdo_panel_resume(struct omap_dss_device *dssdev)
++{
++ return toppoly_tdo_panel_enable(dssdev);
++}
++
++static struct omap_dss_driver generic_driver = {
++ .probe = toppoly_tdo_panel_probe,
++ .remove = toppoly_tdo_panel_remove,
++
++ .enable = toppoly_tdo_panel_enable,
++ .disable = toppoly_tdo_panel_disable,
++ .suspend = toppoly_tdo_panel_suspend,
++ .resume = toppoly_tdo_panel_resume,
++
++ .driver = {
++ .name = "toppoly_tdo35s_panel",
++ .owner = THIS_MODULE,
++ },
++};
++
++static int __init toppoly_tdo_panel_drv_init(void)
++{
++ return omap_dss_register_driver(&generic_driver);
++}
++
++static void __exit toppoly_tdo_panel_drv_exit(void)
++{
++ omap_dss_unregister_driver(&generic_driver);
++}
++
++module_init(toppoly_tdo_panel_drv_init);
++module_exit(toppoly_tdo_panel_drv_exit);
++MODULE_LICENSE("GPL");
+--
+1.6.4.4
+
diff --git a/recipes/linux/linux-omap-2.6.32/cm-t35/0001-backlight-tdo24m-ensure-chip-select-changes-between-.patch b/recipes/linux/linux-omap-2.6.32/cm-t35/0001-backlight-tdo24m-ensure-chip-select-changes-between-.patch
new file mode 100644
index 0000000000..b540987af0
--- /dev/null
+++ b/recipes/linux/linux-omap-2.6.32/cm-t35/0001-backlight-tdo24m-ensure-chip-select-changes-between-.patch
@@ -0,0 +1,30 @@
+From 8a2cbbaa60ea06370d2a6d9303b1aab54cdb8a69 Mon Sep 17 00:00:00 2001
+From: Mike Rapoport <mike@compulab.co.il>
+Date: Tue, 24 Nov 2009 10:09:35 +0200
+Subject: [PATCH] backlight: tdo24m: ensure chip select changes between transfers
+
+Some SPI host drivers do not change chip select betwen transfers unless
+.cs_chnage field is explicitly set. The LCD spec requires chip select
+change between consecuitive transfers, so ensure it at the SPI driver
+level.
+
+Signed-off-by: Mike Rapoport <mike@compulab.co.il>
+---
+ drivers/video/backlight/tdo24m.c | 1 +
+ 1 files changed, 1 insertions(+), 0 deletions(-)
+
+diff --git a/drivers/video/backlight/tdo24m.c b/drivers/video/backlight/tdo24m.c
+index bbfb502..4a3d46e 100644
+--- a/drivers/video/backlight/tdo24m.c
++++ b/drivers/video/backlight/tdo24m.c
+@@ -367,6 +367,7 @@ static int __devinit tdo24m_probe(struct spi_device *spi)
+
+ spi_message_init(m);
+
++ x->cs_change = 1;
+ x->tx_buf = &lcd->buf[0];
+ spi_message_add_tail(x, m);
+
+--
+1.6.4.4
+
diff --git a/recipes/linux/linux-omap-2.6.32/cm-t35/0001-omap3-cm-t35-add-mux-initialization.patch b/recipes/linux/linux-omap-2.6.32/cm-t35/0001-omap3-cm-t35-add-mux-initialization.patch
new file mode 100644
index 0000000000..07f901c9a6
--- /dev/null
+++ b/recipes/linux/linux-omap-2.6.32/cm-t35/0001-omap3-cm-t35-add-mux-initialization.patch
@@ -0,0 +1,153 @@
+Date: Wed, 09 Dec 2009 15:22:20 +0200
+From: Mike Rapoport <mike@compulab.co.il>
+To: Koen Kooi <koen@dominion.thruhere.net>
+Subject: Re: linux-omap 2.6.32 updates
+
+
+Mike Rapoport wrote:
+>> The tdo24m patch is indeed in the linux-omap tree and the mux patch should be
+>> different for the updated linux-omap (at least with
+>> SRCREV = "6833f1a8cdcb65a370f898bde6b6af63f81962df").
+>>
+>> Attached the actual patch needed to initialize cm-t35 mux and updated recipe
+>> diff that uses this patch.
+>>
+>> I don't know yet if Tony is going to merge my latest patches before the merge
+>> window closes. If you're going to bump SRCREV once again in the next few days,
+>> it's possible that cm-t35 patches won't be needed at all.
+
+--
+Sincerely yours,
+Mike.
+
+
+diff --git a/arch/arm/mach-omap2/Kconfig b/arch/arm/mach-omap2/Kconfig
+index 16c0c13..66de47b 100644
+--- a/arch/arm/mach-omap2/Kconfig
++++ b/arch/arm/mach-omap2/Kconfig
+@@ -136,6 +136,7 @@ config MACH_CM_T35
+ bool "CompuLab CM-T35 module"
+ depends on ARCH_OMAP3 && ARCH_OMAP34XX
+ select OMAP_PACKAGE_CUS
++ select OMAP_MUX
+
+ config MACH_IGEP0020
+ bool "IGEP0020"
+diff --git a/arch/arm/mach-omap2/board-cm-t35.c b/arch/arm/mach-omap2/board-cm-t35.c
+index 507c922..1591aae 100644
+--- a/arch/arm/mach-omap2/board-cm-t35.c
++++ b/arch/arm/mach-omap2/board-cm-t35.c
+@@ -482,13 +482,98 @@ static void __init cm_t35_map_io(void)
+ omap2_map_common_io();
+ }
+
+-#ifdef CONFIG_OMAP_MUX
+ static struct omap_board_mux board_mux[] __initdata = {
++ /* nCS and IRQ for CM-T35 ethernet */
++ OMAP3_MUX(GPMC_NCS5, OMAP_MUX_MODE0),
++ OMAP3_MUX(UART3_CTS_RCTX, OMAP_MUX_MODE4 | OMAP_PIN_INPUT_PULLUP),
++
++ /* nCS and IRQ for SB-T35 ethernet */
++ OMAP3_MUX(GPMC_NCS4, OMAP_MUX_MODE0),
++ OMAP3_MUX(GPMC_WAIT3, OMAP_MUX_MODE4 | OMAP_PIN_INPUT_PULLUP),
++
++ /* PENDOWN GPIO */
++ OMAP3_MUX(GPMC_NCS6, OMAP_MUX_MODE4 | OMAP_PIN_INPUT),
++
++ /* mUSB */
++ OMAP3_MUX(HSUSB0_CLK, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
++ OMAP3_MUX(HSUSB0_STP, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
++ OMAP3_MUX(HSUSB0_DIR, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
++ OMAP3_MUX(HSUSB0_NXT, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
++ OMAP3_MUX(HSUSB0_DATA0, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
++ OMAP3_MUX(HSUSB0_DATA1, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
++ OMAP3_MUX(HSUSB0_DATA2, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
++ OMAP3_MUX(HSUSB0_DATA3, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
++ OMAP3_MUX(HSUSB0_DATA4, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
++ OMAP3_MUX(HSUSB0_DATA5, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
++ OMAP3_MUX(HSUSB0_DATA6, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
++ OMAP3_MUX(HSUSB0_DATA7, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
++
++ /* MMC 2 */
++ OMAP3_MUX(SDMMC2_DAT4, OMAP_MUX_MODE1 | OMAP_PIN_OUTPUT),
++ OMAP3_MUX(SDMMC2_DAT5, OMAP_MUX_MODE1 | OMAP_PIN_OUTPUT),
++ OMAP3_MUX(SDMMC2_DAT6, OMAP_MUX_MODE1 | OMAP_PIN_OUTPUT),
++ OMAP3_MUX(SDMMC2_DAT7, OMAP_MUX_MODE1 | OMAP_PIN_INPUT),
++
++ /* McSPI 1 */
++ OMAP3_MUX(MCSPI1_CLK, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
++ OMAP3_MUX(MCSPI1_SIMO, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
++ OMAP3_MUX(MCSPI1_SOMI, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
++ OMAP3_MUX(MCSPI1_CS0, OMAP_MUX_MODE0 | OMAP_PIN_INPUT_PULLDOWN),
++
++ /* McSPI 4 */
++ OMAP3_MUX(MCBSP1_CLKR, OMAP_MUX_MODE1 | OMAP_PIN_INPUT),
++ OMAP3_MUX(MCBSP1_DX, OMAP_MUX_MODE1 | OMAP_PIN_INPUT),
++ OMAP3_MUX(MCBSP1_DR, OMAP_MUX_MODE1 | OMAP_PIN_INPUT),
++ OMAP3_MUX(MCBSP1_FSX, OMAP_MUX_MODE1 | OMAP_PIN_INPUT_PULLUP),
++
++ /* McBSP 2 */
++ OMAP3_MUX(MCBSP2_FSX, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
++ OMAP3_MUX(MCBSP2_CLKX, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
++ OMAP3_MUX(MCBSP2_DR, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
++ OMAP3_MUX(MCBSP2_DX, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
++
++ /* serial ports */
++ OMAP3_MUX(MCBSP3_CLKX, OMAP_MUX_MODE1 | OMAP_PIN_OUTPUT),
++ OMAP3_MUX(MCBSP3_FSX, OMAP_MUX_MODE1 | OMAP_PIN_INPUT),
++ OMAP3_MUX(UART1_TX, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
++ OMAP3_MUX(UART1_RX, OMAP_MUX_MODE0 | OMAP_PIN_INPUT),
++
++ /* DSS */
++ OMAP3_MUX(DSS_PCLK, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
++ OMAP3_MUX(DSS_HSYNC, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
++ OMAP3_MUX(DSS_VSYNC, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
++ OMAP3_MUX(DSS_ACBIAS, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
++ OMAP3_MUX(DSS_DATA0, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
++ OMAP3_MUX(DSS_DATA1, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
++ OMAP3_MUX(DSS_DATA2, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
++ OMAP3_MUX(DSS_DATA3, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
++ OMAP3_MUX(DSS_DATA4, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
++ OMAP3_MUX(DSS_DATA5, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
++ OMAP3_MUX(DSS_DATA6, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
++ OMAP3_MUX(DSS_DATA7, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
++ OMAP3_MUX(DSS_DATA8, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
++ OMAP3_MUX(DSS_DATA9, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
++ OMAP3_MUX(DSS_DATA10, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
++ OMAP3_MUX(DSS_DATA11, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
++ OMAP3_MUX(DSS_DATA12, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
++ OMAP3_MUX(DSS_DATA13, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
++ OMAP3_MUX(DSS_DATA14, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
++ OMAP3_MUX(DSS_DATA15, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
++ OMAP3_MUX(DSS_DATA16, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
++ OMAP3_MUX(DSS_DATA17, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
++ OMAP3_MUX(DSS_DATA18, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
++ OMAP3_MUX(DSS_DATA19, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
++ OMAP3_MUX(DSS_DATA20, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
++ OMAP3_MUX(DSS_DATA21, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
++ OMAP3_MUX(DSS_DATA22, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
++ OMAP3_MUX(DSS_DATA23, OMAP_MUX_MODE0 | OMAP_PIN_OUTPUT),
++
++ /* TPS IRQ */
++ OMAP3_MUX(SYS_NIRQ, OMAP_MUX_MODE0 | OMAP_WAKEUP_EN | \
++ OMAP_PIN_INPUT_PULLUP),
++
+ { .reg_offset = OMAP_MUX_TERMINATOR },
+ };
+-#else
+-#define board_mux NULL
+-#endif
+
+ static void __init cm_t35_init(void)
+ {
+@@ -501,9 +586,6 @@ static void __init cm_t35_init(void)
+ cm_t35_init_led();
+
+ usb_musb_init();
+-
+- omap_mux_init_signal("sys_nirq",
+- OMAP_WAKEUP_EN | OMAP_PIN_INPUT_PULLUP);
+ }
+
+ MACHINE_START(CM_T35, "Compulab CM-T35")
+
diff --git a/recipes/linux/linux-omap-2.6.32/cm-t35/0002-omap3-cm-t35-add-DSS2-display-support.patch b/recipes/linux/linux-omap-2.6.32/cm-t35/0002-omap3-cm-t35-add-DSS2-display-support.patch
new file mode 100644
index 0000000000..199e89bc93
--- /dev/null
+++ b/recipes/linux/linux-omap-2.6.32/cm-t35/0002-omap3-cm-t35-add-DSS2-display-support.patch
@@ -0,0 +1,307 @@
+From 7d601fa33c5475bcd3035df797a3cbe40cc542d4 Mon Sep 17 00:00:00 2001
+From: Mike Rapoport <mike@compulab.co.il>
+Date: Tue, 1 Dec 2009 13:09:28 +0200
+Subject: [PATCH 2/6] omap3: cm-t35: add DSS2 display support
+
+Signed-off-by: Mike Rapoport <mike@compulab.co.il>
+---
+ arch/arm/mach-omap2/board-cm-t35.c | 234 +++++++++++++++++++++++++++++++++++-
+ 1 files changed, 233 insertions(+), 1 deletions(-)
+
+diff --git a/arch/arm/mach-omap2/board-cm-t35.c b/arch/arm/mach-omap2/board-cm-t35.c
+index 22c4529..2d7a819 100644
+--- a/arch/arm/mach-omap2/board-cm-t35.c
++++ b/arch/arm/mach-omap2/board-cm-t35.c
+@@ -32,6 +32,9 @@
+ #include <linux/i2c/twl4030.h>
+ #include <linux/regulator/machine.h>
+
++#include <linux/spi/spi.h>
++#include <linux/spi/tdo24m.h>
++
+ #include <asm/mach-types.h>
+ #include <asm/mach/arch.h>
+ #include <asm/mach/map.h>
+@@ -42,6 +45,7 @@
+ #include <plat/nand.h>
+ #include <plat/gpmc.h>
+ #include <plat/usb.h>
++#include <plat/display.h>
+
+ #include <mach/hardware.h>
+
+@@ -248,7 +252,6 @@ static inline void cm_t35_init_nand(void) {}
+
+ #if defined(CONFIG_TOUCHSCREEN_ADS7846) || \
+ defined(CONFIG_TOUCHSCREEN_ADS7846_MODULE)
+-#include <linux/spi/spi.h>
+ #include <linux/spi/ads7846.h>
+
+ #include <plat/mcspi.h>
+@@ -304,6 +307,193 @@ static void __init cm_t35_init_ads7846(void)
+ static inline void cm_t35_init_ads7846(void) {}
+ #endif
+
++#define CM_T35_LCD_EN_GPIO 157
++#define CM_T35_LCD_BL_GPIO 58
++#define CM_T35_DVI_EN_GPIO 54
++
++static int lcd_bl_gpio;
++static int lcd_en_gpio;
++static int dvi_en_gpio;
++
++static int lcd_enabled;
++static int dvi_enabled;
++
++static int cm_t35_panel_enable_lcd(struct omap_dss_device *dssdev)
++{
++ if (dvi_enabled) {
++ printk(KERN_ERR "cannot enable LCD, DVI is enabled\n");
++ return -EINVAL;
++ }
++
++ gpio_set_value(lcd_en_gpio, 1);
++ gpio_set_value(lcd_bl_gpio, 1);
++
++ lcd_enabled = 1;
++
++ return 0;
++}
++
++static void cm_t35_panel_disable_lcd(struct omap_dss_device *dssdev)
++{
++ lcd_enabled = 0;
++
++ gpio_set_value(lcd_bl_gpio, 0);
++ gpio_set_value(lcd_en_gpio, 0);
++}
++
++static int cm_t35_panel_enable_dvi(struct omap_dss_device *dssdev)
++{
++ if (lcd_enabled) {
++ printk(KERN_ERR "cannot enable DVI, LCD is enabled\n");
++ return -EINVAL;
++ }
++
++ gpio_set_value(dvi_en_gpio, 0);
++ dvi_enabled = 1;
++
++ return 0;
++}
++
++static void cm_t35_panel_disable_dvi(struct omap_dss_device *dssdev)
++{
++ gpio_set_value(dvi_en_gpio, 1);
++ dvi_enabled = 0;
++}
++
++static int cm_t35_panel_enable_tv(struct omap_dss_device *dssdev)
++{
++ return 0;
++}
++
++static void cm_t35_panel_disable_tv(struct omap_dss_device *dssdev)
++{
++}
++
++static struct omap_dss_device cm_t35_lcd_device = {
++ .name = "lcd",
++ .driver_name = "toppoly_tdo35s_panel",
++ .type = OMAP_DISPLAY_TYPE_DPI,
++ .phy.dpi.data_lines = 18,
++ .platform_enable = cm_t35_panel_enable_lcd,
++ .platform_disable = cm_t35_panel_disable_lcd,
++};
++
++static struct omap_dss_device cm_t35_dvi_device = {
++ .name = "dvi",
++ .driver_name = "generic_panel",
++ .type = OMAP_DISPLAY_TYPE_DPI,
++ .phy.dpi.data_lines = 24,
++ .platform_enable = cm_t35_panel_enable_dvi,
++ .platform_disable = cm_t35_panel_disable_dvi,
++};
++
++static struct omap_dss_device cm_t35_tv_device = {
++ .name = "tv",
++ .driver_name = "venc",
++ .type = OMAP_DISPLAY_TYPE_VENC,
++ .phy.venc.type = OMAP_DSS_VENC_TYPE_SVIDEO,
++ .platform_enable = cm_t35_panel_enable_tv,
++ .platform_disable = cm_t35_panel_disable_tv,
++};
++
++static struct omap_dss_device *cm_t35_dss_devices[] = {
++ &cm_t35_lcd_device,
++ &cm_t35_dvi_device,
++ &cm_t35_tv_device,
++};
++
++static struct omap_dss_board_info cm_t35_dss_data = {
++ .num_devices = ARRAY_SIZE(cm_t35_dss_devices),
++ .devices = cm_t35_dss_devices,
++ .default_device = &cm_t35_dvi_device,
++};
++
++static struct platform_device cm_t35_dss_device = {
++ .name = "omapdss",
++ .id = -1,
++ .dev = {
++ .platform_data = &cm_t35_dss_data,
++ },
++};
++
++static struct omap2_mcspi_device_config tdo24m_mcspi_config = {
++ .turbo_mode = 0,
++ .single_channel = 1, /* 0: slave, 1: master */
++};
++
++static struct tdo24m_platform_data tdo24m_config = {
++ .model = TDO35S,
++};
++
++static struct spi_board_info cm_t35_lcd_spi_board_info[] __initdata = {
++ {
++ .modalias = "tdo24m",
++ .bus_num = 4,
++ .chip_select = 0,
++ .max_speed_hz = 1000000,
++ .controller_data = &tdo24m_mcspi_config,
++ .platform_data = &tdo24m_config,
++ },
++};
++
++static void __init cm_t35_display_init(void)
++{
++ int err;
++
++ lcd_en_gpio = CM_T35_LCD_EN_GPIO;
++ lcd_bl_gpio = CM_T35_LCD_BL_GPIO;
++ dvi_en_gpio = CM_T35_DVI_EN_GPIO;
++
++ spi_register_board_info(cm_t35_lcd_spi_board_info,
++ ARRAY_SIZE(cm_t35_lcd_spi_board_info));
++
++ err = gpio_request(lcd_en_gpio, "LCD RST");
++ if (err) {
++ pr_err("CM-T35: failed to get LCD reset GPIO\n");
++ goto out;
++ }
++
++ err = gpio_request(lcd_bl_gpio, "LCD BL");
++ if (err) {
++ pr_err("CM-T35: failed to get LCD backlight control GPIO\n");
++ goto err_lcd_bl;
++ }
++
++ err = gpio_request(dvi_en_gpio, "DVI EN");
++ if (err) {
++ pr_err("CM-T35: failed to get DVI reset GPIO\n");
++ goto err_dvi_en;
++ }
++
++ gpio_export(lcd_en_gpio, 0);
++ gpio_export(lcd_bl_gpio, 0);
++ gpio_export(dvi_en_gpio, 0);
++ gpio_direction_output(lcd_en_gpio, 0);
++ gpio_direction_output(lcd_bl_gpio, 0);
++ gpio_direction_output(dvi_en_gpio, 1);
++
++ msleep(50);
++ gpio_set_value(lcd_en_gpio, 1);
++
++ err = platform_device_register(&cm_t35_dss_device);
++ if (err) {
++ pr_err("CM-T35: failed to register DSS device\n");
++ goto err_dev_reg;
++ }
++
++ return;
++
++err_dev_reg:
++ gpio_free(dvi_en_gpio);
++err_dvi_en:
++ gpio_free(lcd_bl_gpio);
++err_lcd_bl:
++ gpio_free(lcd_en_gpio);
++out:
++
++ return;
++}
++
+ static struct regulator_consumer_supply cm_t35_vmmc1_supply = {
+ .supply = "vmmc",
+ };
+@@ -312,6 +502,16 @@ static struct regulator_consumer_supply cm_t35_vsim_supply = {
+ .supply = "vmmc_aux",
+ };
+
++static struct regulator_consumer_supply cm_t35_vdac_supply = {
++ .supply = "vdda_dac",
++ .dev = &cm_t35_dss_device.dev,
++};
++
++static struct regulator_consumer_supply cm_t35_vdvi_supply = {
++ .supply = "vdvi",
++ .dev = &cm_t35_dss_device.dev,
++};
++
+ /* VMMC1 for MMC1 pins CMD, CLK, DAT0..DAT3 (20 mA, plus card == max 220 mA) */
+ static struct regulator_init_data cm_t35_vmmc1 = {
+ .constraints = {
+@@ -342,6 +542,35 @@ static struct regulator_init_data cm_t35_vsim = {
+ .consumer_supplies = &cm_t35_vsim_supply,
+ };
+
++/* VDAC for DSS driving S-Video (8 mA unloaded, max 65 mA) */
++static struct regulator_init_data cm_t35_vdac = {
++ .constraints = {
++ .min_uV = 1800000,
++ .max_uV = 1800000,
++ .valid_modes_mask = REGULATOR_MODE_NORMAL
++ | REGULATOR_MODE_STANDBY,
++ .valid_ops_mask = REGULATOR_CHANGE_MODE
++ | REGULATOR_CHANGE_STATUS,
++ },
++ .num_consumer_supplies = 1,
++ .consumer_supplies = &cm_t35_vdac_supply,
++};
++
++/* VPLL2 for digital video outputs */
++static struct regulator_init_data cm_t35_vpll2 = {
++ .constraints = {
++ .name = "VDVI",
++ .min_uV = 1800000,
++ .max_uV = 1800000,
++ .valid_modes_mask = REGULATOR_MODE_NORMAL
++ | REGULATOR_MODE_STANDBY,
++ .valid_ops_mask = REGULATOR_CHANGE_MODE
++ | REGULATOR_CHANGE_STATUS,
++ },
++ .num_consumer_supplies = 1,
++ .consumer_supplies = &cm_t35_vdvi_supply,
++};
++
+ static struct twl4030_usb_data cm_t35_usb_data = {
+ .usb_mode = T2_USB_MODE_ULPI,
+ };
+@@ -445,6 +674,8 @@ static struct twl4030_platform_data cm_t35_twldata = {
+ .gpio = &cm_t35_gpio_data,
+ .vmmc1 = &cm_t35_vmmc1,
+ .vsim = &cm_t35_vsim,
++ .vdac = &cm_t35_vdac,
++ .vpll2 = &cm_t35_vpll2,
+ };
+
+ static struct i2c_board_info __initdata cm_t35_i2c_boardinfo[] = {
+@@ -490,6 +721,7 @@ static void __init cm_t35_init(void)
+ cm_t35_init_ads7846();
+ cm_t35_init_ethernet();
+ cm_t35_init_led();
++ cm_t35_display_init();
+
+ usb_musb_init();
+
+--
+1.6.4.4
+
diff --git a/recipes/linux/linux-omap-2.6.32/cm-t35/0003-omap3-cm-t35-update-defconfig-for-DSS2.patch b/recipes/linux/linux-omap-2.6.32/cm-t35/0003-omap3-cm-t35-update-defconfig-for-DSS2.patch
new file mode 100644
index 0000000000..dc1e5270c9
--- /dev/null
+++ b/recipes/linux/linux-omap-2.6.32/cm-t35/0003-omap3-cm-t35-update-defconfig-for-DSS2.patch
@@ -0,0 +1,145 @@
+From 10cd78db62cbda2f9db1c53d459ee03a35b84662 Mon Sep 17 00:00:00 2001
+From: Mike Rapoport <mike@compulab.co.il>
+Date: Tue, 1 Dec 2009 13:16:02 +0200
+Subject: [PATCH 3/6] omap3: cm-t35: update defconfig for DSS2
+
+Signed-off-by: Mike Rapoport <mike@compulab.co.il>
+---
+ arch/arm/configs/cm_t35_defconfig | 82 +++++++++++++++++++++++++++++++++++--
+ 1 files changed, 78 insertions(+), 4 deletions(-)
+
+diff --git a/arch/arm/configs/cm_t35_defconfig b/arch/arm/configs/cm_t35_defconfig
+index e42c5c8..bd6f882 100644
+--- a/arch/arm/configs/cm_t35_defconfig
++++ b/arch/arm/configs/cm_t35_defconfig
+@@ -1,7 +1,7 @@
+ #
+ # Automatically generated make config: don't edit
+-# Linux kernel version: 2.6.32-rc4
+-# Tue Oct 13 17:10:40 2009
++# Linux kernel version: 2.6.32-rc8
++# Tue Dec 1 12:08:44 2009
+ #
+ CONFIG_ARM=y
+ CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+@@ -215,6 +215,7 @@ CONFIG_OMAP_DM_TIMER=y
+ # CONFIG_OMAP_LL_DEBUG_UART1 is not set
+ # CONFIG_OMAP_LL_DEBUG_UART2 is not set
+ CONFIG_OMAP_LL_DEBUG_UART3=y
++# CONFIG_OMAP_LL_DEBUG_NONE is not set
+ # CONFIG_OMAP_PM_NONE is not set
+ CONFIG_OMAP_PM_NOOP=y
+ CONFIG_ARCH_OMAP34XX=y
+@@ -227,11 +228,15 @@ CONFIG_ARCH_OMAP3430=y
+ # CONFIG_MACH_OMAP_LDP is not set
+ # CONFIG_MACH_OVERO is not set
+ # CONFIG_MACH_OMAP3EVM is not set
++# CONFIG_MACH_OMAP3517EVM is not set
+ # CONFIG_MACH_OMAP3_PANDORA is not set
+ # CONFIG_MACH_OMAP_3430SDP is not set
+ # CONFIG_MACH_NOKIA_RX51 is not set
+ # CONFIG_MACH_OMAP_ZOOM2 is not set
++# CONFIG_MACH_OMAP_ZOOM3 is not set
+ CONFIG_MACH_CM_T35=y
++# CONFIG_MACH_IGEP0020 is not set
++# CONFIG_MACH_OMAP_3630SDP is not set
+
+ #
+ # Processor Type
+@@ -963,6 +968,7 @@ CONFIG_SSB_POSSIBLE=y
+ # CONFIG_TPS65010 is not set
+ CONFIG_TWL4030_CORE=y
+ # CONFIG_TWL4030_POWER is not set
++# CONFIG_TWL4030_CODEC is not set
+ # CONFIG_MFD_TMIO is not set
+ # CONFIG_MFD_T7L66XB is not set
+ # CONFIG_MFD_TC6387XB is not set
+@@ -993,8 +999,66 @@ CONFIG_REGULATOR_TWL4030=y
+ #
+ # CONFIG_VGASTATE is not set
+ # CONFIG_VIDEO_OUTPUT_CONTROL is not set
+-# CONFIG_FB is not set
+-# CONFIG_BACKLIGHT_LCD_SUPPORT is not set
++CONFIG_FB=y
++# CONFIG_FIRMWARE_EDID is not set
++# CONFIG_FB_DDC is not set
++# CONFIG_FB_BOOT_VESA_SUPPORT is not set
++CONFIG_FB_CFB_FILLRECT=y
++CONFIG_FB_CFB_COPYAREA=y
++CONFIG_FB_CFB_IMAGEBLIT=y
++# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
++# CONFIG_FB_SYS_FILLRECT is not set
++# CONFIG_FB_SYS_COPYAREA is not set
++# CONFIG_FB_SYS_IMAGEBLIT is not set
++# CONFIG_FB_FOREIGN_ENDIAN is not set
++# CONFIG_FB_SYS_FOPS is not set
++# CONFIG_FB_SVGALIB is not set
++# CONFIG_FB_MACMODES is not set
++# CONFIG_FB_BACKLIGHT is not set
++# CONFIG_FB_MODE_HELPERS is not set
++# CONFIG_FB_TILEBLITTING is not set
++
++#
++# Frame buffer hardware drivers
++#
++# CONFIG_FB_S1D13XXX is not set
++# CONFIG_FB_VIRTUAL is not set
++# CONFIG_FB_METRONOME is not set
++# CONFIG_FB_MB862XX is not set
++# CONFIG_FB_BROADSHEET is not set
++# CONFIG_FB_OMAP_BOOTLOADER_INIT is not set
++CONFIG_OMAP2_VRAM=y
++CONFIG_OMAP2_VRFB=y
++CONFIG_OMAP2_DSS=y
++CONFIG_OMAP2_VRAM_SIZE=4
++CONFIG_OMAP2_DSS_DEBUG_SUPPORT=y
++# CONFIG_OMAP2_DSS_RFBI is not set
++CONFIG_OMAP2_DSS_VENC=y
++# CONFIG_OMAP2_DSS_SDI is not set
++# CONFIG_OMAP2_DSS_DSI is not set
++# CONFIG_OMAP2_DSS_FAKE_VSYNC is not set
++CONFIG_OMAP2_DSS_MIN_FCK_PER_PCK=0
++CONFIG_FB_OMAP2=y
++CONFIG_FB_OMAP2_DEBUG_SUPPORT=y
++# CONFIG_FB_OMAP2_FORCE_AUTO_UPDATE is not set
++CONFIG_FB_OMAP2_NUM_FBS=3
++
++#
++# OMAP2/3 Display Device Drivers
++#
++CONFIG_PANEL_GENERIC=y
++# CONFIG_PANEL_SAMSUNG_LTE430WQ_F0C is not set
++# CONFIG_PANEL_SHARP_LS037V7DW01 is not set
++CONFIG_PANEL_TOPPOLY_TDO35S=y
++CONFIG_BACKLIGHT_LCD_SUPPORT=y
++CONFIG_LCD_CLASS_DEVICE=y
++# CONFIG_LCD_LMS283GF05 is not set
++# CONFIG_LCD_LTV350QV is not set
++# CONFIG_LCD_ILI9320 is not set
++CONFIG_LCD_TDO24M=y
++# CONFIG_LCD_VGG2432A4 is not set
++# CONFIG_LCD_PLATFORM is not set
++# CONFIG_BACKLIGHT_CLASS_DEVICE is not set
+
+ #
+ # Display device support
+@@ -1006,6 +1070,16 @@ CONFIG_REGULATOR_TWL4030=y
+ #
+ # CONFIG_VGA_CONSOLE is not set
+ CONFIG_DUMMY_CONSOLE=y
++CONFIG_FRAMEBUFFER_CONSOLE=y
++# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
++# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
++# CONFIG_FONTS is not set
++CONFIG_FONT_8x8=y
++CONFIG_FONT_8x16=y
++CONFIG_LOGO=y
++CONFIG_LOGO_LINUX_MONO=y
++CONFIG_LOGO_LINUX_VGA16=y
++CONFIG_LOGO_LINUX_CLUT224=y
+ # CONFIG_SOUND is not set
+ CONFIG_HID_SUPPORT=y
+ CONFIG_HID=y
+--
+1.6.4.4
+
diff --git a/recipes/linux/linux-omap-2.6.32/cm-t35/0004-omap3-cm-t35-add-cm-t35-mux-configs.patch b/recipes/linux/linux-omap-2.6.32/cm-t35/0004-omap3-cm-t35-add-cm-t35-mux-configs.patch
new file mode 100644
index 0000000000..ff8b50b1c9
--- /dev/null
+++ b/recipes/linux/linux-omap-2.6.32/cm-t35/0004-omap3-cm-t35-add-cm-t35-mux-configs.patch
@@ -0,0 +1,427 @@
+From a1a572a6b020996155fa3fd7e70a96299b37cf30 Mon Sep 17 00:00:00 2001
+From: Mike Rapoport <mike@compulab.co.il>
+Date: Mon, 7 Dec 2009 10:27:48 +0200
+Subject: [PATCH 4/6] omap3: cm-t35: add cm-t35 mux configs
+
+Signed-off-by: Mike Rapoport <mike@compulab.co.il>
+---
+ arch/arm/mach-omap2/board-cm-t35.c | 94 +++++++++++++++++++
+ arch/arm/mach-omap2/mux.c | 158 ++++++++++++++++++++++++++++++++-
+ arch/arm/plat-omap/include/plat/mux.h | 86 ++++++++++++++++++
+ 3 files changed, 337 insertions(+), 1 deletions(-)
+
+diff --git a/arch/arm/mach-omap2/board-cm-t35.c b/arch/arm/mach-omap2/board-cm-t35.c
+index 2d7a819..3e54499 100644
+--- a/arch/arm/mach-omap2/board-cm-t35.c
++++ b/arch/arm/mach-omap2/board-cm-t35.c
+@@ -693,6 +693,99 @@ static void __init cm_t35_init_i2c(void)
+ ARRAY_SIZE(cm_t35_i2c_boardinfo));
+ }
+
++static void __init cm_t35_init_mux(void)
++{
++ /* nCS and IRQ mux for CM-T35 ethernet */
++ omap_cfg_reg(G5_34XX_GPMC_NCS5);
++ omap_cfg_reg(A23_34XX_GPIO163_UP);
++
++ /* nCS, IRQ and reset mux for SB-T35 ethernet */
++ omap_cfg_reg(F4_34XX_GPMC_NCS4);
++ omap_cfg_reg(N21_34XX_GPIO127_UP);
++ omap_cfg_reg(B23_34XX_GPIO164_OUT);
++
++ /* PENDOWN GPIO */
++ omap_cfg_reg(F3_34XX_GPIO57_UP);
++
++ /* mUSB */
++ omap_cfg_reg(R21_3430_USB0HS_PHY_CLK);
++ omap_cfg_reg(R23_3430_USB0HS_PHY_STP);
++ omap_cfg_reg(P23_3430_USB0HS_PHY_DIR);
++ omap_cfg_reg(R22_3430_USB0HS_PHY_NXT);
++ omap_cfg_reg(T24_3430_USB0HS_PHY_DATA0);
++ omap_cfg_reg(T23_3430_USB0HS_PHY_DATA1);
++ omap_cfg_reg(U24_3430_USB0HS_PHY_DATA2);
++ omap_cfg_reg(U23_3430_USB0HS_PHY_DATA3);
++ omap_cfg_reg(W24_3430_USB0HS_PHY_DATA4);
++ omap_cfg_reg(V23_3430_USB0HS_PHY_DATA5);
++ omap_cfg_reg(W23_3430_USB0HS_PHY_DATA6);
++ omap_cfg_reg(T22_3430_USB0HS_PHY_DATA7);
++
++ /* MMC 2 */
++ omap_cfg_reg(AB2_3430_MMC2_DIR_DAT0);
++ omap_cfg_reg(AA2_3430_MMC2_DIR_DAT1);
++ omap_cfg_reg(Y2_3430_MMC2_DIR_CMD);
++ omap_cfg_reg(AA1_3420_MMC2_CLKIN);
++
++ /* McSPI 1 */
++ omap_cfg_reg(T5_34XX_MCSPI1_CLK);
++ omap_cfg_reg(R4_34XX_MCSPI1_SIMO);
++ omap_cfg_reg(T4_34XX_MCSPI1_SOMI);
++ omap_cfg_reg(T6_34XX_MCSPI1_CS0);
++
++ /* McBSP 2 */
++ omap_cfg_reg(V20_34XX_MCBSP2_FSX);
++ omap_cfg_reg(T21_34XX_MCBSP2_CLKX);
++ omap_cfg_reg(V19_34XX_MCBSP2_DR);
++ omap_cfg_reg(R20_34XX_MCBSP2_DX);
++
++ omap_cfg_reg(F21_34XX_GPIO109_OUT);
++
++ /* serial ports */
++ omap_cfg_reg(W4_34XX_UART2_TX);
++ omap_cfg_reg(V4_34XX_UART2_RX);
++ omap_cfg_reg(W7_34XX_UART1_TX);
++ omap_cfg_reg(V7_34XX_UART1_RX);
++
++ /* display controls */
++ omap_cfg_reg(U8_34XX_GPIO54_OUT);
++ omap_cfg_reg(G4_34XX_GPIO58_OUT);
++/* omap_cfg_reg(??_34XX_GPIO129_OUT); */
++
++ /* DSS */
++ omap_cfg_reg(G22_34XX_DSS_PCLK);
++ omap_cfg_reg(E22_34XX_DSS_HSYNC);
++ omap_cfg_reg(F22_34XX_DSS_VSYNC);
++ omap_cfg_reg(J21_34XX_DSS_ACBIAS);
++ omap_cfg_reg(AC19_34XX_DSS_DATA0);
++ omap_cfg_reg(AB19_34XX_DSS_DATA1);
++ omap_cfg_reg(AD20_34XX_DSS_DATA2);
++ omap_cfg_reg(AC20_34XX_DSS_DATA3);
++ omap_cfg_reg(AD21_34XX_DSS_DATA4);
++ omap_cfg_reg(AC21_34XX_DSS_DATA5);
++ omap_cfg_reg(D24_34XX_DSS_DATA6);
++ omap_cfg_reg(E23_34XX_DSS_DATA7);
++ omap_cfg_reg(E24_34XX_DSS_DATA8);
++ omap_cfg_reg(F23_34XX_DSS_DATA9);
++ omap_cfg_reg(AC22_34XX_DSS_DATA10);
++ omap_cfg_reg(AC23_34XX_DSS_DATA11);
++ omap_cfg_reg(AB22_34XX_DSS_DATA12);
++ omap_cfg_reg(Y22_34XX_DSS_DATA13);
++ omap_cfg_reg(W22_34XX_DSS_DATA14);
++ omap_cfg_reg(V22_34XX_DSS_DATA15);
++ omap_cfg_reg(J22_34XX_DSS_DATA16);
++ omap_cfg_reg(G23_34XX_DSS_DATA17);
++ omap_cfg_reg(G24_34XX_DSS_DATA18);
++ omap_cfg_reg(H23_34XX_DSS_DATA19);
++ omap_cfg_reg(D23_34XX_DSS_DATA20);
++ omap_cfg_reg(K22_34XX_DSS_DATA21);
++ omap_cfg_reg(V21_34XX_DSS_DATA22);
++ omap_cfg_reg(W21_34XX_DSS_DATA23);
++
++ /* TPS IRQ */
++ omap_cfg_reg(AF26_34XX_SYS_NIRQ);
++}
++
+ static struct omap_board_config_kernel cm_t35_config[] __initdata = {
+ };
+
+@@ -716,6 +809,7 @@ static void __init cm_t35_map_io(void)
+ static void __init cm_t35_init(void)
+ {
+ omap_serial_init();
++ cm_t35_init_mux();
+ cm_t35_init_i2c();
+ cm_t35_init_nand();
+ cm_t35_init_ads7846();
+diff --git a/arch/arm/mach-omap2/mux.c b/arch/arm/mach-omap2/mux.c
+index c18a94e..23eb011 100644
+--- a/arch/arm/mach-omap2/mux.c
++++ b/arch/arm/mach-omap2/mux.c
+@@ -279,6 +279,33 @@ MUX_CFG_34XX("AD26_34XX_I2C4_SCL", 0xa00,
+ MUX_CFG_34XX("AE26_34XX_I2C4_SDA", 0xa02,
+ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_INPUT_PULLUP)
+
++/* HSUSB Port 0 */
++MUX_CFG_34XX("R21_3430_USB0HS_PHY_CLK", 0x1a2,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_INPUT)
++MUX_CFG_34XX("R23_3430_USB0HS_PHY_STP", 0x1a4,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_OUTPUT | \
++ OMAP2_PULL_ENA | OMAP2_PULL_UP)
++MUX_CFG_34XX("P23_3430_USB0HS_PHY_DIR", 0x1a6,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_INPUT)
++MUX_CFG_34XX("R22_3430_USB0HS_PHY_NXT", 0x1a8,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_INPUT)
++MUX_CFG_34XX("T24_3430_USB0HS_PHY_DATA0", 0x1aa,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_INPUT)
++MUX_CFG_34XX("T23_3430_USB0HS_PHY_DATA1", 0x1ac,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_INPUT)
++MUX_CFG_34XX("U24_3430_USB0HS_PHY_DATA2", 0x1ae,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_INPUT)
++MUX_CFG_34XX("U23_3430_USB0HS_PHY_DATA3", 0x1b0,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_INPUT)
++MUX_CFG_34XX("W24_3430_USB0HS_PHY_DATA4", 0x1b2,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_INPUT)
++MUX_CFG_34XX("V23_3430_USB0HS_PHY_DATA5", 0x1b4,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_INPUT)
++MUX_CFG_34XX("W23_3430_USB0HS_PHY_DATA6", 0x1b6,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_INPUT)
++MUX_CFG_34XX("T22_3430_USB0HS_PHY_DATA7", 0x1b8,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_INPUT)
++
+ /* PHY - HSUSB: 12-pin ULPI PHY: Port 1*/
+ MUX_CFG_34XX("Y8_3430_USB1HS_PHY_CLK", 0x5da,
+ OMAP34XX_MUX_MODE3 | OMAP34XX_PIN_OUTPUT)
+@@ -541,6 +568,15 @@ MUX_CFG_34XX("AF3_3430_MMC2_DAT6", 0x168,
+ MUX_CFG_34XX("AE3_3430_MMC2_DAT7", 0x16A,
+ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_INPUT_PULLUP)
+
++MUX_CFG_34XX("AB2_3430_MMC2_DIR_DAT0", 0x164,
++ OMAP34XX_MUX_MODE1 | OMAP34XX_PIN_OUTPUT)
++MUX_CFG_34XX("AA2_3430_MMC2_DIR_DAT1", 0x166,
++ OMAP34XX_MUX_MODE1 | OMAP34XX_PIN_OUTPUT)
++MUX_CFG_34XX("Y2_3430_MMC2_DIR_CMD", 0x168,
++ OMAP34XX_MUX_MODE1 | OMAP34XX_PIN_OUTPUT)
++MUX_CFG_34XX("AA1_3420_MMC2_CLKIN", 0x16a,
++ OMAP34XX_MUX_MODE1 | OMAP34XX_PIN_INPUT)
++
+ /* MMC3 */
+ MUX_CFG_34XX("AF10_3430_MMC3_CLK", 0x5d8,
+ OMAP34XX_MUX_MODE2 | OMAP34XX_PIN_INPUT_PULLUP)
+@@ -559,13 +595,133 @@ MUX_CFG_34XX("AF13_3430_MMC3_DAT3", 0x5e2,
+ MUX_CFG_34XX("AF26_34XX_SYS_NIRQ", 0x1E0,
+ OMAP3_WAKEUP_EN | OMAP34XX_PIN_INPUT_PULLUP |
+ OMAP34XX_MUX_MODE0)
+-/* EHCI GPIO's on OMAP3EVM (Rev >= E) */
++
+ MUX_CFG_34XX("AH14_34XX_GPIO21", 0x5ea,
+ OMAP34XX_MUX_MODE4 | OMAP34XX_PIN_INPUT_PULLUP)
+ MUX_CFG_34XX("AF9_34XX_GPIO22", 0x5ec,
+ OMAP34XX_MUX_MODE4 | OMAP34XX_PIN_INPUT_PULLUP)
+ MUX_CFG_34XX("U3_34XX_GPIO61", 0x0c8,
+ OMAP34XX_MUX_MODE4 | OMAP34XX_PIN_INPUT_PULLUP)
++
++MUX_CFG_34XX("AG4_34XX_GPIO134", 0x160,
++ OMAP34XX_MUX_MODE4 | OMAP34XX_PIN_OUTPUT)
++MUX_CFG_34XX("U8_34XX_GPIO54", 0x0b4,
++ OMAP34XX_MUX_MODE4 | OMAP34XX_PIN_OUTPUT)
++MUX_CFG_34XX("AE4_34XX_GPIO136", 0x164,
++ OMAP34XX_MUX_MODE4 | OMAP34XX_PIN_OUTPUT)
++MUX_CFG_34XX("F3_34XX_GPIO57_UP", 0x0ba,
++ OMAP34XX_MUX_MODE4 | OMAP34XX_PIN_INPUT_PULLUP)
++MUX_CFG_34XX("G4_34XX_GPIO58_OUT", 0x0bc,
++ OMAP34XX_MUX_MODE4 | OMAP34XX_PIN_OUTPUT)
++MUX_CFG_34XX("W2_34XX_GPIO59", 0x0be,
++ OMAP34XX_MUX_MODE4 | OMAP34XX_PIN_INPUT)
++MUX_CFG_34XX("L1_34XX_GPIO61_OUT", 0x0c8,
++ OMAP34XX_MUX_MODE4 | OMAP34XX_PIN_OUTPUT)
++MUX_CFG_34XX("C2_34XX_GPIO65", 0x0d2,
++ OMAP34XX_MUX_MODE4 | OMAP34XX_PIN_OUTPUT)
++MUX_CFG_34XX("N21_34XX_GPIO127_UP", 0x152,
++ OMAP34XX_MUX_MODE4 | OMAP34XX_PIN_INPUT_PULLUP)
++MUX_CFG_34XX("A23_34XX_GPIO163_UP", 0x19a,
++ OMAP34XX_MUX_MODE4 | OMAP34XX_PIN_INPUT_PULLUP)
++MUX_CFG_34XX("B23_34XX_GPIO164_OUT", 0x19c,
++ OMAP34XX_MUX_MODE4 | OMAP34XX_PIN_OUTPUT)
++MUX_CFG_34XX("AA6_34XX_GPIO164_OUT", 0x1e2,
++ OMAP34XX_MUX_MODE4 | OMAP34XX_PIN_OUTPUT)
++
++/* GPMC */
++MUX_CFG_34XX("F4_34XX_GPMC_NCS4", 0x0b6, OMAP34XX_MUX_MODE0)
++MUX_CFG_34XX("G5_34XX_GPMC_NCS5", 0x0b8, OMAP34XX_MUX_MODE0)
++
++/* McSPI 1 */
++MUX_CFG_34XX("T5_34XX_MCSPI1_CLK", 0x1c8,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_INPUT)
++MUX_CFG_34XX("R4_34XX_MCSPI1_SIMO", 0x1ca,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_INPUT)
++MUX_CFG_34XX("T4_34XX_MCSPI1_SOMI", 0x1cc,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_INPUT)
++MUX_CFG_34XX("T6_34XX_MCSPI1_CS0", 0x1ce,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_INPUT_PULLDOWN)
++
++/* McBSP 2 */
++MUX_CFG_34XX("V20_34XX_MCBSP2_FSX", 0x13c,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_INPUT)
++MUX_CFG_34XX("T21_34XX_MCBSP2_CLKX", 0x13e,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_INPUT)
++MUX_CFG_34XX("V19_34XX_MCBSP2_DR", 0x140,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_INPUT)
++MUX_CFG_34XX("R20_34XX_MCBSP2_DX", 0x142,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_OUTPUT)
++
++MUX_CFG_34XX("F21_34XX_GPIO109_OUT", 0x12a,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_OUTPUT)
++
++/* Serial ports */
++MUX_CFG_34XX("W4_34XX_UART2_TX", 0x170,
++ OMAP34XX_MUX_MODE1 | OMAP34XX_PIN_OUTPUT)
++MUX_CFG_34XX("V4_34XX_UART2_RX", 0x172,
++ OMAP34XX_MUX_MODE1 | OMAP34XX_PIN_INPUT)
++MUX_CFG_34XX("W7_34XX_UART1_TX", 0x17c,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_OUTPUT)
++MUX_CFG_34XX("V7_34XX_UART1_RX", 0x182,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_INPUT)
++
++/* DSS */
++MUX_CFG_34XX("G22_34XX_DSS_PCLK", 0x0d4,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_OUTPUT)
++MUX_CFG_34XX("E22_34XX_DSS_HSYNC", 0x0d6,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_OUTPUT)
++MUX_CFG_34XX("F22_34XX_DSS_VSYNC", 0x0d8,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_OUTPUT)
++MUX_CFG_34XX("J21_34XX_DSS_ACBIAS", 0x0da,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_OUTPUT)
++MUX_CFG_34XX("AC19_34XX_DSS_DATA0", 0x0dc,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_OUTPUT)
++MUX_CFG_34XX("AB19_34XX_DSS_DATA1", 0x0de,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_OUTPUT)
++MUX_CFG_34XX("AD20_34XX_DSS_DATA2", 0x0e0,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_OUTPUT)
++MUX_CFG_34XX("AC20_34XX_DSS_DATA3", 0x0e2,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_OUTPUT)
++MUX_CFG_34XX("AD21_34XX_DSS_DATA4", 0x0e4,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_OUTPUT)
++MUX_CFG_34XX("AC21_34XX_DSS_DATA5", 0x0e6,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_OUTPUT)
++MUX_CFG_34XX("D24_34XX_DSS_DATA6", 0x0e8,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_OUTPUT)
++MUX_CFG_34XX("E23_34XX_DSS_DATA7", 0x0ea,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_OUTPUT)
++MUX_CFG_34XX("E24_34XX_DSS_DATA8", 0x0ec,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_OUTPUT)
++MUX_CFG_34XX("F23_34XX_DSS_DATA9", 0x0ee,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_OUTPUT)
++MUX_CFG_34XX("AC22_34XX_DSS_DATA10", 0x0f0,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_OUTPUT)
++MUX_CFG_34XX("AC23_34XX_DSS_DATA11", 0x0f2,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_OUTPUT)
++MUX_CFG_34XX("AB22_34XX_DSS_DATA12", 0x0f4,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_OUTPUT)
++MUX_CFG_34XX("Y22_34XX_DSS_DATA13", 0x0f6,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_OUTPUT)
++MUX_CFG_34XX("W22_34XX_DSS_DATA14", 0x0f8,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_OUTPUT)
++MUX_CFG_34XX("V22_34XX_DSS_DATA15", 0x0fa,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_OUTPUT)
++MUX_CFG_34XX("J22_34XX_DSS_DATA16", 0x0fc,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_OUTPUT)
++MUX_CFG_34XX("G23_34XX_DSS_DATA17", 0x0fe,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_OUTPUT)
++MUX_CFG_34XX("G24_34XX_DSS_DATA18", 0x100,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_OUTPUT)
++MUX_CFG_34XX("H23_34XX_DSS_DATA19", 0x102,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_OUTPUT)
++MUX_CFG_34XX("D23_34XX_DSS_DATA20", 0x104,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_OUTPUT)
++MUX_CFG_34XX("K22_34XX_DSS_DATA21", 0x106,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_OUTPUT)
++MUX_CFG_34XX("V21_34XX_DSS_DATA22", 0x108,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_OUTPUT)
++MUX_CFG_34XX("W21_34XX_DSS_DATA23", 0x10a,
++ OMAP34XX_MUX_MODE0 | OMAP34XX_PIN_OUTPUT)
+ };
+
+ #define OMAP34XX_PINS_SZ ARRAY_SIZE(omap34xx_pins)
+diff --git a/arch/arm/plat-omap/include/plat/mux.h b/arch/arm/plat-omap/include/plat/mux.h
+index ba77de6..119379c 100644
+--- a/arch/arm/plat-omap/include/plat/mux.h
++++ b/arch/arm/plat-omap/include/plat/mux.h
+@@ -692,6 +692,20 @@ enum omap34xx_index {
+ AD26_34XX_I2C4_SCL,
+ AE26_34XX_I2C4_SDA,
+
++ /* HSUSB Port 0 */
++ R21_3430_USB0HS_PHY_CLK,
++ R23_3430_USB0HS_PHY_STP,
++ P23_3430_USB0HS_PHY_DIR,
++ R22_3430_USB0HS_PHY_NXT,
++ T24_3430_USB0HS_PHY_DATA0,
++ T23_3430_USB0HS_PHY_DATA1,
++ U24_3430_USB0HS_PHY_DATA2,
++ U23_3430_USB0HS_PHY_DATA3,
++ W24_3430_USB0HS_PHY_DATA4,
++ V23_3430_USB0HS_PHY_DATA5,
++ W23_3430_USB0HS_PHY_DATA6,
++ T22_3430_USB0HS_PHY_DATA7,
++
+ /* PHY - HSUSB: 12-pin ULPI PHY: Port 1*/
+ Y8_3430_USB1HS_PHY_CLK,
+ Y9_3430_USB1HS_PHY_STP,
+@@ -839,6 +853,11 @@ enum omap34xx_index {
+ AF3_3430_MMC2_DAT6,
+ AE3_3430_MMC2_DAT7,
+
++ AB2_3430_MMC2_DIR_DAT0,
++ AA2_3430_MMC2_DIR_DAT1,
++ Y2_3430_MMC2_DIR_CMD,
++ AA1_3420_MMC2_CLKIN,
++
+ /* MMC3 */
+ AF10_3430_MMC3_CLK,
+ AC3_3430_MMC3_CMD,
+@@ -854,6 +873,73 @@ enum omap34xx_index {
+ AH14_34XX_GPIO21,
+ AF9_34XX_GPIO22,
+ U3_34XX_GPIO61,
++
++ AG4_34XX_GPIO134,
++ U8_34XX_GPIO54,
++ AE4_34XX_GPIO136,
++ F3_34XX_GPIO57_UP,
++ G4_34XX_GPIO58_OUT,
++ W2_34XX_GPIO59,
++ L1_34XX_GPIO61_OUT,
++ C2_34XX_GPIO65,
++ N21_34XX_GPIO127_UP,
++ A23_34XX_GPIO163_UP,
++ B23_34XX_GPIO164_OUT,
++ AA6_34XX_GPIO186_OUT,
++
++ /* gpmc */
++ F4_34XX_GPMC_NCS4,
++ G5_34XX_GPMC_NCS5,
++
++ /* McSPI 1 */
++ T5_34XX_MCSPI1_CLK,
++ R4_34XX_MCSPI1_SIMO,
++ T4_34XX_MCSPI1_SOMI,
++ T6_34XX_MCSPI1_CS0,
++
++ /* McBSP 2 */
++ V20_34XX_MCBSP2_FSX,
++ T21_34XX_MCBSP2_CLKX,
++ V19_34XX_MCBSP2_DR,
++ R20_34XX_MCBSP2_DX,
++
++ F21_34XX_GPIO109_OUT,
++
++ /* serial ports */
++ W4_34XX_UART2_TX,
++ V4_34XX_UART2_RX,
++ W7_34XX_UART1_TX,
++ V7_34XX_UART1_RX,
++
++ /* DSS */
++ G22_34XX_DSS_PCLK,
++ E22_34XX_DSS_HSYNC,
++ F22_34XX_DSS_VSYNC,
++ J21_34XX_DSS_ACBIAS,
++ AC19_34XX_DSS_DATA0,
++ AB19_34XX_DSS_DATA1,
++ AD20_34XX_DSS_DATA2,
++ AC20_34XX_DSS_DATA3,
++ AD21_34XX_DSS_DATA4,
++ AC21_34XX_DSS_DATA5,
++ D24_34XX_DSS_DATA6,
++ E23_34XX_DSS_DATA7,
++ E24_34XX_DSS_DATA8,
++ F23_34XX_DSS_DATA9,
++ AC22_34XX_DSS_DATA10,
++ AC23_34XX_DSS_DATA11,
++ AB22_34XX_DSS_DATA12,
++ Y22_34XX_DSS_DATA13,
++ W22_34XX_DSS_DATA14,
++ V22_34XX_DSS_DATA15,
++ J22_34XX_DSS_DATA16,
++ G23_34XX_DSS_DATA17,
++ G24_34XX_DSS_DATA18,
++ H23_34XX_DSS_DATA19,
++ D23_34XX_DSS_DATA20,
++ K22_34XX_DSS_DATA21,
++ V21_34XX_DSS_DATA22,
++ W21_34XX_DSS_DATA23,
+ };
+
+ struct omap_mux_cfg {
+--
+1.6.4.4
+
diff --git a/recipes/linux/linux-omap-2.6.32/cm-t35/0006-omap3-cm-t35-update-defconfig.patch b/recipes/linux/linux-omap-2.6.32/cm-t35/0006-omap3-cm-t35-update-defconfig.patch
new file mode 100644
index 0000000000..a9034f08a7
--- /dev/null
+++ b/recipes/linux/linux-omap-2.6.32/cm-t35/0006-omap3-cm-t35-update-defconfig.patch
@@ -0,0 +1,87 @@
+From 88f7dc4c115c57b12de7ab4170bdaaeba145283b Mon Sep 17 00:00:00 2001
+From: Mike Rapoport <mike@compulab.co.il>
+Date: Mon, 7 Dec 2009 11:07:55 +0200
+Subject: [PATCH 6/6] omap3: cm-t35: update defconfig
+
+Signed-off-by: Mike Rapoport <mike@compulab.co.il>
+---
+ arch/arm/configs/cm_t35_defconfig | 28 ++++++++++++++++++++++------
+ 1 files changed, 22 insertions(+), 6 deletions(-)
+
+diff --git a/arch/arm/configs/cm_t35_defconfig b/arch/arm/configs/cm_t35_defconfig
+index bd6f882..78eeb66 100644
+--- a/arch/arm/configs/cm_t35_defconfig
++++ b/arch/arm/configs/cm_t35_defconfig
+@@ -1,7 +1,7 @@
+ #
+ # Automatically generated make config: don't edit
+-# Linux kernel version: 2.6.32-rc8
+-# Tue Dec 1 12:08:44 2009
++# Linux kernel version: 2.6.32
++# Mon Dec 7 10:43:46 2009
+ #
+ CONFIG_ARM=y
+ CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+@@ -572,7 +572,15 @@ CONFIG_MTD_NAND_IDS=y
+ #
+ # UBI - Unsorted block images
+ #
+-# CONFIG_MTD_UBI is not set
++CONFIG_MTD_UBI=y
++CONFIG_MTD_UBI_WL_THRESHOLD=4096
++CONFIG_MTD_UBI_BEB_RESERVE=1
++# CONFIG_MTD_UBI_GLUEBI is not set
++
++#
++# UBI debugging options
++#
++# CONFIG_MTD_UBI_DEBUG is not set
+ # CONFIG_PARPORT is not set
+ CONFIG_BLK_DEV=y
+ # CONFIG_BLK_DEV_COW_COMMON is not set
+@@ -1506,6 +1514,12 @@ CONFIG_JFFS2_RTIME=y
+ CONFIG_JFFS2_CMODE_PRIORITY=y
+ # CONFIG_JFFS2_CMODE_SIZE is not set
+ # CONFIG_JFFS2_CMODE_FAVOURLZO is not set
++CONFIG_UBIFS_FS=y
++# CONFIG_UBIFS_FS_XATTR is not set
++# CONFIG_UBIFS_FS_ADVANCED_COMPR is not set
++CONFIG_UBIFS_FS_LZO=y
++CONFIG_UBIFS_FS_ZLIB=y
++# CONFIG_UBIFS_FS_DEBUG is not set
+ # CONFIG_CRAMFS is not set
+ # CONFIG_SQUASHFS is not set
+ # CONFIG_VXFS_FS is not set
+@@ -1775,9 +1789,9 @@ CONFIG_CRYPTO_DES=y
+ #
+ # Compression
+ #
+-# CONFIG_CRYPTO_DEFLATE is not set
++CONFIG_CRYPTO_DEFLATE=y
+ # CONFIG_CRYPTO_ZLIB is not set
+-# CONFIG_CRYPTO_LZO is not set
++CONFIG_CRYPTO_LZO=y
+
+ #
+ # Random Number Generation
+@@ -1792,7 +1806,7 @@ CONFIG_CRYPTO_HW=y
+ CONFIG_BITREVERSE=y
+ CONFIG_GENERIC_FIND_LAST_BIT=y
+ CONFIG_CRC_CCITT=y
+-# CONFIG_CRC16 is not set
++CONFIG_CRC16=y
+ # CONFIG_CRC_T10DIF is not set
+ # CONFIG_CRC_ITU_T is not set
+ CONFIG_CRC32=y
+@@ -1800,6 +1814,8 @@ CONFIG_CRC32=y
+ CONFIG_LIBCRC32C=y
+ CONFIG_ZLIB_INFLATE=y
+ CONFIG_ZLIB_DEFLATE=y
++CONFIG_LZO_COMPRESS=y
++CONFIG_LZO_DECOMPRESS=y
+ CONFIG_DECOMPRESS_GZIP=y
+ CONFIG_HAS_IOMEM=y
+ CONFIG_HAS_IOPORT=y
+--
+1.6.4.4
+
diff --git a/recipes/linux/linux-omap-2.6.32/cm-t35/defconfig b/recipes/linux/linux-omap-2.6.32/cm-t35/defconfig
new file mode 100644
index 0000000000..78eeb66d59
--- /dev/null
+++ b/recipes/linux/linux-omap-2.6.32/cm-t35/defconfig
@@ -0,0 +1,1823 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.32
+# Mon Dec 7 10:43:46 2009
+#
+CONFIG_ARM=y
+CONFIG_SYS_SUPPORTS_APM_EMULATION=y
+CONFIG_GENERIC_GPIO=y
+CONFIG_GENERIC_TIME=y
+CONFIG_GENERIC_CLOCKEVENTS=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_STACKTRACE_SUPPORT=y
+CONFIG_HAVE_LATENCYTOP_SUPPORT=y
+CONFIG_LOCKDEP_SUPPORT=y
+CONFIG_TRACE_IRQFLAGS_SUPPORT=y
+CONFIG_HARDIRQS_SW_RESEND=y
+CONFIG_GENERIC_IRQ_PROBE=y
+CONFIG_RWSEM_GENERIC_SPINLOCK=y
+CONFIG_ARCH_HAS_CPUFREQ=y
+CONFIG_GENERIC_HWEIGHT=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
+CONFIG_VECTORS_BASE=0xffff0000
+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+CONFIG_CONSTRUCTORS=y
+
+#
+# General setup
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+CONFIG_LOCALVERSION=""
+CONFIG_LOCALVERSION_AUTO=y
+CONFIG_SWAP=y
+CONFIG_SYSVIPC=y
+CONFIG_SYSVIPC_SYSCTL=y
+# CONFIG_POSIX_MQUEUE is not set
+CONFIG_BSD_PROCESS_ACCT=y
+# CONFIG_BSD_PROCESS_ACCT_V3 is not set
+# CONFIG_TASKSTATS is not set
+# CONFIG_AUDIT is not set
+
+#
+# RCU Subsystem
+#
+CONFIG_TREE_RCU=y
+# CONFIG_TREE_PREEMPT_RCU is not set
+# CONFIG_RCU_TRACE is not set
+CONFIG_RCU_FANOUT=32
+# CONFIG_RCU_FANOUT_EXACT is not set
+# CONFIG_TREE_RCU_TRACE is not set
+CONFIG_IKCONFIG=y
+CONFIG_IKCONFIG_PROC=y
+CONFIG_LOG_BUF_SHIFT=17
+CONFIG_GROUP_SCHED=y
+CONFIG_FAIR_GROUP_SCHED=y
+# CONFIG_RT_GROUP_SCHED is not set
+CONFIG_USER_SCHED=y
+# CONFIG_CGROUP_SCHED is not set
+# CONFIG_CGROUPS is not set
+CONFIG_SYSFS_DEPRECATED=y
+CONFIG_SYSFS_DEPRECATED_V2=y
+# CONFIG_RELAY is not set
+# CONFIG_NAMESPACES is not set
+CONFIG_BLK_DEV_INITRD=y
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_RD_GZIP=y
+# CONFIG_RD_BZIP2 is not set
+# CONFIG_RD_LZMA is not set
+CONFIG_CC_OPTIMIZE_FOR_SIZE=y
+CONFIG_SYSCTL=y
+CONFIG_ANON_INODES=y
+CONFIG_EMBEDDED=y
+CONFIG_UID16=y
+# CONFIG_SYSCTL_SYSCALL is not set
+CONFIG_KALLSYMS=y
+# CONFIG_KALLSYMS_ALL is not set
+CONFIG_KALLSYMS_EXTRA_PASS=y
+CONFIG_HOTPLUG=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_ELF_CORE=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+CONFIG_SIGNALFD=y
+CONFIG_TIMERFD=y
+CONFIG_EVENTFD=y
+CONFIG_SHMEM=y
+CONFIG_AIO=y
+
+#
+# Kernel Performance Events And Counters
+#
+CONFIG_VM_EVENT_COUNTERS=y
+CONFIG_COMPAT_BRK=y
+CONFIG_SLAB=y
+# CONFIG_SLUB is not set
+# CONFIG_SLOB is not set
+# CONFIG_PROFILING is not set
+CONFIG_HAVE_OPROFILE=y
+# CONFIG_KPROBES is not set
+CONFIG_HAVE_KPROBES=y
+CONFIG_HAVE_KRETPROBES=y
+CONFIG_HAVE_CLK=y
+
+#
+# GCOV-based kernel profiling
+#
+# CONFIG_GCOV_KERNEL is not set
+# CONFIG_SLOW_WORK is not set
+CONFIG_HAVE_GENERIC_DMA_COHERENT=y
+CONFIG_SLABINFO=y
+CONFIG_RT_MUTEXES=y
+CONFIG_BASE_SMALL=0
+CONFIG_MODULES=y
+# CONFIG_MODULE_FORCE_LOAD is not set
+CONFIG_MODULE_UNLOAD=y
+# CONFIG_MODULE_FORCE_UNLOAD is not set
+CONFIG_MODVERSIONS=y
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+CONFIG_BLOCK=y
+CONFIG_LBDAF=y
+# CONFIG_BLK_DEV_BSG is not set
+# CONFIG_BLK_DEV_INTEGRITY is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+CONFIG_FREEZER=y
+
+#
+# System Type
+#
+CONFIG_MMU=y
+# CONFIG_ARCH_AAEC2000 is not set
+# CONFIG_ARCH_INTEGRATOR is not set
+# CONFIG_ARCH_REALVIEW is not set
+# CONFIG_ARCH_VERSATILE is not set
+# CONFIG_ARCH_AT91 is not set
+# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_GEMINI is not set
+# CONFIG_ARCH_EBSA110 is not set
+# CONFIG_ARCH_EP93XX is not set
+# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_MXC is not set
+# CONFIG_ARCH_STMP3XXX is not set
+# CONFIG_ARCH_NETX is not set
+# CONFIG_ARCH_H720X is not set
+# CONFIG_ARCH_NOMADIK is not set
+# CONFIG_ARCH_IOP13XX is not set
+# CONFIG_ARCH_IOP32X is not set
+# CONFIG_ARCH_IOP33X is not set
+# CONFIG_ARCH_IXP23XX is not set
+# CONFIG_ARCH_IXP2000 is not set
+# CONFIG_ARCH_IXP4XX is not set
+# CONFIG_ARCH_L7200 is not set
+# CONFIG_ARCH_KIRKWOOD is not set
+# CONFIG_ARCH_LOKI is not set
+# CONFIG_ARCH_MV78XX0 is not set
+# CONFIG_ARCH_ORION5X is not set
+# CONFIG_ARCH_MMP is not set
+# CONFIG_ARCH_KS8695 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_W90X900 is not set
+# CONFIG_ARCH_PNX4008 is not set
+# CONFIG_ARCH_PXA is not set
+# CONFIG_ARCH_MSM is not set
+# CONFIG_ARCH_RPC is not set
+# CONFIG_ARCH_SA1100 is not set
+# CONFIG_ARCH_S3C2410 is not set
+# CONFIG_ARCH_S3C64XX is not set
+# CONFIG_ARCH_S5PC1XX is not set
+# CONFIG_ARCH_SHARK is not set
+# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_U300 is not set
+# CONFIG_ARCH_DAVINCI is not set
+CONFIG_ARCH_OMAP=y
+# CONFIG_ARCH_BCMRING is not set
+
+#
+# TI OMAP Implementations
+#
+CONFIG_ARCH_OMAP_OTG=y
+# CONFIG_ARCH_OMAP1 is not set
+# CONFIG_ARCH_OMAP2 is not set
+CONFIG_ARCH_OMAP3=y
+# CONFIG_ARCH_OMAP4 is not set
+
+#
+# OMAP Feature Selections
+#
+# CONFIG_OMAP_DEBUG_POWERDOMAIN is not set
+# CONFIG_OMAP_DEBUG_CLOCKDOMAIN is not set
+CONFIG_OMAP_RESET_CLOCKS=y
+CONFIG_OMAP_MUX=y
+# CONFIG_OMAP_MUX_DEBUG is not set
+CONFIG_OMAP_MUX_WARNINGS=y
+CONFIG_OMAP_MCBSP=y
+# CONFIG_OMAP_MBOX_FWK is not set
+# CONFIG_OMAP_MPU_TIMER is not set
+CONFIG_OMAP_32K_TIMER=y
+CONFIG_OMAP_32K_TIMER_HZ=128
+CONFIG_OMAP_DM_TIMER=y
+# CONFIG_OMAP_LL_DEBUG_UART1 is not set
+# CONFIG_OMAP_LL_DEBUG_UART2 is not set
+CONFIG_OMAP_LL_DEBUG_UART3=y
+# CONFIG_OMAP_LL_DEBUG_NONE is not set
+# CONFIG_OMAP_PM_NONE is not set
+CONFIG_OMAP_PM_NOOP=y
+CONFIG_ARCH_OMAP34XX=y
+CONFIG_ARCH_OMAP3430=y
+
+#
+# OMAP Board Type
+#
+# CONFIG_MACH_OMAP3_BEAGLE is not set
+# CONFIG_MACH_OMAP_LDP is not set
+# CONFIG_MACH_OVERO is not set
+# CONFIG_MACH_OMAP3EVM is not set
+# CONFIG_MACH_OMAP3517EVM is not set
+# CONFIG_MACH_OMAP3_PANDORA is not set
+# CONFIG_MACH_OMAP_3430SDP is not set
+# CONFIG_MACH_NOKIA_RX51 is not set
+# CONFIG_MACH_OMAP_ZOOM2 is not set
+# CONFIG_MACH_OMAP_ZOOM3 is not set
+CONFIG_MACH_CM_T35=y
+# CONFIG_MACH_IGEP0020 is not set
+# CONFIG_MACH_OMAP_3630SDP is not set
+
+#
+# Processor Type
+#
+CONFIG_CPU_32=y
+CONFIG_CPU_32v6K=y
+CONFIG_CPU_V7=y
+CONFIG_CPU_32v7=y
+CONFIG_CPU_ABRT_EV7=y
+CONFIG_CPU_PABRT_V7=y
+CONFIG_CPU_CACHE_V7=y
+CONFIG_CPU_CACHE_VIPT=y
+CONFIG_CPU_COPY_V6=y
+CONFIG_CPU_TLB_V7=y
+CONFIG_CPU_HAS_ASID=y
+CONFIG_CPU_CP15=y
+CONFIG_CPU_CP15_MMU=y
+
+#
+# Processor Features
+#
+CONFIG_ARM_THUMB=y
+# CONFIG_ARM_THUMBEE is not set
+# CONFIG_CPU_ICACHE_DISABLE is not set
+# CONFIG_CPU_DCACHE_DISABLE is not set
+# CONFIG_CPU_BPREDICT_DISABLE is not set
+CONFIG_HAS_TLS_REG=y
+CONFIG_ARM_L1_CACHE_SHIFT=6
+# CONFIG_ARM_ERRATA_430973 is not set
+# CONFIG_ARM_ERRATA_458693 is not set
+# CONFIG_ARM_ERRATA_460075 is not set
+CONFIG_COMMON_CLKDEV=y
+
+#
+# Bus support
+#
+# CONFIG_PCI_SYSCALL is not set
+# CONFIG_ARCH_SUPPORTS_MSI is not set
+# CONFIG_PCCARD is not set
+
+#
+# Kernel Features
+#
+CONFIG_TICK_ONESHOT=y
+CONFIG_NO_HZ=y
+CONFIG_HIGH_RES_TIMERS=y
+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
+CONFIG_VMSPLIT_3G=y
+# CONFIG_VMSPLIT_2G is not set
+# CONFIG_VMSPLIT_1G is not set
+CONFIG_PAGE_OFFSET=0xC0000000
+CONFIG_PREEMPT_NONE=y
+# CONFIG_PREEMPT_VOLUNTARY is not set
+# CONFIG_PREEMPT is not set
+CONFIG_HZ=128
+# CONFIG_THUMB2_KERNEL is not set
+CONFIG_AEABI=y
+CONFIG_OABI_COMPAT=y
+# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set
+# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set
+# CONFIG_HIGHMEM is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+CONFIG_PAGEFLAGS_EXTENDED=y
+CONFIG_SPLIT_PTLOCK_CPUS=4
+# CONFIG_PHYS_ADDR_T_64BIT is not set
+CONFIG_ZONE_DMA_FLAG=0
+CONFIG_VIRT_TO_BUS=y
+CONFIG_HAVE_MLOCK=y
+CONFIG_HAVE_MLOCKED_PAGE_BIT=y
+# CONFIG_KSM is not set
+CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
+# CONFIG_LEDS is not set
+CONFIG_ALIGNMENT_TRAP=y
+# CONFIG_UACCESS_WITH_MEMCPY is not set
+
+#
+# Boot options
+#
+CONFIG_ZBOOT_ROM_TEXT=0x0
+CONFIG_ZBOOT_ROM_BSS=0x0
+CONFIG_CMDLINE=""
+# CONFIG_XIP_KERNEL is not set
+# CONFIG_KEXEC is not set
+
+#
+# CPU Power Management
+#
+# CONFIG_CPU_FREQ is not set
+# CONFIG_CPU_IDLE is not set
+
+#
+# Floating point emulation
+#
+
+#
+# At least one emulation must be selected
+#
+CONFIG_FPE_NWFPE=y
+# CONFIG_FPE_NWFPE_XP is not set
+# CONFIG_FPE_FASTFPE is not set
+CONFIG_VFP=y
+CONFIG_VFPv3=y
+CONFIG_NEON=y
+
+#
+# Userspace binary formats
+#
+CONFIG_BINFMT_ELF=y
+# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set
+CONFIG_HAVE_AOUT=y
+# CONFIG_BINFMT_AOUT is not set
+CONFIG_BINFMT_MISC=y
+
+#
+# Power management options
+#
+CONFIG_PM=y
+# CONFIG_PM_DEBUG is not set
+CONFIG_PM_SLEEP=y
+CONFIG_SUSPEND=y
+CONFIG_SUSPEND_FREEZER=y
+# CONFIG_APM_EMULATION is not set
+# CONFIG_PM_RUNTIME is not set
+CONFIG_ARCH_SUSPEND_POSSIBLE=y
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+# CONFIG_PACKET_MMAP is not set
+CONFIG_UNIX=y
+CONFIG_XFRM=y
+# CONFIG_XFRM_USER is not set
+# CONFIG_XFRM_SUB_POLICY is not set
+# CONFIG_XFRM_MIGRATE is not set
+# CONFIG_XFRM_STATISTICS is not set
+CONFIG_NET_KEY=y
+# CONFIG_NET_KEY_MIGRATE is not set
+CONFIG_INET=y
+# CONFIG_IP_MULTICAST is not set
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+CONFIG_IP_PNP_DHCP=y
+CONFIG_IP_PNP_BOOTP=y
+CONFIG_IP_PNP_RARP=y
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_ARPD is not set
+# CONFIG_SYN_COOKIES is not set
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_XFRM_TUNNEL is not set
+# CONFIG_INET_TUNNEL is not set
+CONFIG_INET_XFRM_MODE_TRANSPORT=y
+CONFIG_INET_XFRM_MODE_TUNNEL=y
+CONFIG_INET_XFRM_MODE_BEET=y
+# CONFIG_INET_LRO is not set
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_CUBIC=y
+CONFIG_DEFAULT_TCP_CONG="cubic"
+# CONFIG_TCP_MD5SIG is not set
+# CONFIG_IPV6 is not set
+# CONFIG_NETWORK_SECMARK is not set
+# CONFIG_NETFILTER is not set
+# CONFIG_IP_DCCP is not set
+# CONFIG_IP_SCTP is not set
+# CONFIG_RDS is not set
+# CONFIG_TIPC is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_NET_DSA is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+# CONFIG_PHONET is not set
+# CONFIG_IEEE802154 is not set
+# CONFIG_NET_SCHED is not set
+# CONFIG_DCB is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_CAN is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+# CONFIG_AF_RXRPC is not set
+CONFIG_WIRELESS=y
+# CONFIG_CFG80211 is not set
+CONFIG_CFG80211_DEFAULT_PS_VALUE=0
+# CONFIG_WIRELESS_OLD_REGULATORY is not set
+CONFIG_WIRELESS_EXT=y
+CONFIG_WIRELESS_EXT_SYSFS=y
+CONFIG_LIB80211=m
+# CONFIG_LIB80211_DEBUG is not set
+
+#
+# CFG80211 needs to be enabled for MAC80211
+#
+# CONFIG_WIMAX is not set
+# CONFIG_RFKILL is not set
+# CONFIG_NET_9P is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+# CONFIG_DEVTMPFS is not set
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+CONFIG_FW_LOADER=m
+CONFIG_FIRMWARE_IN_KERNEL=y
+CONFIG_EXTRA_FIRMWARE=""
+# CONFIG_DEBUG_DRIVER is not set
+# CONFIG_DEBUG_DEVRES is not set
+# CONFIG_SYS_HYPERVISOR is not set
+# CONFIG_CONNECTOR is not set
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_TESTS is not set
+CONFIG_MTD_CONCAT=y
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+CONFIG_MTD_CMDLINE_PARTS=y
+# CONFIG_MTD_AFS_PARTS is not set
+# CONFIG_MTD_AR7_PARTS is not set
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLKDEVS=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+# CONFIG_SSFDC is not set
+# CONFIG_MTD_OOPS is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=y
+# CONFIG_MTD_JEDECPROBE is not set
+CONFIG_MTD_GEN_PROBE=y
+# CONFIG_MTD_CFI_ADV_OPTIONS is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+CONFIG_MTD_CFI_INTELEXT=y
+# CONFIG_MTD_CFI_AMDSTD is not set
+# CONFIG_MTD_CFI_STAA is not set
+CONFIG_MTD_CFI_UTIL=y
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_PHYSMAP is not set
+# CONFIG_MTD_ARM_INTEGRATOR is not set
+# CONFIG_MTD_OMAP_NOR is not set
+# CONFIG_MTD_PLATRAM is not set
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_DATAFLASH is not set
+# CONFIG_MTD_M25P80 is not set
+# CONFIG_MTD_SST25L is not set
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+CONFIG_MTD_NAND=y
+# CONFIG_MTD_NAND_VERIFY_WRITE is not set
+# CONFIG_MTD_NAND_ECC_SMC is not set
+# CONFIG_MTD_NAND_MUSEUM_IDS is not set
+# CONFIG_MTD_NAND_GPIO is not set
+CONFIG_MTD_NAND_OMAP2=y
+CONFIG_MTD_NAND_OMAP_PREFETCH=y
+# CONFIG_MTD_NAND_OMAP_PREFETCH_DMA is not set
+CONFIG_MTD_NAND_IDS=y
+# CONFIG_MTD_NAND_DISKONCHIP is not set
+# CONFIG_MTD_NAND_NANDSIM is not set
+# CONFIG_MTD_NAND_PLATFORM is not set
+# CONFIG_MTD_ALAUDA is not set
+# CONFIG_MTD_ONENAND is not set
+
+#
+# LPDDR flash memory drivers
+#
+# CONFIG_MTD_LPDDR is not set
+
+#
+# UBI - Unsorted block images
+#
+CONFIG_MTD_UBI=y
+CONFIG_MTD_UBI_WL_THRESHOLD=4096
+CONFIG_MTD_UBI_BEB_RESERVE=1
+# CONFIG_MTD_UBI_GLUEBI is not set
+
+#
+# UBI debugging options
+#
+# CONFIG_MTD_UBI_DEBUG is not set
+# CONFIG_PARPORT is not set
+CONFIG_BLK_DEV=y
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=y
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+# CONFIG_BLK_DEV_UB is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=16384
+# CONFIG_BLK_DEV_XIP is not set
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+# CONFIG_MG_DISK is not set
+CONFIG_MISC_DEVICES=y
+# CONFIG_ICS932S401 is not set
+# CONFIG_ENCLOSURE_SERVICES is not set
+# CONFIG_ISL29003 is not set
+# CONFIG_C2PORT is not set
+
+#
+# EEPROM support
+#
+# CONFIG_EEPROM_AT24 is not set
+# CONFIG_EEPROM_AT25 is not set
+# CONFIG_EEPROM_LEGACY is not set
+# CONFIG_EEPROM_MAX6875 is not set
+# CONFIG_EEPROM_93CX6 is not set
+CONFIG_HAVE_IDE=y
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+CONFIG_SCSI=y
+CONFIG_SCSI_DMA=y
+# CONFIG_SCSI_TGT is not set
+# CONFIG_SCSI_NETLINK is not set
+CONFIG_SCSI_PROC_FS=y
+
+#
+# SCSI support type (disk, tape, CD-ROM)
+#
+CONFIG_BLK_DEV_SD=y
+# CONFIG_CHR_DEV_ST is not set
+# CONFIG_CHR_DEV_OSST is not set
+# CONFIG_BLK_DEV_SR is not set
+# CONFIG_CHR_DEV_SG is not set
+# CONFIG_CHR_DEV_SCH is not set
+# CONFIG_SCSI_MULTI_LUN is not set
+# CONFIG_SCSI_CONSTANTS is not set
+# CONFIG_SCSI_LOGGING is not set
+# CONFIG_SCSI_SCAN_ASYNC is not set
+CONFIG_SCSI_WAIT_SCAN=m
+
+#
+# SCSI Transports
+#
+# CONFIG_SCSI_SPI_ATTRS is not set
+# CONFIG_SCSI_FC_ATTRS is not set
+# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_LIBSAS is not set
+# CONFIG_SCSI_SRP_ATTRS is not set
+CONFIG_SCSI_LOWLEVEL=y
+# CONFIG_ISCSI_TCP is not set
+# CONFIG_LIBFC is not set
+# CONFIG_LIBFCOE is not set
+# CONFIG_SCSI_DEBUG is not set
+# CONFIG_SCSI_DH is not set
+# CONFIG_SCSI_OSD_INITIATOR is not set
+# CONFIG_ATA is not set
+# CONFIG_MD is not set
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_MACVLAN is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+# CONFIG_VETH is not set
+CONFIG_PHYLIB=y
+
+#
+# MII PHY device drivers
+#
+# CONFIG_MARVELL_PHY is not set
+# CONFIG_DAVICOM_PHY is not set
+# CONFIG_QSEMI_PHY is not set
+# CONFIG_LXT_PHY is not set
+# CONFIG_CICADA_PHY is not set
+# CONFIG_VITESSE_PHY is not set
+# CONFIG_SMSC_PHY is not set
+# CONFIG_BROADCOM_PHY is not set
+# CONFIG_ICPLUS_PHY is not set
+# CONFIG_REALTEK_PHY is not set
+# CONFIG_NATIONAL_PHY is not set
+# CONFIG_STE10XP is not set
+# CONFIG_LSI_ET1011C_PHY is not set
+# CONFIG_FIXED_PHY is not set
+# CONFIG_MDIO_BITBANG is not set
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=y
+# CONFIG_AX88796 is not set
+# CONFIG_SMC91X is not set
+# CONFIG_DM9000 is not set
+# CONFIG_ENC28J60 is not set
+# CONFIG_ETHOC is not set
+# CONFIG_SMC911X is not set
+CONFIG_SMSC911X=y
+# CONFIG_DNET is not set
+# CONFIG_IBM_NEW_EMAC_ZMII is not set
+# CONFIG_IBM_NEW_EMAC_RGMII is not set
+# CONFIG_IBM_NEW_EMAC_TAH is not set
+# CONFIG_IBM_NEW_EMAC_EMAC4 is not set
+# CONFIG_IBM_NEW_EMAC_NO_FLOW_CTRL is not set
+# CONFIG_IBM_NEW_EMAC_MAL_CLR_ICINTSTAT is not set
+# CONFIG_IBM_NEW_EMAC_MAL_COMMON_ERR is not set
+# CONFIG_B44 is not set
+# CONFIG_KS8842 is not set
+# CONFIG_KS8851 is not set
+# CONFIG_KS8851_MLL is not set
+# CONFIG_NETDEV_1000 is not set
+# CONFIG_NETDEV_10000 is not set
+CONFIG_WLAN=y
+# CONFIG_WLAN_PRE80211 is not set
+CONFIG_WLAN_80211=y
+CONFIG_LIBERTAS=m
+# CONFIG_LIBERTAS_USB is not set
+CONFIG_LIBERTAS_SDIO=m
+# CONFIG_LIBERTAS_SPI is not set
+# CONFIG_LIBERTAS_DEBUG is not set
+# CONFIG_USB_ZD1201 is not set
+# CONFIG_HOSTAP is not set
+
+#
+# Enable WiMAX (Networking options) to see the WiMAX drivers
+#
+
+#
+# USB Network Adapters
+#
+# CONFIG_USB_CATC is not set
+# CONFIG_USB_KAWETH is not set
+# CONFIG_USB_PEGASUS is not set
+# CONFIG_USB_RTL8150 is not set
+# CONFIG_USB_USBNET is not set
+# CONFIG_WAN is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+# CONFIG_ISDN is not set
+# CONFIG_PHONE is not set
+
+#
+# Input device support
+#
+CONFIG_INPUT=y
+# CONFIG_INPUT_FF_MEMLESS is not set
+# CONFIG_INPUT_POLLDEV is not set
+
+#
+# Userland interfaces
+#
+CONFIG_INPUT_MOUSEDEV=y
+CONFIG_INPUT_MOUSEDEV_PSAUX=y
+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024
+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768
+# CONFIG_INPUT_JOYDEV is not set
+CONFIG_INPUT_EVDEV=y
+# CONFIG_INPUT_EVBUG is not set
+
+#
+# Input Device Drivers
+#
+CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ADP5588 is not set
+CONFIG_KEYBOARD_ATKBD=y
+# CONFIG_QT2160 is not set
+# CONFIG_KEYBOARD_LKKBD is not set
+# CONFIG_KEYBOARD_GPIO is not set
+# CONFIG_KEYBOARD_MATRIX is not set
+# CONFIG_KEYBOARD_LM8323 is not set
+# CONFIG_KEYBOARD_MAX7359 is not set
+# CONFIG_KEYBOARD_NEWTON is not set
+# CONFIG_KEYBOARD_OPENCORES is not set
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+CONFIG_KEYBOARD_TWL4030=m
+# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_INPUT_MOUSE is not set
+# CONFIG_INPUT_JOYSTICK is not set
+# CONFIG_INPUT_TABLET is not set
+CONFIG_INPUT_TOUCHSCREEN=y
+CONFIG_TOUCHSCREEN_ADS7846=m
+# CONFIG_TOUCHSCREEN_AD7877 is not set
+# CONFIG_TOUCHSCREEN_AD7879_I2C is not set
+# CONFIG_TOUCHSCREEN_AD7879_SPI is not set
+# CONFIG_TOUCHSCREEN_AD7879 is not set
+# CONFIG_TOUCHSCREEN_EETI is not set
+# CONFIG_TOUCHSCREEN_FUJITSU is not set
+# CONFIG_TOUCHSCREEN_GUNZE is not set
+# CONFIG_TOUCHSCREEN_ELO is not set
+# CONFIG_TOUCHSCREEN_WACOM_W8001 is not set
+# CONFIG_TOUCHSCREEN_MCS5000 is not set
+# CONFIG_TOUCHSCREEN_MTOUCH is not set
+# CONFIG_TOUCHSCREEN_INEXIO is not set
+# CONFIG_TOUCHSCREEN_MK712 is not set
+# CONFIG_TOUCHSCREEN_PENMOUNT is not set
+# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
+# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
+# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
+# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set
+# CONFIG_TOUCHSCREEN_TSC2007 is not set
+# CONFIG_TOUCHSCREEN_W90X900 is not set
+# CONFIG_INPUT_MISC is not set
+
+#
+# Hardware I/O ports
+#
+CONFIG_SERIO=y
+CONFIG_SERIO_SERPORT=y
+CONFIG_SERIO_LIBPS2=y
+# CONFIG_SERIO_RAW is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+CONFIG_VT=y
+CONFIG_CONSOLE_TRANSLATIONS=y
+CONFIG_VT_CONSOLE=y
+CONFIG_HW_CONSOLE=y
+# CONFIG_VT_HW_CONSOLE_BINDING is not set
+CONFIG_DEVKMEM=y
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+CONFIG_SERIAL_8250=y
+CONFIG_SERIAL_8250_CONSOLE=y
+CONFIG_SERIAL_8250_NR_UARTS=32
+CONFIG_SERIAL_8250_RUNTIME_UARTS=4
+CONFIG_SERIAL_8250_EXTENDED=y
+CONFIG_SERIAL_8250_MANY_PORTS=y
+CONFIG_SERIAL_8250_SHARE_IRQ=y
+CONFIG_SERIAL_8250_DETECT_IRQ=y
+CONFIG_SERIAL_8250_RSA=y
+
+#
+# Non-8250 serial port support
+#
+# CONFIG_SERIAL_MAX3100 is not set
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_UNIX98_PTYS=y
+# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
+# CONFIG_LEGACY_PTYS is not set
+# CONFIG_IPMI_HANDLER is not set
+CONFIG_HW_RANDOM=y
+# CONFIG_HW_RANDOM_TIMERIOMEM is not set
+# CONFIG_R3964 is not set
+# CONFIG_RAW_DRIVER is not set
+# CONFIG_TCG_TPM is not set
+CONFIG_I2C=y
+CONFIG_I2C_BOARDINFO=y
+CONFIG_I2C_COMPAT=y
+CONFIG_I2C_CHARDEV=y
+CONFIG_I2C_HELPER_AUTO=y
+
+#
+# I2C Hardware Bus support
+#
+
+#
+# I2C system bus drivers (mostly embedded / system-on-chip)
+#
+# CONFIG_I2C_DESIGNWARE is not set
+# CONFIG_I2C_GPIO is not set
+# CONFIG_I2C_OCORES is not set
+CONFIG_I2C_OMAP=y
+# CONFIG_I2C_SIMTEC is not set
+
+#
+# External I2C/SMBus adapter drivers
+#
+# CONFIG_I2C_PARPORT_LIGHT is not set
+# CONFIG_I2C_TAOS_EVM is not set
+# CONFIG_I2C_TINY_USB is not set
+
+#
+# Other I2C/SMBus bus drivers
+#
+# CONFIG_I2C_PCA_PLATFORM is not set
+# CONFIG_I2C_STUB is not set
+
+#
+# Miscellaneous I2C Chip support
+#
+# CONFIG_DS1682 is not set
+# CONFIG_SENSORS_TSL2550 is not set
+# CONFIG_I2C_DEBUG_CORE is not set
+# CONFIG_I2C_DEBUG_ALGO is not set
+# CONFIG_I2C_DEBUG_BUS is not set
+# CONFIG_I2C_DEBUG_CHIP is not set
+CONFIG_SPI=y
+# CONFIG_SPI_DEBUG is not set
+CONFIG_SPI_MASTER=y
+
+#
+# SPI Master Controller Drivers
+#
+# CONFIG_SPI_BITBANG is not set
+# CONFIG_SPI_GPIO is not set
+CONFIG_SPI_OMAP24XX=y
+
+#
+# SPI Protocol Masters
+#
+# CONFIG_SPI_SPIDEV is not set
+# CONFIG_SPI_TLE62X0 is not set
+
+#
+# PPS support
+#
+# CONFIG_PPS is not set
+CONFIG_ARCH_REQUIRE_GPIOLIB=y
+CONFIG_GPIOLIB=y
+# CONFIG_DEBUG_GPIO is not set
+CONFIG_GPIO_SYSFS=y
+
+#
+# Memory mapped GPIO expanders:
+#
+
+#
+# I2C GPIO expanders:
+#
+# CONFIG_GPIO_MAX732X is not set
+# CONFIG_GPIO_PCA953X is not set
+# CONFIG_GPIO_PCF857X is not set
+CONFIG_GPIO_TWL4030=y
+
+#
+# PCI GPIO expanders:
+#
+
+#
+# SPI GPIO expanders:
+#
+# CONFIG_GPIO_MAX7301 is not set
+# CONFIG_GPIO_MCP23S08 is not set
+# CONFIG_GPIO_MC33880 is not set
+
+#
+# AC97 GPIO expanders:
+#
+# CONFIG_W1 is not set
+# CONFIG_POWER_SUPPLY is not set
+# CONFIG_HWMON is not set
+# CONFIG_THERMAL is not set
+CONFIG_WATCHDOG=y
+CONFIG_WATCHDOG_NOWAYOUT=y
+
+#
+# Watchdog Device Drivers
+#
+# CONFIG_SOFT_WATCHDOG is not set
+CONFIG_OMAP_WATCHDOG=y
+# CONFIG_TWL4030_WATCHDOG is not set
+
+#
+# USB-based Watchdog Cards
+#
+# CONFIG_USBPCWATCHDOG is not set
+CONFIG_SSB_POSSIBLE=y
+
+#
+# Sonics Silicon Backplane
+#
+# CONFIG_SSB is not set
+
+#
+# Multifunction device drivers
+#
+# CONFIG_MFD_CORE is not set
+# CONFIG_MFD_SM501 is not set
+# CONFIG_MFD_ASIC3 is not set
+# CONFIG_HTC_EGPIO is not set
+# CONFIG_HTC_PASIC3 is not set
+# CONFIG_TPS65010 is not set
+CONFIG_TWL4030_CORE=y
+# CONFIG_TWL4030_POWER is not set
+# CONFIG_TWL4030_CODEC is not set
+# CONFIG_MFD_TMIO is not set
+# CONFIG_MFD_T7L66XB is not set
+# CONFIG_MFD_TC6387XB is not set
+# CONFIG_MFD_TC6393XB is not set
+# CONFIG_PMIC_DA903X is not set
+# CONFIG_MFD_WM8400 is not set
+# CONFIG_MFD_WM831X is not set
+# CONFIG_MFD_WM8350_I2C is not set
+# CONFIG_MFD_PCF50633 is not set
+# CONFIG_MFD_MC13783 is not set
+# CONFIG_AB3100_CORE is not set
+# CONFIG_EZX_PCAP is not set
+CONFIG_REGULATOR=y
+# CONFIG_REGULATOR_DEBUG is not set
+# CONFIG_REGULATOR_FIXED_VOLTAGE is not set
+# CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set
+# CONFIG_REGULATOR_USERSPACE_CONSUMER is not set
+# CONFIG_REGULATOR_BQ24022 is not set
+# CONFIG_REGULATOR_MAX1586 is not set
+CONFIG_REGULATOR_TWL4030=y
+# CONFIG_REGULATOR_LP3971 is not set
+# CONFIG_REGULATOR_TPS65023 is not set
+# CONFIG_REGULATOR_TPS6507X is not set
+# CONFIG_MEDIA_SUPPORT is not set
+
+#
+# Graphics support
+#
+# CONFIG_VGASTATE is not set
+# CONFIG_VIDEO_OUTPUT_CONTROL is not set
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+# CONFIG_FB_DDC is not set
+# CONFIG_FB_BOOT_VESA_SUPPORT is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
+# CONFIG_FB_SYS_FILLRECT is not set
+# CONFIG_FB_SYS_COPYAREA is not set
+# CONFIG_FB_SYS_IMAGEBLIT is not set
+# CONFIG_FB_FOREIGN_ENDIAN is not set
+# CONFIG_FB_SYS_FOPS is not set
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+# CONFIG_FB_BACKLIGHT is not set
+# CONFIG_FB_MODE_HELPERS is not set
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_S1D13XXX is not set
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_METRONOME is not set
+# CONFIG_FB_MB862XX is not set
+# CONFIG_FB_BROADSHEET is not set
+# CONFIG_FB_OMAP_BOOTLOADER_INIT is not set
+CONFIG_OMAP2_VRAM=y
+CONFIG_OMAP2_VRFB=y
+CONFIG_OMAP2_DSS=y
+CONFIG_OMAP2_VRAM_SIZE=4
+CONFIG_OMAP2_DSS_DEBUG_SUPPORT=y
+# CONFIG_OMAP2_DSS_RFBI is not set
+CONFIG_OMAP2_DSS_VENC=y
+# CONFIG_OMAP2_DSS_SDI is not set
+# CONFIG_OMAP2_DSS_DSI is not set
+# CONFIG_OMAP2_DSS_FAKE_VSYNC is not set
+CONFIG_OMAP2_DSS_MIN_FCK_PER_PCK=0
+CONFIG_FB_OMAP2=y
+CONFIG_FB_OMAP2_DEBUG_SUPPORT=y
+# CONFIG_FB_OMAP2_FORCE_AUTO_UPDATE is not set
+CONFIG_FB_OMAP2_NUM_FBS=3
+
+#
+# OMAP2/3 Display Device Drivers
+#
+CONFIG_PANEL_GENERIC=y
+# CONFIG_PANEL_SAMSUNG_LTE430WQ_F0C is not set
+# CONFIG_PANEL_SHARP_LS037V7DW01 is not set
+CONFIG_PANEL_TOPPOLY_TDO35S=y
+CONFIG_BACKLIGHT_LCD_SUPPORT=y
+CONFIG_LCD_CLASS_DEVICE=y
+# CONFIG_LCD_LMS283GF05 is not set
+# CONFIG_LCD_LTV350QV is not set
+# CONFIG_LCD_ILI9320 is not set
+CONFIG_LCD_TDO24M=y
+# CONFIG_LCD_VGG2432A4 is not set
+# CONFIG_LCD_PLATFORM is not set
+# CONFIG_BACKLIGHT_CLASS_DEVICE is not set
+
+#
+# Display device support
+#
+# CONFIG_DISPLAY_SUPPORT is not set
+
+#
+# Console display driver support
+#
+# CONFIG_VGA_CONSOLE is not set
+CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
+# CONFIG_FONTS is not set
+CONFIG_FONT_8x8=y
+CONFIG_FONT_8x16=y
+CONFIG_LOGO=y
+CONFIG_LOGO_LINUX_MONO=y
+CONFIG_LOGO_LINUX_VGA16=y
+CONFIG_LOGO_LINUX_CLUT224=y
+# CONFIG_SOUND is not set
+CONFIG_HID_SUPPORT=y
+CONFIG_HID=y
+# CONFIG_HIDRAW is not set
+
+#
+# USB Input Devices
+#
+CONFIG_USB_HID=y
+# CONFIG_HID_PID is not set
+# CONFIG_USB_HIDDEV is not set
+
+#
+# Special HID drivers
+#
+# CONFIG_HID_A4TECH is not set
+# CONFIG_HID_APPLE is not set
+# CONFIG_HID_BELKIN is not set
+# CONFIG_HID_CHERRY is not set
+# CONFIG_HID_CHICONY is not set
+# CONFIG_HID_CYPRESS is not set
+# CONFIG_HID_DRAGONRISE is not set
+# CONFIG_HID_EZKEY is not set
+# CONFIG_HID_KYE is not set
+# CONFIG_HID_GYRATION is not set
+# CONFIG_HID_TWINHAN is not set
+# CONFIG_HID_KENSINGTON is not set
+# CONFIG_HID_LOGITECH is not set
+# CONFIG_HID_MICROSOFT is not set
+# CONFIG_HID_MONTEREY is not set
+# CONFIG_HID_NTRIG is not set
+# CONFIG_HID_PANTHERLORD is not set
+# CONFIG_HID_PETALYNX is not set
+# CONFIG_HID_SAMSUNG is not set
+# CONFIG_HID_SONY is not set
+# CONFIG_HID_SUNPLUS is not set
+# CONFIG_HID_GREENASIA is not set
+# CONFIG_HID_SMARTJOYPLUS is not set
+# CONFIG_HID_TOPSEED is not set
+# CONFIG_HID_THRUSTMASTER is not set
+# CONFIG_HID_ZEROPLUS is not set
+CONFIG_USB_SUPPORT=y
+CONFIG_USB_ARCH_HAS_HCD=y
+CONFIG_USB_ARCH_HAS_OHCI=y
+CONFIG_USB_ARCH_HAS_EHCI=y
+CONFIG_USB=y
+# CONFIG_USB_DEBUG is not set
+CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
+
+#
+# Miscellaneous USB options
+#
+CONFIG_USB_DEVICEFS=y
+# CONFIG_USB_DEVICE_CLASS is not set
+# CONFIG_USB_DYNAMIC_MINORS is not set
+CONFIG_USB_SUSPEND=y
+CONFIG_USB_OTG=y
+# CONFIG_USB_OTG_WHITELIST is not set
+# CONFIG_USB_OTG_BLACKLIST_HUB is not set
+CONFIG_USB_MON=y
+# CONFIG_USB_WUSB is not set
+# CONFIG_USB_WUSB_CBAF is not set
+
+#
+# USB Host Controller Drivers
+#
+# CONFIG_USB_C67X00_HCD is not set
+CONFIG_USB_EHCI_HCD=y
+# CONFIG_USB_EHCI_ROOT_HUB_TT is not set
+# CONFIG_USB_EHCI_TT_NEWSCHED is not set
+# CONFIG_USB_OXU210HP_HCD is not set
+# CONFIG_USB_ISP116X_HCD is not set
+# CONFIG_USB_ISP1760_HCD is not set
+# CONFIG_USB_ISP1362_HCD is not set
+# CONFIG_USB_OHCI_HCD is not set
+# CONFIG_USB_SL811_HCD is not set
+# CONFIG_USB_R8A66597_HCD is not set
+# CONFIG_USB_HWA_HCD is not set
+CONFIG_USB_MUSB_HDRC=y
+CONFIG_USB_MUSB_SOC=y
+
+#
+# OMAP 343x high speed USB support
+#
+# CONFIG_USB_MUSB_HOST is not set
+# CONFIG_USB_MUSB_PERIPHERAL is not set
+CONFIG_USB_MUSB_OTG=y
+CONFIG_USB_GADGET_MUSB_HDRC=y
+CONFIG_USB_MUSB_HDRC_HCD=y
+# CONFIG_MUSB_PIO_ONLY is not set
+CONFIG_USB_INVENTRA_DMA=y
+# CONFIG_USB_TI_CPPI_DMA is not set
+# CONFIG_USB_MUSB_DEBUG is not set
+
+#
+# USB Device Class drivers
+#
+# CONFIG_USB_ACM is not set
+# CONFIG_USB_PRINTER is not set
+# CONFIG_USB_WDM is not set
+# CONFIG_USB_TMC is not set
+
+#
+# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may
+#
+
+#
+# also be needed; see USB_STORAGE Help for more info
+#
+CONFIG_USB_STORAGE=y
+# CONFIG_USB_STORAGE_DEBUG is not set
+# CONFIG_USB_STORAGE_DATAFAB is not set
+# CONFIG_USB_STORAGE_FREECOM is not set
+# CONFIG_USB_STORAGE_ISD200 is not set
+# CONFIG_USB_STORAGE_USBAT is not set
+# CONFIG_USB_STORAGE_SDDR09 is not set
+# CONFIG_USB_STORAGE_SDDR55 is not set
+# CONFIG_USB_STORAGE_JUMPSHOT is not set
+# CONFIG_USB_STORAGE_ALAUDA is not set
+# CONFIG_USB_STORAGE_ONETOUCH is not set
+# CONFIG_USB_STORAGE_KARMA is not set
+# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set
+# CONFIG_USB_LIBUSUAL is not set
+
+#
+# USB Imaging devices
+#
+# CONFIG_USB_MDC800 is not set
+# CONFIG_USB_MICROTEK is not set
+
+#
+# USB port drivers
+#
+# CONFIG_USB_SERIAL is not set
+
+#
+# USB Miscellaneous drivers
+#
+# CONFIG_USB_EMI62 is not set
+# CONFIG_USB_EMI26 is not set
+# CONFIG_USB_ADUTUX is not set
+# CONFIG_USB_SEVSEG is not set
+# CONFIG_USB_RIO500 is not set
+# CONFIG_USB_LEGOTOWER is not set
+# CONFIG_USB_LCD is not set
+# CONFIG_USB_BERRY_CHARGE is not set
+# CONFIG_USB_LED is not set
+# CONFIG_USB_CYPRESS_CY7C63 is not set
+# CONFIG_USB_CYTHERM is not set
+# CONFIG_USB_IDMOUSE is not set
+# CONFIG_USB_FTDI_ELAN is not set
+# CONFIG_USB_APPLEDISPLAY is not set
+# CONFIG_USB_SISUSBVGA is not set
+# CONFIG_USB_LD is not set
+# CONFIG_USB_TRANCEVIBRATOR is not set
+# CONFIG_USB_IOWARRIOR is not set
+CONFIG_USB_TEST=y
+# CONFIG_USB_ISIGHTFW is not set
+# CONFIG_USB_VST is not set
+CONFIG_USB_GADGET=y
+# CONFIG_USB_GADGET_DEBUG is not set
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+# CONFIG_USB_GADGET_DEBUG_FS is not set
+CONFIG_USB_GADGET_VBUS_DRAW=2
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_ATMEL_USBA is not set
+# CONFIG_USB_GADGET_FSL_USB2 is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_PXA25X is not set
+# CONFIG_USB_GADGET_R8A66597 is not set
+# CONFIG_USB_GADGET_PXA27X is not set
+# CONFIG_USB_GADGET_S3C_HSOTG is not set
+# CONFIG_USB_GADGET_IMX is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+# CONFIG_USB_GADGET_M66592 is not set
+# CONFIG_USB_GADGET_AMD5536UDC is not set
+# CONFIG_USB_GADGET_FSL_QE is not set
+# CONFIG_USB_GADGET_CI13XXX is not set
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_LANGWELL is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+CONFIG_USB_GADGET_DUALSPEED=y
+# CONFIG_USB_ZERO is not set
+# CONFIG_USB_AUDIO is not set
+CONFIG_USB_ETH=y
+CONFIG_USB_ETH_RNDIS=y
+# CONFIG_USB_ETH_EEM is not set
+# CONFIG_USB_GADGETFS is not set
+# CONFIG_USB_FILE_STORAGE is not set
+# CONFIG_USB_G_SERIAL is not set
+# CONFIG_USB_MIDI_GADGET is not set
+# CONFIG_USB_G_PRINTER is not set
+# CONFIG_USB_CDC_COMPOSITE is not set
+
+#
+# OTG and related infrastructure
+#
+CONFIG_USB_OTG_UTILS=y
+# CONFIG_USB_GPIO_VBUS is not set
+# CONFIG_ISP1301_OMAP is not set
+CONFIG_TWL4030_USB=y
+# CONFIG_NOP_USB_XCEIV is not set
+CONFIG_MMC=y
+# CONFIG_MMC_DEBUG is not set
+# CONFIG_MMC_UNSAFE_RESUME is not set
+
+#
+# MMC/SD/SDIO Card Drivers
+#
+CONFIG_MMC_BLOCK=y
+CONFIG_MMC_BLOCK_BOUNCE=y
+# CONFIG_SDIO_UART is not set
+# CONFIG_MMC_TEST is not set
+
+#
+# MMC/SD/SDIO Host Controller Drivers
+#
+# CONFIG_MMC_SDHCI is not set
+# CONFIG_MMC_OMAP is not set
+CONFIG_MMC_OMAP_HS=y
+# CONFIG_MMC_AT91 is not set
+# CONFIG_MMC_ATMELMCI is not set
+# CONFIG_MMC_SPI is not set
+# CONFIG_MEMSTICK is not set
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+
+#
+# LED drivers
+#
+# CONFIG_LEDS_PCA9532 is not set
+CONFIG_LEDS_GPIO=y
+CONFIG_LEDS_GPIO_PLATFORM=y
+# CONFIG_LEDS_LP3944 is not set
+# CONFIG_LEDS_PCA955X is not set
+# CONFIG_LEDS_DAC124S085 is not set
+# CONFIG_LEDS_BD2802 is not set
+
+#
+# LED Triggers
+#
+CONFIG_LEDS_TRIGGERS=y
+# CONFIG_LEDS_TRIGGER_TIMER is not set
+CONFIG_LEDS_TRIGGER_HEARTBEAT=y
+# CONFIG_LEDS_TRIGGER_BACKLIGHT is not set
+# CONFIG_LEDS_TRIGGER_GPIO is not set
+# CONFIG_LEDS_TRIGGER_DEFAULT_ON is not set
+
+#
+# iptables trigger is under Netfilter config (LED target)
+#
+# CONFIG_ACCESSIBILITY is not set
+CONFIG_RTC_LIB=y
+CONFIG_RTC_CLASS=y
+CONFIG_RTC_HCTOSYS=y
+CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
+# CONFIG_RTC_DEBUG is not set
+
+#
+# RTC interfaces
+#
+CONFIG_RTC_INTF_SYSFS=y
+CONFIG_RTC_INTF_PROC=y
+CONFIG_RTC_INTF_DEV=y
+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
+# CONFIG_RTC_DRV_TEST is not set
+
+#
+# I2C RTC drivers
+#
+# CONFIG_RTC_DRV_DS1307 is not set
+# CONFIG_RTC_DRV_DS1374 is not set
+# CONFIG_RTC_DRV_DS1672 is not set
+# CONFIG_RTC_DRV_MAX6900 is not set
+# CONFIG_RTC_DRV_RS5C372 is not set
+# CONFIG_RTC_DRV_ISL1208 is not set
+# CONFIG_RTC_DRV_X1205 is not set
+# CONFIG_RTC_DRV_PCF8563 is not set
+# CONFIG_RTC_DRV_PCF8583 is not set
+# CONFIG_RTC_DRV_M41T80 is not set
+CONFIG_RTC_DRV_TWL4030=y
+# CONFIG_RTC_DRV_S35390A is not set
+# CONFIG_RTC_DRV_FM3130 is not set
+# CONFIG_RTC_DRV_RX8581 is not set
+# CONFIG_RTC_DRV_RX8025 is not set
+
+#
+# SPI RTC drivers
+#
+# CONFIG_RTC_DRV_M41T94 is not set
+# CONFIG_RTC_DRV_DS1305 is not set
+# CONFIG_RTC_DRV_DS1390 is not set
+# CONFIG_RTC_DRV_MAX6902 is not set
+# CONFIG_RTC_DRV_R9701 is not set
+# CONFIG_RTC_DRV_RS5C348 is not set
+# CONFIG_RTC_DRV_DS3234 is not set
+# CONFIG_RTC_DRV_PCF2123 is not set
+
+#
+# Platform RTC drivers
+#
+# CONFIG_RTC_DRV_CMOS is not set
+# CONFIG_RTC_DRV_DS1286 is not set
+# CONFIG_RTC_DRV_DS1511 is not set
+# CONFIG_RTC_DRV_DS1553 is not set
+# CONFIG_RTC_DRV_DS1742 is not set
+# CONFIG_RTC_DRV_STK17TA8 is not set
+# CONFIG_RTC_DRV_M48T86 is not set
+# CONFIG_RTC_DRV_M48T35 is not set
+# CONFIG_RTC_DRV_M48T59 is not set
+# CONFIG_RTC_DRV_BQ4802 is not set
+# CONFIG_RTC_DRV_V3020 is not set
+
+#
+# on-CPU RTC drivers
+#
+# CONFIG_DMADEVICES is not set
+# CONFIG_AUXDISPLAY is not set
+# CONFIG_UIO is not set
+
+#
+# TI VLYNQ
+#
+# CONFIG_STAGING is not set
+
+#
+# CBUS support
+#
+# CONFIG_CBUS is not set
+
+#
+# File systems
+#
+CONFIG_EXT2_FS=y
+# CONFIG_EXT2_FS_XATTR is not set
+# CONFIG_EXT2_FS_XIP is not set
+CONFIG_EXT3_FS=y
+# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
+# CONFIG_EXT3_FS_XATTR is not set
+# CONFIG_EXT4_FS is not set
+CONFIG_JBD=y
+# CONFIG_JBD_DEBUG is not set
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
+# CONFIG_OCFS2_FS is not set
+# CONFIG_BTRFS_FS is not set
+# CONFIG_NILFS2_FS is not set
+CONFIG_FILE_LOCKING=y
+CONFIG_FSNOTIFY=y
+CONFIG_DNOTIFY=y
+CONFIG_INOTIFY=y
+CONFIG_INOTIFY_USER=y
+CONFIG_QUOTA=y
+# CONFIG_QUOTA_NETLINK_INTERFACE is not set
+CONFIG_PRINT_QUOTA_WARNING=y
+CONFIG_QUOTA_TREE=y
+# CONFIG_QFMT_V1 is not set
+CONFIG_QFMT_V2=y
+CONFIG_QUOTACTL=y
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# Caches
+#
+# CONFIG_FSCACHE is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+CONFIG_FAT_FS=y
+CONFIG_MSDOS_FS=y
+CONFIG_VFAT_FS=y
+CONFIG_FAT_DEFAULT_CODEPAGE=437
+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
+CONFIG_NTFS_FS=m
+# CONFIG_NTFS_DEBUG is not set
+# CONFIG_NTFS_RW is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_SYSCTL=y
+CONFIG_PROC_PAGE_MONITOR=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_TMPFS_POSIX_ACL is not set
+# CONFIG_HUGETLB_PAGE is not set
+# CONFIG_CONFIGFS_FS is not set
+CONFIG_MISC_FILESYSTEMS=y
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_FS_WBUF_VERIFY is not set
+CONFIG_JFFS2_SUMMARY=y
+# CONFIG_JFFS2_FS_XATTR is not set
+CONFIG_JFFS2_COMPRESSION_OPTIONS=y
+CONFIG_JFFS2_ZLIB=y
+# CONFIG_JFFS2_LZO is not set
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+# CONFIG_JFFS2_CMODE_NONE is not set
+CONFIG_JFFS2_CMODE_PRIORITY=y
+# CONFIG_JFFS2_CMODE_SIZE is not set
+# CONFIG_JFFS2_CMODE_FAVOURLZO is not set
+CONFIG_UBIFS_FS=y
+# CONFIG_UBIFS_FS_XATTR is not set
+# CONFIG_UBIFS_FS_ADVANCED_COMPR is not set
+CONFIG_UBIFS_FS_LZO=y
+CONFIG_UBIFS_FS_ZLIB=y
+# CONFIG_UBIFS_FS_DEBUG is not set
+# CONFIG_CRAMFS is not set
+# CONFIG_SQUASHFS is not set
+# CONFIG_VXFS_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_OMFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_ROMFS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+CONFIG_NETWORK_FILESYSTEMS=y
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+CONFIG_NFS_V4=y
+# CONFIG_NFS_V4_1 is not set
+CONFIG_ROOT_NFS=y
+# CONFIG_NFSD is not set
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+CONFIG_SUNRPC_GSS=y
+CONFIG_RPCSEC_GSS_KRB5=y
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+CONFIG_MSDOS_PARTITION=y
+# CONFIG_BSD_DISKLABEL is not set
+# CONFIG_MINIX_SUBPARTITION is not set
+# CONFIG_SOLARIS_X86_PARTITION is not set
+# CONFIG_UNIXWARE_DISKLABEL is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_KARMA_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+# CONFIG_SYSV68_PARTITION is not set
+CONFIG_NLS=y
+CONFIG_NLS_DEFAULT="iso8859-1"
+CONFIG_NLS_CODEPAGE_437=y
+# CONFIG_NLS_CODEPAGE_737 is not set
+# CONFIG_NLS_CODEPAGE_775 is not set
+# CONFIG_NLS_CODEPAGE_850 is not set
+# CONFIG_NLS_CODEPAGE_852 is not set
+# CONFIG_NLS_CODEPAGE_855 is not set
+# CONFIG_NLS_CODEPAGE_857 is not set
+# CONFIG_NLS_CODEPAGE_860 is not set
+# CONFIG_NLS_CODEPAGE_861 is not set
+# CONFIG_NLS_CODEPAGE_862 is not set
+# CONFIG_NLS_CODEPAGE_863 is not set
+# CONFIG_NLS_CODEPAGE_864 is not set
+# CONFIG_NLS_CODEPAGE_865 is not set
+# CONFIG_NLS_CODEPAGE_866 is not set
+# CONFIG_NLS_CODEPAGE_869 is not set
+# CONFIG_NLS_CODEPAGE_936 is not set
+# CONFIG_NLS_CODEPAGE_950 is not set
+# CONFIG_NLS_CODEPAGE_932 is not set
+# CONFIG_NLS_CODEPAGE_949 is not set
+# CONFIG_NLS_CODEPAGE_874 is not set
+# CONFIG_NLS_ISO8859_8 is not set
+# CONFIG_NLS_CODEPAGE_1250 is not set
+# CONFIG_NLS_CODEPAGE_1251 is not set
+# CONFIG_NLS_ASCII is not set
+CONFIG_NLS_ISO8859_1=y
+# CONFIG_NLS_ISO8859_2 is not set
+# CONFIG_NLS_ISO8859_3 is not set
+# CONFIG_NLS_ISO8859_4 is not set
+# CONFIG_NLS_ISO8859_5 is not set
+# CONFIG_NLS_ISO8859_6 is not set
+# CONFIG_NLS_ISO8859_7 is not set
+# CONFIG_NLS_ISO8859_9 is not set
+# CONFIG_NLS_ISO8859_13 is not set
+# CONFIG_NLS_ISO8859_14 is not set
+# CONFIG_NLS_ISO8859_15 is not set
+# CONFIG_NLS_KOI8_R is not set
+# CONFIG_NLS_KOI8_U is not set
+CONFIG_NLS_UTF8=m
+# CONFIG_DLM is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_ENABLE_WARN_DEPRECATED=y
+CONFIG_ENABLE_MUST_CHECK=y
+CONFIG_FRAME_WARN=1024
+CONFIG_MAGIC_SYSRQ=y
+# CONFIG_STRIP_ASM_SYMS is not set
+# CONFIG_UNUSED_SYMBOLS is not set
+CONFIG_DEBUG_FS=y
+# CONFIG_HEADERS_CHECK is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_DEBUG_SHIRQ is not set
+CONFIG_DETECT_SOFTLOCKUP=y
+# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
+CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
+CONFIG_DETECT_HUNG_TASK=y
+# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
+CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0
+# CONFIG_SCHED_DEBUG is not set
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_TIMER_STATS is not set
+# CONFIG_DEBUG_OBJECTS is not set
+# CONFIG_DEBUG_SLAB is not set
+# CONFIG_DEBUG_KMEMLEAK is not set
+# CONFIG_DEBUG_RT_MUTEXES is not set
+# CONFIG_RT_MUTEX_TESTER is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+CONFIG_DEBUG_MUTEXES=y
+# CONFIG_DEBUG_LOCK_ALLOC is not set
+# CONFIG_PROVE_LOCKING is not set
+# CONFIG_LOCK_STAT is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
+# CONFIG_DEBUG_KOBJECT is not set
+# CONFIG_DEBUG_BUGVERBOSE is not set
+CONFIG_DEBUG_INFO=y
+# CONFIG_DEBUG_VM is not set
+# CONFIG_DEBUG_WRITECOUNT is not set
+# CONFIG_DEBUG_MEMORY_INIT is not set
+# CONFIG_DEBUG_LIST is not set
+# CONFIG_DEBUG_SG is not set
+# CONFIG_DEBUG_NOTIFIERS is not set
+# CONFIG_DEBUG_CREDENTIALS is not set
+# CONFIG_BOOT_PRINTK_DELAY is not set
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_RCU_CPU_STALL_DETECTOR is not set
+# CONFIG_BACKTRACE_SELF_TEST is not set
+# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
+# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
+# CONFIG_FAULT_INJECTION is not set
+# CONFIG_LATENCYTOP is not set
+# CONFIG_PAGE_POISONING is not set
+CONFIG_HAVE_FUNCTION_TRACER=y
+CONFIG_TRACING_SUPPORT=y
+CONFIG_FTRACE=y
+# CONFIG_FUNCTION_TRACER is not set
+# CONFIG_IRQSOFF_TRACER is not set
+# CONFIG_SCHED_TRACER is not set
+# CONFIG_ENABLE_DEFAULT_TRACERS is not set
+# CONFIG_BOOT_TRACER is not set
+CONFIG_BRANCH_PROFILE_NONE=y
+# CONFIG_PROFILE_ANNOTATED_BRANCHES is not set
+# CONFIG_PROFILE_ALL_BRANCHES is not set
+# CONFIG_STACK_TRACER is not set
+# CONFIG_KMEMTRACE is not set
+# CONFIG_WORKQUEUE_TRACER is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_DYNAMIC_DEBUG is not set
+# CONFIG_SAMPLES is not set
+CONFIG_HAVE_ARCH_KGDB=y
+# CONFIG_KGDB is not set
+CONFIG_ARM_UNWIND=y
+# CONFIG_DEBUG_USER is not set
+# CONFIG_DEBUG_ERRORS is not set
+# CONFIG_DEBUG_STACK_USAGE is not set
+CONFIG_DEBUG_LL=y
+# CONFIG_DEBUG_ICEDCC is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+# CONFIG_SECURITYFS is not set
+# CONFIG_SECURITY_FILE_CAPABILITIES is not set
+CONFIG_CRYPTO=y
+
+#
+# Crypto core or helper
+#
+CONFIG_CRYPTO_ALGAPI=y
+CONFIG_CRYPTO_ALGAPI2=y
+CONFIG_CRYPTO_AEAD2=y
+CONFIG_CRYPTO_BLKCIPHER=y
+CONFIG_CRYPTO_BLKCIPHER2=y
+CONFIG_CRYPTO_HASH=y
+CONFIG_CRYPTO_HASH2=y
+CONFIG_CRYPTO_RNG2=y
+CONFIG_CRYPTO_PCOMP=y
+CONFIG_CRYPTO_MANAGER=y
+CONFIG_CRYPTO_MANAGER2=y
+# CONFIG_CRYPTO_GF128MUL is not set
+# CONFIG_CRYPTO_NULL is not set
+CONFIG_CRYPTO_WORKQUEUE=y
+# CONFIG_CRYPTO_CRYPTD is not set
+# CONFIG_CRYPTO_AUTHENC is not set
+# CONFIG_CRYPTO_TEST is not set
+
+#
+# Authenticated Encryption with Associated Data
+#
+# CONFIG_CRYPTO_CCM is not set
+# CONFIG_CRYPTO_GCM is not set
+# CONFIG_CRYPTO_SEQIV is not set
+
+#
+# Block modes
+#
+CONFIG_CRYPTO_CBC=y
+# CONFIG_CRYPTO_CTR is not set
+# CONFIG_CRYPTO_CTS is not set
+CONFIG_CRYPTO_ECB=m
+# CONFIG_CRYPTO_LRW is not set
+CONFIG_CRYPTO_PCBC=m
+# CONFIG_CRYPTO_XTS is not set
+
+#
+# Hash modes
+#
+# CONFIG_CRYPTO_HMAC is not set
+# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_VMAC is not set
+
+#
+# Digest
+#
+CONFIG_CRYPTO_CRC32C=y
+# CONFIG_CRYPTO_GHASH is not set
+# CONFIG_CRYPTO_MD4 is not set
+CONFIG_CRYPTO_MD5=y
+# CONFIG_CRYPTO_MICHAEL_MIC is not set
+# CONFIG_CRYPTO_RMD128 is not set
+# CONFIG_CRYPTO_RMD160 is not set
+# CONFIG_CRYPTO_RMD256 is not set
+# CONFIG_CRYPTO_RMD320 is not set
+# CONFIG_CRYPTO_SHA1 is not set
+# CONFIG_CRYPTO_SHA256 is not set
+# CONFIG_CRYPTO_SHA512 is not set
+# CONFIG_CRYPTO_TGR192 is not set
+# CONFIG_CRYPTO_WP512 is not set
+
+#
+# Ciphers
+#
+# CONFIG_CRYPTO_AES is not set
+# CONFIG_CRYPTO_ANUBIS is not set
+# CONFIG_CRYPTO_ARC4 is not set
+# CONFIG_CRYPTO_BLOWFISH is not set
+# CONFIG_CRYPTO_CAMELLIA is not set
+# CONFIG_CRYPTO_CAST5 is not set
+# CONFIG_CRYPTO_CAST6 is not set
+CONFIG_CRYPTO_DES=y
+# CONFIG_CRYPTO_FCRYPT is not set
+# CONFIG_CRYPTO_KHAZAD is not set
+# CONFIG_CRYPTO_SALSA20 is not set
+# CONFIG_CRYPTO_SEED is not set
+# CONFIG_CRYPTO_SERPENT is not set
+# CONFIG_CRYPTO_TEA is not set
+# CONFIG_CRYPTO_TWOFISH is not set
+
+#
+# Compression
+#
+CONFIG_CRYPTO_DEFLATE=y
+# CONFIG_CRYPTO_ZLIB is not set
+CONFIG_CRYPTO_LZO=y
+
+#
+# Random Number Generation
+#
+# CONFIG_CRYPTO_ANSI_CPRNG is not set
+CONFIG_CRYPTO_HW=y
+# CONFIG_BINARY_PRINTF is not set
+
+#
+# Library routines
+#
+CONFIG_BITREVERSE=y
+CONFIG_GENERIC_FIND_LAST_BIT=y
+CONFIG_CRC_CCITT=y
+CONFIG_CRC16=y
+# CONFIG_CRC_T10DIF is not set
+# CONFIG_CRC_ITU_T is not set
+CONFIG_CRC32=y
+# CONFIG_CRC7 is not set
+CONFIG_LIBCRC32C=y
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+CONFIG_LZO_COMPRESS=y
+CONFIG_LZO_DECOMPRESS=y
+CONFIG_DECOMPRESS_GZIP=y
+CONFIG_HAS_IOMEM=y
+CONFIG_HAS_IOPORT=y
+CONFIG_HAS_DMA=y
+CONFIG_NLATTR=y
diff --git a/recipes/linux/linux-omap-2.6.32/sctp-fix.patch b/recipes/linux/linux-omap-2.6.32/sctp-fix.patch
new file mode 100644
index 0000000000..fad8e1b67b
--- /dev/null
+++ b/recipes/linux/linux-omap-2.6.32/sctp-fix.patch
@@ -0,0 +1,47 @@
+From patchwork Tue Dec 8 19:52:09 2009
+Content-Type: text/plain; charset="utf-8"
+MIME-Version: 1.0
+Content-Transfer-Encoding: 7bit
+Subject: net/sctp/sysctl.c: Remove dead strategy handler
+Date: Tue, 08 Dec 2009 19:52:09 -0000
+From: Ingo Molnar <mingo@elte.hu>
+X-Patchwork-Id: 65744
+
+* Ingo Molnar <mingo@elte.hu> wrote:
+
+> hi Dave,
+>
+> i just switched to today's -git tree and there's this new build failure
+> on x86:
+>
+> net/sctp/sysctl.c:251: error: unknown field 'strategy' specified in initializer
+> net/sctp/sysctl.c:251: error: 'sysctl_intvec' undeclared here (not in a function)
+>
+> havent looked into it yet - config attached.
+
+That's interaction with the strategy handler removal from Eric. I think
+the patch below will do the trick - the callsites have been updated
+already to use proc_handler, so ->handler was a dead field.
+
+ Ingo
+
+Signed-off-by: Ingo Molnar <mingo@elte.hu>
+
+---
+To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
+the body of a message to majordomo@vger.kernel.org
+More majordomo info at http://vger.kernel.org/majordomo-info.html
+Please read the FAQ at http://www.tux.org/lkml/
+
+diff --git a/net/sctp/sysctl.c b/net/sctp/sysctl.c
+index 419e1e9..832590b 100644
+--- a/net/sctp/sysctl.c
++++ b/net/sctp/sysctl.c
+@@ -248,7 +248,6 @@ static ctl_table sctp_table[] = {
+ .maxlen = sizeof(int),
+ .mode = 0644,
+ .proc_handler = &proc_dointvec_minmax,
+- .strategy = &sysctl_intvec,
+ .extra1 = &one,
+ .extra2 = &rwnd_scale_max,
+ },
diff --git a/recipes/linux/linux-omap-zoomsync_2.6.31.bb b/recipes/linux/linux-omap-zoomsync_2.6.31.bb
index 0e9be960d0..0dea2bfc73 100644
--- a/recipes/linux/linux-omap-zoomsync_2.6.31.bb
+++ b/recipes/linux/linux-omap-zoomsync_2.6.31.bb
@@ -18,7 +18,7 @@ PE = "1"
PV = "2.6.30+2.6.31-rc7-${OEV}"
PR_append = "+gitr${SRCREV}"
-SRC_URI = "git://dev.omapzoom.org/pub/scm/integration/kernel-omap3.git;branch=${LOBRANCH};protocol=git \
+SRC_URI = "git://dev.omapzoom.org/pub/scm/integration/kernel-omap3.git;branch=${LOBRANCH};protocol=http \
file://defconfig"
SRC_URI_append = " \
diff --git a/recipes/linux/linux-omap_2.6.32.bb b/recipes/linux/linux-omap_2.6.32.bb
index 95692c07ed..83c326a76a 100644
--- a/recipes/linux/linux-omap_2.6.32.bb
+++ b/recipes/linux/linux-omap_2.6.32.bb
@@ -3,11 +3,12 @@ require linux.inc
DESCRIPTION = "Linux kernel for OMAP processors"
KERNEL_IMAGETYPE = "uImage"
-COMPATIBLE_MACHINE = "omap5912osk|omap1710h3|omap2430sdp|omap2420h4|beagleboard|omap3evm|omap3-pandora|overo|omapzoom|omapzoom2|omap4430-sdp"
+COMPATIBLE_MACHINE = "omap5912osk|omap1710h3|omap2430sdp|omap2420h4|beagleboard|omap3evm|omap3-pandora|overo|omapzoom|omapzoom2|omap4430-sdp|cm-t35"
DEFAULT_PREFERENCE = "-1"
+DEFAULT_PREFERENCE_cm-t35 = "1"
-SRCREV = "89c9eaeb92c97348dcabd6cb377b646c00855f6a"
+SRCREV = "6833f1a8cdcb65a370f898bde6b6af63f81962df"
# The main PR is now using MACHINE_KERNEL_PR, for omap3 see conf/machine/include/omap3.inc
PV = "2.6.32"
@@ -16,8 +17,12 @@ SRC_URI = "git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap-2.6.g
file://defconfig"
SRC_URI_append = " \
-file://usb/ehci.patch;patch=1 \
-file://usb/ehci-omap.c-mach-to-plat.diff;patch=1 \
+file://sctp-fix.patch;patch=1 \
+file://cm-t35/0001-omap3-cm-t35-add-mux-initialization.patch;patch=1 \
+file://cm-t35/0001-OMAP-DSS2-add-Toppoly-TDO35S-panel.patch;patch=1 \
+file://cm-t35/0002-omap3-cm-t35-add-DSS2-display-support.patch;patch=1 \
+file://cm-t35/0003-omap3-cm-t35-update-defconfig-for-DSS2.patch;patch=1 \
+file://cm-t35/0006-omap3-cm-t35-update-defconfig.patch;patch=1 \
"
SRC_URI_append_beagleboard = " file://logo_linux_clut224.ppm \
diff --git a/recipes/linux/linux-sgh-i900/sgh-i900-support.patch b/recipes/linux/linux-sgh-i900/sgh-i900-support.patch
new file mode 100644
index 0000000000..28d65938a1
--- /dev/null
+++ b/recipes/linux/linux-sgh-i900/sgh-i900-support.patch
@@ -0,0 +1,13031 @@
+diff -ur linux-2.6.32/arch/arm/Kconfig kernel/arch/arm/Kconfig
+--- linux-2.6.32/arch/arm/Kconfig 2009-12-03 05:51:21.000000000 +0200
++++ kernel/arch/arm/Kconfig 2009-12-12 16:09:25.656278659 +0200
+@@ -1502,6 +1502,112 @@
+ config ARCH_SUSPEND_POSSIBLE
+ def_bool y
+
++config PXA_DVFM
++ bool "PXA Processor High Level DVFM support"
++ depends on PM
++ default y
++ help
++ This enables the dynamical frequency and voltage changes framework
++ for PXA Processor series.
++
++config PXA_MIPSRAM
++ bool "PXA MIPSRAM monitoring support"
++ default n
++ help
++ Enable MIPS RAM monitoring for process switching implemented in
++ the scheduler
++
++config PXA3xx_DVFM
++ bool "PXA3xx Processor DVFM support"
++ depends on PM && PXA3xx && PXA_DVFM
++# select PXA3xx_ARAVA
++# select PXA3xx_MICCO
++ default y
++ help
++ This implements the dynamical frequency and voltage changes features
++ for PXA3xx Processor particularly.
++
++config PXA3xx_DVFM_STATS
++ bool "PXA3xx/PXA930 Processor DVFM Statistics support"
++ depends on PXA3xx_DVFM
++ select RELAY
++ select DEBUG_FS
++ default y
++ help
++ This is used to collect statistics during the dynamic frequency
++ and voltage changes
++
++config PXA3xx_PMU
++ bool "PXA3xx/PXA930 Processor PMU support"
++ default y
++ help
++ PXA3xx/PXA930 provide Performance Monitor Unit to report
++ CPU statistics info.
++
++config PXA3xx_PRM
++ bool "PXA3xx Processor Profiler Resource Manager"
++ depends on PXA3xx_DVFM && PXA3xx_PMU
++ default y
++ help
++ This enables the PXA3xx Processor Profiler Resource Manager
++
++config IPM
++ bool "Marvell(R) Scalable Power Management Profiler"
++ depends on PXA3xx_PRM
++ default y
++ help
++ Support Profiler of Marvell(R) Scalable Power Management
++
++config IPMC
++ bool "Marvell(R) Scalable Power Management Userspace Daemon"
++ depends on PXA3xx_PRM
++ default n
++ help
++ Support Userspace Daemon of Marvell(R) Scalable Power Management
++
++config BPMD
++ bool "Borqs Scalable Power Management Kernel Daemon"
++ depends on PXA3xx_PRM
++ default y
++ help
++ Kernel Daemon of Borqs Scalable Power Management
++
++config TEST_BPMD
++ bool "Borqs Scalable Power Management Test Module"
++ depends on PXA3xx_PRM
++ default y
++ help
++ Test Module of Borqs Scalable Power Management
++
++config IPM_DEEPIDLE
++ bool "PXA3xx/PXA930 Processor Deep Idle support"
++ depends on IPM
++ default y
++ help
++ This enables the kernel support for PXA3xx/PXA930
++ Processor Deep Idle (D0CS Idle)
++
++config IPM_D2IDLE
++ bool "Support PXA3xx/PXA930 Processor D2 Mode as Idle"
++ depends on IPM && PXA_32KTIMER
++ default y
++ help
++ This enables kernel support PXA3xx/PXA930 D2 idle
++
++config PERIPHERAL_STATUS
++ bool "Support list peripheral status of pm"
++ depends on PM
++ default y
++ help
++ This enables kernel support peripheral status calculate
++
++config IPM_CGIDLE
++ bool "Support PXA935 Processor Clock Gated Mode as Idle"
++ depends on IPM && PXA_32KTIMER
++ default y
++ help
++ This enables kernel support PXA935 D2 idle
++
+ endmenu
+
+ source "net/Kconfig"
+diff -ur linux-2.6.32/arch/arm/mach-pxa/Kconfig kernel/arch/arm/mach-pxa/Kconfig
+--- linux-2.6.32/arch/arm/mach-pxa/Kconfig 2009-12-03 05:51:21.000000000 +0200
++++ kernel/arch/arm/mach-pxa/Kconfig 2009-12-12 16:09:26.426281936 +0200
+@@ -27,6 +27,12 @@
+ bool "PXA950 (codename Tavor-PV2)"
+ select CPU_PXA930
+
++config PXA3xx_PMIC
++ bool "PXA3xx PMIC support"
++ default y
++ help
++ PMIC support
++
+ endmenu
+
+ endif
+@@ -303,6 +309,18 @@
+ select HAVE_PWM
+ select PXA_HAVE_BOARD_IRQS
+
++config MACH_SGH_I900
++ bool "Samsung SGH-i900 (Omnia) phone"
++ select PXA3xx
++ select CPU_PXA310
++ select HAVE_PWM
++
++config MACH_SGH_I780
++ bool "Samsung SGH-i780 phone"
++ select PXA3xx
++ select CPU_PXA310
++ select HAVE_PWM
++
+ config MACH_LITTLETON
+ bool "PXA3xx Form Factor Platform (aka Littleton)"
+ select PXA3xx
+diff -ur linux-2.6.32/arch/arm/mach-pxa/Makefile kernel/arch/arm/mach-pxa/Makefile
+--- linux-2.6.32/arch/arm/mach-pxa/Makefile 2009-12-03 05:51:21.000000000 +0200
++++ kernel/arch/arm/mach-pxa/Makefile 2009-12-12 16:09:26.426281936 +0200
+@@ -5,6 +5,15 @@
+ # Common support (must be linked before board specific support)
+ obj-y += clock.o devices.o generic.o irq.o \
+ time.o reset.o
++obj-$(CONFIG_PXA_DVFM) += dvfm.o
++ifeq ($(CONFIG_PXA3xx), y)
++ obj-$(CONFIG_PXA3xx_PMIC) += pxa3xx_pmic.o
++ obj-$(CONFIG_PXA3xx_DVFM) += pxa3xx_dvfm.o pxa3xx_dvfm_ll.o
++ obj-$(CONFIG_PXA3xx_PMU) += pmu.o pmu_ll.o
++ obj-$(CONFIG_PXA3xx_PRM) += prm.o
++ obj-$(CONFIG_BPMD) += bpm.o bpm_prof.o
++endif
++
+ obj-$(CONFIG_PM) += pm.o sleep.o standby.o
+
+ ifeq ($(CONFIG_CPU_FREQ),y)
+@@ -66,6 +75,8 @@
+ obj-$(CONFIG_MACH_PALMZ72) += palmz72.o
+ obj-$(CONFIG_MACH_TREO680) += treo680.o
+ obj-$(CONFIG_ARCH_VIPER) += viper.o
++obj-$(CONFIG_MACH_SGH_I900) += sgh_i780_i900.o sgh_smd.o sgh_rpc.o
++obj-$(CONFIG_MACH_SGH_I780) += sgh_i780_i900.o sgh_smd.o sgh_rpc.o
+
+ ifeq ($(CONFIG_MACH_ZYLONITE),y)
+ obj-y += zylonite.o
+diff -ur linux-2.6.32/arch/arm/mach-pxa/bpm.c kernel/arch/arm/mach-pxa/bpm.c
+--- linux-2.6.32/arch/arm/mach-pxa/bpm.c 2009-12-13 12:57:59.831957275 +0200
++++ kernel/arch/arm/mach-pxa/bpm.c 2009-12-12 16:09:26.429614458 +0200
+@@ -0,0 +1,1814 @@
++/*
++ * linux/arch/arm/mach-pxa/bpm.c
++ *
++ * Provide bpm thread to scale system voltage & frequency dynamically.
++ *
++ * Copyright (C) 2008 Borqs Corporation.
++ *
++ * Author: Emichael Li <emichael.li@borqs.com>
++ *
++ * This software program is licensed subject to the GNU General Public License
++ * (GPL).Version 2,June 1991, available at http://www.fsf.org/copyleft/gpl.html
++ *
++ */
++
++#include <linux/kernel.h>
++#include <mach/prm.h>
++#include <mach/dvfm.h>
++#include <mach/mspm_prof.h>
++#include <linux/sysdev.h>
++#include <linux/delay.h>
++#include <mach/bpm.h>
++#include <mach/hardware.h>
++#include <mach/pxa3xx-regs.h>
++#include <linux/list.h>
++#include <asm/io.h>
++#include <asm/mach-types.h>
++#include <linux/freezer.h>
++#include <mach/regs-ost.h>
++#ifdef CONFIG_ANDROID_POWER
++#include <linux/android_power.h>
++#endif
++
++#define DEBUG
++
++#ifdef DEBUG
++#define PM_BUG_ON(condition) \
++ do { \
++ if (unlikely(condition)) { \
++ printk(KERN_ERR "BUG: failure at %s:%d/%s()!\n", \
++ __FILE__, __LINE__, __FUNCTION__); \
++ WARN_ON(1); \
++ } \
++ } while(0)
++#define DPRINTK(fmt,args...) \
++ do { \
++ if (g_bpm_log_level) \
++ printk(KERN_ERR "%s: " fmt, __FUNCTION__ , ## args); \
++ } while (0)
++#else
++#define PM_BUG_ON(condition) \
++ do { \
++ if (unlikely(condition)) { \
++ printk(KERN_ERR "BUG: failure at %s:%d/%s()!\n", \
++ __FILE__, __LINE__, __FUNCTION__); \
++ } \
++ } while(0)
++#define DPRINTK(fmt,args...) \
++ do {} while (0)
++#endif
++
++/*****************************************************************************/
++/* */
++/* Policy variables */
++/* */
++/*****************************************************************************/
++#define REDUCE_624M_DUTYCYCLE (1)
++
++#define BPM_FREQ_POLICY_NUM (3)
++#define BPM_PROFILER_WINDOW (100)
++#define SYSTEM_BOOTUP_TIME (15000)
++#define BPM_MAX_OP_NUM (10)
++
++struct bpm_freq_bonus_arg {
++ int mips;
++ int mem_stall;
++};
++
++struct bpm_freq_policy {
++ int lower[BPM_FREQ_POLICY_NUM];
++ int higher[BPM_FREQ_POLICY_NUM];
++};
++
++#define CONSTRAINT_ID_LEN (32)
++struct bpm_cons {
++ struct list_head list;
++ char sid[CONSTRAINT_ID_LEN];
++ int count;
++ unsigned long ms;
++ unsigned long tmp_ms;
++ unsigned long tm;
++};
++
++struct bpm_cons_head {
++ struct list_head list;
++};
++
++/* manage all the ops which are supported by the hardware */
++static struct dvfm_op g_dyn_ops[BPM_MAX_OP_NUM];
++static spinlock_t g_dyn_ops_lock = SPIN_LOCK_UNLOCKED;
++
++static struct bpm_cons_head g_bpm_cons[BPM_MAX_OP_NUM];
++
++/* map the op from active ops to g_dyn_ops[] */
++static int g_active_ops_map[BPM_MAX_OP_NUM];
++static int g_active_ops_num;
++static int g_active_cur_idx = -1;
++static int g_prefer_op_idx;
++static int g_active_bonus[BPM_MAX_OP_NUM][BPM_MAX_OP_NUM * 2 - 1];
++struct bpm_freq_policy g_active_policy[BPM_MAX_OP_NUM];
++
++/*****************************************************************************/
++/* */
++/* Framework Supportted Variables */
++/* */
++/*****************************************************************************/
++
++int (*pipm_start_pmu) (void *) = NULL;
++EXPORT_SYMBOL(pipm_start_pmu);
++int (*pipm_stop_pmu)(void) = NULL;
++EXPORT_SYMBOL(pipm_stop_pmu);
++
++static int g_bpm_thread_exit;
++int g_bpm_enabled;
++static wait_queue_head_t g_bpm_enabled_waitq;
++
++static int g_profiler_window = BPM_PROFILER_WINDOW;
++static int g_bpm_log_level = 1;
++struct completion g_bpm_thread_over;
++
++extern struct sysdev_class cpu_sysdev_class;
++
++static struct bpm_event_queue g_bpm_event_queue;
++static spinlock_t g_bpm_event_queue_lock = SPIN_LOCK_UNLOCKED;
++
++#ifdef CONFIG_TEST_BPMD
++static int g_cpuload_mode;
++#endif
++
++static int dvfm_dev_idx;
++
++extern int __dvfm_enable_op(int index, int dev_idx);
++extern int __dvfm_disable_op2(int index, int dev_idx);
++extern int cur_op;
++extern struct info_head dvfm_trace_list;
++
++extern int g_dvfm_disabled;
++
++#ifdef CONFIG_MTD_NAND_HSS_FIX
++extern atomic_t nand_in_cmd;
++#endif
++/*****************************************************************************/
++/* */
++/* Blink Variables */
++/* */
++/*****************************************************************************/
++#define DVFM_BLINK_OWNER_LEN (16)
++
++struct dvfm_blink_info {
++ int time;
++ char name[DVFM_BLINK_OWNER_LEN];
++};
++
++static int g_dvfm_blink = 0;
++static struct timer_list g_dvfm_blink_timer;
++static struct dvfm_blink_info g_dvfm_binfo;
++static unsigned long g_dvfm_blink_timeout = 0;
++
++/*****************************************************************************/
++/* */
++/* android power interface */
++/* */
++/*****************************************************************************/
++static int g_android_suspended = 0;
++
++#ifdef CONFIG_ANDROID_POWER
++void bpm_android_suspend_handler(android_early_suspend_t *h)
++{
++ unsigned long flags;
++ local_irq_save(flags);
++ g_android_suspended = 1;
++ local_irq_restore(flags);
++}
++
++void bpm_android_resume_handler(android_early_suspend_t *h)
++{
++ unsigned long flags;
++ local_irq_save(flags);
++ g_android_suspended = 0;
++ local_irq_restore(flags);
++}
++
++static android_early_suspend_t bpm_early_suspend = {
++ .level = 98,
++ .suspend = bpm_android_suspend_handler,
++ .resume = bpm_android_resume_handler,
++};
++#endif
++
++static inline int is_out_d0cs(void)
++{
++#ifdef CONFIG_PXA3xx_DVFM
++ extern int out_d0cs;
++ return out_d0cs;
++#endif
++ return 0;
++}
++
++/*****************************************************************************/
++/* */
++/* BPMD Event Queue */
++/* */
++/*****************************************************************************/
++
++static int bpmq_init(void)
++{
++ g_bpm_event_queue.head = g_bpm_event_queue.tail = 0;
++ g_bpm_event_queue.len = 0;
++ init_waitqueue_head(&g_bpm_event_queue.waitq);
++ return 0;
++}
++
++static int bpmq_clear(void)
++{
++ unsigned long flag;
++
++ spin_lock_irqsave(&g_bpm_event_queue_lock, flag);
++
++ g_bpm_event_queue.head = g_bpm_event_queue.tail = 0;
++ g_bpm_event_queue.len = 0;
++
++ spin_unlock_irqrestore(&g_bpm_event_queue_lock, flag);
++
++ return 0;
++}
++
++static int bpmq_get(struct bpm_event *e)
++{
++ unsigned long flag;
++
++ spin_lock_irqsave(&g_bpm_event_queue_lock, flag);
++
++ if (!g_bpm_event_queue.len) {
++ spin_unlock_irqrestore(&g_bpm_event_queue_lock, flag);
++ printk(KERN_ERR "Logic error, please check bpmq_empty()\n");
++ return -1;
++ }
++ memcpy(e, g_bpm_event_queue.bpmes + g_bpm_event_queue.tail,
++ sizeof(struct bpm_event));
++ g_bpm_event_queue.len--;
++ g_bpm_event_queue.tail =
++ (g_bpm_event_queue.tail + 1) % MAX_BPM_EVENT_NUM;
++
++ spin_unlock_irqrestore(&g_bpm_event_queue_lock, flag);
++
++ return 0;
++}
++
++static int bpmq_put(struct bpm_event *e)
++{
++ unsigned long flag;
++ static int err_cnt = 0;
++
++ if (unlikely(0 == g_bpm_enabled))
++ return 0;
++
++ spin_lock_irqsave(&g_bpm_event_queue_lock, flag);
++
++ if (g_bpm_event_queue.len == MAX_BPM_EVENT_NUM) {
++ if (++err_cnt > 0) {
++ printk(KERN_ERR "bpm queue over flow!\n");
++ show_state();
++ printk(KERN_ERR "send event many times instantly?");
++ dump_stack();
++ }
++ spin_unlock_irqrestore(&g_bpm_event_queue_lock, flag);
++ return -1;
++ }
++ memcpy(g_bpm_event_queue.bpmes + g_bpm_event_queue.head, e,
++ sizeof(struct bpm_event));
++ g_bpm_event_queue.len++;
++ g_bpm_event_queue.head =
++ (g_bpm_event_queue.head + 1) % MAX_BPM_EVENT_NUM;
++
++ spin_unlock_irqrestore(&g_bpm_event_queue_lock, flag);
++
++ wake_up_interruptible(&g_bpm_event_queue.waitq);
++
++ return 0;
++}
++
++static __inline int bpmq_empty(void)
++{
++ return (g_bpm_event_queue.len > 0) ? 0 : 1;
++}
++
++int bpm_event_notify(int type, int kind, void *info, unsigned int info_len)
++{
++ struct bpm_event event;
++ int len = 0;
++
++ if (info_len > INFO_SIZE)
++ len = INFO_SIZE;
++ else if ((info_len < INFO_SIZE) && (info_len > 0))
++ len = info_len;
++ memset(&event, 0, sizeof(struct bpm_event));
++ event.type = type;
++ event.kind = kind;
++ if ((len > 0) && (info != NULL)) {
++ memcpy(event.info, info, len);
++ }
++ if (0 != bpmq_put(&event)) {
++ len = -1;
++ }
++
++/* DPRINTK("type: %d kind: %d, len(ret): %d\n", type, kind, len); */
++ return len;
++}
++
++EXPORT_SYMBOL(bpm_event_notify);
++
++/*****************************************************************************/
++/* */
++/* BPMD PMU Interface */
++/* */
++/*****************************************************************************/
++
++static int bpm_start_pmu(void)
++{
++ int ret = -ENXIO;
++ struct ipm_profiler_arg pmu_arg;
++
++ if (pipm_start_pmu != NULL) {
++ pmu_arg.size = sizeof(struct ipm_profiler_arg);
++/* pmu_arg.flags = IPM_IDLE_PROFILER | IPM_PMU_PROFILER; */
++ pmu_arg.flags = IPM_IDLE_PROFILER;
++ pmu_arg.window_size = g_profiler_window;
++
++ pmu_arg.pmn0 = PXA3xx_EVENT_EXMEM;
++ pmu_arg.pmn1 = PXA3xx_EVENT_DMC_NOT_EMPTY;
++ pmu_arg.pmn2 = PMU_EVENT_POWER_SAVING;
++ pmu_arg.pmn3 = PMU_EVENT_POWER_SAVING;
++
++ ret = pipm_start_pmu(&pmu_arg);
++ } else {
++ printk(KERN_CRIT "No profiler\n");
++ PM_BUG_ON(1);
++ }
++
++ return ret;
++}
++
++static int bpm_stop_pmu(void)
++{
++ pipm_stop_pmu();
++ return 0;
++}
++
++/*****************************************************************************/
++/* */
++/* BPMD POLICY */
++/* */
++/*****************************************************************************/
++
++static int bpm_dump_policy(void)
++{
++#define TMP_BUF_SIZE (4096)
++ int i, j;
++ char *buf = kmalloc(TMP_BUF_SIZE, GFP_KERNEL);
++ char *s = NULL;
++
++ if (NULL == buf) {
++ printk(KERN_ERR "Can not alloc memory\n");
++ return 0;
++ }
++
++ s = buf;
++ memset(s, 0, TMP_BUF_SIZE);
++
++ s += sprintf(s, "--------------BPM DUMP POLICY BEGIN--------------\n");
++ s += sprintf(s, "dyn_boot_op = %d\n", dvfm_get_defop());
++ s += sprintf(s, "g_active_ops_maps:\n");
++
++ for (i = 0; i < BPM_MAX_OP_NUM; ++i)
++ s += sprintf(s, "%8d ", g_active_ops_map[i]);
++ s += sprintf(s, "\n");
++
++ s += sprintf(s, "g_active_ops_num: %d\n", g_active_ops_num);
++ s += sprintf(s, "g_active_cur_idx: %d\n", g_active_cur_idx);
++
++ s += sprintf(s, "g_active_policy:\n");
++ for (i = 0; i < BPM_MAX_OP_NUM; ++i) {
++ for (j = 0; j < BPM_FREQ_POLICY_NUM; ++j) {
++ s += sprintf(s, "%8d ", g_active_policy[i].lower[j]);
++ }
++
++ for (j = 0; j < BPM_FREQ_POLICY_NUM; ++j) {
++ s += sprintf(s, "%8d ", g_active_policy[i].higher[j]);
++ }
++ s += sprintf(s, "\n");
++ }
++
++ DPRINTK("%s", buf);
++
++ s = buf;
++ memset(s, 0, TMP_BUF_SIZE);
++
++ s += sprintf(s, "g_active_bonus:\n");
++ for (i = 0; i < BPM_MAX_OP_NUM; ++i) {
++ for (j = 0; j < BPM_MAX_OP_NUM * 2 - 1; ++j) {
++ s += sprintf(s, "%8d ", g_active_bonus[i][j]);
++ }
++ s += sprintf(s, "\n");
++ }
++
++ DPRINTK("%s", buf);
++
++ s = buf;
++ memset(s, 0, TMP_BUF_SIZE);
++
++ s += sprintf(s, "g_dyn_ops num: %d\n",
++ sizeof(g_dyn_ops) / sizeof(struct dvfm_op));
++
++ s += sprintf(s, "g_dyn_ops:\n");
++
++ for (i = 0; i < sizeof(g_dyn_ops) / sizeof(struct dvfm_op); ++i) {
++ s += sprintf(s, "%8d %8d %8d %s\n",
++ g_dyn_ops[i].index,
++ g_dyn_ops[i].count,
++ g_dyn_ops[i].cpu_freq, g_dyn_ops[i].name);
++ }
++ s += sprintf(s, "--------------BPM DUMP POLICY END----------------\n");
++
++ DPRINTK("%s", buf);
++
++ kfree(buf);
++ return 0;
++}
++
++static int build_active_ops(void)
++{
++ int i, j;
++ int pre_idx;
++ int cur_idx;
++ int pre_freq, cur_freq, pre_ratio;
++ int m, n;
++
++ memset(g_active_ops_map, -1, sizeof(g_active_ops_map));
++
++ for (i = 0, j = 0; i < BPM_MAX_OP_NUM; ++i) {
++ if (g_dyn_ops[i].count == 0 && g_dyn_ops[i].name != NULL
++ && !dvfm_check_active_op(g_dyn_ops[i].index))
++ g_active_ops_map[j++] = i;
++ }
++
++ g_active_ops_num = j;
++ g_active_cur_idx = -1;
++
++ memset(g_active_bonus, -1, sizeof(g_active_bonus));
++ memset(g_active_policy, -1, sizeof(g_active_policy));
++
++ for (i = 0; i < g_active_ops_num; ++i) {
++ g_active_policy[i].higher[0] = 80;
++ g_active_policy[i].higher[1] = 95;
++ g_active_policy[i].higher[2] = 100;
++
++ if (i == 0) {
++ memset(g_active_policy[i].lower, 0,
++ sizeof(g_active_policy[i].lower));
++ cur_idx = g_active_ops_map[i];
++ cur_freq = g_dyn_ops[cur_idx].cpu_freq;
++ if (cur_freq == 60) {
++ g_active_policy[i].higher[0] = 90;
++ }
++ } else {
++ pre_idx = g_active_ops_map[i - 1];
++ cur_idx = g_active_ops_map[i];
++ pre_freq = g_dyn_ops[pre_idx].cpu_freq;
++ cur_freq = g_dyn_ops[cur_idx].cpu_freq;
++ pre_ratio = g_active_policy[i - 1].higher[0];
++
++ g_active_policy[i].lower[2] = pre_freq * pre_ratio / cur_freq;
++
++ if (i > 1) {
++ pre_idx = g_active_ops_map[i - 2];
++ pre_freq = g_dyn_ops[pre_idx].cpu_freq;
++ pre_ratio = g_active_policy[i - 2].higher[0];
++
++ g_active_policy[i].lower[1] = pre_freq * pre_ratio / cur_freq;
++ } else {
++ g_active_policy[i].lower[1] = 0;
++ }
++
++ g_active_policy[i].lower[0] = 0;
++ }
++
++ for (j = 0; j < g_active_ops_num - 1 - i; ++j) {
++ g_active_bonus[i][j] = 0;
++ }
++
++ m = g_active_ops_num - 1;
++ n = 0;
++ for (j = m - i; j < 2 * g_active_ops_num - 1; ++j) {
++ g_active_bonus[i][j] = n < m ? n : m;
++ ++n;
++ }
++
++ }
++
++ g_active_policy[i - 1].higher[0] = 100;
++ g_active_policy[i - 1].higher[1] = 100;
++ g_active_policy[i - 1].higher[2] = 100;
++
++#if REDUCE_624M_DUTYCYCLE
++ cur_idx = g_active_ops_map[i - 1];
++ cur_freq = g_dyn_ops[cur_idx].cpu_freq;
++ if (cur_freq == 624) {
++ if (i > 1) {
++ g_active_policy[i - 2].higher[0] = 96;
++ g_active_policy[i - 2].higher[1] = 100;
++
++ pre_idx = g_active_ops_map[i - 2];
++ pre_freq = g_dyn_ops[pre_idx].cpu_freq;
++ pre_ratio = g_active_policy[i - 2].higher[0];
++
++ g_active_policy[i - 1].lower[2] = pre_freq * pre_ratio / cur_freq;
++ }
++ if (i > 2) {
++ g_active_policy[i - 3].higher[1] = 100;
++
++ pre_idx = g_active_ops_map[i - 3];
++ pre_freq = g_dyn_ops[pre_idx].cpu_freq;
++ pre_ratio = g_active_policy[i - 3].higher[0];
++
++ g_active_policy[i - 1].lower[1] = pre_freq * pre_ratio / cur_freq;
++ }
++ }
++#endif
++ return 0;
++}
++
++/*****************************************************************************/
++/* */
++/* Platform Related */
++/* */
++/*****************************************************************************/
++
++int get_op_power_bonus(void)
++{
++ if (0 == g_active_cur_idx)
++ return 1;
++ else
++ return 0;
++}
++
++static int build_dyn_ops(void)
++{
++ int i;
++ int ret;
++ int op_num = 0;
++ int count, x;
++
++ struct op_info *info = NULL;
++ struct op_freq freq;
++
++ op_num = dvfm_op_count();
++ PM_BUG_ON(op_num > BPM_MAX_OP_NUM);
++
++ memset(&g_dyn_ops, -1, sizeof(g_dyn_ops));
++
++ for (i = 0; i < op_num; ++i) {
++ ret = dvfm_get_opinfo(i, &info);
++
++ PM_BUG_ON(ret);
++
++ /* calculate how much bits is set in device word */
++ x = info->device;
++ for (count = 0; x; x = x & (x - 1), count++);
++
++ g_dyn_ops[i].index = i;
++ g_dyn_ops[i].count = count;
++
++ ret = dvfm_get_op_freq(i, &freq);
++ PM_BUG_ON(ret);
++
++ g_dyn_ops[i].cpu_freq = freq.cpu_freq;
++
++ g_dyn_ops[i].name = dvfm_get_op_name(i);
++
++ PM_BUG_ON(!g_dyn_ops[i].name);
++
++ INIT_LIST_HEAD(&(g_bpm_cons[i].list));
++ }
++
++ for (i = op_num; i < BPM_MAX_OP_NUM; ++i) {
++ g_dyn_ops[i].index = -1;
++ g_dyn_ops[i].count = 0;
++ g_dyn_ops[i].cpu_freq = 0;
++ g_dyn_ops[i].name = NULL;
++
++ INIT_LIST_HEAD(&(g_bpm_cons[i].list));
++ }
++
++ return 0;
++}
++
++static int get_dyn_idx(int active_idx)
++{
++ int t;
++ t = g_active_ops_map[active_idx];
++ return g_dyn_ops[t].index;
++}
++
++static int get_cur_freq(void)
++{
++ PM_BUG_ON(g_active_cur_idx == -1);
++ return g_dyn_ops[get_dyn_idx(g_active_cur_idx)].cpu_freq;
++}
++
++static int calc_new_idx(int bonus)
++{
++ int new_idx;
++
++ new_idx =
++ g_active_bonus[g_active_cur_idx][bonus + g_active_ops_num - 1];
++
++ return new_idx;
++}
++
++static int calc_bonus(struct bpm_freq_bonus_arg *parg)
++{
++ int i;
++ int bonus = 0;
++ int mem_stall = parg->mem_stall;
++ int mipsload = parg->mips * 100 / get_cur_freq();
++ int cpuload = mipsload > 100 ? 100 : mipsload;
++
++ PM_BUG_ON(cpuload > 100 || cpuload < 0);
++
++ for (i = 0; i < BPM_FREQ_POLICY_NUM; ++i) {
++ if (cpuload > g_active_policy[g_active_cur_idx].higher[i]) {
++ bonus += 1;
++// break; /* FIX ME: change the freq one by one */
++ }
++ }
++
++ for (i = BPM_FREQ_POLICY_NUM - 1; i >= 0; --i) {
++ if (cpuload < g_active_policy[g_active_cur_idx].lower[i]) {
++ bonus -= 1;
++// break; /* FIX ME: change the freq one by one */
++ }
++ }
++
++ /* memory bound */
++ if (bonus <= 0 && mem_stall > 17)
++ bonus = 1;
++
++ /* change to user_sleep policy ... */
++ if (g_android_suspended && (g_active_cur_idx <= 1))
++ bonus -= 1;
++
++ if (bonus > g_active_ops_num - 1)
++ bonus = g_active_ops_num - 1;
++ else if (bonus < 1 - g_active_ops_num)
++ bonus = 1 - g_active_ops_num;
++
++ return bonus;
++}
++
++/*****************************************************************************/
++/* */
++/* BPMD API */
++/* */
++/*****************************************************************************/
++
++static int bpm_change_op(int cur_idx, int new_idx)
++{
++ int ret;
++ struct dvfm_freqs freqs;
++ unsigned int oscr;
++
++ freqs.old = cur_idx;
++ freqs.new = new_idx;
++ oscr = OSCR;
++ ret = dvfm_set_op(&freqs, freqs.new, RELATION_STICK);
++ oscr = OSCR - oscr;
++ DPRINTK("old: %d cur: %d (tm: %d)\n", cur_idx, new_idx, oscr/325);
++/*
++ DPRINTK("ACCR: 0x%x ACSR: 0x%x AVCR: 0x%x SVCR: 0x%x CVCR: 0x%x\n",
++ ACCR, ACSR, AVCR, SVCR, CVCR);
++*/
++ return ret;
++}
++
++/* this function need to be refatored later? */
++int bpm_disable_op(int dyn_idx, int dev_idx)
++{
++ int i;
++ int ret = 0;
++ int cur_op_idx = -1, op_idx;
++ int next_op_idx = -1, next_active_idx = -1;
++
++ op_idx = g_dyn_ops[dyn_idx].index;
++
++ /* save current op information */
++ if (g_active_cur_idx != -1) {
++ cur_op_idx = get_dyn_idx(g_active_cur_idx);
++ }
++
++ if (!dvfm_check_active_op(op_idx) && g_active_ops_num == 1 &&
++ cur_op_idx == op_idx) {
++ printk(KERN_ERR "Can't disable this op %d\n", op_idx);
++ bpm_dump_policy();
++ return -1;
++ }
++
++ /*
++ * it should be at least two enabled ops here,
++ * otherwise it cannot come here if there is one enabled op.
++ */
++ if ((g_active_cur_idx != -1) && (g_active_ops_num > 1)) {
++ if (g_active_cur_idx == (g_active_ops_num - 1)) {
++ next_op_idx = get_dyn_idx(g_active_cur_idx - 1);
++ PM_BUG_ON((g_active_cur_idx - 1) < 0);
++ if ((g_active_cur_idx - 1) < 0) {
++ printk(KERN_ERR "err: %d %d\n", g_active_cur_idx, g_active_ops_num);
++ bpm_dump_policy();
++ }
++ } else {
++ next_op_idx = get_dyn_idx(g_active_cur_idx + 1);
++ PM_BUG_ON((g_active_cur_idx + 1) > (g_active_ops_num - 1));
++ if ((g_active_cur_idx + 1) > (g_active_ops_num - 1)) {
++ printk(KERN_ERR "err2: %d %d\n", g_active_cur_idx, g_active_ops_num);
++ bpm_dump_policy();
++ }
++ }
++ }
++
++ g_dyn_ops[dyn_idx].count++;
++
++ __dvfm_disable_op2(op_idx, dev_idx);
++
++ if (!dvfm_check_active_op(op_idx) && g_dyn_ops[dyn_idx].count == 1) {
++ build_active_ops();
++ }
++
++ if (cur_op_idx != -1) {
++ for (i = 0; i < g_active_ops_num; ++i) {
++ if (get_dyn_idx(i) == cur_op_idx) {
++ g_active_cur_idx = i;
++ break;
++ }
++ }
++
++ /* the disabled op is previous op, change to another op */
++ if (g_active_cur_idx == -1) {
++
++ /* find next op */
++ for (i = 0; i < g_active_ops_num; ++i) {
++ if (get_dyn_idx(i) == next_op_idx) {
++ next_active_idx = i;
++ break;
++ }
++ }
++
++ PM_BUG_ON(cur_op_idx != op_idx);
++ PM_BUG_ON(next_op_idx != get_dyn_idx(next_active_idx));
++ g_active_cur_idx = next_active_idx;
++ ret = bpm_change_op(cur_op_idx, next_op_idx);
++ PM_BUG_ON(ret);
++ }
++ }
++
++ return ret;
++}
++
++int bpm_enable_op(int dyn_idx, int dev_idx)
++{
++ int i, cur_op_idx = -1;
++
++ if (g_dyn_ops[dyn_idx].count <= 0) {
++ printk(KERN_ERR "are you disable this op before?\n");
++ return -1;
++ }
++
++ /* save current op information */
++ if (g_active_cur_idx != -1) {
++ cur_op_idx = get_dyn_idx(g_active_cur_idx);
++ }
++
++ g_dyn_ops[dyn_idx].count--;
++
++ if (g_dyn_ops[dyn_idx].count == 0)
++ build_active_ops();
++
++ __dvfm_enable_op(g_dyn_ops[dyn_idx].index, dev_idx);
++
++ if (cur_op_idx != -1) {
++ for (i = 0; i < g_active_ops_num; ++i) {
++ if (get_dyn_idx(i) == cur_op_idx) {
++ g_active_cur_idx = i;
++ break;
++ }
++ }
++ }
++
++ return 0;
++}
++
++int bpm_enable_op_name(char *name, int dev_idx, char *sid)
++{
++ unsigned long flag;
++ int ret = 0, new_idx = -1;
++ int i, found;
++ struct list_head *list = NULL;
++ struct bpm_cons *p = NULL;
++
++ spin_lock_irqsave(&g_dyn_ops_lock, flag);
++
++ for (i = 0; i < sizeof(g_dyn_ops) / sizeof(struct dvfm_op); ++i) {
++ if (g_dyn_ops[i].name != NULL &&
++ (!strncmp(name, g_dyn_ops[i].name, sizeof(name)))) {
++ ret = bpm_enable_op(i, dev_idx);
++
++ if (!ret) {
++ found = 0;
++ list_for_each(list, &(g_bpm_cons[i].list)) {
++ p = list_entry(list, struct bpm_cons, list);
++ if (!strncmp(p->sid, sid, CONSTRAINT_ID_LEN - 1)) {
++ found = 1;
++ PM_BUG_ON(p->count <= 0);
++ p->count--;
++ if (p->tmp_ms) {
++ p->tm++;
++ p->ms += (OSCR / 3250 - p->tmp_ms);
++ }
++ break;
++ }
++ }
++ PM_BUG_ON(!found);
++ } else {
++ printk(KERN_ERR "%s use PM interface rightly!\n", sid);
++ PM_BUG_ON(1);
++ }
++ break;
++ }
++ }
++
++ if (i == sizeof(g_dyn_ops) / sizeof(struct dvfm_op)) {
++// printk(KERN_ERR "Cannot find and enable op name %s\n", name);
++ }
++
++ PM_BUG_ON((-1 != g_active_cur_idx) && (get_dyn_idx(g_active_cur_idx) != cur_op));
++
++ /* Change to prefrer op */
++ if (g_prefer_op_idx != cur_op && g_active_cur_idx != -1) {
++ for (i = 0; i < g_active_ops_num; ++i) {
++ if (get_dyn_idx(i) == g_prefer_op_idx) {
++ new_idx = i;
++ break;
++ }
++ }
++
++ if (new_idx != -1) {
++ ret = bpm_change_op(get_dyn_idx(g_active_cur_idx), get_dyn_idx(new_idx));
++ if (0 == ret)
++ g_active_cur_idx = new_idx;
++ PM_BUG_ON((-1 != g_active_cur_idx) && (get_dyn_idx(g_active_cur_idx) != cur_op));
++ }
++ }
++
++ spin_unlock_irqrestore(&g_dyn_ops_lock, flag);
++
++ return ret;
++}
++
++int bpm_disable_op_name(char *name, int dev_idx, char *sid)
++{
++ unsigned long flag;
++ int ret = -1;
++ int i;
++ int find = 0;
++ struct list_head *list = NULL;
++ struct bpm_cons *p = NULL;
++
++ spin_lock_irqsave(&g_dyn_ops_lock, flag);
++
++ for (i = 0; i < sizeof(g_dyn_ops) / sizeof(struct dvfm_op); ++i) {
++ if (g_dyn_ops[i].name != NULL &&
++ (!strncmp(name, g_dyn_ops[i].name, sizeof(name)))) {
++ ret = bpm_disable_op(i, dev_idx);
++
++ if (!ret) {
++ list_for_each(list, &(g_bpm_cons[i].list)) {
++ p = list_entry(list, struct bpm_cons, list);
++ if (!strncmp(p->sid, sid, CONSTRAINT_ID_LEN - 1)) {
++ p->count++;
++ p->tmp_ms = OSCR / 3250;
++ find = 1;
++ break;
++ }
++ }
++
++ if (find == 0) {
++ p = (struct bpm_cons *)kzalloc(sizeof(struct bpm_cons), GFP_KERNEL);
++ strncpy(p->sid, sid, CONSTRAINT_ID_LEN - 1);
++ p->count = 1;
++ list_add_tail(&(p->list), &(g_bpm_cons[i].list));
++ }
++ }
++ break;
++ }
++ }
++
++ if (i == sizeof(g_dyn_ops) / sizeof(struct dvfm_op)) {
++// printk(KERN_ERR "Cannot find and disable op name %s\n", name);
++ }
++
++ PM_BUG_ON((-1 != g_active_cur_idx) && (get_dyn_idx(g_active_cur_idx) != cur_op));
++
++ spin_unlock_irqrestore(&g_dyn_ops_lock, flag);
++
++ return ret;
++}
++
++static int handle_profiler_arg(struct bpm_freq_bonus_arg *parg)
++{
++ int bonus;
++ int new_idx;
++ unsigned long flag;
++ int cur_dyn_idx, new_dyn_idx;
++
++ if (g_dvfm_blink)
++ return 0;
++
++ /*
++ * bpm_enable_op_name() and bpm_disable_op_name() will update
++ * g_dyn_ops[] and g_active_xxx[], and then scale the op, so
++ * we need to avoid the conflict.
++ * Below code can not call schedule() indirectly.
++ */
++ spin_lock_irqsave(&g_dyn_ops_lock, flag);
++
++ if (0 == g_bpm_enabled) {
++ spin_unlock_irqrestore(&g_dyn_ops_lock, flag);
++ return 0;
++ }
++
++ bonus = calc_bonus(parg);
++ new_idx = calc_new_idx(bonus);
++
++ cur_dyn_idx = get_dyn_idx(g_active_cur_idx);
++ new_dyn_idx = get_dyn_idx(new_idx);
++
++/*
++ DPRINTK
++ ("bonus:%d, cur_idx: %d, new_idx: %d, old_hw_idx: %d, new_hw_idx: %d\n",
++ bonus, g_active_cur_idx, new_idx, cur_dyn_idx, new_dyn_idx);
++*/
++ if (new_idx != g_active_cur_idx) {
++ if (!bpm_change_op(cur_dyn_idx, new_dyn_idx)) {
++ g_active_cur_idx = new_idx;
++ } else {
++ DPRINTK("scaling freq later!\n");
++ }
++ g_prefer_op_idx = new_dyn_idx;
++ }
++
++ PM_BUG_ON((-1 != g_active_cur_idx) && (get_dyn_idx(g_active_cur_idx) != cur_op));
++
++ spin_unlock_irqrestore(&g_dyn_ops_lock, flag);
++
++ return 0;
++}
++
++static void dvfm_blink_timer_handler(unsigned long data)
++{
++ unsigned long flag;
++
++ local_irq_save(flag);
++
++ g_dvfm_blink = 0;
++ g_dvfm_blink_timeout = 0;
++ memset(&g_dvfm_binfo, 0, sizeof(struct dvfm_blink_info));
++
++ local_irq_restore(flag);
++}
++
++static int handle_blink(struct bpm_event *pevent)
++{
++ int new_idx;
++ unsigned long flag;
++ int cur_dyn_idx, new_dyn_idx;
++ struct dvfm_blink_info *pinfo = NULL;
++
++ if (0 == g_bpm_enabled)
++ return 0;
++
++ spin_lock_irqsave(&g_dyn_ops_lock, flag);
++
++ pinfo = (struct dvfm_blink_info *)pevent->info;
++
++ DPRINTK("Blink: %d %lu %lu\n", g_dvfm_blink, g_dvfm_blink_timeout, jiffies + msecs_to_jiffies(pinfo->time));
++
++ if ((0 == g_dvfm_blink) || time_before(g_dvfm_blink_timeout, jiffies + msecs_to_jiffies(pinfo->time))) {
++
++ memcpy(&g_dvfm_binfo, pinfo, sizeof(struct dvfm_blink_info));
++
++ g_dvfm_blink_timeout = jiffies + msecs_to_jiffies(pinfo->time);
++ g_dvfm_blink = 1;
++ mod_timer(&g_dvfm_blink_timer, g_dvfm_blink_timeout);
++
++ new_idx = g_active_ops_num - 1;
++ cur_dyn_idx = get_dyn_idx(g_active_cur_idx);
++ new_dyn_idx = get_dyn_idx(new_idx);
++
++ if (new_dyn_idx > cur_dyn_idx) {
++ if (!bpm_change_op(cur_dyn_idx, new_dyn_idx)) {
++ g_active_cur_idx = new_idx;
++ g_prefer_op_idx = new_dyn_idx;
++ }
++ }
++ } else {
++ printk("Blink: %s already set and blink(%lu)\n", g_dvfm_binfo.name, g_dvfm_blink_timeout);
++ }
++
++ PM_BUG_ON((-1 != g_active_cur_idx) && (get_dyn_idx(g_active_cur_idx) != cur_op));
++
++ spin_unlock_irqrestore(&g_dyn_ops_lock, flag);
++
++ return 0;
++}
++
++static int handle_profiler(struct bpm_event *pevent)
++{
++ struct ipm_profiler_result *pinfo =
++ (struct ipm_profiler_result *)pevent->info;
++ struct bpm_freq_bonus_arg bonus_arg;
++ int mips = pinfo->mips;
++ int mem_stall = 0;
++
++#ifdef CONFIG_TEST_BPMD
++ static int cpuload = 10;
++ switch (g_cpuload_mode) {
++ case 0:
++ cpuload = mips * 100 / get_cur_freq();
++ break;
++ case 1:
++ cpuload = (cpuload == 10 ? 90 : 10);
++ break;
++ case 2:
++ cpuload = OSCR % 101;
++ break;
++ case 3:
++ cpuload = (OSCR & 0x1) ? 90 : 10;
++ break;
++ case 4:
++ cpuload = OSCR % 21;
++ break;
++ case 5:
++ cpuload = 80 + OSCR % 21;
++ break;
++ }
++ mips = cpuload * get_cur_freq() / 100;
++
++// DPRINTK("orig ratio: %d new ratio: %d\n", pinfo->busy_ratio, busy);
++#endif
++ DPRINTK("time_load: %d mips_load: %d (%d)\n", pinfo->busy_ratio, mips * 100 / get_cur_freq(), get_cur_freq());
++
++ /*
++ * Get PMU Data, bla bla bla...
++ */
++ bonus_arg.mips = mips;
++ bonus_arg.mem_stall = mem_stall;
++
++ handle_profiler_arg(&bonus_arg);
++
++ bpm_start_pmu();
++ return 0;
++}
++
++static int bpm_process_event(struct bpm_event *pevent)
++{
++ switch (pevent->type) {
++ case IPM_EVENT_PROFILER:
++ handle_profiler(pevent);
++ break;
++
++ case IPM_EVENT_BLINK:
++ handle_blink(pevent);
++ break;
++
++ default:
++ PM_BUG_ON(1);
++ }
++ return 0;
++}
++
++int bpm_pre_enter_d0csidle(int* op)
++{
++ unsigned long flag;
++ int ret = 0, new_dyn_idx;;
++
++ spin_lock_irqsave(&g_dyn_ops_lock, flag);
++
++ if (g_active_cur_idx != -1)
++ *op = get_dyn_idx(g_active_cur_idx);
++ else
++ *op = dvfm_get_defop();
++
++ new_dyn_idx = get_dyn_idx(0);
++ if (*op > new_dyn_idx) {
++ ret = bpm_change_op(*op, new_dyn_idx);
++
++ if ((0 == ret) && (-1 != g_active_cur_idx)) {
++ g_active_cur_idx = 0;
++ }
++ }
++
++ PM_BUG_ON((-1 != g_active_cur_idx) && (get_dyn_idx(g_active_cur_idx) != cur_op));
++
++ spin_unlock_irqrestore(&g_dyn_ops_lock, flag);
++
++#ifdef CONFIG_MTD_NAND_HSS_FIX
++ if (!atomic_read(&nand_in_cmd))
++#endif
++ PM_BUG_ON(ret);
++
++ return ret;
++}
++
++int bpm_post_exit_d0csidle(int op)
++{
++ unsigned long flag;
++ int new_idx = -1;
++ int cur_dyn_op, new_dyn_op;
++ int i, ret;
++
++ spin_lock_irqsave(&g_dyn_ops_lock, flag);
++
++ if (g_active_cur_idx != -1) {
++ for (i = 0; i < g_active_ops_num; ++i) {
++ if (get_dyn_idx(i) >= op) {
++ new_idx = i;
++ break;
++ }
++ }
++
++ PM_BUG_ON(new_idx == -1);
++
++ cur_dyn_op = get_dyn_idx(g_active_cur_idx);
++ new_dyn_op = get_dyn_idx(new_idx);
++
++ PM_BUG_ON(cur_dyn_op != cur_op);
++
++ g_active_cur_idx = new_idx;
++ } else {
++ cur_dyn_op = cur_op;
++ new_dyn_op = dvfm_get_defop();
++ PM_BUG_ON(op != new_dyn_op);
++ }
++
++ PM_BUG_ON(cur_dyn_op > new_dyn_op);
++
++ if (cur_dyn_op != new_dyn_op) {
++ ret = bpm_change_op(cur_dyn_op, new_dyn_op);
++ PM_BUG_ON(ret);
++ }
++
++ PM_BUG_ON((-1 != g_active_cur_idx) && (get_dyn_idx(g_active_cur_idx) != cur_op));
++
++ spin_unlock_irqrestore(&g_dyn_ops_lock, flag);
++
++ return 0;
++}
++
++int bpm_set_active_op(const unsigned char* opname)
++{
++ int opname_idx = -1, i, cur_idx;
++ int ret = 0;
++ unsigned long flag;
++
++ if (-1 != g_active_cur_idx) {
++ spin_lock_irqsave(&g_dyn_ops_lock, flag);
++
++ for (i = 0; i < g_active_ops_num; ++i) {
++ cur_idx = g_active_ops_map[i];
++ if (!strcmp(opname, g_dyn_ops[cur_idx].name)) {
++ opname_idx = i;
++ }
++ }
++
++ if(opname_idx != -1) {
++ if (g_active_cur_idx != opname_idx) {
++ ret = bpm_change_op(get_dyn_idx(g_active_cur_idx), get_dyn_idx(opname_idx));
++ g_active_cur_idx = opname_idx;
++ g_prefer_op_idx = get_dyn_idx(opname_idx);
++ PM_BUG_ON(ret);
++ }
++ } else
++ printk(KERN_WARNING "Cannot find %s, %s is disabled?\n", opname, opname);
++
++ PM_BUG_ON((-1 != g_active_cur_idx) && (get_dyn_idx(g_active_cur_idx) != cur_op));
++
++ spin_unlock_irqrestore(&g_dyn_ops_lock, flag);
++ }
++
++ return ret;
++}
++/*****************************************************************************/
++/* */
++/* BPMD Thread */
++/* */
++/*****************************************************************************/
++
++static int change_to_active_op(void)
++{
++ unsigned long flag;
++ int ret = 0;
++
++ spin_lock_irqsave(&g_dyn_ops_lock, flag);
++
++ g_active_cur_idx = g_active_ops_num - 1;
++ ret = bpm_change_op(dvfm_get_defop(), get_dyn_idx(g_active_cur_idx));
++ g_prefer_op_idx = cur_op;
++
++ PM_BUG_ON((-1 != g_active_cur_idx) && (get_dyn_idx(g_active_cur_idx) != cur_op));
++
++ spin_unlock_irqrestore(&g_dyn_ops_lock, flag);
++
++ PM_BUG_ON(ret);
++
++ return ret;
++}
++
++static int change_to_def_op(void)
++{
++ unsigned long flag;
++ int ret = 0;
++
++ spin_lock_irqsave(&g_dyn_ops_lock, flag);
++
++ ret = bpm_change_op(get_dyn_idx(g_active_cur_idx), dvfm_get_defop());
++ g_prefer_op_idx = cur_op;
++
++ g_active_cur_idx = -1;
++
++ spin_unlock_irqrestore(&g_dyn_ops_lock, flag);
++
++ PM_BUG_ON(ret);
++
++ return ret;
++}
++
++static int bpm_start(void)
++{
++ int ret;
++
++ if (0 == g_bpm_enabled) {
++ bpmq_clear();
++ change_to_active_op();
++ ret = bpm_start_pmu();
++ if (ret) {
++ printk(KERN_ERR "Can't start_pmu, ret: %d\n", ret);
++ g_bpm_enabled = 0;
++ return ret;
++ }
++ g_bpm_enabled = 1;
++#ifdef DEBUG
++ bpm_dump_policy();
++#endif
++ wake_up_interruptible(&g_bpm_enabled_waitq);
++ } else {
++ printk(KERN_DEBUG "bpmd already enabled (%d)\n", g_bpm_enabled);
++ }
++
++ return 0;
++}
++
++extern int gpio_reset_work_around(void);
++static int bpm_stop(void)
++{
++ if (1 == g_bpm_enabled) {
++ bpm_stop_pmu();
++ if (machine_is_bstd())
++ gpio_reset_work_around();
++ else
++ change_to_def_op();
++ g_bpm_enabled = 0;
++ } else {
++ printk(KERN_DEBUG "bpmd already stopped (%d)\n", g_bpm_enabled);
++ }
++
++ return 0;
++}
++
++static int bpm_thread(void *data)
++{
++ int ret = 0;
++ struct bpm_event event;
++ struct task_struct *tsk = current;
++ struct sched_param param = {.sched_priority = 1 };
++
++ DEFINE_WAIT(wait);
++
++ if (g_dvfm_disabled)
++ goto thread_over;
++
++ daemonize("bpmd");
++ strcpy(tsk->comm, "bpmd");
++
++ allow_signal(SIGKILL);
++ sched_setscheduler(tsk, SCHED_FIFO, &param);
++
++ g_bpm_log_level = 0;
++
++ msleep(SYSTEM_BOOTUP_TIME);
++
++ ret = bpm_start();
++ PM_BUG_ON(ret);
++
++ DPRINTK("Begining bpm deamon thread ...\n");
++
++ while (likely(!g_bpm_thread_exit)) {
++
++ if (unlikely(signal_pending(tsk))) {
++ printk(KERN_NOTICE "BPMD is killed by SIGKILL!\n");
++ break;
++ }
++
++// DPRINTK("g_bpm_enabled = %d, bpmq_empty = %d\n",
++// g_bpm_enabled, bpmq_empty());
++
++ if (likely(g_bpm_enabled)) {
++ if (likely(bpmq_empty())) {
++ prepare_to_wait(&g_bpm_event_queue.waitq, &wait,
++ TASK_INTERRUPTIBLE);
++ schedule();
++ finish_wait(&g_bpm_event_queue.waitq, &wait);
++ }
++
++ if (likely(!bpmq_empty())) {
++ ret = bpmq_get(&event);
++ PM_BUG_ON(ret);
++
++ bpm_process_event(&event);
++ }
++ } else {
++ prepare_to_wait(&g_bpm_enabled_waitq, &wait,
++ TASK_INTERRUPTIBLE);
++ schedule();
++ finish_wait(&g_bpm_enabled_waitq, &wait);
++ }
++ }
++
++ bpm_stop();
++
++thread_over:
++ complete_and_exit(&g_bpm_thread_over, 0);
++
++ printk(KERN_WARNING "bpm daemon thread exit!\n");
++ return 0;
++}
++
++/*****************************************************************************/
++/* */
++/* BPMD SYS Interface */
++/* */
++/*****************************************************************************/
++
++static ssize_t op_show(struct sys_device *sys_dev, char *buf)
++{
++ int cur_dyn_idx, len;
++
++ if (g_active_cur_idx != -1)
++ cur_dyn_idx = get_dyn_idx(g_active_cur_idx);
++ else
++ cur_dyn_idx = dvfm_get_defop();
++
++ PM_BUG_ON(cur_dyn_idx != cur_op);
++
++ len = dvfm_dump_op(cur_dyn_idx, buf);
++
++ return len;
++}
++
++static ssize_t op_store(struct sys_device *sys_dev, const char *buf, size_t len)
++{
++ int i;
++ int dyn_idx, new_dyn_idx, cur_dyn_idx, new_active_idx = -1;
++ unsigned long flag;
++ int res = 0;
++
++ sscanf(buf, "%u", &new_dyn_idx);
++
++ spin_lock_irqsave(&g_dyn_ops_lock, flag);
++
++ for (i = 0; i < g_active_ops_num; ++i) {
++ dyn_idx = g_active_ops_map[i];
++ if (g_dyn_ops[dyn_idx].index == new_dyn_idx) {
++ new_active_idx = i;
++ break;
++ }
++ }
++
++ if (new_active_idx != -1) {
++ if (g_active_cur_idx != -1)
++ cur_dyn_idx = get_dyn_idx(g_active_cur_idx);
++ else
++ cur_dyn_idx = dvfm_get_defop();
++
++ res = bpm_change_op(cur_dyn_idx, new_dyn_idx);
++ g_prefer_op_idx = new_dyn_idx;
++
++ PM_BUG_ON(res);
++
++ g_active_cur_idx = new_active_idx;
++ } else {
++ printk(KERN_ERR "bpm is enabled, new dyn op:%d\n", new_dyn_idx);
++ printk(KERN_ERR "Cannot find new active op, please check it\n");
++ }
++
++ PM_BUG_ON((-1 != g_active_cur_idx) && (get_dyn_idx(g_active_cur_idx) != cur_op));
++
++ spin_unlock_irqrestore(&g_dyn_ops_lock, flag);
++
++ return len;
++}
++
++SYSDEV_ATTR(op, 0644, op_show, op_store);
++
++static ssize_t ops_show(struct sys_device *sys_dev, char *buf)
++{
++ int len = 0;
++ char *p = NULL;
++ int i;
++
++ for (i = 0; i < sizeof(g_dyn_ops) / sizeof(struct dvfm_op); ++i) {
++ if (g_dyn_ops[i].name != NULL) {
++ p = buf + len;
++ len += dvfm_dump_op(i, p);
++ }
++ }
++
++ return len;
++}
++
++SYSDEV_ATTR(ops, 0444, ops_show, NULL);
++
++static ssize_t enable_op_show(struct sys_device *sys_dev, char *buf)
++{
++ int len = 0;
++ char *p = NULL;
++ int i;
++
++ for (i = 0; i < sizeof(g_dyn_ops) / sizeof(struct dvfm_op); ++i) {
++ if ((!g_dyn_ops[i].count) && (g_dyn_ops[i].name != NULL)) {
++ p = buf + len;
++ len += dvfm_dump_op(i, p);
++ }
++ }
++
++ return len;
++}
++
++static ssize_t enable_op_store(struct sys_device *sys_dev, const char *buf,
++ size_t len)
++{
++ int level;
++ char name[16];
++
++ if (len >= 16) {
++ printk(KERN_ERR "invalid parameter\n");
++ return len;
++ }
++
++ memset(name, 0, sizeof(name));
++ sscanf(buf, "%s %d", name, &level);
++
++ if (level)
++ bpm_enable_op_name(name, dvfm_dev_idx, "user-echo");
++ else
++ bpm_disable_op_name(name, dvfm_dev_idx, "user-echo");
++
++ return len;
++}
++
++SYSDEV_ATTR(enable_op, 0666, enable_op_show, enable_op_store);
++
++static ssize_t profiler_window_show(struct sys_device *sys_dev, char *buf)
++{
++ char *s = buf;
++
++ s += sprintf(s, "%d\n", g_profiler_window);
++
++ return (s - buf);
++}
++
++static ssize_t profiler_window_store(struct sys_device *sys_dev,
++ const char *buf, size_t n)
++{
++ sscanf(buf, "%u", &g_profiler_window);
++
++ if (g_profiler_window < 10 || g_profiler_window > 20000)
++ printk(KERN_ERR "please input the value in (10, 20000]\n");
++
++ return n;
++}
++
++SYSDEV_ATTR(profiler_window, 0644, profiler_window_show, profiler_window_store);
++
++static ssize_t bpm_show(struct sys_device *sys_dev, char *buf)
++{
++ char *s = buf;
++
++ if (g_bpm_enabled)
++ s += sprintf(s, "%s\n", "enabled");
++ else
++ s += sprintf(s, "%s\n", "disabled");
++
++ return (s - buf);
++}
++
++static ssize_t bpm_store(struct sys_device *sys_dev, const char *buf, size_t n)
++{
++ if (n >= strlen("enable") &&
++ strncmp(buf, "enable", strlen("enable")) == 0) {
++ bpm_start();
++ return n;
++ }
++
++ if (n >= strlen("disable") &&
++ strncmp(buf, "disable", strlen("disable")) == 0) {
++ bpm_stop();
++ return n;
++ }
++
++ printk(KERN_ERR "invalid input, please try \"enable\" or \"disable\"\n");
++ return n;
++}
++
++SYSDEV_ATTR(bpm, 0644, bpm_show, bpm_store);
++
++static ssize_t blink_show(struct sys_device *sys_dev, char *buf)
++{
++ char *s = buf;
++
++ if (g_dvfm_blink)
++ s += sprintf(s, "blink: %s\n", g_dvfm_binfo.name);
++ else
++ s += sprintf(s, "blink: no\n");
++
++ return (s - buf);
++}
++
++static ssize_t blink_store(struct sys_device *sys_dev, const char *buf, size_t len)
++{
++ struct dvfm_blink_info binfo;
++
++ if (len >= (DVFM_BLINK_OWNER_LEN - 1)) {
++ printk(KERN_ERR "%s sets an invalid parameter of blink\n", current->comm);
++ return len;
++ }
++
++ memset(binfo.name, 0, sizeof(binfo.name));
++ sscanf(buf, "%s %d %*s", binfo.name, &binfo.time);
++
++ DPRINTK("blink: %s %d\n", binfo.name, binfo.time);
++
++ if (binfo.time < 0 || binfo.time > 3000) {
++ printk("%s sets an invalid time of blink\n", current->comm);
++ return len;
++ }
++
++ bpm_event_notify(IPM_EVENT_BLINK, IPM_EVENT_BLINK_SPEEDUP, &binfo,
++ sizeof(struct dvfm_blink_info));
++
++ return len;
++}
++SYSDEV_ATTR(blink, 0666, blink_show, blink_store);
++
++static ssize_t log_show(struct sys_device *sys_dev, char *buf)
++{
++ char *s = buf;
++
++ s += sprintf(s, "%d\n", g_bpm_log_level);
++
++ return (s - buf);
++}
++
++static ssize_t log_store(struct sys_device *sys_dev, const char *buf, size_t n)
++{
++ sscanf(buf, "%u", &g_bpm_log_level);
++
++ if (g_bpm_log_level < 0 || g_bpm_log_level > 7) {
++ g_bpm_log_level = 0;
++ printk(KERN_ERR "invalid command\n");
++ }
++ return n;
++}
++
++SYSDEV_ATTR(log, 0644, log_show, log_store);
++
++static ssize_t cons_show(struct sys_device *sys_dev, char *buf)
++{
++ char *s = buf;
++ struct list_head *list = NULL;
++ struct bpm_cons *p = NULL;
++ int i;
++ unsigned long avg_ms;
++
++ for (i = 0; i < BPM_MAX_OP_NUM; ++i) {
++ s += sprintf(s, "op %d: %d\n", i, g_dyn_ops[i].count);
++ list_for_each(list, &(g_bpm_cons[i].list)) {
++ p = list_entry(list, struct bpm_cons, list);
++ if (p->tm)
++ avg_ms = p->ms / p->tm;
++ else
++ avg_ms = 0;
++ s += sprintf(s, "\t%8ld %12ld %8ld %s: %d\n",
++ p->tm, p->ms, avg_ms, p->sid, p->count);
++ }
++ }
++
++ return (s - buf);
++}
++
++static ssize_t cons_store(struct sys_device *sys_dev, const char *buf, size_t n)
++{
++ struct list_head *list = NULL;
++ struct bpm_cons *p = NULL;
++ int i;
++ int cons_ctl = 0;
++
++ sscanf(buf, "%u", &cons_ctl);
++
++ if (1 == cons_ctl) {
++ for (i = 0; i < BPM_MAX_OP_NUM; ++i) {
++ list_for_each(list, &(g_bpm_cons[i].list)) {
++ p = list_entry(list, struct bpm_cons, list);
++ p->tm = 0;
++ p->ms = 0;
++ p->tmp_ms = 0;
++ }
++ }
++ }
++
++ return n;
++}
++
++SYSDEV_ATTR(cons, 0644, cons_show, cons_store);
++
++/*
++ * Dump blocked device on specified OP.
++ * And dump the device list that is tracked.
++ */
++static ssize_t trace_show(struct sys_device *sys_dev, char *buf)
++{
++ struct op_info *op_entry = NULL;
++ struct dvfm_trace_info *entry = NULL;
++ int len = 0, i;
++ unsigned int blocked_dev;
++
++ for (i = 0; i < op_nums; i++) {
++ blocked_dev = 0;
++ read_lock(&dvfm_op_list->lock);
++ /* op list shouldn't be empty because op_nums is valid */
++ list_for_each_entry(op_entry, &dvfm_op_list->list, list) {
++ if (op_entry->index == i)
++ blocked_dev = op_entry->device;
++ }
++ read_unlock(&dvfm_op_list->lock);
++ if (!blocked_dev)
++ continue;
++
++ len += sprintf(buf + len, "Blocked devices on OP%d:", i);
++ read_lock(&dvfm_trace_list.lock);
++ list_for_each_entry(entry, &dvfm_trace_list.list, list) {
++ if (test_bit(entry->index, (void *)&blocked_dev))
++ len += sprintf(buf + len, "%s, ", entry->name);
++ }
++ read_unlock(&dvfm_trace_list.lock);
++ len += sprintf(buf + len, "\n");
++ }
++ if (len == 0)
++ len += sprintf(buf + len, "None device block OP\n");
++ len += sprintf(buf + len, "Trace device list:\n");
++ read_lock(&dvfm_trace_list.lock);
++ list_for_each_entry(entry, &dvfm_trace_list.list, list) {
++ len += sprintf(buf + len, "%s, ", entry->name);
++ }
++ read_unlock(&dvfm_trace_list.lock);
++ len += sprintf(buf + len, "\n");
++ return len;
++}
++SYSDEV_ATTR(trace, 0444, trace_show, NULL);
++
++static struct attribute *bpm_attr[] = {
++ &attr_bpm.attr,
++ &attr_profiler_window.attr,
++ &attr_op.attr,
++ &attr_ops.attr,
++ &attr_enable_op.attr,
++ &attr_log.attr,
++ &attr_cons.attr,
++ &attr_blink.attr,
++ &attr_trace.attr,
++};
++
++static int bpm_add(struct sys_device *sys_dev)
++{
++ int i, n, ret;
++ n = ARRAY_SIZE(bpm_attr);
++ for (i = 0; i < n; ++i) {
++ ret = sysfs_create_file(&(sys_dev->kobj), bpm_attr[i]);
++ if (ret)
++ return ret;
++ }
++ return 0;
++}
++
++static int bpm_rm(struct sys_device *sys_dev)
++{
++ int i, n;
++ n = ARRAY_SIZE(bpm_attr);
++ for (i = 0; i < n; i++) {
++ sysfs_remove_file(&(sys_dev->kobj), bpm_attr[i]);
++ }
++ return 0;
++}
++
++static struct sysdev_driver bpm_driver = {
++ .add = bpm_add,
++ .remove = bpm_rm,
++};
++
++#ifdef CONFIG_TEST_BPMD
++#include "test_bpm.c"
++#endif
++/*****************************************************************************/
++/* */
++/* BPMD Init & Fini */
++/* */
++/*****************************************************************************/
++
++static int __init bpm_init(void)
++{
++ unsigned int ret = 0;
++ unsigned long flag;
++
++ bpmq_init();
++
++ spin_lock_irqsave(&g_bpm_event_queue_lock, flag);
++
++ build_dyn_ops();
++ build_active_ops();
++
++ spin_unlock_irqrestore(&g_bpm_event_queue_lock, flag);
++
++ g_bpm_enabled = 0;
++ init_waitqueue_head(&g_bpm_enabled_waitq);
++
++ ret = sysdev_driver_register(&cpu_sysdev_class, &bpm_driver);
++ if (ret) {
++ printk(KERN_ERR "Can't register bpm sys driver,err:%d\n", ret);
++ PM_BUG_ON(1);
++ }
++
++#ifdef CONFIG_TEST_BPMD
++ ret = sysdev_driver_register(&cpu_sysdev_class, &bpm_test_driver);
++ if (ret) {
++ printk(KERN_ERR "Can't register bpm test driver,err:%d\n", ret);
++ PM_BUG_ON(1);
++ }
++#endif
++
++ dvfm_register("user-echo", &dvfm_dev_idx);
++
++#ifdef CONFIG_ANDROID_POWER
++ android_register_early_suspend(&bpm_early_suspend);
++#endif
++ init_timer(&g_dvfm_blink_timer);
++ g_dvfm_blink_timer.function = dvfm_blink_timer_handler;
++ g_dvfm_blink_timer.data = (unsigned long)NULL;
++
++ g_bpm_thread_exit = 0;
++ init_completion(&g_bpm_thread_over);
++ ret = kernel_thread(bpm_thread, NULL, 0);
++
++ printk(KERN_NOTICE "bpm init finished (%d)\n", ret);
++ return 0;
++}
++
++static void __exit bpm_exit(void)
++{
++
++ g_bpm_thread_exit = 1;
++
++#ifdef CONFIG_ANDROID_POWER
++ android_unregister_early_suspend(&bpm_early_suspend);
++#endif
++ dvfm_unregister("user-echo", &dvfm_dev_idx);
++
++ g_bpm_enabled = 1;
++ wake_up_interruptible(&g_bpm_enabled_waitq);
++ wake_up_interruptible(&g_bpm_event_queue.waitq);
++ wait_for_completion(&g_bpm_thread_over);
++ g_bpm_enabled = 0;
++}
++
++module_init(bpm_init);
++module_exit(bpm_exit);
++
++MODULE_DESCRIPTION("BPMD");
++MODULE_LICENSE("GPL");
+diff -ur linux-2.6.32/arch/arm/mach-pxa/bpm_prof.c kernel/arch/arm/mach-pxa/bpm_prof.c
+--- linux-2.6.32/arch/arm/mach-pxa/bpm_prof.c 2009-12-13 12:58:12.232379200 +0200
++++ kernel/arch/arm/mach-pxa/bpm_prof.c 2009-12-12 16:09:26.429614458 +0200
+@@ -0,0 +1,564 @@
++/*
++ * PXA3xx IPM Profiler
++ *
++ * Copyright (C) 2008 Borqs Ltd.
++ * Emichael Li <emichael.li@borqs.com>
++ *
++ * Based on Marvell v6.5 release.
++ *
++ * Copyright (C) 2008 Marvell Corporation
++ * Haojian Zhuang <haojian.zhuang@marvell.com>
++ *
++ * This software program is licensed subject to the GNU General Public License
++ * (GPL).Version 2,June 1991, available at http://www.fsf.org/copyleft/gpl.html
++
++ * (C) Copyright 2008 Marvell International Ltd.
++ * All Rights Reserved
++ */
++
++#include <linux/init.h>
++#include <linux/module.h>
++#include <linux/errno.h>
++#include <linux/sched.h>
++#include <linux/tick.h>
++#include <linux/timer.h>
++#include <linux/device.h>
++#include <linux/jiffies.h>
++#include <mach/hardware.h>
++#include <mach/mspm_prof.h>
++#include <asm/arch/ipmc.h>
++#ifdef CONFIG_PXA3xx_DVFM
++#include <asm/arch/dvfm.h>
++#include <asm/arch/pxa3xx_dvfm.h>
++#endif
++
++extern int (*pipm_start_pmu)(struct ipm_profiler_arg *arg);
++extern int (*pipm_stop_pmu)(void);
++
++/* IDLE profiler tune OP with MIPS feature */
++#define MSPM_IDLE_PROF_MIPS 0
++
++#undef MAX_OP_NUM
++#define MAX_OP_NUM 10
++
++struct mspm_op_stats {
++ int op;
++ int idle;
++ unsigned int timestamp;
++ unsigned int jiffies;
++};
++
++struct mspm_mips {
++ int mips;
++ int h_thres; /* high threshold */
++ int l_thres; /* low threshold */
++};
++
++/* Store costed time in run_op_time[] & idle_op_time[] */
++static int run_op_time[MAX_OP_NUM], idle_op_time[MAX_OP_NUM];
++
++/*
++ * Store OP's MIPS in op_mips[].
++ * The lowest frequency OP is the first entry.
++ */
++static struct mspm_mips op_mips[MAX_OP_NUM];
++
++/* Store the calculated MIPS of last sample window */
++static int last_mips;
++
++/*
++ * Store the first timestamp of sample window in first_stats
++ * Store the current timestamp of sample window in cur_stats
++ */
++static struct mspm_op_stats first_stats, cur_stats;
++
++/* OP numbers used in IPM IDLE Profiler */
++static int mspm_op_num = 0;
++
++static struct timer_list idle_prof_timer;
++
++/* PMU result is stored in it */
++static struct pmu_results sum_pmu_res;
++
++static int mspm_prof_enabled = 0;
++static int window_jif = 0;
++static int mspm_pmu_id;
++
++unsigned int prof_idle_time, prof_time;
++
++static int mspm_prof_notifier_freq(struct notifier_block *nb,
++ unsigned long val, void *data);
++static struct notifier_block notifier_freq_block = {
++ .notifier_call = mspm_prof_notifier_freq,
++};
++
++static unsigned int read_time(void)
++{
++#ifdef CONFIG_PXA_32KTIMER
++ return OSCR4;
++#else
++ return OSCR0;
++#endif
++}
++
++
++static int bpm_mod_timer(struct timer_list *timer, unsigned long expires)
++{
++#ifdef CONFIG_BPMD
++ extern void timer_set_deferrable(struct timer_list *timer);
++ extern void timer_clr_deferrable(struct timer_list *timer);
++ extern int get_op_power_bonus(void);
++
++ if (get_op_power_bonus())
++ timer_set_deferrable(timer);
++ else
++ timer_clr_deferrable(timer);
++#endif
++ mod_timer(timer, expires);
++
++ return 0;
++}
++
++/*
++ * Record the OP index and RUN/IDLE state.
++ */
++int mspm_add_event(int op, int cpu_idle)
++{
++ unsigned int time;
++
++ if (mspm_prof_enabled) {
++ time = read_time();
++ /* sum the current sample window */
++ if (cpu_idle == CPU_STATE_IDLE)
++ idle_op_time[cur_stats.op] +=
++ time - cur_stats.timestamp;
++ else if (cpu_idle == CPU_STATE_RUN)
++ run_op_time[cur_stats.op] +=
++ time - cur_stats.timestamp;
++ /* update start point of current sample window */
++ cur_stats.op = op;
++ cur_stats.idle = cpu_idle;
++ cur_stats.timestamp = time;
++ cur_stats.jiffies = jiffies;
++ }
++ return 0;
++}
++EXPORT_SYMBOL(mspm_add_event);
++
++/*
++ * Prepare to do a new sample.
++ * Clear the index in mspm_op_stats table.
++ */
++static int mspm_do_new_sample(void)
++{
++ /* clear previous sample window */
++ memset(&run_op_time, 0, sizeof(int) * MAX_OP_NUM);
++ memset(&idle_op_time, 0, sizeof(int) * MAX_OP_NUM);
++ /* prepare for the new sample window */
++ first_stats.op = cur_stats.op;
++ first_stats.idle = cur_stats.idle;
++ first_stats.timestamp = read_time();
++ first_stats.jiffies = jiffies;
++
++ prof_idle_time = 0;
++ prof_time = read_time();
++ return 0;
++}
++
++/*
++ * Init MIPS of all OP
++ */
++static int mspm_init_mips(void)
++{
++ struct op_info *info = NULL;
++ struct dvfm_md_opt *md_op = NULL;
++ int i, ret;
++ memset(&op_mips, 0, MAX_OP_NUM * sizeof(struct mspm_mips));
++ mspm_op_num = dvfm_op_count();
++#ifdef CONFIG_PXA3xx_DVFM
++ for (i = 0; i < mspm_op_num; i++) {
++ ret = dvfm_get_opinfo(i, &info);
++ if (ret)
++ continue;
++ md_op = (struct dvfm_md_opt *)info->op;
++ op_mips[i].mips = md_op->core;
++ if (op_mips[i].mips) {
++ op_mips[i].h_thres = DEF_HIGH_THRESHOLD;
++ if (!strcmp(md_op->name, "D0CS"))
++ op_mips[i].h_thres = 95;
++ } else {
++ mspm_op_num = i;
++ break;
++ }
++ }
++ for (i = 0; i < mspm_op_num - 1; i++)
++ op_mips[i + 1].l_thres = op_mips[i].h_thres * op_mips[i].mips
++ / op_mips[i + 1].mips;
++#endif
++ return 0;
++}
++
++/*
++ * Calculate the MIPS in sample window
++ */
++static int mspm_calc_mips(void)
++{
++ int i;
++ unsigned int sum_time = 0, sum = 0;
++
++ /* Calculate total time costed in sample window */
++ for (i = 0; i < mspm_op_num; i++) {
++ sum_time += run_op_time[i] + idle_op_time[i];
++ sum += run_op_time[i] * op_mips[i].mips;
++ }
++ if (sum_time == 0)
++ return 0;
++
++ /*
++ * Calculate MIPS in sample window
++ * Formula: run_op_time[i] / sum_time * op_mips[i].mips
++ */
++ return (sum / sum_time);
++}
++
++static int is_valid_sample_window(void)
++{
++ unsigned int time;
++ /* The sample window isn't started */
++ if (!mspm_prof_enabled)
++ goto out;
++ time = cur_stats.jiffies - first_stats.jiffies;
++ time = jiffies_to_msecs(time);
++ if (time >= MIN_SAMPLE_WINDOW)
++ return 1;
++out:
++ return 0;
++}
++
++/*
++ * When DVFM release one OP, it will invoke this func to get the prefered OP.
++ */
++static int mspm_get_mips(void)
++{
++ int ret;
++ extern int cur_op;
++
++ mspm_add_event(cur_op, CPU_STATE_RUN);
++
++ if (!is_valid_sample_window()) {
++ /* This sample window is invalide, use MIPS value of last
++ * sample window
++ */
++ ret = last_mips;
++ goto out_sample;
++ }
++ ret = mspm_calc_mips();
++ if (ret < 0)
++ goto out_calc;
++ return ret;
++out_calc:
++ printk(KERN_WARNING "Can't calculate MIPS\n");
++out_sample:
++ return ret;
++}
++
++/*
++ * Adjust to the most appropriate OP according to MIPS result of
++ * sample window
++ */
++#if MSPM_IDLE_PROF_MIPS
++int mspm_tune(void)
++{
++ int i, mips;
++ if (mspm_prof_enabled) {
++ for (i = mspm_op_num - 1; i >= 0; i--) {
++ mips = mspm_get_mips();
++ if (mips >= (op_mips[i].l_thres *
++ op_mips[i].mips / 100))
++ break;
++ }
++ dvfm_request_op(i);
++ }
++ return 0;
++}
++#else
++int mspm_tune(void) { return 0; }
++#endif
++EXPORT_SYMBOL(mspm_tune);
++
++/***************************************************************************
++ * Idle Profiler
++ ***************************************************************************
++ */
++
++static struct ipm_profiler_arg pmu_arg;
++static int mspm_start_prof(struct ipm_profiler_arg *arg)
++{
++ struct pmu_results res;
++ struct op_info *info = NULL;
++
++ memset(&sum_pmu_res, 0, sizeof(struct pmu_results));
++
++ /* pmu_arg.window_size stores the number of miliseconds.
++ * window_jif stores the number of jiffies.
++ */
++ memset(&pmu_arg, 0, sizeof(struct ipm_profiler_arg));
++ pmu_arg.flags = arg->flags;
++ if (arg->window_size > 0)
++ pmu_arg.window_size = arg->window_size;
++ else
++ pmu_arg.window_size = DEF_SAMPLE_WINDOW;
++ window_jif = msecs_to_jiffies(pmu_arg.window_size);
++ if ((mspm_pmu_id > 0) && (pmu_arg.flags & IPM_PMU_PROFILER)) {
++ pmu_arg.pmn0 = arg->pmn0;
++ pmu_arg.pmn1 = arg->pmn1;
++ pmu_arg.pmn2 = arg->pmn2;
++ pmu_arg.pmn3 = arg->pmn3;
++ /* Collect PMU information */
++ if (pmu_stop(&res))
++ printk(KERN_WARNING
++ "L:%d: pmu_stop failed!\n", __LINE__);
++ if (pmu_start(pmu_arg.pmn0, pmu_arg.pmn1, pmu_arg.pmn2,
++ pmu_arg.pmn3))
++ printk(KERN_WARNING
++ "L:%d: pmu_start failed!\n", __LINE__);
++ }
++ /* start next sample window */
++ cur_stats.op = dvfm_get_op(&info);
++ cur_stats.idle = CPU_STATE_RUN;
++ cur_stats.timestamp = read_time();
++ cur_stats.jiffies = jiffies;
++ mspm_do_new_sample();
++ bpm_mod_timer(&idle_prof_timer, jiffies + window_jif);
++ mspm_prof_enabled = 1;
++ return 0;
++}
++
++static int mspm_stop_prof(void)
++{
++ struct pmu_results res;
++ if ((mspm_pmu_id > 0) && (pmu_arg.flags & IPM_PMU_PROFILER)) {
++ if (pmu_stop(&res))
++ printk(KERN_WARNING
++ "L:%d: pmu_stop failed!\n", __LINE__);
++ }
++ del_timer(&idle_prof_timer);
++ mspm_prof_enabled = 0;
++ return 0;
++}
++
++static int calc_pmu_res(struct pmu_results *res)
++{
++ if (res == NULL)
++ return -EINVAL;
++ sum_pmu_res.ccnt += res->ccnt;
++ sum_pmu_res.pmn0 += res->pmn0;
++ sum_pmu_res.pmn1 += res->pmn1;
++ sum_pmu_res.pmn2 += res->pmn2;
++ sum_pmu_res.pmn3 += res->pmn3;
++ return 0;
++}
++
++/*
++ * Pause idle profiler when system enter Low Power mode.
++ * Continue it when system exit from Low Power mode.
++ */
++void set_idletimer(int enable)
++{
++ struct pmu_results res;
++ if (enable && mspm_prof_enabled) {
++ /*
++ * Restart the idle profiler because it's only disabled
++ * before entering low power mode.
++ * If we just continue the sample window with left jiffies,
++ * too much OS Timer wakeup exist in system.
++ * Just restart the sample window.
++ */
++ bpm_mod_timer(&idle_prof_timer, jiffies + window_jif);
++ tick_nohz_restart_sched_tick();
++
++ first_stats.jiffies = jiffies;
++ first_stats.timestamp = read_time();
++
++ if (pmu_arg.flags & IPM_PMU_PROFILER) {
++ if (pmu_start(pmu_arg.pmn0, pmu_arg.pmn1, pmu_arg.pmn2,
++ pmu_arg.pmn3)) {
++ printk(KERN_WARNING
++ "L:%d: pmu_start failed!\n", __LINE__);
++ }
++ }
++ } else if (!enable && mspm_prof_enabled) {
++ del_timer(&idle_prof_timer);
++ tick_nohz_stop_sched_tick(1);
++
++ if (pmu_arg.flags & IPM_PMU_PROFILER) {
++ if (pmu_stop(&res)) {
++ printk(KERN_WARNING
++ "L:%d: pmu_stop failed!\n", __LINE__);
++ } else
++ calc_pmu_res(&res);
++ }
++ }
++}
++EXPORT_SYMBOL(set_idletimer);
++
++/*
++ * Handler of IDLE PROFILER
++ */
++static void idle_prof_handler(unsigned long data)
++{
++ struct ipm_profiler_result out_res;
++ struct pmu_results res;
++ struct op_info *info = NULL;
++ int ret, mips, op;
++
++ if (!mspm_prof_enabled)
++ return;
++
++ ret = mspm_get_mips();
++ if (ret >= 0)
++ mips = ret;
++ else
++ mips = last_mips;
++ if ((mspm_pmu_id > 0) && (pmu_arg.flags & IPM_PMU_PROFILER)) {
++ if (pmu_stop(&res))
++ printk(KERN_WARNING "pmu_stop failed %d\n", __LINE__);
++ else
++ calc_pmu_res(&res);
++ if (pmu_start(pmu_arg.pmn0, pmu_arg.pmn1, pmu_arg.pmn2,
++ pmu_arg.pmn3))
++ printk(KERN_WARNING "pmu_start failed %d\n", __LINE__);
++ memset(&out_res, 0, sizeof(struct ipm_profiler_result));
++ out_res.pmu.ccnt = sum_pmu_res.ccnt;
++ out_res.pmu.pmn0 = sum_pmu_res.pmn0;
++ out_res.pmu.pmn1 = sum_pmu_res.pmn1;
++ out_res.pmu.pmn2 = sum_pmu_res.pmn2;
++ out_res.pmu.pmn3 = sum_pmu_res.pmn3;
++ }
++ op = dvfm_get_op(&info);
++
++#if 0
++ /* When system is running, MIPS of current OP won't be zero. */
++ out_res.busy_ratio = mips * 100 / op_mips[op].mips;
++ out_res.window_size = jiffies_to_msecs(window_jif);
++#endif
++
++ prof_time = read_time() - prof_time;
++
++ out_res.busy_ratio = 100 - 100 * prof_idle_time / prof_time;
++ out_res.window_size = 0; /* not used */
++ out_res.mips = mips;
++
++ /* send PMU result to policy maker in user space */
++ bpm_event_notify(IPM_EVENT_PROFILER, pmu_arg.flags, &out_res,
++ sizeof(struct ipm_profiler_result));
++
++#if 0
++ /* start next sample window */
++ mspm_do_new_sample();
++ bpm_mod_timer(&idle_prof_timer, jiffies + window_jif);
++ memset(&sum_pmu_res, 0, sizeof(struct pmu_results));
++#endif
++ last_mips = mips;
++}
++
++/*
++ * Pause idle profiler when system enter Low Power mode.
++ * Continue it when system exit from Low Power mode.
++ */
++static int mspm_prof_notifier_freq(struct notifier_block *nb,
++ unsigned long val, void *data)
++{
++ struct dvfm_freqs *freqs = (struct dvfm_freqs *)data;
++ struct op_info *info = &(freqs->new_info);
++ struct dvfm_md_opt *md = NULL;
++ struct pmu_results res;
++
++ if (!mspm_prof_enabled)
++ return 0;
++ md = (struct dvfm_md_opt *)(info->op);
++ if (md->power_mode == POWER_MODE_D1 ||
++ md->power_mode == POWER_MODE_D2 ||
++ md->power_mode == POWER_MODE_CG) {
++ switch (val) {
++ case DVFM_FREQ_PRECHANGE:
++ del_timer(&idle_prof_timer);
++ tick_nohz_stop_sched_tick(1);
++ if (pmu_arg.flags & IPM_PMU_PROFILER) {
++ if (pmu_stop(&res))
++ printk(KERN_WARNING
++ "L:%d: pmu_stop failed!\n",
++ __LINE__);
++ else
++ calc_pmu_res(&res);
++ }
++ break;
++ case DVFM_FREQ_POSTCHANGE:
++ /* Update jiffies and touch watchdog process */
++ tick_nohz_update_jiffies();
++ /*
++ * Restart the idle profiler because it's only
++ * disabled before entering low power mode.
++ * If we just continue the sample window with
++ * left jiffies, too much OS Timer wakeup exist
++ * in system.
++ * Just restart the sample window.
++ */
++ bpm_mod_timer(&idle_prof_timer, jiffies + window_jif);
++ first_stats.jiffies = jiffies;
++ first_stats.timestamp = read_time();
++
++ if (pmu_arg.flags & IPM_PMU_PROFILER)
++ if (pmu_start(pmu_arg.pmn0, pmu_arg.pmn1,
++ pmu_arg.pmn2, pmu_arg.pmn3))
++ printk(KERN_WARNING
++ "L:%d: pmu_start failed!\n",
++ __LINE__);
++ break;
++ }
++ }
++ return 0;
++}
++
++int __init mspm_prof_init(void)
++{
++ mspm_pmu_id = pmu_claim();
++
++ memset(&pmu_arg, 0, sizeof(struct ipm_profiler_arg));
++ pmu_arg.window_size = DEF_SAMPLE_WINDOW;
++ pmu_arg.pmn0 = PMU_EVENT_POWER_SAVING;
++ pmu_arg.pmn1 = PMU_EVENT_POWER_SAVING;
++ pmu_arg.pmn2 = PMU_EVENT_POWER_SAVING;
++ pmu_arg.pmn3 = PMU_EVENT_POWER_SAVING;
++ window_jif = msecs_to_jiffies(pmu_arg.window_size);
++
++ pipm_start_pmu = mspm_start_prof;
++ pipm_stop_pmu = mspm_stop_prof;
++
++ /* It's used to trigger sample window.
++ * If system is idle, the timer could be deferred.
++ */
++ init_timer(&idle_prof_timer);
++ idle_prof_timer.function = idle_prof_handler;
++ idle_prof_timer.data = 0;
++
++ mspm_init_mips();
++
++ dvfm_register_notifier(&notifier_freq_block,
++ DVFM_FREQUENCY_NOTIFIER);
++
++ return 0;
++}
++
++void __exit mspm_prof_exit(void)
++{
++ dvfm_unregister_notifier(&notifier_freq_block,
++ DVFM_FREQUENCY_NOTIFIER);
++
++ if (mspm_pmu_id)
++ pmu_release(mspm_pmu_id);
++
++ pipm_start_pmu = NULL;
++ pipm_stop_pmu = NULL;
++}
++
+diff -ur linux-2.6.32/arch/arm/mach-pxa/devices.c kernel/arch/arm/mach-pxa/devices.c
+--- linux-2.6.32/arch/arm/mach-pxa/devices.c 2009-12-03 05:51:21.000000000 +0200
++++ kernel/arch/arm/mach-pxa/devices.c 2009-12-12 16:09:26.436277478 +0200
+@@ -15,6 +15,7 @@
+ #include <mach/camera.h>
+ #include <mach/audio.h>
+ #include <mach/pxa3xx_nand.h>
++#include <mach/pxa3xx_dvfm.h>
+
+ #include "devices.h"
+ #include "generic.h"
+@@ -962,6 +963,76 @@
+ },
+ };
+
++static struct resource pxa3xx_resource_freq[] = {
++ [0] = {
++ .name = "clkmgr_regs",
++ .start = 0x41340000,
++ .end = 0x41350003,
++ .flags = IORESOURCE_MEM,
++ },
++ [1] = {
++ .name = "spmu_regs",
++ .start = 0x40f50000,
++ .end = 0x40f50103,
++ .flags = IORESOURCE_MEM,
++ },
++ [2] = {
++ .name = "bpmu_regs",
++ .start = 0x40f40000,
++ .end = 0x40f4003b,
++ .flags = IORESOURCE_MEM,
++ },
++ [3] = {
++ .name = "dmc_regs",
++ .start = 0x48100000,
++ .end = 0x4810012f,
++ .flags = IORESOURCE_MEM,
++ },
++ [4] = {
++ .name = "smc_regs",
++ .start = 0x4a000000,
++ .end = 0x4a00008f,
++ .flags = IORESOURCE_MEM,
++ }
++};
++
++struct platform_device pxa3xx_device_freq = {
++ .name = "pxa3xx-freq",
++ .id = 0,
++ .num_resources = ARRAY_SIZE(pxa3xx_resource_freq),
++ .resource = pxa3xx_resource_freq,
++};
++
++void __init set_pxa3xx_freq_info(struct pxa3xx_freq_mach_info *info)
++{
++ pxa_register_device(&pxa3xx_device_freq, info);
++}
++
++void __init set_pxa3xx_freq_parent(struct device *parent_dev)
++{
++ pxa3xx_device_freq.dev.parent = parent_dev;
++}
++
++static struct resource pxa3xx_pmu_resources[] = {
++ [0] = {
++ .name = "pmu_regs",
++ .start = 0x4600ff00,
++ .end = 0x4600ffff,
++ .flags = IORESOURCE_MEM,
++ },
++};
++
++struct platform_device pxa3xx_device_pmu = {
++ .name = "pxa3xx-pmu",
++ .id = 0,
++ .resource = pxa3xx_pmu_resources,
++ .num_resources = ARRAY_SIZE(pxa3xx_pmu_resources),
++};
++
++void __init pxa3xx_set_pmu_info(void *info)
++{
++ pxa_register_device(&pxa3xx_device_pmu, info);
++}
+ #endif /* CONFIG_PXA3xx */
+
+ /* pxa2xx-spi platform-device ID equals respective SSP platform-device ID + 1.
+diff -ur linux-2.6.32/arch/arm/mach-pxa/devices.h kernel/arch/arm/mach-pxa/devices.h
+--- linux-2.6.32/arch/arm/mach-pxa/devices.h 2009-12-03 05:51:21.000000000 +0200
++++ kernel/arch/arm/mach-pxa/devices.h 2009-12-12 16:09:26.436277478 +0200
+@@ -36,5 +36,6 @@
+ extern struct platform_device pxa3xx_device_i2c_power;
+
+ extern struct platform_device pxa3xx_device_gcu;
++extern struct platform_device pxa3xx_device_freq;
+
+ void __init pxa_register_device(struct platform_device *dev, void *data);
+diff -ur linux-2.6.32/arch/arm/mach-pxa/dvfm.c kernel/arch/arm/mach-pxa/dvfm.c
+--- linux-2.6.32/arch/arm/mach-pxa/dvfm.c 2009-12-13 12:58:54.725287534 +0200
++++ kernel/arch/arm/mach-pxa/dvfm.c 2009-12-12 16:09:26.439612372 +0200
+@@ -0,0 +1,922 @@
++/*
++ * DVFM Abstract Layer
++ *
++ * This software program is licensed subject to the GNU General Public License
++ * (GPL).Version 2,June 1991, available at http://www.fsf.org/copyleft/gpl.html
++
++ * (C) Copyright 2007 Marvell International Ltd.
++ * All Rights Reserved
++ */
++
++#include <linux/init.h>
++#include <linux/kernel.h>
++#include <linux/module.h>
++#include <linux/device.h>
++#include <linux/sysdev.h>
++#include <linux/spinlock.h>
++#include <linux/notifier.h>
++#include <linux/string.h>
++#include <linux/kobject.h>
++#include <linux/list.h>
++#include <linux/notifier.h>
++#include <asm/atomic.h>
++#include <mach/dvfm.h>
++
++#ifdef CONFIG_BPMD
++#include <mach/bpm.h>
++
++extern int bpm_enable_op(int index, int dev_idx);
++extern int bpm_disable_op(int index, int dev_idx);
++extern int bpm_enable_op_name(char *name, int dev_idx, char *sid);
++extern int bpm_disable_op_name(char *name, int dev_idx, char *sid);
++#endif
++
++#define MAX_DEVNAME_LEN 32
++/* This structure is used to dump device name list */
++struct name_list {
++ int id;
++ char name[MAX_DEVNAME_LEN];
++};
++
++static ATOMIC_NOTIFIER_HEAD(dvfm_freq_notifier_list);
++
++/* This list links log of dvfm operation */
++struct info_head dvfm_trace_list = {
++ .list = LIST_HEAD_INIT(dvfm_trace_list.list),
++ .lock = RW_LOCK_UNLOCKED,
++ .device = 0,
++};
++
++#ifndef CONFIG_BPMD
++/* This idx is used for user debug */
++static int dvfm_dev_idx;
++#endif
++
++struct dvfm_driver *dvfm_driver = NULL;
++struct info_head *dvfm_op_list = NULL;
++
++unsigned int cur_op; /* current operating point */
++unsigned int def_op; /* default operating point */
++unsigned int op_nums = 0; /* number of operating point */
++
++static atomic_t lp_count = ATOMIC_INIT(0); /* number of blocking lowpower mode */
++
++extern struct sysdev_class cpu_sysdev_class;
++
++int dvfm_find_op(int index, struct op_info **op)
++{
++ struct op_info *p = NULL;
++
++ read_lock(&dvfm_op_list->lock);
++ if (list_empty(&dvfm_op_list->list)) {
++ read_unlock(&dvfm_op_list->lock);
++ return -ENOENT;
++ }
++ list_for_each_entry(p, &dvfm_op_list->list, list) {
++ if (p->index == index) {
++ *op = p;
++ read_unlock(&dvfm_op_list->lock);
++ return 0;
++ }
++ }
++ read_unlock(&dvfm_op_list->lock);
++ return -ENOENT;
++}
++
++#ifndef CONFIG_BPMD
++/* Display current operating point */
++static ssize_t op_show(struct sys_device *sys_dev, struct sysdev_attribute *attr,char *buf)
++{
++ struct op_info *op = NULL;
++ int len = 0;
++
++ if (dvfm_driver->dump) {
++ if (!dvfm_find_op(cur_op, &op)) {
++ len = dvfm_driver->dump(dvfm_driver->priv, op, buf);
++ }
++ }
++
++ return len;
++}
++
++/* Set current operating point */
++static ssize_t op_store(struct sys_device *sys_dev, struct sysdev_attribute *attr, const char *buf,
++ size_t len)
++{
++ struct dvfm_freqs freqs;
++ int new_op;
++
++ sscanf(buf, "%u", &new_op);
++ dvfm_request_op(new_op);
++ return len;
++}
++SYSDEV_ATTR(op, 0644, op_show, op_store);
++
++/* Dump all operating point */
++static ssize_t ops_show(struct sys_device *sys_dev, struct sysdev_attribute *attr, char *buf)
++{
++ struct op_info *entry = NULL;
++ int len = 0;
++ char *p = NULL;
++
++ if (!dvfm_driver->dump)
++ return 0;
++ read_lock(&dvfm_op_list->lock);
++ if (!list_empty(&dvfm_op_list->list)) {
++ list_for_each_entry(entry, &dvfm_op_list->list, list) {
++ p = buf + len;
++ len += dvfm_driver->dump(dvfm_driver->priv, entry, p);
++ }
++ }
++ read_unlock(&dvfm_op_list->lock);
++
++ return len;
++}
++SYSDEV_ATTR(ops, 0444, ops_show, NULL);
++
++/* Dump all enabled operating point */
++static ssize_t enable_op_show(struct sys_device *sys_dev, struct sysdev_attribute *attr, char *buf)
++{
++ struct op_info *entry = NULL;
++ int len = 0;
++ char *p = NULL;
++
++ if (!dvfm_driver->dump)
++ return 0;
++ read_lock(&dvfm_op_list->lock);
++ if (!list_empty(&dvfm_op_list->list)) {
++ list_for_each_entry(entry, &dvfm_op_list->list, list) {
++ if (!entry->device) {
++ p = buf + len;
++ len += dvfm_driver->dump(dvfm_driver->priv, entry, p);
++ }
++ }
++ }
++ read_unlock(&dvfm_op_list->lock);
++
++ return len;
++}
++
++static ssize_t enable_op_store(struct sys_device *sys_dev, struct sysdev_attribute *attr, const char *buf,
++ size_t len)
++{
++ int op, level;
++
++ sscanf(buf, "%u,%u", &op, &level);
++ if (level) {
++ dvfm_enable_op(op, dvfm_dev_idx);
++ } else
++ dvfm_disable_op(op, dvfm_dev_idx);
++ return len;
++}
++SYSDEV_ATTR(enable_op, 0644, enable_op_show, enable_op_store);
++
++/*
++ * Dump blocked device on specified OP.
++ * And dump the device list that is tracked.
++ */
++static ssize_t trace_show(struct sys_device *sys_dev, struct sysdev_attribute *attr, char *buf)
++{
++ struct op_info *op_entry = NULL;
++ struct dvfm_trace_info *entry = NULL;
++ int len = 0, i;
++ unsigned int blocked_dev;
++
++ for (i = 0; i < op_nums; i++) {
++ blocked_dev = 0;
++ read_lock(&dvfm_op_list->lock);
++ /* op list shouldn't be empty because op_nums is valid */
++ list_for_each_entry(op_entry, &dvfm_op_list->list, list) {
++ if (op_entry->index == i)
++ blocked_dev = op_entry->device;
++ }
++ read_unlock(&dvfm_op_list->lock);
++ if (!blocked_dev)
++ continue;
++
++ len += sprintf(buf + len, "Blocked devices on OP%d:", i);
++ read_lock(&dvfm_trace_list.lock);
++ list_for_each_entry(entry, &dvfm_trace_list.list, list) {
++ if (test_bit(entry->index, (void *)&blocked_dev))
++ len += sprintf(buf + len, "%s, ", entry->name);
++ }
++ read_unlock(&dvfm_trace_list.lock);
++ len += sprintf(buf + len, "\n");
++ }
++ if (len == 0)
++ len += sprintf(buf + len, "None device block OP\n");
++ len += sprintf(buf + len, "Trace device list:\n");
++ read_lock(&dvfm_trace_list.lock);
++ list_for_each_entry(entry, &dvfm_trace_list.list, list) {
++ len += sprintf(buf + len, "%s, ", entry->name);
++ }
++ read_unlock(&dvfm_trace_list.lock);
++ len += sprintf(buf + len, "\n");
++ return len;
++}
++SYSDEV_ATTR(trace, 0444, trace_show, NULL);
++
++#ifdef CONFIG_CPU_PXA310
++static ssize_t freq_show(struct sys_device *sys_dev, struct sysdev_attribute *attr, char *buf)
++{
++ struct op_info *op = NULL;
++ int len = 0;
++
++ if (dvfm_driver->freq_show) {
++ if (!dvfm_find_op(cur_op, &op)) {
++ len = dvfm_driver->freq_show(dvfm_driver->priv, op, buf);
++ }
++ }
++
++ return len;
++}
++/*
++ * We can define a freq_store to set frequencies with a lot of parameters,
++ * If a new set of frequencies is inputed by that way, it will only be treated
++ * as a non-standard op, not a new op. So the freq_store function isn't defined.
++ */
++SYSDEV_ATTR(frequency, 0644, freq_show, NULL);
++#endif
++
++static struct attribute *dvfm_attr[] = {
++ &attr_op.attr,
++ &attr_ops.attr,
++ &attr_enable_op.attr,
++ &attr_trace.attr,
++#ifdef CONFIG_CPU_PXA310
++ &attr_frequency.attr,
++#endif
++};
++#endif
++
++int dvfm_op_count(void)
++{
++ int ret = -EINVAL;
++
++ if (dvfm_driver && dvfm_driver->count)
++ ret = dvfm_driver->count(dvfm_driver->priv, dvfm_op_list);
++ return ret;
++}
++EXPORT_SYMBOL(dvfm_op_count);
++
++int dvfm_get_op(struct op_info **p)
++{
++ if (dvfm_find_op(cur_op, p))
++ return -EINVAL;
++ return cur_op;
++}
++EXPORT_SYMBOL(dvfm_get_op);
++
++int dvfm_dump_op(int idx, char *buf)
++{
++ struct op_info *op = NULL;
++ int len = 0;
++
++ if (dvfm_driver && dvfm_driver->dump && !dvfm_find_op(idx, &op))
++ len = dvfm_driver->dump(dvfm_driver->priv, op, buf);
++
++ return len;
++}
++EXPORT_SYMBOL(dvfm_dump_op);
++
++int dvfm_get_op_freq(int idx, struct op_freq *pf)
++{
++ struct op_info *op = NULL;
++ int ret = 0;
++
++ if (dvfm_driver && dvfm_driver->get_freq && !dvfm_find_op(idx, &op))
++ ret = dvfm_driver->get_freq(dvfm_driver->priv, op, pf);
++
++ return ret;
++}
++EXPORT_SYMBOL(dvfm_get_op_freq);
++
++int dvfm_check_active_op(int idx)
++{
++ struct op_info *op = NULL;
++ int ret = 0;
++
++ if (dvfm_driver && dvfm_driver->check_active_op && !dvfm_find_op(idx, &op))
++ ret = dvfm_driver->check_active_op(dvfm_driver->priv, op);
++
++ return ret;
++}
++EXPORT_SYMBOL(dvfm_check_active_op);
++
++int dvfm_get_defop(void)
++{
++ return def_op;
++}
++EXPORT_SYMBOL(dvfm_get_defop);
++
++int dvfm_get_opinfo(int index, struct op_info **p)
++{
++ if (dvfm_find_op(index, p))
++ return -EINVAL;
++ return 0;
++}
++EXPORT_SYMBOL(dvfm_get_opinfo);
++
++
++const char* dvfm_get_op_name(int idx)
++{
++ struct op_info *op = NULL;
++
++ if (dvfm_driver && dvfm_driver->name && !dvfm_find_op(idx, &op))
++ return dvfm_driver->name(dvfm_driver->priv, op);
++
++ return NULL;
++}
++EXPORT_SYMBOL(dvfm_get_op_name);
++
++
++int dvfm_set_op(struct dvfm_freqs *freqs, unsigned int new,
++ unsigned int relation)
++{
++ int ret = -EINVAL;
++
++ /* check whether dvfm is enabled */
++ if (!dvfm_driver || !dvfm_driver->count)
++ return -EINVAL;
++ if (dvfm_driver->set)
++ ret = dvfm_driver->set(dvfm_driver->priv, freqs, new, relation);
++ return ret;
++}
++
++/* Request operating point. System may set higher frequency because of
++ * device constraint.
++ */
++int dvfm_request_op(int index)
++{
++ int ret = -EFAULT;
++
++ /* check whether dvfm is enabled */
++ if (!dvfm_driver || !dvfm_driver->count)
++ return -EINVAL;
++#ifdef CONFIG_BPMD
++ printk(KERN_ERR "please don't use this API\n");
++ WARN_ON(1);
++#endif
++
++ if (dvfm_driver->request_set)
++ ret = dvfm_driver->request_set(dvfm_driver->priv, index);
++
++ return ret;
++}
++EXPORT_SYMBOL(dvfm_request_op);
++
++/*
++ * Device remove the constraint on OP.
++ */
++int __dvfm_enable_op(int index, int dev_idx)
++{
++ struct op_info *p = NULL;
++ int num;
++
++ /* check whether dvfm is enabled */
++ if (!dvfm_driver || !dvfm_driver->count)
++ return -EINVAL;
++ /* only registered device can invoke DVFM operation */
++ if ((dev_idx >= DVFM_MAX_DEVICE) || dev_idx < 0)
++ return -ENOENT;
++ num = dvfm_driver->count(dvfm_driver->priv, dvfm_op_list);
++ if (num <= index)
++ return -ENOENT;
++ if (!dvfm_find_op(index, &p)) {
++ write_lock(&dvfm_op_list->lock);
++ /* remove device ID */
++ clear_bit(dev_idx, (void *)&p->device);
++ write_unlock(&dvfm_op_list->lock);
++#ifndef CONFIG_BPMD
++ dvfm_driver->enable_op(dvfm_driver->priv, index, RELATION_LOW);
++#endif
++
++ }
++ return 0;
++}
++
++/*
++ * Device set constraint on OP
++ */
++int __dvfm_disable_op(int index, int dev_idx)
++{
++ struct op_info *p = NULL;
++ int num;
++
++ /* check whether dvfm is enabled */
++ if (!dvfm_driver || !dvfm_driver->count)
++ return -EINVAL;
++ /* only registered device can invoke DVFM operation */
++ if ((dev_idx >= DVFM_MAX_DEVICE) || dev_idx < 0)
++ return -ENOENT;
++ num = dvfm_driver->count(dvfm_driver->priv, dvfm_op_list);
++ if (num <= index)
++ return -ENOENT;
++ if (!dvfm_find_op(index, &p)) {
++ write_lock(&dvfm_op_list->lock);
++ /* set device ID */
++ set_bit(dev_idx, (void *)&p->device);
++ write_unlock(&dvfm_op_list->lock);
++ dvfm_driver->disable_op(dvfm_driver->priv, index, RELATION_LOW);
++ }
++ return 0;
++}
++
++int __dvfm_disable_op2(int index, int dev_idx)
++{
++ struct op_info *p = NULL;
++ int num;
++
++ if (!dvfm_driver || !dvfm_driver->count) {
++ return -ENOENT;
++ }
++ num = dvfm_driver->count(dvfm_driver->priv, dvfm_op_list);
++ if (num <= index)
++ return -ENOENT;
++ if (!dvfm_find_op(index, &p)) {
++ write_lock(&dvfm_op_list->lock);
++ set_bit(dev_idx, (void *)&p->device);
++ write_unlock(&dvfm_op_list->lock);
++ }
++ return 0;
++}
++
++int dvfm_enable_op(int index, int dev_idx)
++{
++#ifdef CONFIG_BPMD
++ bpm_enable_op(index, dev_idx);
++#else
++ __dvfm_enable_op(index, dev_idx);
++#endif
++ return 0;
++}
++
++int dvfm_disable_op(int index, int dev_idx)
++{
++#ifdef CONFIG_BPMD
++ bpm_disable_op(index, dev_idx);
++#else
++ __dvfm_disable_op(index, dev_idx);
++#endif
++ return 0;
++}
++
++EXPORT_SYMBOL(dvfm_enable_op);
++EXPORT_SYMBOL(dvfm_disable_op);
++
++int __dvfm_enable_op_name(char *name, int dev_idx)
++{
++ struct op_info *p = NULL;
++ int index;
++
++ if (!dvfm_driver || !dvfm_driver->name || !name)
++ return -EINVAL;
++ /* only registered device can invoke DVFM operation */
++ if ((dev_idx >= DVFM_MAX_DEVICE) || dev_idx < 0)
++ return -ENOENT;
++ list_for_each_entry(p, &dvfm_op_list->list, list) {
++ if (!strcmp(dvfm_driver->name(dvfm_driver->priv, p), name)) {
++ index = p->index;
++ write_lock(&dvfm_op_list->lock);
++ clear_bit(dev_idx, (void *)&p->device);
++ write_unlock(&dvfm_op_list->lock);
++ dvfm_driver->enable_op(dvfm_driver->priv,
++ index, RELATION_LOW);
++ break;
++ }
++ }
++ return 0;
++}
++
++int __dvfm_disable_op_name(char *name, int dev_idx)
++{
++ struct op_info *p = NULL;
++ int index;
++
++ if (!dvfm_driver || !dvfm_driver->name || !name)
++ return -EINVAL;
++ /* only registered device can invoke DVFM operation */
++ if ((dev_idx >= DVFM_MAX_DEVICE) || dev_idx < 0)
++ return -ENOENT;
++ list_for_each_entry(p, &dvfm_op_list->list, list) {
++ if (!strcmp(dvfm_driver->name(dvfm_driver->priv, p), name)) {
++ index = p->index;
++ write_lock(&dvfm_op_list->lock);
++ set_bit(dev_idx, (void *)&p->device);
++ write_unlock(&dvfm_op_list->lock);
++ dvfm_driver->disable_op(dvfm_driver->priv,
++ index, RELATION_LOW);
++ break;
++ }
++ }
++ return 0;
++}
++
++/*
++EXPORT_SYMBOL(dvfm_enable_op_name);
++EXPORT_SYMBOL(dvfm_disable_op_name);
++*/
++
++int _dvfm_enable_op_name(char *name, int dev_idx, char *sid)
++{
++ int ret;
++#ifdef CONFIG_BPMD
++ ret = bpm_enable_op_name(name, dev_idx, sid);
++#else
++ ret = __dvfm_enable_op_name(name, dev_idx);
++#endif
++ return ret;
++}
++
++int _dvfm_disable_op_name(char *name, int dev_idx, char *sid)
++{
++ int ret;
++#ifdef CONFIG_BPMD
++ ret = bpm_disable_op_name(name, dev_idx, sid);
++#else
++ ret = __dvfm_disable_op_name(name, dev_idx);
++#endif
++ return ret;
++}
++
++EXPORT_SYMBOL(_dvfm_enable_op_name);
++EXPORT_SYMBOL(_dvfm_disable_op_name);
++
++/* Only enable those safe operating point */
++int dvfm_enable(int dev_idx)
++{
++ printk(KERN_WARNING "dvfm_enable() is not preferred\n");
++ WARN_ON(1);
++ if (!dvfm_driver || !dvfm_driver->count || !dvfm_driver->enable_dvfm)
++ return -ENOENT;
++ return dvfm_driver->enable_dvfm(dvfm_driver->priv, dev_idx);
++}
++
++/* return whether the result is zero */
++int dvfm_disable(int dev_idx)
++{
++ printk(KERN_WARNING "dvfm_disable() is not preferred\n");
++ WARN_ON(1);
++ if (!dvfm_driver || !dvfm_driver->count || !dvfm_driver->disable_dvfm)
++ return -ENOENT;
++ return dvfm_driver->disable_dvfm(dvfm_driver->priv, dev_idx);
++}
++
++/* return whether the result is zero */
++int dvfm_enable_pm(void)
++{
++ return atomic_inc_and_test(&lp_count);
++}
++
++/* return whether the result is zero */
++int dvfm_disable_pm(void)
++{
++ return atomic_dec_and_test(&lp_count);
++}
++
++int dvfm_notifier_frequency(struct dvfm_freqs *freqs, unsigned int state)
++{
++ int ret;
++
++ switch (state) {
++ case DVFM_FREQ_PRECHANGE:
++ ret = atomic_notifier_call_chain(&dvfm_freq_notifier_list,
++ DVFM_FREQ_PRECHANGE, freqs);
++ if (ret != NOTIFY_DONE)
++ pr_debug("Failure in device driver before "
++ "switching frequency\n");
++ break;
++ case DVFM_FREQ_POSTCHANGE:
++ ret = atomic_notifier_call_chain(&dvfm_freq_notifier_list,
++ DVFM_FREQ_POSTCHANGE, freqs);
++ if (ret != NOTIFY_DONE)
++ pr_debug("Failure in device driver after "
++ "switching frequency\n");
++ break;
++ default:
++ ret = -EINVAL;
++ }
++ return ret;
++}
++
++int dvfm_register_notifier(struct notifier_block *nb, unsigned int list)
++{
++ int ret;
++
++ switch (list) {
++ case DVFM_FREQUENCY_NOTIFIER:
++ ret = atomic_notifier_chain_register(
++ &dvfm_freq_notifier_list, nb);
++ break;
++ default:
++ ret = -EINVAL;
++ }
++ return ret;
++}
++EXPORT_SYMBOL(dvfm_register_notifier);
++
++int dvfm_unregister_notifier(struct notifier_block *nb, unsigned int list)
++{
++ int ret;
++
++ switch (list) {
++ case DVFM_FREQUENCY_NOTIFIER:
++ ret = atomic_notifier_chain_unregister(
++ &dvfm_freq_notifier_list, nb);
++ break;
++ default:
++ ret = -EINVAL;
++ }
++ return ret;
++}
++EXPORT_SYMBOL(dvfm_unregister_notifier);
++
++/*
++ * add device into trace list
++ * return device index
++ */
++static int add_device(char *name)
++{
++ struct dvfm_trace_info *entry = NULL, *new = NULL;
++ int min;
++
++ min = find_first_zero_bit(&dvfm_trace_list.device, DVFM_MAX_DEVICE);
++ if (min == DVFM_MAX_DEVICE)
++ return -EINVAL;
++
++ /* If device trace table is NULL */
++ new = kzalloc(sizeof(struct dvfm_trace_info), GFP_ATOMIC);
++ if (new == NULL)
++ goto out_mem;
++ /* add new item */
++ strcpy(new->name, name);
++ new->index = min;
++ /* insert the new item in increasing order */
++ list_for_each_entry(entry, &dvfm_trace_list.list, list) {
++ if (entry->index > min) {
++ list_add_tail(&(new->list), &(entry->list));
++ goto inserted;
++ }
++ }
++ list_add_tail(&(new->list), &(dvfm_trace_list.list));
++inserted:
++ set_bit(min, (void *)&dvfm_trace_list.device);
++
++ return min;
++out_mem:
++ return -ENOMEM;
++}
++
++/*
++ * Query the device number that registered in DVFM
++ */
++int dvfm_query_device_num(void)
++{
++ int count = 0;
++ struct dvfm_trace_info *entry = NULL;
++
++ read_lock(&dvfm_trace_list.lock);
++ list_for_each_entry(entry, &dvfm_trace_list.list, list) {
++ count++;
++ }
++ read_unlock(&dvfm_trace_list.lock);
++ return count;
++}
++EXPORT_SYMBOL(dvfm_query_device_num);
++
++/*
++ * Query all device name that registered in DVFM
++ */
++int dvfm_query_device_list(void *mem, int len)
++{
++ int count = 0, size;
++ struct dvfm_trace_info *entry = NULL;
++ struct name_list *p = (struct name_list *)mem;
++
++ count = dvfm_query_device_num();
++ size = sizeof(struct name_list);
++ if (len < count * size)
++ return -ENOMEM;
++
++ read_lock(&dvfm_trace_list.lock);
++ list_for_each_entry(entry, &dvfm_trace_list.list, list) {
++ p->id = entry->index;
++ strcpy(p->name, entry->name);
++ p++;
++ }
++ read_unlock(&dvfm_trace_list.lock);
++ return 0;
++}
++EXPORT_SYMBOL(dvfm_query_device_list);
++
++/*
++ * Device driver register itself to DVFM before any operation.
++ * The number of registered device is limited in 32.
++ */
++int dvfm_register(char *name, int *id)
++{
++ struct dvfm_trace_info *p = NULL;
++ int len, idx;
++
++ if (name == NULL)
++ return -EINVAL;
++
++ /* device name is stricted in 32 bytes */
++ len = strlen(name);
++ if (len > DVFM_MAX_NAME)
++ len = DVFM_MAX_NAME;
++ write_lock(&dvfm_trace_list.lock);
++ list_for_each_entry(p, &dvfm_trace_list.list, list) {
++ if (!strcmp(name, p->name)) {
++ /*
++ * Find device in device trace table
++ * Skip to allocate new ID
++ */
++ *id = p->index;
++ goto out;
++ }
++ }
++ idx = add_device(name);
++ if (idx < 0)
++ goto out_num;
++ *id = idx;
++out:
++ write_unlock(&dvfm_trace_list.lock);
++ return 0;
++out_num:
++ write_unlock(&dvfm_trace_list.lock);
++ return -EINVAL;
++}
++EXPORT_SYMBOL(dvfm_register);
++
++/*
++ * Release the device and free the device index.
++ */
++int dvfm_unregister(char *name, int *id)
++{
++ struct op_info *q = NULL;
++ struct dvfm_trace_info *p = NULL;
++ int len, num, i;
++
++ if (!dvfm_driver || !dvfm_driver->count || (name == NULL))
++ return -EINVAL;
++
++ /* device name is stricted in 32 bytes */
++ len = strlen(name);
++ if (len > DVFM_MAX_NAME)
++ len = DVFM_MAX_NAME;
++
++ num = dvfm_driver->count(dvfm_driver->priv, dvfm_op_list);
++
++ write_lock(&dvfm_trace_list.lock);
++ if (list_empty(&dvfm_trace_list.list))
++ goto out;
++ list_for_each_entry(p, &dvfm_trace_list.list, list) {
++ if (!strncmp(name, p->name, len)) {
++ for (i = 0; i < num; ++i) {
++ if (!dvfm_find_op(i, &q)) {
++ write_lock(&dvfm_op_list->lock);
++ if (test_bit(p->index, (void *)&q->device)) {
++ printk(KERN_ERR "%s uses PM interface unrightly, please clean the constraint before quit!\n", name);
++ dvfm_enable_op(i, p->index);
++ }
++ write_unlock(&dvfm_op_list->lock);
++ }
++ }
++
++ /* clear the device index */
++ clear_bit(*id, (void *)&dvfm_trace_list.device);
++ *id = -1;
++ list_del(&p->list);
++ kfree(p);
++ break;
++ }
++ }
++ write_unlock(&dvfm_trace_list.lock);
++ return 0;
++out:
++ write_unlock(&dvfm_trace_list.lock);
++ return -ENOENT;
++}
++EXPORT_SYMBOL(dvfm_unregister);
++
++#ifndef CONFIG_BPMD
++static int dvfm_add(struct sys_device *sys_dev)
++{
++ int i, n;
++ int ret;
++
++ n = ARRAY_SIZE(dvfm_attr);
++ for (i = 0; i < n; i++) {
++ ret = sysfs_create_file(&(sys_dev->kobj), dvfm_attr[i]);
++ if (ret)
++ return -EIO;
++ }
++ return 0;
++}
++
++static int dvfm_rm(struct sys_device *sys_dev)
++{
++ int i, n;
++ n = ARRAY_SIZE(dvfm_attr);
++ for (i = 0; i < n; i++) {
++ sysfs_remove_file(&(sys_dev->kobj), dvfm_attr[i]);
++ }
++ return 0;
++}
++
++static int dvfm_suspend(struct sys_device *sysdev, pm_message_t pmsg)
++{
++ return 0;
++}
++
++static int dvfm_resume(struct sys_device *sysdev)
++{
++ return 0;
++}
++
++static struct sysdev_driver dvfm_sysdev_driver = {
++ .add = dvfm_add,
++ .remove = dvfm_rm,
++ .suspend = dvfm_suspend,
++ .resume = dvfm_resume,
++};
++#endif
++
++int dvfm_register_driver(struct dvfm_driver *driver_data, struct info_head *op_list)
++{
++ int ret = 0;
++ if (!driver_data || !driver_data->set)
++ return -EINVAL;
++ if (dvfm_driver)
++ return -EBUSY;
++ dvfm_driver = driver_data;
++
++ if (!op_list)
++ return -EINVAL;
++ dvfm_op_list = op_list;
++
++#ifndef CONFIG_BPMD
++ /* enable_op need to invoke dvfm operation */
++ dvfm_register("User", &dvfm_dev_idx);
++ ret = sysdev_driver_register(&cpu_sysdev_class, &dvfm_sysdev_driver);
++#endif
++ return ret;
++}
++
++int dvfm_unregister_driver(struct dvfm_driver *driver)
++{
++#ifndef CONFIG_BPMD
++ sysdev_driver_unregister(&cpu_sysdev_class, &dvfm_sysdev_driver);
++ dvfm_unregister("User", &dvfm_dev_idx);
++#endif
++ dvfm_driver = NULL;
++ return 0;
++}
++
++unsigned int NextWakeupTimeAbs;
++unsigned int AppsSyncEnabled = 0;
++
++//this function should be called form ACIPC driver when comm relenquish events occurs
++int dvfm_notify_next_comm_wakeup_time(unsigned int NextWakeupTimeRel)
++{
++ unsigned int TimeStamp;
++
++ TimeStamp = dvfm_driver->read_time();
++
++ if (NextWakeupTimeRel == 0)
++ {
++ AppsSyncEnabled = 0;
++ }
++ else
++ {
++ AppsSyncEnabled = 1;
++ }
++ //we receive the next relative comm wakeup time and add to current TS to get the absolute time of the next comm wakeup.
++ //this value is stored in a global variable for future use. this should be done every time the comm side goes to D2
++ NextWakeupTimeAbs = NextWakeupTimeRel + TimeStamp;
++ return 0;
++}
++
++//this function should be called from mspm_idle when we want to go to D2 to check when the next wakeup will occur.
++int dvfm_is_comm_wakep_near(void)
++{
++ unsigned int TimeStamp;
++ TimeStamp = dvfm_driver->read_time();
++
++ //if the feature is not enabled we should not prevent D2.
++ if (!AppsSyncEnabled)
++ return 0;
++
++ if (NextWakeupTimeAbs - TimeStamp < APPS_COMM_D2_THRESHOLD)
++ {
++ return (NextWakeupTimeAbs - TimeStamp); //preventing D2
++ }
++ else
++ {
++ return 0; //allowing D2
++ }
++}
++
++MODULE_DESCRIPTION("Basic DVFM support for Monahans");
++MODULE_LICENSE("GPL");
+diff -ur linux-2.6.32/arch/arm/mach-pxa/include/mach/bpm.h kernel/arch/arm/mach-pxa/include/mach/bpm.h
+--- linux-2.6.32/arch/arm/mach-pxa/include/mach/bpm.h 2009-12-13 12:59:07.871960663 +0200
++++ kernel/arch/arm/mach-pxa/include/mach/bpm.h 2009-12-12 16:09:26.446281263 +0200
+@@ -0,0 +1,57 @@
++/*
++ * Copyright (C) 2003-2004 Intel Corporation.
++ *
++ * This software program is licensed subject to the GNU General Public License
++ * (GPL).Version 2,June 1991, available at http://www.fsf.org/copyleft/gpl.html
++ *
++ *
++ * (C) Copyright 2006 Marvell International Ltd.
++ * All Rights Reserved
++ *
++ * (C) Copyright 2008 Borqs Corporation.
++ * All Rights Reserved
++ */
++
++#ifndef __BPM_H__
++#define __BPM_H__
++
++#ifdef __KERNEL__
++
++/* 10 BPM event max */
++#define MAX_BPM_EVENT_NUM 10
++#define INFO_SIZE 128
++
++struct bpm_event {
++ int type; /* What type of IPM events. */
++ int kind; /* What kind, or sub-type of events. */
++ unsigned char info[INFO_SIZE]; /* events specific data. */
++};
++
++/* IPM events queue */
++struct bpm_event_queue{
++ int head;
++ int tail;
++ int len;
++ struct bpm_event bpmes[MAX_BPM_EVENT_NUM];
++ wait_queue_head_t waitq;
++};
++
++/* IPM event types. */
++#define IPM_EVENT_PROFILER 0x7 /* Profiler events. */
++
++#define IPM_EVENT_BLINK (0xA0)
++
++/* IPM event kinds. */
++#define IPM_EVENT_IDLE_PROFILER 0x1
++#define IPM_EVENT_PERF_PROFILER 0x2
++
++#define IPM_EVENT_BLINK_SPEEDUP (0x1)
++
++/* IPM event infos, not defined yet. */
++#define IPM_EVENT_NULLINFO 0x0
++
++/* IPM functions */
++extern int bpm_event_notify(int type, int kind, void *info, unsigned int info_len);
++#endif
++
++#endif
+diff -ur linux-2.6.32/arch/arm/mach-pxa/include/mach/dvfm.h kernel/arch/arm/mach-pxa/include/mach/dvfm.h
+--- linux-2.6.32/arch/arm/mach-pxa/include/mach/dvfm.h 2009-12-13 12:59:13.655291426 +0200
++++ kernel/arch/arm/mach-pxa/include/mach/dvfm.h 2009-12-12 16:09:26.446281263 +0200
+@@ -0,0 +1,226 @@
++/*
++ * Copyright (C) 2003-2004 Intel Corporation.
++ *
++ * This software program is licensed subject to the GNU General Public License
++ * (GPL).Version 2,June 1991, available at http://www.fsf.org/copyleft/gpl.html
++ *
++
++ *(C) Copyright 2006 Marvell International Ltd.
++ * All Rights Reserved
++ */
++
++#ifndef DVFM_H
++#define DVFM_H
++
++
++#ifdef __KERNEL__
++enum {
++ FV_NOTIFIER_QUERY_SET = 1,
++ FV_NOTIFIER_PRE_SET = 2,
++ FV_NOTIFIER_POST_SET = 3,
++};
++
++
++#define MAXTOKENS 80
++#define CONSTRAINT_NAME_LEN 20
++
++#define DVFM_MAX_NAME 32
++#define DVFM_MAX_DEVICE 32
++
++#define DVFM_FREQUENCY_NOTIFIER 0
++#define DVFM_LOWPOWER_NOTIFIER 1
++
++#define DVFM_FREQ_PRECHANGE 0
++#define DVFM_FREQ_POSTCHANGE 1
++
++#define DVFM_LOWPOWER_PRECHANGE 0
++#define DVFM_LOWPOWER_POSTCHANGE 1
++#define APPS_COMM_D2_THRESHOLD 326
++
++/* set the lowest operating point that is equal or higher than specified */
++#define RELATION_LOW 0
++/* set the highest operating point that is equal or lower than specified */
++#define RELATION_HIGH 1
++/* set the specified operating point */
++#define RELATION_STICK 2
++
++/* Both of these states are used in statistical calculation */
++#define CPU_STATE_RUN 1
++#define CPU_STATE_IDLE 2
++
++/*
++ * operating point definition
++ */
++
++struct op_info {
++ void *op;
++ struct list_head list;
++ unsigned int index;
++ unsigned int device; /* store the device ID blocking OP */
++};
++
++struct dvfm_freqs {
++ unsigned int old; /* operating point index */
++ unsigned int new; /* operating point index */
++ struct op_info old_info;
++ struct op_info new_info;
++ unsigned int flags;
++};
++
++struct op_freq {
++ unsigned int cpu_freq;
++};
++
++struct dvfm_op {
++ int index;
++ int count;
++ unsigned int cpu_freq;
++ const char* name;
++};
++
++struct info_head {
++ struct list_head list;
++ rwlock_t lock;
++ unsigned int device; /* store the registerred device ID */
++};
++
++struct head_notifier {
++ spinlock_t lock;
++ struct notifier_block *head;
++};
++
++/**
++ * struct dvfm_lock - the lock struct of dvfm
++ * @lock: the spin lock struct.
++ * @flags: the flags for spin lock.
++ * @count: the count of dvfm_disable_op_name() or dvfm_enable_op_name()
++ *
++ * This struct is used for the mutex lock of dvfm_disable_op_name() and
++ * dvfm_enable_op_name(). The caller can not call dvfm_enable_op_name()
++ * without call dvfm_disable_op_name() before, so the caller of
++ * dvfm_disable_op_name() and dvfm_enable_op_name() must record the
++ * called times of these two functions.
++ */
++struct dvfm_lock {
++ spinlock_t lock;
++ unsigned long flags;
++ int dev_idx;
++ int count;
++};
++
++/*
++ * Store the dev_id and dev_name.
++ * Registered device number can't be larger than 32.
++ */
++struct dvfm_trace_info {
++ struct list_head list;
++ int index; /* index is [0,31] */
++ unsigned int dev_id; /* dev_id == 1 << index */
++ char name[DVFM_MAX_NAME];
++};
++
++
++struct dvfm_driver {
++ int (*get_opinfo)(void *driver_data, void *info);
++ int (*count)(void *driver_data, struct info_head *op_table);
++ int (*set)(void *driver_data, struct dvfm_freqs *freq, unsigned int new,
++ unsigned int relation);
++ int (*dump)(void *driver_data, struct op_info *md, char *buf);
++ char * (*name)(void *driver_data, struct op_info *md);
++ int (*request_set)(void *driver_data, int index);
++ int (*enable_dvfm)(void *driver_data, int dev_id);
++ int (*disable_dvfm)(void *driver_data, int dev_id);
++ int (*enable_op)(void *driver_data, int index, int relation);
++ int (*disable_op)(void *driver_data, int index, int relation);
++ int (*volt_show)(void *driver_data, char *buf);
++#ifdef CONFIG_CPU_PXA310
++ int (*freq_show)(void *driver_date, struct op_info *md, char *buf);
++#endif
++ unsigned int (*ticks_to_usec)(unsigned int);
++ unsigned int (*ticks_to_sec)(unsigned int);
++ unsigned int (*read_time)(void);
++ int (*get_freq)(void* driver_data, struct op_info *md, struct op_freq *freq);
++ int (*check_active_op)(void *driver_data, struct op_info *md);
++ void *priv;
++};
++
++extern struct dvfm_driver *dvfm_driver;
++extern struct info_head *dvfm_op_list;
++extern unsigned int op_nums;
++
++extern int dvfm_notifier_frequency(struct dvfm_freqs *freqs, unsigned int state);
++extern int dvfm_notifier_lowpower(struct dvfm_freqs *freqs, unsigned int state);
++extern int dvfm_register_notifier(struct notifier_block *nb, unsigned int list);
++extern int dvfm_unregister_notifier(struct notifier_block *nb, unsigned int list);
++extern int dvfm_register_driver(struct dvfm_driver *driver_data, struct info_head *op_list);
++extern int dvfm_unregister_driver(struct dvfm_driver *driver);
++extern int dvfm_register(char *name, int *);
++extern int dvfm_unregister(char *name, int *);
++extern int dvfm_query_device_num(void);
++extern int dvfm_query_device_list(void *, int);
++
++extern int dvfm_enable_op(int, int);
++extern int dvfm_disable_op(int, int);
++extern int dvfm_enable(int);
++extern int dvfm_enable_op_name(char *, int);
++extern int dvfm_disable_op_name(char *, int);
++extern int dvfm_disable(int);
++extern int dvfm_dump_op(int, char*);
++
++extern int dvfm_set_op(struct dvfm_freqs *, unsigned int, unsigned int);
++extern int dvfm_get_op(struct op_info **);
++extern int dvfm_get_op_freq(int, struct op_freq *);
++extern int dvfm_check_active_op(int);
++extern int dvfm_get_defop(void);
++extern int dvfm_get_opinfo(int, struct op_info **);
++extern int dvfm_request_op(int);
++extern int dvfm_op_count(void);
++extern int dvfm_find_op(int, struct op_info **);
++extern int dvfm_trace(char *);
++extern int dvfm_add_event(int, int, int, int);
++extern int dvfm_add_timeslot(int, int);
++extern int calc_switchtime_start(int, int, unsigned int);
++extern int calc_switchtime_end(int, int, unsigned int);
++
++//hanling comm apps sync
++extern int dvfm_notify_next_comm_wakeup_time(unsigned int NextWakeupTimeRel);
++extern int dvfm_is_comm_wakep_near(void);
++
++extern const char* dvfm_get_op_name(int);
++
++/**
++ * dvfm_disable_op_name: - disable the operating point by its name.
++ * @name: the operating point's name.
++ *
++ * Context: process and interrupt.
++ *
++ * disable the operating points by op's name, op name set includes
++ * "D0CS","156M","208M","416M","624M" and "D2".
++ *
++ * Returns zero on success, else negative errno.
++ */
++#define dvfm_disable_op_name(name, dev_idx) \
++ (_dvfm_disable_op_name(name, dev_idx, __FILE__))
++
++extern int _dvfm_disable_op_name(char *name, int dev_idx, char *sid);
++
++/**
++ * dvfm_enable_op_name: - enable the operating point by its name.
++ * @name: the operating point's name.
++ *
++ * Context: process and interrupt.
++ *
++ * enable the operating points by op's name, op name set includes
++ * "D0CS","156M","208M","416M","624M" and "D2".
++ *
++ * Returns zero on success, else negative errno.
++ */
++#define dvfm_enable_op_name(name, dev_idx) \
++ (_dvfm_enable_op_name(name, dev_idx, __FILE__))
++
++extern int _dvfm_enable_op_name(char *name, int dev_idx, char *sid);
++
++#endif
++
++#endif
++
+diff -ur linux-2.6.32/arch/arm/mach-pxa/include/mach/mspm_prof.h kernel/arch/arm/mach-pxa/include/mach/mspm_prof.h
+--- linux-2.6.32/arch/arm/mach-pxa/include/mach/mspm_prof.h 2009-12-13 12:59:18.941953014 +0200
++++ kernel/arch/arm/mach-pxa/include/mach/mspm_prof.h 2009-12-12 16:09:26.456281390 +0200
+@@ -0,0 +1,66 @@
++/*
++ * PXA Performance profiler and Idle profiler Routines
++ *
++ * Copyright (c) 2003 Intel Corporation.
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ * (C) Copyright 2006 Marvell International Ltd.
++ * All Rights Reserved
++ */
++
++#ifndef MSPM_PROF_H
++#define MSPM_PROF_H
++
++#include <mach/pmu.h>
++#include <mach/xscale-pmu.h>
++
++#define IPM_IDLE_PROFILER 1
++#define IPM_PMU_PROFILER 2
++
++struct ipm_profiler_result {
++ struct pmu_results pmu;
++ unsigned int busy_ratio; /* CPU busy ratio */
++ unsigned int mips;
++ unsigned int window_size;
++};
++
++struct ipm_profiler_arg {
++ unsigned int size; /* size of ipm_profiler_arg */
++ unsigned int flags;
++ unsigned int window_size; /* in microseconds */
++ unsigned int pmn0;
++ unsigned int pmn1;
++ unsigned int pmn2;
++ unsigned int pmn3;
++};
++
++#ifdef __KERNEL__
++extern volatile int hlt_counter;
++
++#define OSCR_MASK ~(1UL)
++
++#undef MAX_OP_NUM
++#define MAX_OP_NUM 20
++
++/* The minimum sample window is 20ms, the default window is 100ms */
++#define MIN_SAMPLE_WINDOW 20
++#define DEF_SAMPLE_WINDOW 100
++
++#define DEF_HIGH_THRESHOLD 80
++#define DEF_LOW_THRESHOLD 20
++
++extern int mspm_add_event(int op, int cpu_idle);
++extern int mspm_prof_init(void);
++extern void mspm_prof_exit(void);
++
++extern int bpm_event_notify(int type, int kind, void *info,
++ unsigned int info_len);
++//extern int (*pipm_start_pmu)(struct ipm_profiler_arg *arg);
++//extern int (*pipm_stop_pmu)(void);
++#endif
++
++#endif
++
+diff -ur linux-2.6.32/arch/arm/mach-pxa/include/mach/pmu.h kernel/arch/arm/mach-pxa/include/mach/pmu.h
+--- linux-2.6.32/arch/arm/mach-pxa/include/mach/pmu.h 2009-12-13 12:59:24.521951391 +0200
++++ kernel/arch/arm/mach-pxa/include/mach/pmu.h 2009-12-12 16:09:26.459612243 +0200
+@@ -0,0 +1,555 @@
++/*
++ * "This software program is available to you under a choice of one of two
++ * licenses. You may choose to be licensed under either the GNU General Public
++ * License (GPL) Version 2, June 1991, available at
++ * http://www.fsf.org/copyleft/gpl.html, or the BSD License, the text of
++ * which follows:
++ *
++ * Copyright (c) 1996-2005, Intel Corporation. All rights reserved.
++ *
++ * Redistribution and use in source and binary forms, with or without
++ * modification, are permitted provided that the following conditions are met:
++ *
++ * Redistributions of source code must retain the above copyright notice, this
++ * list of conditions and the following disclaimer.
++ *
++ * Redistributions in binary form must reproduce the above copyright notice, this
++ * list of conditions and the following disclaimer in the documentation and/or
++ * other materials provided with the distribution.
++ *
++ * Neither the name of the Intel Corporation ("Intel") nor the names of its
++ * contributors may be used to endorse or promote products derived from this
++ * software without specific prior written permission.
++ *
++ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
++ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
++ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
++ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
++ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
++ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
++ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
++ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
++ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
++ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
++ */
++
++/*
++ * FILENAME: pmu.h
++ *
++ * CORE STEPPING:
++ *
++ * PURPOSE: contains all PMU specific macros, typedefs, and prototypes.
++ * Declares no storage.
++ */
++
++#ifndef __PMU_H__
++#define __PMU_H__
++
++/* PMU Performance Monitor Control Register (PMNC) */
++#define PMU_ID (0x24u << 24)
++#define PMU_COUNTERS_DISALBLE (1u<<4)
++#define PMU_CLOCK_DIVIDER (1u<<3)
++#define PMU_CLOCK_RESET (1u<<2)
++#define PMU_COUNTERS_RESET (1u<<1)
++#define PMU_3_COUNTERS_ENABLE (1u<<0)
++#define PMU_COUNTERS_ENABLE (1u<<0)
++
++/* INTEN & FLAG Registers bit definition*/
++#define PMU_CLOCK_COUNT (1u<<0)
++#define PMU_COUNT_0 (1u<<1)
++#define PMU_COUNT_1 (1u<<2)
++#define PMU_COUNT_2 (1u<<3)
++#define PMU_COUNT_3 (1u<<4)
++
++/*Events combination*/
++/*!evtCount0/2:0x7(instruction count), evtCount1/3:0x0(ICache miss)*/
++#define PMU_EVTCOUNT_1 (0x0007)
++/*!evtCount0/2:0xA(DCache Access), evtCount1/3:0xB(DCache miss)*/
++#define PMU_EVTCOUNT_2 (0x0B0A)
++/*!evtCount0/2:0x1(ICache cannot deliver), evtCount1/3:0x0(ICache miss)*/
++#define PMU_EVTCOUNT_3 (0x0001)
++/*!evtCount0/2:0xB(DBufer stall duration), evtCount1/3:0x9(Dbuffer stall)*/
++#define PMU_EVTCOUNT_4 (0x090B)
++/*!evtCount0/2:0x2(data stall), evtCount1/3:0xC(DCache writeback)*/
++#define PMU_EVTCOUNT_5 (0x0C02)
++/*!evtCount0/2:0x7(instruction count), evtCount1/3:0x3(ITLB miss)*/
++#define PMU_EVTCOUNT_6 (0x0307)
++/*!evtCount0/2:0xA(DCache Access), evtCount/31:0x4(DTLB miss)*/
++#define PMU_EVTCOUNT_7 (0x040A)
++
++/* PXA3xx/PXA900 PML event selector register offset */
++#define PML_ESEL_0_OFF (0x0)
++#define PML_ESEL_1_OFF (0x4)
++#define PML_ESEL_2_OFF (0x8)
++#define PML_ESEL_3_OFF (0xC)
++#define PML_ESEL_4_OFF (0x10)
++#define PML_ESEL_5_OFF (0x14)
++#define PML_ESEL_6_OFF (0x18)
++#define PML_ESEL_7_OFF (0x1C)
++
++enum {
++ PMU_PMNC = 0,
++ PMU_CCNT,
++ PMU_PMN0,
++ PMU_PMN1,
++ PMU_PMN2,
++ PMU_PMN3,
++ PMU_INTEN,
++ PMU_FLAG,
++ PMU_EVTSEL
++};
++
++/*
++ * PMU and PML Event
++ */
++enum {
++ PMU_EVENT_INVALIDATE=0xFFFFFFFFu,
++
++ /*!< L1 Instruction cache miss requires fetch from external memory */
++ PMU_EVENT_L1_INSTRUCTION_MISS=0x0u,
++
++ /*!< L1 Instruction cache cannot deliver an instruction. this indicate
++ * an instruction cache or TLB miss. This event will occur eveyr cycle
++ * in which the condition is present
++ */
++ PMU_EVENT_L1_INSTRUCTION_NOT_DELIVER,
++
++ /*!< Stall due to a data dependency. This event will occur every cycle
++ * in which the condition is present
++ */
++ PMU_EVENT_STALL_DATA_DEPENDENCY,
++
++ /*!< Instruction TLB miss*/
++ PMU_EVENT_INSTRUCTION_TLB_MISS,
++
++ /*!< Data TLB miss*/
++ PMU_EVENT_DATA_TLB_MISS,
++
++ /*!< Branch instruction retired, branch may or many not have changed
++ * program flow. (Counts only B and BL instruction, in both ARM and
++ * Thumb mode)
++ */
++ PMU_EVENT_BRANCH_RETIRED,
++
++ /*!< Branch mispredicted. Counts only B and BL instructions, in both
++ * ARM and Thumb mode
++ */
++ PMU_EVENT_BRANCH_MISPREDICTED,
++
++ /*!< Instruction retired. This event will occur every cycle in which
++ * the condition is present
++ */
++ PMU_EVENT_INSTRUCTION_RETIRED,
++
++ /*!< L1 Data cache buffer full stall. This event will occur every
++ * cycle in which the condition is present.
++ */
++ PMU_EVENT_L1_DATA_STALL,
++
++ /*!< L1 Data cache buffer full stall. This event occur for each
++ * contiguous sequence of this type of stall
++ */
++ PMU_EVENT_L1_DATA_STALL_C,
++
++ /*!< L1 Data cache access, not including Cache Operations. All data
++ * accesses are treated as cacheable accessses and are counted here
++ * even if the cache is not enabled
++ */
++ PMU_EVENT_L1_DATA_ACCESS,
++
++ /*!< L1 Data cache miss, not including Cache Operations. All data
++ * accesses are treated as cachedable accesses and are counted as
++ * misses if the data cache is not enable
++ */
++ PMU_EVENT_L1_DATA_MISS,
++
++ /*!< L1 data cache write-back. This event occures once for each line
++ * that is written back from the cache
++ */
++ PMU_EVENT_L1_DATA_WRITE_BACK,
++
++ /*!< Software changed the PC(b bx bl blx and eor sub rsb add adc sbc
++ * rsc orr mov bic mvn ldm pop) will be counted. The count does not
++ * increment when an exception occurs and the PC changed to the
++ * exception address(e.g.. IRQ, FIR, SWI,...)
++ */
++ PMU_EVENT_SOFTWARE_CHANGED_PC,
++
++ /*!< Branch instruction retired, branch may or may noot have chanaged
++ * program flow.
++ * (Count ALL branch instructions, indirect as well as direct)
++ */
++ PMU_EVENT_BRANCH_RETIRED_ALL,
++
++ /*!< Instruction issue cycle of retired instruction. This event is a
++ * count of the number of core cycle each instruction requires to issue
++ */
++ PMU_EVENT_INSTRUCTION_CYCLE_RETIRED,
++
++ /*!< All change to the PC. (includes software changes and exceptions*/
++ PMU_EVENT_ALL_CHANGED_PC=0x18,
++
++ /*!< Pipe line flush due to branch mispredict or exception*/
++ PMU_EVENT_PIPE_FLUSH_BRANCH,
++
++ /*!< The core could not issue an instruction due to a backed stall.
++ * This event will occur every cycle in which the condition is present
++ */
++ PMU_EVENT_BACKEND_STALL,
++
++ /*!< Multiplier in use. This event will occur every cycle in which
++ * the multiplier is active
++ */
++ PMU_EVENT_MULTIPLIER,
++
++ /*!< Multiplier stalled the instruction pipelien due to resource stall.
++ * This event will occur every cycle in which the condition is present
++ */
++ PMU_EVENT_MULTIPLIER_STALL_PIPE,
++
++ /*!< Coprocessor stalled the instruction pipeline. This event will
++ * occur every cycle in which the condition is present
++ */
++ PMU_EVENT_COPROCESSOR_STALL_PIPE,
++
++ /*!< Data cache stalled the instruction pipeline. This event will
++ * occur every cycle in which the condition is present
++ */
++ PMU_EVENT_DATA_CACHE_STALL_PIPE,
++
++ /*!< Unified L2 Cache request, not including cache operations. This
++ * event includes table walks, data and instruction reqeusts
++ */
++ PMU_EVENT_L2_REQUEST=0x20,
++
++ /*!< Unified L2 cache miss, not including cache operations*/
++ PMU_EVENT_L2_MISS=0x23,
++
++ /*!< Address bus transcation*/
++ PMU_EVENT_ADDRESS_BUS=0x40,
++
++ /*!< Self initiated(Core Generated) address bus transaction*/
++ PMU_EVENT_SELF_INITIATED_ADDRESS,
++
++ /*!< Bus clock. This event occurs onece for each bus cycle*/
++ PMU_EVENT_BUS_CLOCK=0x43,
++
++ /*!< Data bus transaction. This event occurs once for
++ * each data bus cycle
++ */
++ PMU_EVENT_SELF_INITIATED_DATA=0x47,
++
++ /*!< Data bus transaction. This event occures once for
++ * each data bus cycle
++ */
++ PMU_EVENT_BUS_TRANSACTION,
++
++ PMU_EVENT_ASSP_0=0x80,
++ PMU_EVENT_ASSP_1,
++ PMU_EVENT_ASSP_2,
++ PMU_EVENT_ASSP_3,
++ PMU_EVENT_ASSP_4,
++ PMU_EVENT_ASSP_5,
++ PMU_EVENT_ASSP_6,
++ PMU_EVENT_ASSP_7,
++
++ /*!< Power Saving event. This event deactivates the corresponding
++ * PMU event counter
++ */
++ PMU_EVENT_POWER_SAVING=0xFF,
++
++ PXA3xx_EVENT_MASK=0x80000000,
++
++ /*!< Core is performing a new instruction fetch.
++ * e.g. an L2 cache miss.
++ */
++ PXA3xx_EVENT_CORE_INSTRUCTION_FETCH=PXA3xx_EVENT_MASK,
++
++ /*!< Core is performing a new data fetch*/
++ PXA3xx_EVENT_CORE_DATA_FETCH,
++
++ /*!< Core read request count*/
++ PXA3xx_EVENT_CORE_READ,
++
++ /*!< LCD read request cout*/
++ PXA3xx_EVENT_LCD_READ,
++
++ /*!< DMA read request count*/
++ PXA3xx_EVENT_DMA_READ,
++
++ /*!< Camera interface read request cout*/
++ PXA3xx_EVENT_CAMERA_READ,
++
++ /*!< USB 2.0 read request count*/
++ PXA3xx_EVENT_USB20_READ,
++
++ /*!< 2D grahpic read request count*/
++ PXA3xx_EVENT_2D_READ,
++
++ /*!< USB1.1 host read reqeust count*/
++ PXA3xx_EVENT_USB11_READ,
++
++ /*!< PX1 bus unitization. the number of cycles durring which
++ * the PX1 bus is occupied
++ */
++ PXA3xx_EVENT_PX1_UNITIZATION,
++
++ /*!< PX2(sidecar) bus unitization. the number of cycles
++ * durring which the PX2 bus is occupied
++ */
++ PXA3xx_EVENT_PX2_UNITIZATION,
++
++ /*!< Dynamic memory queue for Mandris occupied. the number of
++ * cycles when the DMC queue is not empty
++ */
++ PXA3xx_EVENT_DMC_NOT_EMPTY=PXA3xx_EVENT_MASK|14,
++
++ /*!< Dynamic memory queue for Mandris occupied by more than 1 request.
++ * the number of cycles when the DMC queue has 2 or more requests
++ */
++ PXA3xx_EVENT_DMC_2,
++
++ /*!< Dynamic memory queue for Mandris occupied by more than 2 request.
++ * the number of cycles when the DMC queue has 3 or more requests
++ */
++ PXA3xx_EVENT_DMC_3,
++
++ /*!< Dynamic memory queue for Mandris occupied by more than 3 request.
++ * the number of cycles when the DMC queue is full
++ */
++ PXA3xx_EVENT_DMC_FULL,
++
++ /*!< Static memory queue for Mandris occupied. the number of cycles
++ * when the SMC queue is not empty
++ */
++ PXA3xx_EVENT_SMC_NOT_EMPTY,
++
++ /*!< Static memory queue for Mandris occupied by more than 1 request.
++ * the number of cycles when the SMC queue has 2 or more requests
++ */
++ PXA3xx_EVENT_SMC_2,
++
++ /*!< Static memory queue for Mandris occupied by more than 2 request.
++ * the number of cycles when the SMC queue has 3 or more requests
++ */
++ PXA3xx_EVENT_SMC_3,
++
++ /*!< Static memory queue for Mandris occupied by more than 3 request.
++ * the number of cycles when the SMC queue is full
++ */
++ PXA3xx_EVENT_SMC_FULL,
++
++ /*!< Internal SRAM queue for Mandris occupied. the number of cycles
++ * when the ISRAM queue is not empty
++ */
++ PXA3xx_EVENT_ISRAM_NOT_EMPTY=PXA3xx_EVENT_MASK|26,
++
++ /*!< Internal SRAM queue for Mandris occupied by more than 1 request.
++ * the number of cycles when the ISRAM queue has 2 or more requests
++ */
++ PXA3xx_EVENT_ISRAM_2,
++
++ /*!< Internal SRAM queue for Mandris occupied by more than 2 request.
++ * the number of cycles when the ISRAM queue has 3 or more requests
++ */
++ PXA3xx_EVENT_ISRAM_3,
++
++ /*!< Internal SRAM queue for Mandris occupied by more than 3 request.
++ * the number of cycles when the ISRAM queue is full
++ */
++ PXA3xx_EVENT_ISRAM_FULL,
++
++ /*!< the number of cycles when external memory controller bus
++ * is occupied
++ */
++ PXA3xx_EVENT_EXMEM,
++
++ /*!< the number of cycles when external data flash bus is occupies */
++ PXA3xx_EVENT_DFC,
++
++ /*!< Core write request count*/
++ PXA3xx_EVENT_CORE_WRITE=PXA3xx_EVENT_MASK|36,
++
++ /*!< DMA write request count*/
++ PXA3xx_EVENT_DMA_WRITE,
++
++ /*!< Camera interface write request cout*/
++ PXA3xx_EVENT_CAMERA_WRITE,
++
++ /*!< USB 2.0 write request count*/
++ PXA3xx_EVENT_USB20_WRITE,
++
++ /*!< 2D grahpic write request count*/
++ PXA3xx_EVENT_2D_WRITE,
++
++ /*!< USB1.1 host write reqeust count*/
++ PXA3xx_EVENT_USB11_WRITE,
++
++ /*!< PX1 bus reqeust. length of time that at least one bus request
++ * is asserted on PX bus 1
++ */
++ PXA3xx_EVENT_PX1_REQUEST,
++
++ /*!< PX2 bus reqeust. length of time that at least one bus request
++ * is asserted on PX bus 2
++ */
++ PXA3xx_EVENT_PX2_REQUEST,
++
++ /*!< PX1 bus retries. number of retries on PX bus 1*/
++ PXA3xx_EVENT_PX1_RETRIES,
++
++ /*!< PX2 bus retries. number of retries on PX bus 2*/
++ PXA3xx_EVENT_PX2_RETRIES,
++
++ /*!< Temperature leve 1. time the part has spent in temperature range 1*/
++ PXA3xx_EVENT_TEMPERATURE_1,
++
++ /*!< Temperature leve 1. time the part has spent in temperature range 2*/
++ PXA3xx_EVENT_TEMPERATURE_2,
++
++ /*!< Temperature leve 1. time the part has spent in temperature range 3*/
++ PXA3xx_EVENT_TEMPERATURE_3,
++
++ /*!< Temperature leve 1. time the part has spent in temperature range 4*/
++ PXA3xx_EVENT_TEMPERATURE_4,
++
++ /*!< Core read/write latency measurement. amount of time when core
++ * have more than 1 read/write request outstanding
++ */
++ PXA3xx_EVENT_CORE_LATENCY_1,
++
++ /*!< Core read/write latency measurement. amount of time when core
++ * have more than 2 read/write request outstanding
++ */
++ PXA3xx_EVENT_CORE_LATENCY_2,
++
++ /*!< Core read/write latency measurement. amount of time when core
++ * have more than 3 read/write request outstanding
++ */
++ PXA3xx_EVENT_CORE_LATENCY_3,
++
++ /*!< Core read/write latency measurement. amount of time when core
++ * have more than 4 read/write request outstanding
++ */
++ PXA3xx_EVENT_CORE_LATENCY_4,
++
++ /*!< PX1 to IM read/write latency measurement. Amount of time when
++ * PX1 to IM has more than 1 read/write requests outstanding.
++ */
++ PXA3xx_EVENT_PX1_IM_1,
++
++ /*!< PX1 to IM read/write latency measurement. Amount of time when
++ * PX1 to IM has more than 2 read/write requests outstanding.
++ */
++ PXA3xx_EVENT_PX1_IM_2,
++
++ /*!< PX1 to IM read/write latency measurement. Amount of time when
++ * PX1 to IM has more than 3 read/write requests outstanding.
++ */
++ PXA3xx_EVENT_PX1_IM_3,
++
++ /*!< PX1 to IM read/write latency measurement. Amount of time when
++ * PX1 to IM has more than 4 read/write requests outstanding.
++ */
++ PXA3xx_EVENT_PX1_IM_4,
++
++ /*!< PX1 to DMEM/SMEM read/write latency measurement. Amount of time
++ * when PX1 to DMEM/SMEM has more than 1 read/write requests outstanding.
++ */
++ PXA3xx_EVENT_PX1_MEM_1,
++
++ /*!< PX1 to DMEM/SMEM read/write latency measurement. Amount of time
++ * when PX1 to DMEM/SMEM has more than 2 read/write requests outstanding.
++ */
++ PXA3xx_EVENT_PX1_MEM_2,
++
++ /*!< PX1 to DMEM/SMEM read/write latency measurement. Amount of time
++ * when PX1 to DMEM/SMEM has more than 3 read/write requests outstanding.
++ */
++
++ PXA3xx_EVENT_PX1_MEM_3,
++ /*!< PX1 to DMEM/SMEM read/write latency measurement. Amount of time
++ * when PX1 to DMEM/SMEM has more than 4 read/write requests outstanding.
++ */
++ PXA3xx_EVENT_PX1_MEM_4,
++
++ /*!< PX2 to IM read/write latency measurement. Amount of time when
++ * PX2 to IM has more than 1 read/write requests outstanding.
++ */
++ PXA3xx_EVENT_PX2_IM_1,
++
++ /*!< PX2 to IM read/write latency measurement. Amount of time when
++ * PX2 to IM has more than 2 read/write requests outstanding.
++ */
++ PXA3xx_EVENT_PX2_IM_2,
++
++ /*!< PX2 to IM read/write latency measurement. Amount of time when
++ * PX2 to IM has more than 3 read/write requests outstanding.
++ */
++ PXA3xx_EVENT_PX2_IM_3,
++
++ /*!< PX2 to IM read/write latency measurement. Amount of time when
++ * PX2 to IM has more than 4 read/write requests outstanding.
++ */
++ PXA3xx_EVENT_PX2_IM_4,
++
++ /*!< PX2 to DMEM/SMEM read/write latency measurement. Amount of time
++ * when PX2 to DMEM/SMEM has more than 1 read/write requests outstanding.
++ */
++ PXA3xx_EVENT_PX2_MEM_1,
++
++ /*!< PX2 to DMEM/SMEM read/write latency measurement. Amount of time
++ * when PX2 to DMEM/SMEM has more than 2 read/write requests outstanding.
++ */
++ PXA3xx_EVENT_PX2_MEM_2,
++
++ /*!< PX2 to DMEM/SMEM read/write latency measurement. Amount of time
++ * when PX2 to DMEM/SMEM has more than 3 read/write requests outstanding.
++ */
++ PXA3xx_EVENT_PX2_MEM_3,
++
++ /*!< PX2 to DMEM/SMEM read/write latency measurement. Amount of time
++ * when PX2 to DMEM/SMEM has more than 4 read/write requests outstanding.
++ */
++ PXA3xx_EVENT_PX2_MEM_4
++};
++
++#ifdef __KERNEL__
++struct pxa3xx_pmu_info {
++ /* performance monitor unit register base */
++ unsigned char __iomem *pmu_base;
++};
++
++#ifdef __cplusplus
++extern "C"
++{
++#endif
++
++/*
++ * This routine reads the designated PMU register via CoProcessor 14
++ *
++ * @param aReg PMU register number to read define in int
++ * @return 32-bit value read from register
++ */
++extern unsigned int pmu_read_reg(unsigned int aReg);
++
++/*
++ * This routine Writes the designated PMU register via CoProcessor 14
++ *
++ * @param aReg PMU register number to read define in int
++ * aValue Value to write to PMU register
++ * @return
++ */
++extern void pmu_write_reg(unsigned int aReg, unsigned int aValue);
++
++extern int pmu_select_event(int counter, int type);
++
++extern void pxa3xx_set_pmu_info(void *info);
++
++#ifdef __cplusplus
++}
++#endif
++#endif
++
++#endif //__PMU_H__
++
+diff -ur linux-2.6.32/arch/arm/mach-pxa/include/mach/prm.h kernel/arch/arm/mach-pxa/include/mach/prm.h
+--- linux-2.6.32/arch/arm/mach-pxa/include/mach/prm.h 2009-12-13 12:59:30.199033933 +0200
++++ kernel/arch/arm/mach-pxa/include/mach/prm.h 2009-12-12 16:09:26.459612243 +0200
+@@ -0,0 +1,138 @@
++/*
++ * include/asm-arm/arch-pxa/prm.h
++ *
++ * Copyright (C) 2006, Intel Corporation.
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++#ifndef __PRM_H
++#define __PRM_H
++
++#include <linux/interrupt.h>
++#include <mach/irqs.h>
++#include <mach/pmu.h>
++#include <mach/pxa3xx_dvfm.h>
++
++#define MAX_GROUPS 2
++#define MAX_CLIENTS 16
++
++typedef enum {
++ /* tag the loweset priority*/
++ PRI_LOWEST = 0,
++ /*define the possible priorities here*/
++ PRI_IPMC = PRI_LOWEST,
++ PRI_PROFILER,
++ PRI_VTUNE,
++ /*tag the highest priority*/
++ MAX_PRIORITIES,
++ PRI_HIGHEST = MAX_PRIORITIES - 1,
++} prm_priority;
++
++struct prm_group;
++struct prm_resource;
++struct prm_resource_state;
++
++typedef enum {
++ PRM_RES_APPROPRIATED,
++ PRM_RES_READY,
++} prm_event;
++
++typedef enum {
++ PRM_CCNT = 0,
++ PRM_PMN0,
++ PRM_PMN1,
++ PRM_PMN2,
++ PRM_PMN3,
++ PRM_VCC0,
++ PRM_VCC1,
++ PRM_IDLE_PROFILER,
++ PRM_COP,
++ RESOURCE_NUM,
++} prm_resource_id;
++
++typedef void (*clientcallback)(prm_event, unsigned int, void *);
++
++/* The gourp includes a set of resources. If one of the set of resources is
++ * appropriated, the other resources will not available for access. But the
++ * resources are still allocated by the client. So the group is defined as
++ * a set of resources that all can be accessed or all can not be accessed.
++ */
++struct prm_group {
++ unsigned int id;
++ /* appropriated resources count */
++ unsigned int appropriated_cnt;
++ /* total resources count in the group */
++ unsigned int member_cnt;
++ /* list for all the resources in the group */
++ struct list_head resources;
++ struct proc_dir_entry *dir;
++};
++
++struct prm_client {
++ /* client id */
++ unsigned int id;
++ /* process id for the client */
++ unsigned int pid;
++ /* priority for the client.(LOW or HIGH) */
++ prm_priority priority;
++ /* name of the client */
++ char *name;
++ /* How many groups in the client */
++ unsigned int group_cnt;
++ /* support MAXGROUP groups, some may be NULL */
++ struct prm_group *groups[MAX_GROUPS];
++ void *client_data;
++ /* notifier for resource appropriate and ready */
++ clientcallback notify;
++ irq_handler_t handler;
++ void *dev_id;
++ struct proc_dir_entry *dir;
++};
++
++struct prm_resource_state {
++ /* which client allocate the resources. In every priority,
++ * there can be only one client allocate the resource
++ */
++ struct prm_client *allocate;
++ /* which group it belongs to */
++ struct prm_group *group;
++ int active;
++ struct prm_resource *resource;
++ /* used by prm_group->resources for link the resources into the group */
++ struct list_head entry;
++ struct proc_dir_entry *dir;
++};
++
++struct prm_resource {
++ struct prm_client *access; /* Only one client can access it */
++ prm_resource_id id;
++ struct prm_resource_state priority[MAX_PRIORITIES];
++ struct proc_dir_entry *dir;
++};
++
++int prm_open_session(prm_priority , char * , clientcallback , void * );
++int prm_close_session(unsigned int );
++int prm_allocate_resource(unsigned int , prm_resource_id , unsigned int );
++int prm_free_resources(unsigned int , unsigned int );
++int prm_commit_resources(unsigned int , unsigned int );
++int pmu_read_register(unsigned int , int , unsigned int * );
++int pmu_write_register(unsigned int , int , unsigned int );
++int pmu_set_event(unsigned int , unsigned int , int * , int );
++int pmu_enable_event_counting(unsigned int );
++int pmu_disable_event_counting(unsigned int );
++int pmu_enable_event_interrupt(unsigned int , int );
++int pmu_disable_event_interrupt(unsigned int , int );
++int pmu_register_isr(unsigned int , irq_handler_t, void * );
++int pmu_unregister_isr(unsigned int );
++int cop_get_num_of_cops(void);
++int cop_get_cop(unsigned int , unsigned int , struct pxa3xx_fv_info *);
++int cop_set_cop(unsigned int , unsigned int , int mode);
++int cop_get_def_cop(unsigned int , unsigned int *, struct pxa3xx_fv_info *);
++int cop_set_def_cop(unsigned int );
++int cop_get_cur_cop(unsigned int , unsigned int *, struct pxa3xx_fv_info *);
++
++#endif
++
+diff -ur linux-2.6.32/arch/arm/mach-pxa/include/mach/pxa3xx_dvfm.h kernel/arch/arm/mach-pxa/include/mach/pxa3xx_dvfm.h
+--- linux-2.6.32/arch/arm/mach-pxa/include/mach/pxa3xx_dvfm.h 2009-12-13 12:59:37.209033179 +0200
++++ kernel/arch/arm/mach-pxa/include/mach/pxa3xx_dvfm.h 2009-12-12 16:09:26.462949527 +0200
+@@ -0,0 +1,94 @@
++/*
++ * This software program is licensed subject to the GNU General Public License
++ * (GPL).Version 2,June 1991, available at http://www.fsf.org/copyleft/gpl.html
++
++ * (C) Copyright 2007 Marvell International Ltd.
++ * All Rights Reserved
++ */
++
++#ifndef PXA3XX_DVFM_H
++#define PXA3XX_DVFM_H
++
++#include <mach/dvfm.h>
++#include <mach/pxa3xx_pm.h>
++
++#define DMEMC_FREQ_HIGH 0
++#define DMEMC_FREQ_LOW 1
++#define DMEMC_D0CS_ENTER 2
++#define DMEMC_D0CS_EXIT 3
++
++#define OP_NAME_LEN 16
++
++enum {
++ POWER_MODE_D0 = 0,
++ POWER_MODE_D0CS,
++ POWER_MODE_D1,
++ POWER_MODE_D2,
++ POWER_MODE_CG,
++};
++
++enum {
++ OP_FLAG_FACTORY = 0,
++ OP_FLAG_USER_DEFINED,
++ OP_FLAG_BOOT,
++ OP_FLAG_ALL,
++};
++
++enum {
++ IDLE_D0 = 0,
++ IDLE_D0CS = 1,
++ IDLE_D1 = 2,
++ IDLE_D2 = 4,
++ IDLE_CG = 8,
++};
++
++struct dvfm_md_opt {
++ int vcc_core;
++ int vcc_sram;
++ int xl;
++ int xn;
++ int core;
++ int smcfs;
++ int sflfs;
++ int hss;
++ int dmcfs;
++ int df_clk;
++ int empi_clk;
++ int power_mode;
++ int flag;
++ int lpj;
++ char name[OP_NAME_LEN];
++};
++
++/* This structure is similar to dvfm_md_opt.
++ * Reserve this structure in order to keep compatible
++ */
++struct pxa3xx_fv_info {
++ unsigned long xl;
++ unsigned long xn;
++ unsigned int vcc_core;
++ unsigned int vcc_sram;
++ unsigned long smcfs;
++ unsigned long sflfs;
++ unsigned long hss;
++ unsigned long dmcfs;
++ unsigned long df_clk;
++ unsigned long empi_clk;
++ unsigned long d0cs;
++ /* WARNING: above fields must be consistent with PM_FV_INFO!!!*/
++
++ unsigned long lpj; /* New value for loops_per_jiffy */
++};
++
++struct pxa3xx_freq_mach_info {
++ int flags;
++};
++
++#define PXA3xx_USE_POWER_I2C (1UL << 0)
++extern void set_pxa3xx_freq_info(struct pxa3xx_freq_mach_info *info);
++extern void set_pxa3xx_freq_parent(struct device *parent_dev);
++
++extern int md2fvinfo(struct pxa3xx_fv_info *fv_info, struct dvfm_md_opt *orig);
++
++#endif
++
+diff -ur linux-2.6.32/arch/arm/mach-pxa/include/mach/pxa3xx_pm.h kernel/arch/arm/mach-pxa/include/mach/pxa3xx_pm.h
+--- linux-2.6.32/arch/arm/mach-pxa/include/mach/pxa3xx_pm.h 2009-12-13 12:59:45.791952709 +0200
++++ kernel/arch/arm/mach-pxa/include/mach/pxa3xx_pm.h 2009-12-12 16:09:26.462949527 +0200
+@@ -0,0 +1,530 @@
++/*
++ * Monahans Power Management Routines
++ *
++ * Copyright (C) 2004, Intel Corporation(chao.xie@intel.com).
++ *
++ * This software program is licensed subject to the GNU General Public License
++ * (GPL).Version 2,June 1991, available at http://www.fsf.org/copyleft/gpl.html
++ *
++ *(C) Copyright 2006 Marvell International Ltd.
++ * All Rights Reserved
++ */
++
++#ifndef __PXA3xx_PM_H__
++#define __PXA3xx_PM_H__
++
++#include <asm/types.h>
++
++/* clock manager registers */
++#define ACCR_OFF 0x00
++#define ACSR_OFF 0x04
++#define AICSR_OFF 0x08
++#define D0CKEN_A_OFF 0x0c
++#define D0CKEN_B_OFF 0x10
++#define AC97_DIV_OFF 0x14
++#define OSCC_OFF 0x10000
++
++/* service power management uinit */
++#define PSR_OFF 0x004
++#define PSPR_OFF 0x008
++#define PCFR_OFF 0x00C
++#define PWER_OFF 0x010
++#define PWSR_OFF 0x014
++#define PECR_OFF 0x018
++#define CSER_OFF 0x01C
++#define DCDCSR_OFF 0x080
++#define AVCR_OFF 0x094
++#define SVCR_OFF 0x098
++#define CVCR_OFF 0x09C
++#define PSBR_OFF 0x0A0
++#define PVCR_OFF 0x100
++#if defined(CONFIG_CPU_PXA935)
++#define SDCR_OFF 0x08C
++#endif
++
++/* slave power management unit */
++#define ASCR_OFF 0x00
++#define ARSR_OFF 0x04
++#define AD3ER_OFF 0x08
++#define AD3SR_OFF 0x0c
++#define AD2D0ER_OFF 0x10
++#define AD2D0SR_OFF 0x14
++#define AD2D1ER_OFF 0x18
++#define AD2D1SR_OFF 0x1c
++#define AD1D0ER_OFF 0x20
++#define AD1D0SR_OFF 0x24
++#define ASDCNT_OFF 0x28
++#define AGENP_OFF 0x2c
++#define AD3R_OFF 0x30
++#define AD2R_OFF 0x34
++#define AD1R_OFF 0x38
++
++/* dynamic memory controller registers */
++#define MDCNFG_OFF 0x0000
++#define MDREFR_OFF 0x0004
++#define FLYCNFG_OFF 0x0020
++#define MDMRS_OFF 0x0040
++#define DDR_SCAL_OFF 0x0050
++#define DDR_HCAL_OFF 0x0060
++#define DDR_WCAL_OFF 0x0068
++#define DMCIER_OFF 0x0070
++#define DMCISR_OFF 0x0078
++#define DMCISR2_OFF 0x007C
++#define DDR_DLS_OFF 0x0080
++#define EMPI_OFF 0x0090
++#define RCOMP_OFF 0x0100
++#define PAD_MA_OFF 0x0110
++#define PAD_MDMSB_OFF 0x0114
++#define PAD_MDLSB_OFF 0x0118
++#define PAD_SDRAM_OFF 0x011C
++#define PAD_SDCLK_OFF 0x0120
++#define PAD_SDCS_OFF 0x0124
++#define PAD_SMEM_OFF 0x0128
++#define PAD_SCLK_OFF 0x012C
++
++/* static memory controller registers */
++#define MSC0_OFF 0x0008
++#define MSC1_OFF 0x000C
++#define MECR_OFF 0x0014
++#define SXCNFG_OFF 0x001C
++#define MCMEM0_OFF 0x0028
++#define MCATT0_OFF 0x0030
++#define MCIO0_OFF 0x0038
++#define MEMCLKCFG_OFF 0x0068
++#define CSADRCFG0_OFF 0x0080
++#define CSADRCFG1_OFF 0x0084
++#define CSADRCFG2_OFF 0x0088
++#define CSADRCFG3_OFF 0x008C
++#define CSADRCFG_P_OFF 0x0090
++#define CSMSADRCFG_OFF 0x00A0
++
++/* OS Timer address space */
++#define OST_START 0x40a00000
++#define OST_END 0x40a000df
++
++/* System Bus Arbiter address space */
++#define ARB_START 0x4600fe00
++#define ARB_END 0x4600fe07
++
++/* Registers offset within ARB space */
++#define ARBCTL1_OFF 0x0000
++#define ARBCTL2_OFF 0x0004
++
++/* Dynamic memory controll address space */
++#define DMC_START 0x48100000
++#define DMC_END 0x48100fff
++
++/* static memory controll address space */
++#define SMC_START 0x4a000000
++#define SMC_END 0x4a0000ff
++
++/* Power Management Unit address space */
++#define PM_START 0x40f50000
++#define PM_END 0x40f5018f
++
++/* Bits definition for Clock Control Register */
++#define ACCR_PCCE (1 << 11)
++
++#define ACSR_XPLCK (1 << 29)
++#define ACSR_SPLCK (1 << 28)
++
++#define AICSR_PCIE (1 << 4)
++#define AICSR_TCIE (1 << 2)
++#define AICSR_FCIE (1 << 0)
++
++/* Bits definition for RTC Register */
++#define RTSR_PICE (1 << 15)
++#define RTSR_PIALE (1 << 14)
++
++/* Bits definition for Power Control Register */
++#define ASCR_RDH (1 << 31)
++#define ASCR_D1S (1 << 2)
++#define ASCR_D2S (1 << 1)
++#define ASCR_D3S (1 << 0)
++#define ASCR_MASK (ASCR_D1S | ASCR_D2S | ASCR_D3S)
++#define PSR_MASK 0x07
++#define PCFR_L1DIS (1 << 13)
++#define PCFR_L0EN (1 << 12)
++#define PECR_E1IS (1 << 31)
++#define PECR_E1IE (1 << 30)
++#define PECR_E0IS (1 << 29)
++#define PECR_E0IE (1 << 28)
++#define PECR_DIR1 (1 << 5)
++#define PECR_DIR0 (1 << 4)
++
++/* Bits definition for Oscillator Configuration Register */
++#define OSCC_GPRM (1 << 18) /* GB PLL Request Mask */
++#define OSCC_GPLS (1 << 17) /* GB PLL Lock Status */
++
++/* Bits definition for Application Subsystem General Purpose Register */
++#define AGENP_GBPLL_CTRL (1 << 29)
++#define AGENP_GBPLL_DATA (1 << 28) /* Turn on/off GB PLL */
++#define AGENP_SAVE_WK (1 << 2) /* Save wakeup */
++
++/* Registers offset within ARB space */
++#define BPB_START 0x42300000
++#define BPB_END 0x4230004B
++
++/* GPIO Wakeup Status Register */
++#define GWSR(x) ((x << 2) + 0x38)
++#define GWSR1 0x3C
++#define GWSR2 0x40
++#define GWSR3 0x44
++#define GWSR4 0x48
++
++/* bits definitions */
++#define ASCR_MTS_OFFSET 12
++#define ASCR_MTS_S_OFFSET 8
++
++#define ACSR_SPLCK_OFFSET 28
++#define ACSR_XPLCK_OFFSET 29
++
++#define ACCR_XL_OFFSET 0
++#define ACCR_XN_OFFSET 8
++#define ACCR_DMCFS_OFFSET 12
++#define ACCR_HSS_OFFSET 14
++#define ACCR_XSPCLK_OFFSET 16
++#define ACCR_SFLFS_OFFSET 18
++#define ACCR_SMCFS_OFFSET 23
++#define ACCR_D0CS_OFFSET 26
++#define ACCR_VAUFS_OFFSET 28
++#define ACCR_SPDIS_OFFSET 30
++#define ACCR_XPDIS_OFFSET 31
++
++#define ACSR_VAUFS_OFFSET 21
++
++#define ACSR_VAUFS_MASK (0x03 << ACSR_VAUFS_OFFSET)
++
++#define MEMCLKCFG_EMPI_OFFSET 0
++#define MEMCLKCFG_DF_OFFSET 16
++
++#define HCAL_HCEN_OFFSET 31
++
++#define MDCNFG_HWNOPHD_OFFSET 28
++#define MDCNFG_HWFREQ_OFFSET 29
++#define MDCNFG_DMCEN_OFFSET 30
++#define MDCNFG_DMAP_OFFSET 31
++
++/* mode save flags */
++#define PM_MODE_SAVE_FLAG_SYS 0x1
++#define PM_MODE_SAVE_FLAG_IRQ 0x2
++#define PM_MODE_SAVE_FLAG_FIQ 0x4
++#define PM_MODE_SAVE_FLAG_ABT 0x8
++#define PM_MODE_SAVE_FLAG_UND 0x10
++#define PM_MODE_SAVE_FLAG_SVC 0x20
++
++/* value for PWRMODE register */
++#define PXA3xx_PM_S2D3C4 0x06
++#define PXA3xx_PM_S0D2C2 0x03
++#define PXA3xx_PM_S3D4C4 0x07
++#define PXA3xx_PM_S0D1C2 0x02
++#define PXA3xx_PM_S0D0C1 0x01
++
++/* CPSR Processor constants */
++#define CPSR_Mode_MASK (0x0000001F)
++#define CPSR_Mode_USR (0x10)
++#define CPSR_Mode_FIQ (0x11)
++#define CPSR_Mode_IRQ (0x12)
++#define CPSR_Mode_SVC (0x13)
++#define CPSR_Mode_ABT (0x17)
++#define CPSR_Mode_UND (0x1B)
++#define CPSR_Mode_SYS (0x1F)
++#define CPSR_I_Bit (0x80)
++#define CPSR_F_Bit (0x40)
++
++
++/****************************************************************************/
++#define PXA3xx_PM_WE_EXTERNAL0 (0x1UL << 0)
++#define PXA3xx_PM_WE_EXTERNAL1 (0x1UL << 1)
++#define PXA3xx_PM_WE_GENERIC(x) (0x1UL << (x + 2))
++#define PXA3xx_PM_WE_DKEY (0x1UL << 2)
++#define PXA3xx_PM_WE_DKEY1 (0x1UL << 3)
++#define PXA3xx_PM_WE_BTUART (0x1UL << 4)
++#define PXA3xx_PM_WE_PMIC (0x1UL << 5)
++#define PXA3xx_PM_WE_NDINT (0x1UL << 6)
++#define PXA3xx_PM_WE_MMC1 (0x1UL << 7)
++#define PXA3xx_PM_WE_MMC2 (0x1UL << 8)
++#define PXA3xx_PM_WE_SSP (0x1UL << 9)
++#define PXA3xx_PM_WE_SSP4 (0x1UL << 10)
++#define PXA3xx_PM_WE_UART1 (0x1UL << 11)
++#define PXA3xx_PM_WE_CI2C (0x1UL << 12)
++#define PXA3xx_PM_WE_SSP2 (0x1UL << 13)
++#define PXA3xx_PM_WE_WDT (0x1UL << 14)
++#define PXA3xx_PM_WE_GPIO (0x1UL << 15)
++#define PXA3xx_PM_WE_OTG (0x1UL << 16)
++#define PXA3xx_PM_WE_INTC (0x1UL << 17)
++#define PXA3xx_PM_WE_MLCD (0x1UL << 18)
++#define PXA3xx_PM_WE_USIM0 (0x1UL << 19)
++#define PXA3xx_PM_WE_USIM1 (0x1UL << 20)
++#define PXA3xx_PM_WE_MKEY (0x1UL << 21)
++#define PXA3xx_PM_WE_MUX2 (0x1UL << 22)
++#define PXA3xx_PM_WE_MUX3 (0x1UL << 23)
++#define PXA3xx_PM_WE_MSL0 (0x1UL << 24)
++#define PXA3xx_PM_WE_RESERVE1 (0x1UL << 25)
++#define PXA3xx_PM_WE_USB2 (0x1UL << 26)
++#define PXA3xx_PM_WE_DMC (0x1UL << 27)
++#define PXA3xx_PM_WE_USBH (0x1UL << 28)
++#define PXA3xx_PM_WE_TSI (0x1UL << 29)
++#define PXA3xx_PM_WE_OST (0x1UL << 30)
++#define PXA3xx_PM_WE_RTC (0x1UL << 31)
++
++
++#define PWSR_EDR0 (0x1 << 0)
++#define PWSR_EDR1 (0x1 << 1)
++#define PWSR_EDF0 (0x1 << 2)
++#define PWSR_EDF1 (0x1 << 3)
++#define PWSR_EERTC (0x1 << 31)
++
++#define PWER_WER0 (0x1 << 0)
++#define PWER_WER1 (0x1 << 1)
++#define PWER_WEF0 (0x1 << 2)
++#define PWER_WEF1 (0x1 << 3)
++#define PWER_WERTC (0x1 << 31)
++
++#define WORD_SIZE 4
++
++/* the position of each data memeber */
++#define SleepState_begin 0x0
++#define SleepState_checksum 0x0
++#define SleepState_wordCount (SleepState_checksum + WORD_SIZE)
++#define SleepState_areaAddress (SleepState_wordCount + WORD_SIZE)
++#define SleepState_modeSaveFlags (SleepState_areaAddress + WORD_SIZE)
++
++/* save ARM registers */
++#define SleepState_ENTRY_REGS (SleepState_modeSaveFlags + WORD_SIZE)
++#define SleepState_ENTRY_CPSR (SleepState_ENTRY_REGS)
++#define SleepState_ENTRY_SPSR (SleepState_ENTRY_CPSR + WORD_SIZE)
++#define SleepState_ENTRY_R0 (SleepState_ENTRY_SPSR + WORD_SIZE)
++#define SleepState_ENTRY_R1 (SleepState_ENTRY_R0 + WORD_SIZE)
++#define SleepState_SYS_REGS (SleepState_ENTRY_REGS + 17*WORD_SIZE)
++#define SleepState_FIQ_REGS (SleepState_SYS_REGS + 2*WORD_SIZE)
++#define SleepState_IRQ_REGS (SleepState_FIQ_REGS + 8*WORD_SIZE)
++#define SleepState_ABT_REGS (SleepState_IRQ_REGS + 3*WORD_SIZE)
++#define SleepState_UND_REGS (SleepState_ABT_REGS + 3*WORD_SIZE)
++#define SleepState_SVC_REGS (SleepState_UND_REGS + 3*WORD_SIZE)
++
++/* save MMU settings */
++#define SleepState_Cp15_ACR_MMU (SleepState_SVC_REGS + 3*WORD_SIZE)
++#define SleepState_Cp15_AUXCR_MMU (SleepState_Cp15_ACR_MMU + WORD_SIZE)
++#define SleepState_Cp15_TTBR_MMU (SleepState_Cp15_AUXCR_MMU + WORD_SIZE)
++#define SleepState_Cp15_DACR_MMU (SleepState_Cp15_TTBR_MMU + WORD_SIZE)
++#define SleepState_Cp15_PID_MMU (SleepState_Cp15_DACR_MMU + WORD_SIZE)
++#define SleepState_Cp15_CPAR (SleepState_Cp15_PID_MMU + WORD_SIZE)
++
++#define SleepState_extendedChecksumByteCount (SleepState_Cp15_CPAR + WORD_SIZE)
++#define SleepState_psprAddress (SleepState_extendedChecksumByteCount + WORD_SIZE)
++#define SleepState_flushFunc (SleepState_psprAddress + WORD_SIZE)
++#define SleepState_end (SleepState_flushFunc + WORD_SIZE)
++#define SleepState_size (SleepState_end - SleepState_begin)
++
++#ifndef __ASSEMBLY__
++
++typedef struct {
++ unsigned long value;
++ struct {
++ unsigned ext0 : 1;
++ unsigned ext1 : 1;
++ unsigned uart1 : 1;
++ unsigned uart2 : 1;
++ unsigned uart3 : 1;
++ unsigned wifi : 1; /* wifi use UART1's pin as wakeup source */
++ unsigned mmc1_cd : 1;
++ unsigned mmc2_cd : 1;
++ unsigned mmc3_cd : 1;
++ unsigned mmc1_dat1 : 1;
++ unsigned mmc2_dat1 : 1;
++ unsigned mmc3_dat1 : 1;
++ unsigned mkey : 1;
++ unsigned usbotg : 1;
++ unsigned mlcd : 1;
++ unsigned dkey : 1;
++ unsigned usb2 : 1; /* USB 2.0 client */
++ unsigned usbh : 1; /* USB Host Port 1 */
++ unsigned msl : 1;
++ unsigned tsi : 1;
++ unsigned ost : 1;
++ unsigned rtc : 1;
++ unsigned eth : 1;
++ unsigned onkey : 1; /* pmic wakeup resources */
++ unsigned usbc : 1; /* USB client for cable and charger */
++ unsigned bat_full : 1; /* battery full */
++ unsigned bat_low : 1; /* battery low */
++ unsigned bt : 1; /* bluetooth use STRXD pin */
++ unsigned cmwdt : 1;
++ unsigned psensor : 1; /* psensor */
++ } bits;
++} pm_wakeup_src_t;
++
++
++#ifdef __KERNEL__
++struct intc_regs {
++ unsigned int iccr;
++ unsigned int ipr[32];
++ unsigned int ipr2[21];
++ unsigned int icmr;
++ unsigned int icmr2;
++ unsigned int iclr;
++ unsigned int iclr2;
++};
++
++struct clock_regs {
++ unsigned int aicsr;
++ unsigned int ckena;
++ unsigned int ckenb;
++ unsigned int oscc;
++};
++
++struct ost_regs {
++ unsigned int ossr;
++ unsigned int oier;
++ unsigned int oscr;
++ unsigned int oscr4;
++ unsigned int osmr4;
++ unsigned int omcr4;
++};
++
++struct rtc_regs {
++ unsigned int rtsr;
++ unsigned int piar;
++};
++
++struct smc_regs {
++ unsigned char __iomem *membase;
++ unsigned int msc0;
++ unsigned int msc1;
++ unsigned int mecr;
++ unsigned int sxcnfg;
++ unsigned int mcmem0;
++ unsigned int mcatt0;
++ unsigned int mcio0;
++ unsigned int memclkcfg;
++ unsigned int cscfg0;
++ unsigned int cscfg1;
++ unsigned int cscfg2;
++ unsigned int cscfg3;
++ unsigned int cscfg_p;
++ unsigned int csmscfg;
++};
++
++struct arb_regs {
++ unsigned char __iomem *membase;
++ unsigned int ctl1;
++ unsigned int ctl2;
++};
++
++struct pmu_regs {
++ unsigned int pcfr;
++ unsigned int pecr;
++ unsigned int pvcr;
++};
++
++#define MAX_MFP_PINS 419
++
++struct mfp_regs {
++ unsigned int mfp[MAX_MFP_PINS];
++};
++
++struct gpio_regs {
++ unsigned int gplr0;
++ unsigned int gplr1;
++ unsigned int gplr2;
++ unsigned int gplr3;
++ unsigned int gpdr0;
++ unsigned int gpdr1;
++ unsigned int gpdr2;
++ unsigned int gpdr3;
++ unsigned int grer0;
++ unsigned int grer1;
++ unsigned int grer2;
++ unsigned int grer3;
++ unsigned int gfer0;
++ unsigned int gfer1;
++ unsigned int gfer2;
++ unsigned int gfer3;
++};
++
++struct pm_save_data {
++ u32 checksum;
++ u32 wordCount;
++ u32 areaAddress;
++ u32 modeSaveFlags;
++ /* current mode registers cpsr, sprsr, r0-r12, lr, sp */
++ u32 ENTRY_REGS[17];
++ /* SYS mode registers:sp, lr */
++ u32 SYS_REGS[2];
++ /* FIQ mode registers:spsr, r8-r12, sp, lr */
++ u32 FIQ_REGS[8];
++ /* IRQ mode registers:spsr, sp, lr */
++ u32 IRQ_REGS[3];
++ /* ABT mode registers:spsr, sp, lr */
++ u32 ABT_REGS[3];
++ /* UND mode registers:spsr, sp, lr */
++ u32 UND_REGS[3];
++ /* SVC mode registers:spsr, sp, lr */
++ u32 SVC_REGS[3];
++ /* MMU registers */
++ u32 CP15_ACR_MMU;
++ u32 CP15_AUXCR_MMU;
++ u32 CP15_TTBR_MMU;
++ u32 CP15_DACR_MMU;
++ u32 CP15_PID_MMU;
++ u32 CP15_CPAR;
++
++ u32 extendedChecksumByteCount;
++ u32 psprAddress;
++ void (*flushFunc)(void);
++ /* the parameter is the reserved bytes from 0x5c010000 */
++ /* It returns the physical address of initlization code in SRAM */
++};
++
++struct pxa3xx_pm_regs {
++ /* It's used to save core registers. */
++ struct pm_save_data pm_data;
++ struct mfp_regs mfp;
++ struct gpio_regs gpio;
++ struct intc_regs intc;
++ struct clock_regs clock;
++ struct ost_regs ost;
++ struct rtc_regs rtc;
++ struct smc_regs smc;
++ struct arb_regs arb;
++ struct pmu_regs pmu;
++ /* It's the virtual address of ISRAM that can be accessed by kernel.
++ */
++ void *sram_map;
++ /* It's used to save ISRAM data. */
++ void *sram;
++ /* It's used to save OBM that loaded from NAND flash. */
++ void *obm;
++ /* It's the address of DDR that stores key information.
++ * Two words are used from the address.
++ */
++ void *data_pool;
++ unsigned int word0;
++ unsigned int word1;
++};
++
++extern pm_wakeup_src_t wakeup_src;
++
++struct pxa3xx_peripheral_wakeup_ops {
++ int (*init)(pm_wakeup_src_t *src);
++ int (*query)(unsigned int reg, pm_wakeup_src_t *src);
++ int (*ext)(pm_wakeup_src_t src, int enable);
++ int (*key)(pm_wakeup_src_t src, int enable);
++ int (*mmc)(pm_wakeup_src_t src, int enable);
++ int (*uart)(pm_wakeup_src_t src, int enable);
++ int (*eth)(pm_wakeup_src_t src, int enable);
++ int (*tsi)(pm_wakeup_src_t src, int enable);
++ int (*usb)(pm_wakeup_src_t src, int enable);
++ int (*cmwdt)(pm_wakeup_src_t src, int enable);
++ int (*psensor)(pm_wakeup_src_t src, int enable);
++};
++
++extern int pxa3xx_wakeup_register(struct pxa3xx_peripheral_wakeup_ops *);
++extern void pxa3xx_lock_suspend(void);
++extern void pxa3xx_unlock_suspend(void);
++extern void pxa3xx_lock_suspend_cancel(void);
++#endif
++#endif
++
++#endif
+diff -ur linux-2.6.32/arch/arm/mach-pxa/include/mach/pxa3xx_pmic.h kernel/arch/arm/mach-pxa/include/mach/pxa3xx_pmic.h
+--- linux-2.6.32/arch/arm/mach-pxa/include/mach/pxa3xx_pmic.h 2009-12-13 12:59:52.402368878 +0200
++++ kernel/arch/arm/mach-pxa/include/mach/pxa3xx_pmic.h 2009-12-12 16:09:26.462949527 +0200
+@@ -0,0 +1,194 @@
++#ifndef __PMIC_H__
++#define __PMIC_H__
++
++#include <linux/i2c.h>
++#include <linux/interrupt.h>
++
++/* this enum should be consistent with micco_power_module[]
++ * in arch/arm/mach-pxa/xxx(platform).c */
++enum {
++ /* Set command > 0xFFFF0000 to avoid wrong
++ * parameter is used for pmic_set_voltage.
++ */
++ VCC_CORE = 0xFFFF0000,
++ VCC_SRAM,
++ VCC_MVT,
++ VCC_3V_APPS,
++ VCC_SDIO,
++ VCC_CAMERA_ANA,
++ VCC_USB,
++ VCC_LCD,
++ VCC_TSI,
++ VCC_CAMERA_IO,
++ VCC_1P8V,
++ VCC_MEM,
++ HDMI_TX,
++ TECH_3V,
++ TECH_1P8V,
++
++ /* add your command here */
++ VCC_BT,
++ VCC_JOGBALL,
++ VCC_BTWIFFSHARE,
++ VCC_LCD_IO,
++ VCC_TOUCHKEY,
++ /* max command */
++ MAX_CMD,
++};
++
++enum {
++ LED_BACKLIGHT = 0xFFFF0000,
++ LED_VIBRATOR,
++ LED_FLASH,
++ LED_GREEN,
++ LED_RED,
++ LED_BLUE,
++ LED_KEYPAD,
++ LED_MAX_CMD,
++};
++
++#define PMIC_EVENT_EXTON (1 << 0)
++#define PMIC_EVENT_VBUS (1 << 1)
++#define PMIC_EVENT_USB (PMIC_EVENT_EXTON | PMIC_EVENT_VBUS)
++
++#define PMIC_EVENT_TOUCH (1 << 2)
++
++#define PMIC_EVENT_OTGCP_IOVER (1 << 3)
++
++#define PMIC_EVENT_TBAT (1 << 4)
++#define PMIC_EVENT_REV_IOVER (1 << 5)
++#define PMIC_EVENT_IOVER (1 << 6)
++#define PMIC_EVENT_CHDET (1 << 7)
++#define PMIC_EVENT_VBATMON (1 << 8)
++#define PMIC_EVENT_ONKEY (1 << 9)
++
++#ifdef CONFIG_MICCO_HEADSET_DETECT
++#define PMIC_EVENT_HEADSET (1 << 10)
++#define PMIC_EVENT_HOOKSWITCH (1 << 11)
++#endif
++#define PMIC_EVENT_CH_CCTO (1 << 12)
++#define PMIC_EVENT_CH_TCTO (1 << 13)
++
++#define PMIC_EVENT_CHARGER (PMIC_EVENT_TBAT | \
++ PMIC_EVENT_REV_IOVER | \
++ PMIC_EVENT_IOVER | \
++ PMIC_EVENT_CHDET | \
++ PMIC_EVENT_CH_CCTO | \
++ PMIC_EVENT_CH_TCTO | \
++ PMIC_EVENT_VBATMON)
++
++
++#define PMIC_EVENT_USB_IN (1 << 0)
++#define PMIC_EVENT_AC_IN (1 << 1)
++#define PMIC_EVENT_CABLE_OUT (1 << 2)
++#define PMIC_EVENT_CABLE_DETECT (PMIC_EVENT_USB_IN | \
++ PMIC_EVENT_AC_IN | \
++ PMIC_EVENT_CABLE_OUT)
++
++struct pmic_ops {
++ int (*get_voltage)(int cmd, int *pmv);
++ int (*set_voltage)(int cmd, int mv);
++ int (*enable_voltage)(int cmd, int enable);
++ int (*check_voltage)(int cmd);
++ int (*enable_led)(int cmd, int enable);
++ int (*enable_event)(unsigned long, int enable);
++ int (*is_vbus_assert)(void);
++ int (*is_avbusvld)(void);
++ int (*is_asessvld)(void);
++ int (*is_bsessvld)(void);
++ int (*is_srp_ready)(void);
++
++ int (*set_pump)(int enable);
++ int (*set_vbus_supply)(int enable, int srp);
++ int (*set_usbotg_a_mask)(void);
++ int (*set_usbotg_b_mask)(void);
++ int (*is_usbpump_chg)(void);
++
++ int (*is_onkey_assert)(void);
++ int (*is_hookswitch_assert)(void);
++ int (*init)(struct device *dev);
++ int (*deinit)(struct device *dev);
++
++ struct list_head list; /* callback list */
++ spinlock_t cb_lock; /* spinlock for callback list */
++};
++
++struct pmic_callback {
++ unsigned long event; /* the event which callback care about */
++ void (*func)(unsigned long event); /*callback function */
++ struct list_head list;
++};
++
++struct pxa3xx_pmic_regs {
++ unsigned int data:8;
++ unsigned int hit:1;
++ unsigned int mask:1;
++ unsigned int inited:1;
++ unsigned int cacheable:1;
++};
++
++extern void start_calc_time(void);
++extern void end_calc_time(void);
++
++extern int pxa3xx_pmic_write(u8 reg, u8 val);
++extern int pxa3xx_pmic_read(u8 reg, u8 *pval);
++
++extern void pmic_set_ops(struct pmic_ops *ops);
++
++extern int pmic_callback_register(unsigned long event,
++ void (*func)(unsigned long event));
++extern int pmic_callback_unregister(unsigned long event,
++ void (*func)(unsigned long event));
++
++extern int pmic_event_handle(unsigned long event);
++
++extern int pxa3xx_pmic_get_voltage(int cmd, int *pval);
++extern int pxa3xx_pmic_set_voltage(int cmd, int val);
++
++extern int pxa3xx_pmic_check_voltage(int cmd);
++extern int pxa3xx_pmic_enable_voltage(int cmd, int enable);
++extern int pxa3xx_pmic_enable_led(int cmd, int enable);
++/* Check whether USB VBUS is asserted */
++extern int pxa3xx_pmic_is_vbus_assert(void);
++/* Check whether USB VBUS has gone above A-device VBUS valid threshold
++ * Min: 4.4V Max: N/A
++ */
++extern int pxa3xx_pmic_is_avbusvld(void);
++/* Check whether VBUS has gone above A-device Session Valid threshold
++ * Min: 0.8V Max: 2.0V
++ */
++extern int pxa3xx_pmic_is_asessvld(void);
++/* Check whether VBUS has gone above B-device Session Valid threshold
++ * Min: 0.8V Max: 4.0V
++ */
++extern int pxa3xx_pmic_is_bsessvld(void);
++/* Check whether VBUS has gone above B-device Session End threshold
++ * Min: 0.2V Max: 0.8V
++ */
++extern int pxa3xx_pmic_is_srp_ready(void);
++/* Initialize the USB PUMP */
++extern int pxa3xx_pmic_set_pump(int enable);
++/* Check the events change of PMIC */
++extern int pxa3xx_pmic_event_change(void);
++/* enable/disable VBUS supply */
++extern int pxa3xx_pmic_set_vbus_supply(int enable, int srp);
++/* Set events mask for USB A-device
++ * A-device Sessino Valid event
++ * A-device VBUS Valid event
++ */
++extern int pxa3xx_pmic_set_usbotg_a_mask(void);
++/* Set events mask for USB B-device
++ * B-device Session Valid event
++ * B-device Session end event
++ */
++extern int pxa3xx_pmic_set_usbotg_b_mask(void);
++
++extern int pxa3xx_pmic_is_onkey_assert(void);
++
++extern int pxa3xx_pmic_is_hookswitch_assert(void);
++
++extern int px3xx_pmic_event_enable(unsigned long event, int enable);
++
++
++#endif
++
+diff -ur linux-2.6.32/arch/arm/mach-pxa/include/mach/sgh_msm6k.h kernel/arch/arm/mach-pxa/include/mach/sgh_msm6k.h
+--- linux-2.6.32/arch/arm/mach-pxa/include/mach/sgh_msm6k.h 2009-12-13 12:59:59.879036795 +0200
++++ kernel/arch/arm/mach-pxa/include/mach/sgh_msm6k.h 2009-12-12 16:09:26.466285980 +0200
+@@ -0,0 +1,35 @@
++#ifndef __SGH_MSM6K__
++#define __SGH_MSM6K__
++
++#define CH_RPC 0
++
++enum RPC_PKT_READ_TYPE {
++ RPC_INDICATOR=1,
++ RPC_RESPONSE,
++ RPC_NOTIFICATION,
++};
++
++enum RPC_PKT_WRITE_TYPE {
++ RPC_EXECUTE=1,
++ RPC_GET,
++ RPC_SET,
++ RPC_CFRM,
++};
++
++#define RPC_GSM_CALL_INCOMING 0x0202
++#define RPC_GSM_CALL_STATUS 0x0205
++
++#define RPC_GSM_SEC_PIN_STATUS 0x0501
++#define RPC_GSM_SEC_PHONE_LOCK 0x0502
++#define RPC_GSM_SEC_LOCK_INFOMATION 0x0508
++
++#define RPC_GSM_SS_INFO 0x0c06
++
++extern void smd_init(void);
++extern int smd_read(int ch, void* buf, int len);
++extern int smd_write(int ch, void *_buf, int len);
++extern void smd_phone_power(int on);
++
++extern void rpc_init(void);
++
++#endif
+diff -ur linux-2.6.32/arch/arm/mach-pxa/include/mach/xscale-pmu.h kernel/arch/arm/mach-pxa/include/mach/xscale-pmu.h
+--- linux-2.6.32/arch/arm/mach-pxa/include/mach/xscale-pmu.h 2009-12-13 13:00:05.321944499 +0200
++++ kernel/arch/arm/mach-pxa/include/mach/xscale-pmu.h 2009-12-12 16:09:26.469613568 +0200
+@@ -0,0 +1,66 @@
++/*
++ * This program is free software; you can redistribute it and/or modify it
++ * under the terms of the GNU General Public License as published by the
++ * Free Software Foundation; either version 2 of the License, or (at your
++ * option) any later version.
++ *
++ *
++ * (C) Copyright 2006 Marvell International Ltd.
++ * All Rights Reserved
++ */
++
++#ifndef _XSCALE_PMU_H_
++#define _XSCALE_PMU_H_
++
++#include <linux/types.h>
++
++/*
++ * Different types of events that can be counted by the XScale PMU
++ */
++#define EVT_ICACHE_MISS 0x00
++#define EVT_ICACHE_NO_DELIVER 0x01
++#define EVT_DATA_STALL 0x02
++#define EVT_ITLB_MISS 0x03
++#define EVT_DTLB_MISS 0x04
++#define EVT_BRANCH 0x05
++#define EVT_BRANCH_MISS 0x06
++#define EVT_INSTRUCTION 0x07
++#define EVT_DCACHE_FULL_STALL 0x08
++#define EVT_DCACHE_FULL_STALL_CONTIG 0x09
++#define EVT_DCACHE_ACCESS 0x0A
++#define EVT_DCACHE_MISS 0x0B
++#define EVT_DCACE_WRITE_BACK 0x0C
++#define EVT_PC_CHANGED 0x0D
++#define EVT_BCU_REQUEST 0x10
++#define EVT_BCU_FULL 0x11
++#define EVT_BCU_DRAIN 0x12
++#define EVT_BCU_ECC_NO_ELOG 0x14
++#define EVT_BCU_1_BIT_ERR 0x15
++#define EVT_RMW 0x16
++
++struct pmu_results
++{
++ u32 ccnt_of;
++ u32 ccnt; /* Clock Counter Register */
++ u32 pmn0_of;
++ u32 pmn0; /* Performance Counter Register 0 */
++ u32 pmn1_of;
++ u32 pmn1; /* Performance Counter Register 1 */
++ u32 pmn2_of;
++ u32 pmn2; /* Performance Counter Register 2 */
++ u32 pmn3_of;
++ u32 pmn3; /* Performance Counter Register 3 */
++};
++
++#ifdef __KERNEL__
++
++extern struct pmu_results results;
++
++int pmu_claim(void); /* Claim PMU for usage */
++int pmu_start(u32, u32, u32, u32); /* Start PMU execution */
++int pmu_stop(struct pmu_results *); /* Stop perfmon unit */
++int pmu_release(int); /* Release PMU */
++#endif
++
++#endif /* _XSCALE_PMU_H_ */
++
+diff -ur linux-2.6.32/arch/arm/mach-pxa/pmu.c kernel/arch/arm/mach-pxa/pmu.c
+--- linux-2.6.32/arch/arm/mach-pxa/pmu.c 2009-12-13 13:00:12.875282685 +0200
++++ kernel/arch/arm/mach-pxa/pmu.c 2009-12-12 16:09:26.479614367 +0200
+@@ -0,0 +1,183 @@
++/*
++ * "This software program is available to you under a choice of one of two
++ * licenses. You may choose to be licensed under either the GNU General Public
++ * License (GPL) Version 2, June 1991, available at
++ * http://www.fsf.org/copyleft/gpl.html, or the BSD License, the text of
++ * which follows:
++ *
++ * Copyright (c) 1996-2005, Intel Corporation. All rights reserved.
++ *
++ * Redistribution and use in source and binary forms, with or without
++ * modification, are permitted provided that the following conditions are met:
++ *
++ * Redistributions of source code must retain the above copyright notice, this
++ * list of conditions and the following disclaimer.
++ *
++ * Redistributions in binary form must reproduce the above copyright notice, this
++ * list of conditions and the following disclaimer in the documentation and/or
++ * other materials provided with the distribution.
++ *
++ * Neither the name of the Intel Corporation ("Intel") nor the names of its
++ * contributors may be used to endorse or promote products derived from this
++ * software without specific prior written permission.
++ *
++ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
++ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
++ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
++ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
++ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
++ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
++ * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
++ * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
++ * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
++ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
++ */
++
++/*
++ * FILENAME: pmu.c
++ *
++ * CORE STEPPING:
++ *
++ * PURPOSE: contains all PMU C function.
++ *
++ * (C) Copyright 2006 Marvell International Ltd.
++ * All Rights Reserved
++ */
++
++#include <linux/kernel.h>
++#include <linux/module.h>
++#include <linux/init.h>
++#include <linux/platform_device.h>
++#include <mach/pmu.h>
++#include <asm/types.h>
++#include <mach/pxa3xx-regs.h>
++#include <mach/hardware.h>
++#include <asm/io.h>
++
++static struct pxa3xx_pmu_info *pmu_info;
++
++/*
++ * Select one event including PMU and PML envent for PMU counter
++ *
++ * @par
++ * This function selects one event including Manzano and Monahans event.
++ * When type is Monahans PML Event, it is Monahans PML Event Number OR
++ * PXA3xx_EVENT_MASK. Other words, when type is Manzano event, bit31 is
++ * zero. When type is Monahans PML Event, bit31 is one.
++ * @par
++ * We only use Monahans PML first four event selectors because manzano
++ * has only 4 counters and every selector can choose all PML events.
++ * We use 1:1 map from PMU counter to PML selector. So counter 0 use
++ * PML_SEL0, counter1 use PML_SEL1 and so on.
++ * @param
++ * counter PMU Counter Number. It must be between 0 and 3
++ * type PMU And PML type
++ * @return
++ * old event type before call this function.
++ * @remarks
++ * required kernel/supervisor mode
++ */
++int pmu_select_event(int counter, int type)
++{
++ u32 oldevent, value, pmuevent, shift;
++
++ if(counter < 0 || counter > 3) {
++ return PMU_EVENT_INVALIDATE;
++ }
++ shift = counter * 8;
++
++ value = pmu_read_reg((u32)PMU_EVTSEL);
++ pmuevent = (value >> shift) & 0xFF;
++
++ if (pmuevent >= PMU_EVENT_ASSP_0 && pmuevent <= PMU_EVENT_ASSP_3) {
++ oldevent = PXA3xx_EVENT_MASK |
++ (*(pmu_info->pmu_base + (counter << 2)));
++ } else {
++ oldevent = pmuevent;
++ }
++
++ if(type & PXA3xx_EVENT_MASK) {
++ /* PML Event */
++ value &= ~(0xFF << shift);
++ value |= (PMU_EVENT_ASSP_0 + counter) << shift;
++ *(pmu_info->pmu_base + (counter << 2)) =
++ type & (~PXA3xx_EVENT_MASK);
++ } else {
++ /* PMU Event */
++ value &= ~(0xFF << shift);
++ value |= (type & 0xFF) << shift;
++ }
++ pmu_write_reg((u32)PMU_EVTSEL, value);
++
++ return oldevent;
++}
++
++#ifdef CONFIG_PM
++static int pxa3xx_pmu_suspend(struct platform_device *pdev, pm_message_t state)
++{
++ return 0;
++}
++
++static int pxa3xx_pmu_resume(struct platform_device *pdev)
++{
++ return 0;
++}
++#else
++#define pxa3xx_pmu_suspend NULL
++#define pxa3xx_pmu_resume NULL
++#endif
++
++static int __init pxa3xx_pmu_probe(struct platform_device *pdev)
++{
++ struct resource *res;
++
++ pmu_info = kzalloc(sizeof(struct pxa3xx_pmu_info), GFP_KERNEL);
++
++ res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "pmu_regs");
++ if (!res) goto err;
++ pmu_info->pmu_base = ioremap(res->start, res->end - res->start + 1);
++ return 0;
++err:
++ printk("pxa3xx PMU init failed\n");
++ return -EIO;
++}
++
++static int pxa3xx_pmu_remove(struct platform_device *pdev)
++{
++ struct resource *res;
++
++ res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "pmu_regs");
++ if (!res) goto err;
++ iounmap(pmu_info->pmu_base);
++ kfree(pmu_info);
++ return 0;
++err:
++ printk("pxa3xx PMU remove failed\n");
++ return -EIO;
++}
++
++static struct platform_driver pxa3xx_pmu_driver = {
++ .driver = {
++ .name = "pxa3xx-pmu",
++ },
++ .probe = pxa3xx_pmu_probe,
++ .remove = pxa3xx_pmu_remove,
++#ifdef CONFIG_PM
++ .suspend = pxa3xx_pmu_suspend,
++ .resume = pxa3xx_pmu_resume,
++#endif
++};
++
++static int __init pxa3xx_pmu_init(void)
++{
++ return platform_driver_register(&pxa3xx_pmu_driver);
++}
++
++static void __exit pxa3xx_pmu_exit(void)
++{
++ platform_driver_unregister(&pxa3xx_pmu_driver);
++}
++
++module_init(pxa3xx_pmu_init);
++module_exit(pxa3xx_pmu_exit);
++
+diff -ur linux-2.6.32/arch/arm/mach-pxa/pmu_ll.S kernel/arch/arm/mach-pxa/pmu_ll.S
+--- linux-2.6.32/arch/arm/mach-pxa/pmu_ll.S 2009-12-13 13:00:17.648612716 +0200
++++ kernel/arch/arm/mach-pxa/pmu_ll.S 2009-12-12 16:09:26.479614367 +0200
+@@ -0,0 +1,204 @@
++@ "This software program is available to you under a choice of one of two
++@ licenses. You may choose to be licensed under either the GNU General Public
++@ License (GPL) Version 2, June 1991, available at
++@ http://www.fsf.org/copyleft/gpl.html, or the BSD License, the text of
++@ which follows:
++@
++@ Copyright (c) 1996-2005, Intel Corporation. All rights reserved.
++@
++@ Redistribution and use in source and binary forms, with or without
++@ modification, are permitted provided that the following conditions are met:
++@
++@ Redistributions of source code must retain the above copyright notice, this
++@ list of conditions and the following disclaimer.
++@
++@ Redistributions in binary form must reproduce the above copyright notice, this
++@ list of conditions and the following disclaimer in the documentation and/or
++@ other materials provided with the distribution.
++@
++@ Neither the name of the Intel Corporation ("Intel") nor the names of its
++@ contributors may be used to endorse or promote products derived from this
++@ software without specific prior written permission.
++@
++@ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
++@ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
++@ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
++@ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
++@ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
++@ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
++@ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
++@ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
++@ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
++@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE."
++@
++@ FILENAME: pmu_ll.S
++@
++@ PURPOSE: Provides low level PMU primitive functions written specifically for
++@ the Bulverde/Mainstone processor/platform. Specially design to fit
++@ into Intel VTUNE Architecture
++@
++@
++@ LAST MODIFIED: 10/31/02
++@******************************************************************************
++@
++@
++@ List of primitive functions in this source code include:
++@
++ .global pmu_read_reg
++ .global pmu_write_reg
++
++ .text
++
++@
++@ pmu_read_reg - Read the PMU Register
++@
++@ Description:
++@ This routine reads the designated PMU register via CoProcesser 14.
++@
++@ Input Parameters:
++@ r0 - arg1, PMU register number to read. Number between 0 to 8
++@ if r0 contains:
++@ 0 -> PMNC, PMU Control Register
++@ 1 -> CCNT, PMU Clock Counter
++@ 2 -> PMN0, PMU Count Register 0
++@ 3 -> PMN1, PMU Count Register 1
++@ 4 -> PMN2, PMU Count Register 2
++@ 5 -> PMN3, PMU Count Register 3
++@ 6 -> INTEN, PMU Interupt Enable Register
++@ 7 -> FLAG, PMU Overflow Flag Status Register
++@ 8 -> EVTSEL PMU Event Select Register
++@
++@ Returns:
++@ r0 - 32-bit value read from CoProcessor
++@
++@ Registers Modified:
++@ CoProcessor Register Modified: None
++@ General Purpose Registers Modified: r0
++@
++@ NOTE:
++@ Currently not support THUMB mode
++@ Error checking not included
++
++pmu_read_reg:
++
++ cmp r0, #8
++ addls pc, pc, r0, lsl #2
++ b RRet
++ b RdPMNC
++ b RdCCNT
++ b RdPMN0
++ b RdPMN1
++ b RdPMN2
++ b RdPMN3
++ b RdINTEN
++ b RdFLAG
++ b RdEVTSEL
++
++RdPMNC:
++ mrc p14, 0, r0, c0, c1, 0 @ Read PMNC
++ b RRet
++RdCCNT:
++ mrc p14, 0, r0, c1, c1, 0 @ Read CCNT
++ b RRet
++RdPMN0:
++ mrc p14, 0, r0, c0, c2, 0 @ Read PMN0
++ b RRet
++RdPMN1:
++ mrc p14, 0, r0, c1, c2, 0 @ Read PMN1
++ b RRet
++RdPMN2:
++ mrc p14, 0, r0, c2, c2, 0 @ Read PMN2
++ b RRet
++RdPMN3:
++ mrc p14, 0, r0, c3, c2, 0 @ Read PMN3
++ b RRet
++RdINTEN:
++ mrc p14, 0, r0, c4, c1, 0 @ Read INTEN
++ b RRet
++RdFLAG:
++ mrc p14, 0, r0, c5, c1, 0 @ Read FLAG
++ b RRet
++RdEVTSEL:
++ mrc p14, 0, r0, c8, c1, 0 @ Read EVTSEL
++
++RRet:
++ mov pc, lr @ return
++
++
++@
++@ pmu_write_reg - Writes to the PMU Register
++@
++@ Description:
++@ This routine writes to the designated PMU register via CoProcesser 14.
++@
++@ Input Parameters:
++@ r0 - arg1 - PMU register number to write
++@ r1 - arg2 - Value to write to PMU register
++@
++@ if r0 contains:
++@ 0 -> PMNC, PMU Control Register
++@ 1 -> CCNT, PMU Clock Counter
++@ 2 -> PMN0, PMU Count Register 0
++@ 3 -> PMN1, PMU Count Register 1
++@ 4 -> PMN2, PMU Count Register 2
++@ 5 -> PMN3, PMU Count Register 3
++@ 6 -> INTEN, PMU Interupt Enable Register
++@ 7 -> FLAG, PMU Overflow Flag Status Register
++@ 8 -> EVTSEL PMU Event Select Register
++@
++@ Returns:
++@ None
++@
++@ Registers Modified:
++@ CoProcessor Register Modified: PMU Register
++@ General Purpose Registers Modified: None
++@
++@NOTE:
++@ Currently not support THUMB mode
++@ Error checking not included
++
++pmu_write_reg:
++
++ cmp r0, #8
++ addls pc, pc, r0, lsl #2
++ b WRet
++ b WrPMNC
++ b WrCCNT
++ b WrPMN0
++ b WrPMN1
++ b WrPMN2
++ b WrPMN3
++ b WrINTEN
++ b WrFLAG
++ b WrEVTSEL
++
++WrPMNC:
++ mcr p14, 0, r1, c0, c1, 0 @ Write PMNC
++ b WRet
++WrCCNT:
++ mcr p14, 0, r1, c1, c1, 0 @ Write CCNT
++ b WRet
++WrPMN0:
++ mcr p14, 0, r1, c0, c2, 0 @ Write PMN0
++ b WRet
++WrPMN1:
++ mcr p14, 0, r1, c1, c2, 0 @ Write PMN1
++ b WRet
++WrPMN2:
++ mcr p14, 0, r1, c2, c2, 0 @ Write PMN2
++ b WRet
++WrPMN3:
++ mcr p14, 0, r1, c3, c2, 0 @ Write PMN3
++ b WRet
++WrINTEN:
++ mcr p14, 0, r1, c4, c1, 0 @ Write INTEN
++ b WRet
++WrFLAG:
++ mcr p14, 0, r1, c5, c1, 0 @ Write FLAG
++ b WRet
++WrEVTSEL:
++ mcr p14, 0, r1, c8, c1, 0 @ Write EVTSEL
++
++WRet:
++ mov pc, lr @ return
++
+diff -ur linux-2.6.32/arch/arm/mach-pxa/prm.c kernel/arch/arm/mach-pxa/prm.c
+--- linux-2.6.32/arch/arm/mach-pxa/prm.c 2009-12-13 13:00:22.645696759 +0200
++++ kernel/arch/arm/mach-pxa/prm.c 2009-12-12 16:09:26.479614367 +0200
+@@ -0,0 +1,1266 @@
++/*
++ * Monahans Profiler Resource Manager
++ *
++ * Copyright (C) 2004, Intel Corporation(chao.xie@intel.com).
++ *
++ * This software program is licensed subject to the GNU General Public License
++ * (GPL).Version 2,June 1991, available at http://www.fsf.org/copyleft/gpl.html
++ *
++ *(C) Copyright 2006 Marvell International Ltd.
++ * All Rights Reserved
++ */
++#include <linux/module.h>
++#include <linux/types.h>
++#include <linux/init.h>
++#include <linux/errno.h>
++#include <linux/sched.h>
++#include <asm/current.h>
++#include <linux/proc_fs.h>
++#include <linux/rwsem.h>
++#include <linux/interrupt.h>
++#include <mach/prm.h>
++#include <mach/pmu.h>
++#include <mach/dvfm.h>
++#include <mach/pxa3xx_dvfm.h>
++
++/*#define DEBUG
++ */
++
++#ifdef DEBUG
++#define DPRINTK(fmt,args...) \
++ do { printk(KERN_DEBUG "%s: " fmt, __FUNCTION__ , ## args); } while (0)
++#else
++#define DPRINTK(fmt,args...) do {} while (0)
++#endif
++
++#define ASSERT_PRIORITY(pri) \
++ if ((pri) < PRI_LOWEST || (pri) > PRI_HIGHEST) \
++ return -EINVAL;
++#define ASSERT_CLIENT_ID(client) \
++ if ((client) < 0 || (client) > MAX_CLIENTS) \
++ return -EINVAL;
++#define ASSERT_RESOURCE_ID(resource) \
++ if ((resource) < 0 || (resource) > RESOURCE_NUM) \
++ return -EINVAL;
++#define ASSERT_GROUP_ID(group) \
++ if ((group) < 0 || (group) > MAX_GROUPS) \
++ return -EINVAL;
++
++#define IS_PRM_RESOURCE(reg) ((reg) >= PMU_CCNT && (reg) <= PMU_PMN3)
++#define PMU_PRM(reg) (reg - 1)
++
++#define IS_HIGHER_PRIORITY(h1, h2) ((h1) > (h2))
++#define for_each_lower_priority(index, pri) \
++ for (index = pri - 1; index >= PRI_LOWEST; index = index - 1)
++
++#define STATE_UNDEF 0x1
++#define STATE_ACTIVE 0x2
++#define STATE_APPROPRIATED 0x3
++
++static struct prm_resource prm_resources[RESOURCE_NUM];
++static struct prm_client *prm_clients[MAX_CLIENTS];
++static struct prm_client *prm_pmu_client;
++
++struct rw_semaphore prm_sem;
++
++#ifdef DEBUG
++static struct proc_dir_entry *clients_root;
++static struct proc_dir_entry *resources_root;
++static struct proc_dir_entry *prm_root;
++
++#define proc_dump_end(len, page, start, off, count, eof) \
++do { \
++ if (len <= off + count) *eof = 1; \
++ *start = page + off; \
++ len -= off; \
++ if (len > count) len = count; \
++ if (len < 0) len = 0; \
++} while (0)
++
++static int dump_group(char *page, char **start, off_t off,
++ int count, int *eof, void *data)
++{
++ char *buf = page;
++ int len;
++ struct prm_group *group = (struct prm_group *)data;
++
++ buf += sprintf(buf, "address: 0x%x\n member_cnt: %u\n"
++ " appropriated_cnt: %u\n",
++ (unsigned int)group, group->member_cnt,
++ group->appropriated_cnt);
++ len = buf - page;
++ proc_dump_end(len, page, start, off, count, eof);
++ return len;
++}
++
++static int dump_resource_state(char *page, char **start, off_t off,
++ int count, int *eof, void *data)
++{
++ int client_id = -1, group_id = -1;
++ int i, len;
++ char *buf = page;
++ struct prm_resource_state *state = (struct prm_resource_state *)data;
++
++ if (state->allocate) {
++ for (i = 0; i < MAX_CLIENTS; i++) {
++ if (prm_clients[i] && prm_clients[i] == state->allocate) {
++ client_id = i;
++ break;
++ }
++ }
++ for (i = 0; i < MAX_GROUPS; i++) {
++ if (state->allocate->groups[i] &&
++ state->allocate->groups[i] == state->group) {
++ group_id = i;
++ break;
++ }
++ }
++ }
++ buf += sprintf(buf, "allocate: 0x%x(%d)\n group: 0x%x(%d)\n"
++ " active: %u\n resource: 0x%x\n",
++ (unsigned int)state->allocate, client_id,
++ (unsigned int)state->group,
++ group_id, state->active, (unsigned int)state->resource);
++ len = buf - page;
++ proc_dump_end(len, page, start, off, count, eof);
++ return len;
++}
++
++static int dump_client(char *page, char **start, off_t off,
++ int count, int *eof, void *data)
++{
++ int i, len;
++ char *buf = page;
++ struct prm_client *client = (struct prm_client *)data;
++
++ buf += sprintf(buf, "address: 0x%x\n id: %u\n pid: %u\n"
++ " priority: %u\n name: %s\n group_cnt: %u\n",
++ (unsigned int)client, client->id, client->pid,
++ client->priority, client->name, client->group_cnt);
++ for (i = 0 ;i < MAX_GROUPS; i++) {
++ if (client->groups[i])
++ buf += sprintf(buf, "group%u address: 0x%x\n",
++ i, (unsigned int)client->groups[i]);
++ }
++ len = buf - page;
++ proc_dump_end(len, page, start, off, count, eof);
++ return len;
++}
++
++static int dump_resource(char *page, char **start, off_t off,
++ int count, int *eof, void *data)
++{
++ int i, client_id = -1, len;
++ char *buf = page;
++ struct prm_resource *resource = (struct prm_resource *)data;
++
++ for (i = 0; i < MAX_CLIENTS; i++) {
++ if (prm_clients[i] && prm_clients[i] == resource->access) {
++ client_id = i;
++ break;
++ }
++ }
++ buf += sprintf(buf, " address:0x%x\n access: 0x%x(%d)\n id: %u\n",
++ (unsigned int)resource, (unsigned int)resource->access,
++ client_id, resource->id);
++ len = buf - page;
++ proc_dump_end(len, page, start, off, count, eof);
++ return len;
++}
++
++static void proc_add_client(struct prm_client *client)
++{
++ char buf[16];
++
++ sprintf(buf, "client%d", client->id);
++ client->dir = proc_mkdir(buf, clients_root);
++ create_proc_read_entry("info", 0, client->dir, dump_client, client);
++}
++
++static void proc_del_client(struct prm_client *client)
++{
++ char buf[16];
++
++ remove_proc_entry("info", client->dir);
++ sprintf(buf, "client%d", client->id);
++ remove_proc_entry(buf, clients_root);
++}
++
++static void proc_add_group(struct prm_client *client,
++ struct prm_group *group, unsigned int group_id)
++{
++ char buf[16];
++
++ sprintf(buf, "group%d", group_id);
++ group->dir = proc_mkdir(buf, client->dir);
++ create_proc_read_entry("info", 0, group->dir, dump_group, group);
++}
++
++static void proc_del_group(struct prm_client*client,
++ struct prm_group *group, unsigned int group_id)
++{
++ char buf[32];
++
++ remove_proc_entry("info", group->dir);
++ sprintf(buf, "group%d", group_id);
++ remove_proc_entry(buf, client->dir);
++}
++
++static void proc_add_resource(struct prm_resource *resource)
++{
++ char buf[16];
++
++ sprintf(buf, "resource%d", resource->id);
++ resource->dir = proc_mkdir(buf, resources_root);
++ create_proc_read_entry("info", 0, resource->dir,
++ dump_resource, resource);
++}
++
++static void proc_del_resource(struct prm_resource *resource)
++{
++ char buf[16];
++
++ remove_proc_entry("info", resource->dir);
++ sprintf(buf, "resource%d", resource->id);
++ remove_proc_entry(buf, resources_root);
++}
++
++static void proc_add_resource_state(struct prm_resource_state *state,
++ unsigned int priority)
++{
++ char buf[16];
++
++ sprintf(buf, "state%d", priority);
++ state->dir = proc_mkdir(buf, state->resource->dir);
++ create_proc_read_entry("info", 0, state->dir,
++ dump_resource_state, state);
++}
++
++static void proc_del_resource_state(struct prm_resource_state *state,
++ unsigned int priority)
++{
++ char buf[16];
++
++ remove_proc_entry("info", state->dir);
++ sprintf(buf, "state%d", priority);
++ remove_proc_entry(buf, state->resource->dir);
++}
++
++static void proc_commit_resource(struct prm_resource *resource)
++{
++ char buf[32];
++
++ remove_proc_entry("access", resource->dir);
++ sprintf(buf, "/proc/prm/clients/%s", resource->access->dir->name);
++ proc_symlink("access", resource->dir, buf);
++}
++
++static void proc_allocate_resource(struct prm_resource_state *state)
++{
++ char buf[32], path[64];
++
++ remove_proc_entry("allocate", state->dir);
++
++ sprintf(path, "/proc/prm/clients/%s/%s",
++ state->allocate->dir->name, state->group->dir->name);
++ proc_symlink("group", state->dir, path);
++ sprintf(buf, "resource%d_state%d",
++ state->resource->id, state->allocate->priority);
++ sprintf(path, "/proc/prm/resources/%s/%s",
++ state->resource->dir->name, state->dir->name);
++ proc_symlink(buf, state->group->dir, path);
++}
++
++static void proc_free_resource(struct prm_resource_state *state)
++{
++ char buf[32];
++
++ sprintf(buf, "resource%d_state%d",
++ state->resource->id, state->allocate->priority);
++ remove_proc_entry("access", state->resource->dir);
++ remove_proc_entry("allocate", state->dir);
++ remove_proc_entry("group", state->dir);
++ remove_proc_entry(buf, state->group->dir);
++}
++
++static void proc_prm_init(void)
++{
++ prm_root = proc_mkdir("prm", NULL);
++ clients_root = proc_mkdir("clients", prm_root);
++ resources_root = proc_mkdir("resources", prm_root);
++}
++
++static void proc_prm_exit(void)
++{
++ remove_proc_entry("clients", prm_root);
++ remove_proc_entry("resources", prm_root);
++ remove_proc_entry("prm", NULL);
++}
++#else
++static void proc_add_client(struct prm_client *client) {}
++static void proc_del_client(struct prm_client *client) {}
++static void proc_add_group(struct prm_client *client,
++ struct prm_group *group, unsigned int group_id) {}
++static void proc_del_group(struct prm_client*client,
++ struct prm_group *group, unsigned int group_id) {}
++static void proc_add_resource(struct prm_resource *resource) {}
++static void proc_del_resource(struct prm_resource *resource) {}
++static void proc_add_resource_state(struct prm_resource_state *state,
++ unsigned int priority) {}
++static void proc_del_resource_state(struct prm_resource_state *state,
++ unsigned int priority) {}
++static void proc_commit_resource(struct prm_resource *resource) {}
++static void proc_allocate_resource(struct prm_resource_state *state) {}
++static void proc_free_resource(struct prm_resource_state *state) {}
++static void proc_prm_init(void) {}
++static void proc_prm_exit(void) {}
++#endif
++
++/*****************************************************************************/
++/* */
++/* Profiler Resource Manager */
++/* */
++/*****************************************************************************/
++
++static void clear_state(struct prm_resource_state *state)
++{
++ state->allocate = NULL;
++ state->group = NULL;
++ state->active = STATE_UNDEF;
++ /* the state has been deleted from the group resource list */
++ INIT_LIST_HEAD(&(state->entry));
++}
++
++static int group_commited(struct prm_client *client,
++ struct prm_group *group)
++{
++ struct prm_resource_state *state;
++ struct prm_resource *resource;
++ struct list_head *pos;
++
++ list_for_each(pos, &(group->resources)) {
++ state = list_entry(pos, struct prm_resource_state, entry);
++ resource = state->resource;
++ if (resource->access != client) {
++ return 0;
++ }
++ }
++ return 1;
++}
++
++static int try_to_access_group(struct prm_client *client,
++ struct prm_group *group, int set_state)
++{
++ struct prm_resource_state *state;
++ struct prm_resource *resource;
++ int ret = 0;
++ struct list_head *pos;
++
++ DPRINTK("client <%d> try to access group <%d>, set_state as <%d>\n",
++ (unsigned int)client->id, (unsigned int)group->id, set_state);
++ list_for_each(pos, &(group->resources)) {
++ state = list_entry(pos, struct prm_resource_state, entry);
++ resource = state->resource;
++ if (resource->access != NULL && resource->access != client &&
++ IS_HIGHER_PRIORITY(resource->access->priority,
++ client->priority)) {
++ if (set_state) {
++ state->active = STATE_APPROPRIATED;
++ group->appropriated_cnt++;
++ }
++ ret++;
++ }
++ }
++ DPRINTK("try_to_access() return :%d\n", ret);
++ return ret;
++}
++
++static struct prm_client * get_resource_access(struct prm_resource *resource)
++{
++ if (resource)
++ return resource->access;
++ else /*for access the isr and control regs of PMU */
++ return (struct prm_client *)(
++ (unsigned long)prm_resources[PRM_CCNT].access &
++ (unsigned long)prm_resources[PRM_PMN0].access &
++ (unsigned long)prm_resources[PRM_PMN1].access &
++ (unsigned long)prm_resources[PRM_PMN2].access &
++ (unsigned long)prm_resources[PRM_PMN3].access
++ );
++}
++
++static void unload_isr(struct prm_client *client)
++{
++ if (prm_pmu_client == client || get_resource_access(NULL) == client)
++ prm_pmu_client = NULL;
++}
++
++static void load_isr(struct prm_client *client)
++{
++ if (prm_pmu_client != client && get_resource_access(NULL) == client)
++ prm_pmu_client = client;
++}
++
++/* this function will be invoked with locked */
++static int set_resource_access(struct prm_resource *resource,
++ struct prm_client *client)
++{
++ struct prm_resource_state *state, *owner_state;
++ struct prm_group *group, *owner_group;
++ struct prm_client *owner;
++ int ret = 0;
++
++ if (client == NULL) {
++ /* The client will free the committed resources to the appropriated
++ * lower client. And notification will be sent so as to give the lower
++ * priority client a chance to commit resources if:
++ * 1. all the resources of the lower priority group that resource
++ * belongs to are committable
++ * 2. lower priority client hasn't committed above group resources
++ * Note: the notified client is unnessarily the appropriated client.
++ */
++ int index;
++
++ DPRINTK("client <%d> give up resource <%d>\n",
++ (unsigned int)resource->access->id, (unsigned int)resource->id);
++ unload_isr(resource->access);
++ owner = resource->access;
++ resource->access = NULL;
++ resource->priority[owner->priority].active = STATE_UNDEF;
++ for_each_lower_priority(index, owner->priority) {
++ state = &(resource->priority[index]);
++ DPRINTK(" its state of lower priority <%d> is <%d>\n",
++ index, state->active);
++ if (state->active == STATE_APPROPRIATED) {
++ DPRINTK("client <%d> return resource <%d>"
++ " to client <%d>\n", owner->id,
++ resource->id, state->allocate->id);
++ group = state->group;
++ group->appropriated_cnt--;
++ DPRINTK("resource group <%d> of client <%d>"
++ " has <%d> resources appropriated\n",
++ group->id, state->allocate->id,
++ group->appropriated_cnt);
++ }
++ if (state->group &&
++ state->group->appropriated_cnt == 0 &&
++ state->allocate &&
++ !group_commited(state->allocate, state->group)) {
++ ret = try_to_access_group(state->allocate,
++ state->group, 1);
++ if (ret < 0)
++ return ret;
++ else if (ret == 0) {
++ /* state->active = STATE_UNDEF;
++ */
++ /* ISR will not reload, because now the
++ * group has not be commited again.
++ * The isr should be loaded when commit
++ */
++ if (state->allocate->notify) {
++ up_write(&prm_sem);
++ DPRINTK("client <%d> notified"
++ " with PRM_RES_READY\n",
++ (unsigned int)state->allocate->id);
++ state->allocate->notify(PRM_RES_READY,
++ state->group->id,
++ state->allocate->client_data);
++ down_write(&prm_sem);
++ }
++ break;
++ }
++ }
++ }
++ }
++ else {
++ struct prm_resource *group_resource;
++ struct list_head *pos;
++
++ owner = resource->access;
++
++ if (owner == client){
++ DPRINTK("client <%d> commits resource <%d>:"
++ " already commited\n",
++ (unsigned int)client->id,
++ (unsigned int)resource->id);
++ return 0;
++ }
++ if (!owner)
++ unload_isr(owner);
++ resource->access = client;
++ resource->priority[client->priority].active = STATE_ACTIVE;
++ load_isr(client);
++ if (owner == NULL) {
++ DPRINTK("client <%d> commits resource <%d>:"
++ " from free list\n",
++ (unsigned int)client->id,
++ (unsigned int)resource->id);
++ return 0;
++ } else {
++ DPRINTK("client <%d> commits resource <%d>:"
++ " from client <%d>\n\n",
++ (unsigned int)client->id,
++ (unsigned int)resource->id, owner->id);
++ }
++
++ owner_state = &(resource->priority[owner->priority]);
++ owner_state->active = STATE_APPROPRIATED;
++ owner_group = owner_state->group;
++ if (owner_group->appropriated_cnt++ == 0) {
++ list_for_each(pos, &(owner_group->resources)) {
++ state = list_entry(pos,
++ struct prm_resource_state, entry);
++ group_resource = state->resource;
++ if (group_resource->access == owner)
++ ret = set_resource_access(
++ group_resource, NULL);
++ if (ret)
++ return ret;
++ }
++ if (owner->notify) {
++ up_write(&prm_sem);
++ DPRINTK("client <%d> notified with"
++ " PRM_RES_APPROPRIATED\n",
++ (unsigned int)owner->id);
++ owner->notify(PRM_RES_APPROPRIATED,
++ owner_group->id, owner->client_data);
++ down_write(&prm_sem);
++ }
++ }
++ }
++ return 0;
++}
++
++int prm_open_session(prm_priority priority, char *name,
++ clientcallback callback, void *data)
++{
++ struct prm_client * client;
++ unsigned int name_len;
++ int i = 0;
++
++ ASSERT_PRIORITY(priority);
++ if (!name) {
++ return -EINVAL;
++ }
++ /* protect for read */
++ down_read(&prm_sem);
++ for (i = 0;i < MAX_CLIENTS;i++) {
++ if (prm_clients[i] == NULL)
++ break;
++ }
++ up_read(&prm_sem);
++
++ if (i == MAX_CLIENTS)
++ return -ENOENT;
++
++ name_len = strlen(name);
++ client = (struct prm_client *)
++ kmalloc(sizeof(struct prm_client) + name_len + 1, GFP_KERNEL);
++ if (!client)
++ return -ENOMEM;
++ memset(client, 0x0, sizeof(struct prm_client));
++ client->id = i;
++ client->pid = current->pid;
++ client->priority = priority;
++ client->notify = callback;
++ client->client_data = data;
++ client->name = (char *)(client + 1);
++ strncpy(client->name, name, name_len);
++ client->name[name_len] = '\0';
++
++ for(i = 0;i < MAX_GROUPS;i++)
++ client->groups[i] = NULL;
++
++ down_write(&prm_sem);
++ if (prm_clients[client->id] != NULL) {
++ up_write(&prm_sem);
++ kfree(client);
++ return -ENOENT;
++ }
++ prm_clients[client->id] = client;
++ up_write(&prm_sem);
++ proc_add_client(client);
++
++ DPRINTK("client<%d>(%s) open a session with priority <%d>\n",
++ client->id, name, priority);
++
++ return client->id;
++}
++
++int prm_close_session(unsigned int client_id)
++{
++ struct prm_client *client;
++
++ ASSERT_CLIENT_ID(client_id);
++
++ down_write(&prm_sem);
++ client = prm_clients[client_id];
++ /* resources should be freed before close seesion */
++ if (client->group_cnt) {
++ up_write(&prm_sem);
++ return -EPERM;
++ }
++ prm_clients[client_id] = NULL;
++ up_write(&prm_sem);
++ proc_del_client(client);
++ kfree(client);
++
++ DPRINTK("client<%d> closed its session\n", client_id);
++
++ return 0;
++}
++
++/* allocate resource, but can not access it now */
++int prm_allocate_resource(unsigned int client_id,
++ prm_resource_id res_id, unsigned int group_id)
++{
++ struct prm_client *client;
++ struct prm_resource *resource;
++ struct prm_resource_state *state;
++ struct prm_group *group;
++
++ ASSERT_CLIENT_ID(client_id);
++ ASSERT_RESOURCE_ID(res_id);
++ ASSERT_GROUP_ID(group_id);
++
++ DPRINTK("allocate resource for client <%d> with resource <%d>"
++ " for group <%d>\n", client_id, res_id, group_id);
++ down_write(&prm_sem);
++ client = prm_clients[client_id];
++ if (!client) {
++ up_write(&prm_sem);
++ return -EINVAL;
++ }
++ resource = &(prm_resources[res_id]);
++ state = &(resource->priority[client->priority]);
++
++ /* The resource in the client->priority has been reserved */
++ if (state->allocate) {
++ up_write(&prm_sem);
++ return -EPERM;
++ }
++ else
++ state->allocate = client;
++ group = client->groups[group_id];
++ up_write(&prm_sem);
++
++ if (group == NULL) {
++ group = (struct prm_group *)
++ kmalloc(sizeof(struct prm_group), GFP_KERNEL);
++ if (group == NULL)
++ return -ENOMEM;
++
++ INIT_LIST_HEAD(&(group->resources));
++ group->id = group_id;
++ group->appropriated_cnt = 0;
++ group->member_cnt = 1;
++ proc_add_group(client, group, group_id);
++
++ down_write(&prm_sem);
++ if (client->groups[group_id]) {
++ up_write(&prm_sem);
++ kfree(group);
++ down_write(&prm_sem);
++ group = client->groups[group_id];
++ }
++ else {
++ client->groups[group_id] = group;
++ client->group_cnt++;
++ }
++ }
++ else {
++ down_write(&prm_sem);
++ client->groups[group_id]->member_cnt++;
++ }
++ list_add(&(state->entry), &(group->resources));
++ state->group = group;
++ state->active = STATE_UNDEF;
++ up_write(&prm_sem);
++ proc_allocate_resource(state);
++
++ return 0;
++}
++
++int prm_free_resources(unsigned int client_id, unsigned int group_id)
++{
++ struct prm_client *client;
++ struct prm_resource *resource;
++ struct prm_group *group;
++ struct prm_resource_state *state;
++ int ret = -EINVAL;
++ struct list_head *pos, *n;
++
++ ASSERT_CLIENT_ID(client_id);
++ ASSERT_GROUP_ID(group_id);
++
++ down_write(&prm_sem);
++ client = prm_clients[client_id];
++ if (!client) {
++ up_write(&prm_sem);
++ return -EINVAL;
++ }
++ group = client->groups[group_id];
++ if (!group) {
++ up_write(&prm_sem);
++ return -EINVAL;
++ }
++
++ list_for_each_safe(pos, n, &(group->resources)) {
++ state = list_entry(pos, struct prm_resource_state, entry);
++ resource = state->resource;
++ if (get_resource_access(resource) == client) {
++ ret = set_resource_access(resource, NULL);
++ if (ret) {
++ up_write(&prm_sem);
++ return ret;
++ }
++ }
++#if 0
++ else if (state->active == STATE_APPROPRIATED)
++ group->appropriated_cnt--;
++#endif
++ proc_free_resource(state);
++ list_del(pos);
++ clear_state(state);
++ }
++ client->group_cnt--;
++ client->groups[group_id] = NULL;
++ up_write(&prm_sem);
++ proc_del_group(client, group, group_id);
++ kfree(group);
++
++ return 0;
++}
++
++int prm_commit_resources(unsigned int client_id, unsigned int group_id)
++{
++ struct prm_client *client;
++ struct prm_group *group;
++ struct prm_resource_state *state;
++ struct prm_resource *resource;
++ struct list_head *pos;
++ int ret;
++
++ ASSERT_CLIENT_ID(client_id);
++ ASSERT_GROUP_ID(group_id);
++
++ DPRINTK("client <%d> commit resource group <%d>\n",
++ client_id, group_id);
++ down_write(&prm_sem);
++ client = prm_clients[client_id];
++ if (!client) {
++ up_write(&prm_sem);
++ return -EINVAL;
++ }
++ group = client->groups[group_id];
++ if (!group) {
++ up_write(&prm_sem);
++ return -EINVAL;
++ }
++
++ ret = try_to_access_group(client, group, 0);
++ if (ret) {
++ up_write(&prm_sem);
++ return ret;
++ }
++
++ list_for_each(pos, &(group->resources)) {
++ state = list_entry(pos, struct prm_resource_state, entry);
++ resource = state->resource;
++ ret = set_resource_access(resource, client);
++ if (ret) {
++ up_write(&prm_sem);
++ return ret;
++ }
++ proc_commit_resource(resource);
++ }
++ up_write(&prm_sem);
++ return 0;
++}
++
++int prm_get_cpuid(void)
++{
++ int cpu_id;
++
++ asm("mrc p15, 0, %0, c0, c0" : "=r" (cpu_id));
++ cpu_id &= 0xfffff000;
++
++ return cpu_id;
++}
++
++static irqreturn_t prm_pmu_handler(int irq, void *dev_id)
++{
++ /*DPRINTK("PMU interrupt generated!\n");
++ */
++ if (prm_pmu_client)
++ prm_pmu_client->handler(irq, prm_pmu_client->dev_id);
++ return IRQ_HANDLED;
++}
++
++EXPORT_SYMBOL(prm_open_session);
++EXPORT_SYMBOL(prm_close_session);
++EXPORT_SYMBOL(prm_allocate_resource);
++EXPORT_SYMBOL(prm_free_resources);
++EXPORT_SYMBOL(prm_commit_resources);
++EXPORT_SYMBOL(prm_get_cpuid);
++
++/*****************************************************************************/
++/* */
++/* PMU API */
++/* */
++/*****************************************************************************/
++
++int pmu_read_register(unsigned int client_id, int reg, unsigned int *pval)
++{
++ struct prm_resource *resource;
++ struct prm_client *client;
++ int ret;
++
++ ASSERT_CLIENT_ID(client_id);
++
++ down_read(&prm_sem);
++ client = prm_clients[client_id];
++ if (!client) {
++ up_read(&prm_sem);
++ return -EINVAL;
++ }
++
++ resource = IS_PRM_RESOURCE(reg)? &(prm_resources[PMU_PRM(reg)]):NULL;
++ ret = (get_resource_access(resource) == client);
++ up_read(&prm_sem);
++
++ if (ret)
++ *pval = pmu_read_reg(reg);
++ else
++ return -EACCES;
++
++ return 0;
++}
++
++int pmu_write_register(unsigned int client_id, int reg, unsigned int val)
++{
++ struct prm_resource *resource;
++ struct prm_client *client;
++ int ret;
++
++ ASSERT_CLIENT_ID(client_id);
++
++ down_read(&prm_sem);
++ client = prm_clients[client_id];
++ if (!client) {
++ up_read(&prm_sem);
++ return -EINVAL;
++ }
++
++ resource = IS_PRM_RESOURCE(reg)? &(prm_resources[PMU_PRM(reg)]):NULL;
++ ret = (get_resource_access(resource) == client);
++ up_read(&prm_sem);
++
++ if (ret)
++ pmu_write_reg(reg, val);
++ else
++ return -EACCES;
++
++ return 0;
++}
++
++int pmu_set_event(unsigned int client_id, unsigned int counter,
++ int *pre_type, int type)
++{
++ struct prm_client *client;
++ int ret;
++
++ ASSERT_CLIENT_ID(client_id);
++
++ down_read(&prm_sem);
++ client = prm_clients[client_id];
++ if (!client) {
++ up_read(&prm_sem);
++ return -EINVAL;
++ }
++
++ ret = (client == get_resource_access(NULL)) ;
++ up_read(&prm_sem);
++
++ if (ret) {
++ *pre_type = pmu_select_event(counter, type);
++ if (*pre_type == PMU_EVENT_INVALIDATE)
++ return -EINVAL;
++ }
++ else
++ return -EACCES;
++ return 0;
++}
++
++int pmu_enable_event_counting(unsigned int client_id)
++{
++ struct prm_client *client;
++ unsigned long val;
++ int ret;
++
++ ASSERT_CLIENT_ID(client_id);
++
++ down_read(&prm_sem);
++ client = prm_clients[client_id];
++ if (!client) {
++ up_read(&prm_sem);
++ return -EINVAL;
++ }
++
++ ret = (client == get_resource_access(NULL));
++ up_read(&prm_sem);
++
++ if (ret) {
++ /* enable and reset all counters,
++ * CCNT counts every clock cycle
++ */
++ val = 0x07;
++ pmu_write_reg(PMU_PMNC, val);
++ }
++ else
++ return -EACCES;
++ return 0;
++}
++
++int pmu_disable_event_counting(unsigned int client_id)
++{
++ struct prm_client *client;
++ unsigned long val;
++ int ret;
++
++ ASSERT_CLIENT_ID(client_id);
++
++ down_read(&prm_sem);
++ client = prm_clients[client_id];
++ if (!client) {
++ up_read(&prm_sem);
++ return -EINVAL;
++ }
++
++ ret = (client == get_resource_access(NULL));
++ up_read(&prm_sem);
++
++ if (ret) {
++ /* disable all counters */
++ val = 0x10;
++ pmu_write_reg(PMU_PMNC, val);
++ }
++ else
++ return -EACCES;
++ return 0;
++}
++
++int pmu_enable_event_interrupt(unsigned int client_id, int reg)
++{
++ struct prm_client *client;
++ unsigned long val;
++ int ret;
++
++ ASSERT_CLIENT_ID(client_id);
++
++ down_read(&prm_sem);
++ client = prm_clients[client_id];
++ if (!client) {
++ up_read(&prm_sem);
++ return -EINVAL;
++ }
++
++ if (IS_PRM_RESOURCE(reg)) {
++ ret = (get_resource_access(&(prm_resources[PMU_PRM(reg)])) == client);
++ up_read(&prm_sem);
++ if (ret) {
++ val = pmu_read_reg(PMU_INTEN);
++ val |= (0x1 << reg);
++ pmu_write_reg(PMU_INTEN, val);
++ }
++ else
++ return -EACCES;
++ }
++ else {
++ up_read(&prm_sem);
++ return -EINVAL;
++ }
++ return 0;
++}
++
++int pmu_disable_event_interrupt(unsigned int client_id, int reg)
++{
++ struct prm_client *client;
++ unsigned long val;
++ int ret;
++
++ ASSERT_CLIENT_ID(client_id);
++
++ down_read(&prm_sem);
++ client = prm_clients[client_id];
++ if (!client) {
++ up_read(&prm_sem);
++ return -EINVAL;
++ }
++
++ if (IS_PRM_RESOURCE(reg)) {
++ ret = (get_resource_access(&(prm_resources[PMU_PRM(reg)])) == client);
++ up_read(&prm_sem);
++ if (ret) {
++ val = pmu_read_reg(PMU_INTEN);
++ val &= ~(0x1 << reg);
++ pmu_write_reg(PMU_INTEN, val);
++ }
++ else
++ return -EACCES;
++ }
++ else {
++ up_read(&prm_sem);
++ return -EINVAL;
++ }
++ return 0;
++}
++
++int pmu_register_isr(unsigned int client_id,
++ irq_handler_t handler, void *dev_id)
++{
++ struct prm_client *client;
++
++ ASSERT_CLIENT_ID(client_id);
++
++ down_read(&prm_sem);
++ client = prm_clients[client_id];
++ if (!client) {
++ up_read(&prm_sem);
++ return -EINVAL;
++ }
++
++ client->handler = handler;
++ client->dev_id = dev_id;
++ load_isr(client);
++ up_read(&prm_sem);
++ return 0;
++}
++
++int pmu_unregister_isr(unsigned int client_id)
++{
++ struct prm_client *client;
++
++ ASSERT_CLIENT_ID(client_id);
++
++ down_read(&prm_sem);
++ client = prm_clients[client_id];
++ if (!client) {
++ up_read(&prm_sem);
++ return -EINVAL;
++ }
++
++ unload_isr(client);
++ client->handler = NULL;
++ client->dev_id = NULL;
++ up_read(&prm_sem);
++ return 0;
++}
++
++EXPORT_SYMBOL(pmu_read_reg);
++EXPORT_SYMBOL(pmu_write_reg);
++EXPORT_SYMBOL(pmu_read_register);
++EXPORT_SYMBOL(pmu_write_register);
++EXPORT_SYMBOL(pmu_set_event);
++EXPORT_SYMBOL(pmu_enable_event_counting);
++EXPORT_SYMBOL(pmu_disable_event_counting);
++EXPORT_SYMBOL(pmu_enable_event_interrupt);
++EXPORT_SYMBOL(pmu_disable_event_interrupt);
++EXPORT_SYMBOL(pmu_register_isr);
++EXPORT_SYMBOL(pmu_unregister_isr);
++
++/*****************************************************************************/
++/* */
++/* COP API */
++/* */
++/*****************************************************************************/
++
++int cop_get_num_of_cops(void)
++{
++ return dvfm_op_count();
++}
++
++int cop_get_cop(unsigned int client_id, unsigned int n,
++ struct pxa3xx_fv_info *param)
++{
++ struct op_info *info = NULL;
++ int ret;
++
++ ASSERT_CLIENT_ID(client_id);
++
++ ret = dvfm_get_opinfo(n, &info);
++ if (ret == 0) {
++ md2fvinfo(param, (struct dvfm_md_opt *)info->op);
++ }
++ return ret;
++}
++
++int cop_set_cop(unsigned int client_id, unsigned int n, int mode)
++{
++ struct prm_resource *resource;
++ struct prm_client *client;
++ int ret;
++
++ ASSERT_CLIENT_ID(client_id);
++
++ down_read(&prm_sem);
++ client = prm_clients[client_id];
++ if (!client) {
++ up_read(&prm_sem);
++ return -EINVAL;
++ }
++
++ resource = &prm_resources[PRM_COP];
++ ret = (get_resource_access(resource) == client);
++ up_read(&prm_sem);
++
++ if (ret)
++ return dvfm_request_op(n);
++ return -EACCES;
++}
++
++int cop_get_def_cop(unsigned int client_id, unsigned int *n,
++ struct pxa3xx_fv_info *param)
++{
++ struct op_info *info = NULL;
++ int ret;
++
++ ASSERT_CLIENT_ID(client_id);
++
++ *n = dvfm_get_defop();
++ ret = dvfm_get_opinfo(*n, &info);
++ if (ret == 0) {
++ md2fvinfo(param, (struct dvfm_md_opt *)info->op);
++ }
++ return ret;
++}
++
++int cop_set_def_cop(unsigned int client_id)
++{
++ struct prm_resource *resource;
++ struct prm_client *client;
++ unsigned int def_op;
++ int ret;
++
++ ASSERT_CLIENT_ID(client_id);
++
++ down_read(&prm_sem);
++ client = prm_clients[client_id];
++ if (!client) {
++ up_read(&prm_sem);
++ return -EINVAL;
++ }
++
++ resource = &prm_resources[PRM_COP];
++ ret = (get_resource_access(resource) == client);
++ up_read(&prm_sem);
++
++ def_op = dvfm_get_defop();
++ if (ret)
++ return dvfm_request_op(def_op);
++ return -EACCES;
++}
++
++int cop_get_cur_cop(unsigned int client_id, unsigned int *n,
++ struct pxa3xx_fv_info *param)
++{
++ struct op_info *info = NULL;
++
++ ASSERT_CLIENT_ID(client_id);
++
++ *n = dvfm_get_op(&info);
++ md2fvinfo(param, (struct dvfm_md_opt *)info->op);
++
++ return 0;
++}
++
++EXPORT_SYMBOL(cop_get_num_of_cops);
++EXPORT_SYMBOL(cop_get_cop);
++EXPORT_SYMBOL(cop_set_cop);
++EXPORT_SYMBOL(cop_get_def_cop);
++EXPORT_SYMBOL(cop_set_def_cop);
++EXPORT_SYMBOL(cop_get_cur_cop);
++
++/*****************************************************************************/
++/* */
++/* Module Init/Exit */
++/* */
++/*****************************************************************************/
++
++static int __init prm_init(void)
++{
++ int ret, i , j;
++
++ proc_prm_init();
++ init_rwsem(&prm_sem);
++ /*prm_sem.debug = 1;
++ */
++ for (i = 0; i < RESOURCE_NUM; i++) {
++ prm_resources[i].access = NULL;
++ prm_resources[i].id = i;
++ proc_add_resource(&prm_resources[i]);
++ for (j = 0; j < MAX_PRIORITIES;j++) {
++ prm_resources[i].priority[j].resource = &prm_resources[i];
++ prm_resources[i].priority[j].allocate = NULL;
++ prm_resources[i].priority[j].active = STATE_UNDEF;
++ INIT_LIST_HEAD(&(prm_resources[i].priority[j].entry));
++ proc_add_resource_state(&prm_resources[i].priority[j], j);
++ }
++ }
++
++ for (i = 0; i < MAX_CLIENTS; i++) {
++ prm_clients[i] = NULL;
++ }
++ prm_pmu_client = NULL;
++
++ ret = request_irq(IRQ_PMU, prm_pmu_handler, 0, "PMU", NULL);
++ if (ret < 0) {
++ DPRINTK("PMU interrupt handler registeration: failed!\n");
++ return ret;
++ } else {
++ DPRINTK("PMU interrupt handler registeration: OK!\n");
++ }
++
++ DPRINTK("CPU_ID = 0x%08x\n", prm_get_cpuid());
++
++ return 0;
++}
++
++static void __exit prm_exit(void)
++{
++ int i, j;
++
++ for (i = 0; i < RESOURCE_NUM; i++) {
++ for(j = 0; j < MAX_PRIORITIES;j++) {
++ proc_del_resource_state(&prm_resources[i].priority[j], j);
++ }
++ proc_del_resource(&prm_resources[i]);
++ memset(&(prm_resources[i]), 0x0, sizeof(struct prm_resource));
++ }
++
++ for (i = 0; i < MAX_CLIENTS; i++) {
++ if (prm_clients[i]) {
++ if (prm_clients[i]->group_cnt) {
++ for (j = 0; j < MAX_GROUPS; j++) {
++ if (prm_clients[i]->groups[j]) {
++ proc_del_group(prm_clients[i],
++ prm_clients[i]->groups[j], j);
++ kfree(prm_clients[i]->groups[j]);
++ }
++ }
++ }
++ proc_del_client(prm_clients[i]);
++ kfree(prm_clients[i]);
++ }
++ }
++ prm_pmu_client = NULL;
++ free_irq(IRQ_PMU, NULL);
++ proc_prm_exit();
++}
++
++module_init(prm_init);
++module_exit(prm_exit);
++
++MODULE_DESCRIPTION("Performance Resources Management");
++MODULE_LICENSE("GPL");
++
+diff -ur linux-2.6.32/arch/arm/mach-pxa/pxa3xx.c kernel/arch/arm/mach-pxa/pxa3xx.c
+--- linux-2.6.32/arch/arm/mach-pxa/pxa3xx.c 2009-12-03 05:51:21.000000000 +0200
++++ kernel/arch/arm/mach-pxa/pxa3xx.c 2009-12-12 16:09:26.482948915 +0200
+@@ -613,3 +613,4 @@
+ }
+
+ postcore_initcall(pxa3xx_init);
++
+diff -ur linux-2.6.32/arch/arm/mach-pxa/pxa3xx_dvfm.c kernel/arch/arm/mach-pxa/pxa3xx_dvfm.c
+--- linux-2.6.32/arch/arm/mach-pxa/pxa3xx_dvfm.c 2009-12-13 13:00:35.598610849 +0200
++++ kernel/arch/arm/mach-pxa/pxa3xx_dvfm.c 2009-12-12 16:09:26.482948915 +0200
+@@ -0,0 +1,2319 @@
++/*
++ * PXA3xx DVFM Driver
++ *
++ * Copyright (C) 2007 Marvell Corporation
++ * Haojian Zhuang <haojian.zhuang@marvell.com>
++ *
++ * This software program is licensed subject to the GNU General Public License
++ * (GPL).Version 2,June 1991, available at http://www.fsf.org/copyleft/gpl.html
++
++ * (C) Copyright 2007 Marvell International Ltd.
++ * All Rights Reserved
++ */
++
++#define DEBUG
++
++#include <linux/kernel.h>
++#include <linux/module.h>
++#include <linux/init.h>
++#include <linux/sysdev.h>
++#include <linux/miscdevice.h>
++#include <linux/fs.h>
++#include <linux/workqueue.h>
++#include <linux/delay.h>
++#include <linux/list.h>
++#include <linux/clk.h>
++#include <linux/platform_device.h>
++#include <linux/err.h>
++#include <asm/uaccess.h>
++//#include <asm/arch/pxa-regs.h>
++#include <mach/pxa3xx-regs.h>
++#include <mach/pxa3xx_pmic.h>
++#include <mach/hardware.h>
++#include <mach/dvfm.h>
++#include <mach/pxa3xx_dvfm.h>
++#include <asm/io.h>
++//#include <asm/arch/pxa_ispt.h>
++//#include <asm/arch/mspm_prof.h>
++
++#include "devices.h"
++
++#ifdef CONFIG_CPU_PXA310
++#define FREQ_CORE(xl, xn) ((xl)*(xn)*13)
++
++#define FREQ_SRAM(sflfs) (((sflfs) == 0x0)?104: \
++ ((sflfs) == 0x1)?156: \
++ ((sflfs) == 0x2)?208:312)
++
++#define FREQ_STMM(smcfs) (((smcfs) == 0x0)?78: \
++ ((smcfs) == 0x2)?104: \
++ ((smcfs) == 0x5)?208:0)
++
++#define FREQ_DDR(dmcfs) (((dmcfs) == 0x0)?26: \
++ ((dmcfs) == 0x2)?208: \
++ ((dmcfs) == 0x3)?260:0)
++
++#define FREQ_HSS(hss) (((hss) == 0x0)?104: \
++ ((hss) == 0x1)?156: \
++ ((hss) == 0x2)?208:0)
++
++#define FREQ_DFCLK(smcfs, df_clkdiv) \
++ (((df_clkdiv) == 0x1)?FREQ_STMM((smcfs)): \
++ ((df_clkdiv) == 0x2)?FREQ_STMM((smcfs))/2: \
++ ((df_clkdiv) == 0x3)?FREQ_STMM((smcfs))/4:0)
++
++#define FREQ_EMPICLK(smcfs, empi_clkdiv) \
++ (((empi_clkdiv) == 0x1)?FREQ_STMM((smcfs)): \
++ ((empi_clkdiv) == 0x2)?FREQ_STMM((smcfs))/2: \
++ ((empi_clkdiv) == 0x3)?FREQ_STMM((smcfs))/4:0)
++
++#define LPJ_PER_MHZ 4988
++#endif
++
++/* Enter D2 before exiting D0CS */
++#define DVFM_LP_SAFE
++
++struct pxa3xx_dvfm_info {
++ /* flags */
++ uint32_t flags;
++
++ /* CPU ID */
++ uint32_t cpuid;
++
++ /* LCD clock */
++ struct clk *lcd_clk;
++
++ /* clock manager register base */
++ unsigned char __iomem *clkmgr_base;
++
++ /* service power management unit */
++ unsigned char __iomem *spmu_base;
++
++ /* slave power management unit */
++ unsigned char __iomem *bpmu_base;
++
++ /* dynamic memory controller register base */
++ unsigned char __iomem *dmc_base;
++
++ /* static memory controller register base */
++ unsigned char __iomem *smc_base;
++};
++
++#define MIN_SAFE_FREQUENCY 624
++
++struct info_head pxa3xx_dvfm_op_list = {
++ .list = LIST_HEAD_INIT(pxa3xx_dvfm_op_list.list),
++ .lock = RW_LOCK_UNLOCKED,
++};
++
++#ifdef CONFIG_PXA3xx_DVFM_STATS
++
++static unsigned int switch_lowpower_before, switch_lowpower_after;
++
++static int pxa3xx_stats_notifier_freq(struct notifier_block *nb,
++ unsigned long val, void *data);
++static struct notifier_block notifier_freq_block = {
++ .notifier_call = pxa3xx_stats_notifier_freq,
++};
++#endif
++
++/* the operating point preferred by policy maker or user */
++static int preferred_op;
++static int current_op;
++
++extern unsigned int cur_op; /* current operating point */
++extern unsigned int def_op; /* default operating point */
++
++extern int enter_d0cs_a(volatile u32 *, volatile u32 *);
++extern int exit_d0cs_a(volatile u32 *, volatile u32 *);
++extern int md2fvinfo(struct pxa3xx_fv_info *, struct dvfm_md_opt *);
++extern void set_idle_op(int, int);
++
++#ifdef CONFIG_FB_PXA
++extern void pxafb_set_pcd(void);
++#else
++static void pxafb_set_pcd(void) {}
++#endif
++
++static int dvfm_dev_id;
++#define LPJ_D0CS (293888 * 100 / HZ)
++#define LPJ_104M (517120 * 100 / HZ)
++#define LPJ_156M (778128 * 100 / HZ)
++#define LPJ_208M (1036288 * 100 / HZ)
++#define LPJ_416M (2076672 * 100 / HZ)
++#define LPJ_624M (3112960 * 100 / HZ)
++#define LPJ_806M (4020906 * 100 / HZ)
++
++static int d0cs_lpj = LPJ_D0CS;
++
++static int boot_core_freq = 0;
++
++int out_d0cs = 0;
++
++/* define the operating point of S0D0 and S0D0CS mode */
++static struct dvfm_md_opt pxa300_op_array[] = {
++ /* 60MHz -- ring oscillator */
++ {
++ .vcc_core = 1000,
++ .vcc_sram = 1100,
++ .xl = 0,
++ .xn = 0,
++ .smcfs = 15,
++ .sflfs = 60,
++ .hss = 60,
++ .dmcfs = 30, /* will be 60MHZ for PXA310 A2 and PXA935/PXA940 */
++ .df_clk = 15,
++ .empi_clk = 15,
++ .power_mode = POWER_MODE_D0CS,
++ .flag = OP_FLAG_FACTORY,
++ .lpj = 293888*100/HZ,
++ .name = "D0CS",
++ },
++ /* 104MHz */
++ {
++ .vcc_core = 1000,
++ .vcc_sram = 1100,
++ .xl = 8,
++ .xn = 1,
++ .smcfs = 78,
++ .sflfs = 104,
++ .hss = 104,
++ .dmcfs = 260,
++ /* Actually it's 19.5, not 19 */
++ .df_clk = 19,
++ .empi_clk = 19,
++ .power_mode = POWER_MODE_D0,
++ .flag = OP_FLAG_FACTORY,
++ .lpj = 517120*100/HZ,
++ .name = "104M",
++ },
++ /* 208MHz */
++ {
++ .vcc_core = 1000,
++ .vcc_sram = 1100,
++ .xl = 16,
++ .xn = 1,
++ .smcfs = 104,
++ .sflfs = 156,
++ .hss = 104,
++ .dmcfs = 260,
++ .df_clk = 52,
++ .empi_clk = 52,
++ .power_mode = POWER_MODE_D0,
++ .flag = OP_FLAG_FACTORY,
++ .lpj = 1036288*100/HZ,
++ .name = "208M",
++ },
++ /* 416MHz */
++ {
++ .vcc_core = 1100,
++ .vcc_sram = 1200,
++ .xl = 16,
++ .xn = 2,
++ .smcfs = 104,
++ .sflfs = 208,
++ .hss = 156,
++ .dmcfs = 260,
++ .df_clk = 52,
++ .empi_clk = 52,
++ .power_mode = POWER_MODE_D0,
++ .flag = OP_FLAG_FACTORY,
++ .lpj = 2076672*100/HZ,
++ .name = "416M",
++ },
++ /* 624MHz */
++ {
++ .vcc_core = 1375,
++ .vcc_sram = 1400,
++ .xl = 24,
++ .xn = 2,
++ .smcfs = 208,
++ .sflfs = 312,
++ .hss = 208,
++ .dmcfs = 260,
++ .df_clk = 52,
++ .empi_clk = 52,
++ .power_mode = POWER_MODE_D0,
++ .flag = OP_FLAG_FACTORY,
++ .lpj = 3112960*100/HZ,
++ .name = "624M",
++ },
++ /* D1 mode */
++ {
++ .vcc_core = 1100,
++ .vcc_sram = 1200,
++ .power_mode = POWER_MODE_D1,
++ .flag = OP_FLAG_FACTORY,
++ .name = "D1",
++ },
++ /* D2 mode */
++ {
++ .vcc_core = 1100,
++ .vcc_sram = 1200,
++ .power_mode = POWER_MODE_D2,
++ .flag = OP_FLAG_FACTORY,
++ .name = "D2",
++ },
++};
++
++static struct dvfm_md_opt pxa320_op_array[] = {
++ /* 60MHz -- ring oscillator */
++ {
++ .vcc_core = 1000,
++ .vcc_sram = 1100,
++ .xl = 0,
++ .xn = 0,
++ .smcfs = 15,
++ .sflfs = 60,
++ .hss = 60,
++ .dmcfs = 30,
++ .df_clk = 15,
++ .empi_clk = 15,
++ .power_mode = POWER_MODE_D0CS,
++ .flag = OP_FLAG_FACTORY,
++ .lpj = 293888*100/HZ,
++ .name = "D0CS",
++ },
++ /* 104MHz */
++ {
++ .vcc_core = 1000,
++ .vcc_sram = 1100,
++ .xl = 8,
++ .xn = 1,
++ .smcfs = 78,
++ .sflfs = 104,
++ .hss = 104,
++ .dmcfs = 260,
++ /* Actually it's 19.5, not 19 */
++ .df_clk = 19,
++ .empi_clk = 19,
++ .power_mode = POWER_MODE_D0,
++ .flag = OP_FLAG_FACTORY,
++ .lpj = 517120*100/HZ,
++ .name = "104M",
++ },
++ /* 208MHz */
++ {
++ .vcc_core = 1000,
++ .vcc_sram = 1100,
++ .xl = 16,
++ .xn = 1,
++ .smcfs = 104,
++ .sflfs = 156,
++ .hss = 104,
++ .dmcfs = 260,
++ .df_clk = 52,
++ .empi_clk = 52,
++ .power_mode = POWER_MODE_D0,
++ .flag = OP_FLAG_FACTORY,
++ .lpj = 1036288*100/HZ,
++ .name = "208M",
++ },
++ /* 416MHz */
++ {
++ .vcc_core = 1100,
++ .vcc_sram = 1200,
++ .xl = 16,
++ .xn = 2,
++ .smcfs = 104,
++ .sflfs = 208,
++ .hss = 156,
++ .dmcfs = 260,
++ .df_clk = 52,
++ .empi_clk = 52,
++ .power_mode = POWER_MODE_D0,
++ .flag = OP_FLAG_FACTORY,
++ .lpj = 2076672*100/HZ,
++ .name = "416M",
++ },
++ /* 624MHz */
++ {
++ .vcc_core = 1375,
++ .vcc_sram = 1400,
++ .xl = 24,
++ .xn = 2,
++ .smcfs = 208,
++ .sflfs = 312,
++ .hss = 208,
++ .dmcfs = 260,
++ .df_clk = 52,
++ .empi_clk = 52,
++ .power_mode = POWER_MODE_D0,
++ .flag = OP_FLAG_FACTORY,
++ .lpj = 3112960*100/HZ,
++ .name = "624M",
++ },
++ /* 806MHz */
++ {
++ .vcc_core = 1400,
++ .vcc_sram = 1400,
++ .xl = 31,
++ .xn = 2,
++ .smcfs = 208,
++ .sflfs = 312,
++ .hss = 208,
++ .dmcfs = 260,
++ .df_clk = 52,
++ .empi_clk = 52,
++ .power_mode = POWER_MODE_D0,
++ .flag = OP_FLAG_FACTORY,
++ .lpj = 4020906*100/HZ,
++ .name = "806M",
++ },
++#if 0
++ /* D1 mode */
++ {
++ .vcc_core = 1100,
++ .vcc_sram = 1200,
++ .power_mode = POWER_MODE_D1,
++ .flag = OP_FLAG_FACTORY,
++ .name = "D1",
++ },
++#endif
++ /* D2 mode */
++ {
++ .vcc_core = 1100,
++ .vcc_sram = 1200,
++ .power_mode = POWER_MODE_D2,
++ .flag = OP_FLAG_FACTORY,
++ .name = "D2",
++ },
++};
++
++static struct dvfm_md_opt pxa930_op_array[] = {
++ /* 60MHz -- ring oscillator */
++ {
++ .vcc_core = 1000,
++ .vcc_sram = 1100,
++ .xl = 0,
++ .xn = 0,
++ .smcfs = 15,
++ .sflfs = 60,
++ .hss = 60,
++ .dmcfs = 30,
++ .df_clk = 15,
++ .empi_clk = 15,
++ .power_mode = POWER_MODE_D0CS,
++ .flag = OP_FLAG_FACTORY,
++ .lpj = 293888*100/HZ,
++ .name = "D0CS",
++ },
++ /* 156MHz -- single PLL mode */
++ {
++ .vcc_core = 1000,
++ .vcc_sram = 1100,
++ .xl = 12,
++ .xn = 1,
++ .smcfs = 104,
++ .sflfs = 156,
++ .hss = 104,
++ .dmcfs = 208,
++ .df_clk = 52,
++ .empi_clk = 52,
++ .power_mode = POWER_MODE_D0,
++ .flag = OP_FLAG_FACTORY,
++ .lpj = 778128*100/HZ,
++ .name = "156M",
++ },
++ /* 208MHz */
++ {
++ .vcc_core = 1000,
++ .vcc_sram = 1100,
++ .xl = 16,
++ .xn = 1,
++ .smcfs = 104,
++ .sflfs = 156,
++ .hss = 104,
++ .dmcfs = 260,
++ .df_clk = 52,
++ .empi_clk = 52,
++ .power_mode = POWER_MODE_D0,
++ .flag = OP_FLAG_FACTORY,
++ .lpj = 1036288*100/HZ,
++ .name = "208M",
++ },
++ /* 416MHz */
++ {
++ .vcc_core = 1100,
++ .vcc_sram = 1200,
++ .xl = 16,
++ .xn = 2,
++ .smcfs = 104,
++ .sflfs = 208,
++ .hss = 156,
++ .dmcfs = 260,
++ .df_clk = 52,
++ .empi_clk = 52,
++ .power_mode = POWER_MODE_D0,
++ .flag = OP_FLAG_FACTORY,
++ .lpj = 2076672*100/HZ,
++ .name = "416M",
++ },
++ /* 624MHz */
++ {
++ .vcc_core = 1375,
++ .vcc_sram = 1400,
++ .xl = 24,
++ .xn = 2,
++ .smcfs = 208,
++ .sflfs = 312,
++ .hss = 208,
++ .dmcfs = 260,
++ .df_clk = 52,
++ .empi_clk = 52,
++ .power_mode = POWER_MODE_D0,
++ .flag = OP_FLAG_FACTORY,
++ .lpj = 3112960*100/HZ,
++ .name = "624M",
++ },
++ /* D2 mode */
++ {
++ .vcc_core = 1100,
++ .vcc_sram = 1200,
++ .power_mode = POWER_MODE_D2,
++ .flag = OP_FLAG_FACTORY,
++ .name = "D2",
++ },
++};
++
++static struct dvfm_md_opt pxa935_op_array[] = {
++ /* 60MHz -- ring oscillator */
++ {
++ .vcc_core = 1250,
++ .xl = 0,
++ .xn = 0,
++ .smcfs = 15,
++ .sflfs = 60,
++ .hss = 60,
++ .dmcfs = 30,
++ .df_clk = 15,
++ .empi_clk = 15,
++ .power_mode = POWER_MODE_D0CS,
++ .flag = OP_FLAG_FACTORY,
++ .lpj = 293888*100/HZ,
++ .name = "D0CS",
++ },
++ /* 156MHz -- single PLL mode */
++ {
++ .vcc_core = 1250,
++ .xl = 12,
++ .xn = 1,
++ .smcfs = 104,
++ .sflfs = 156,
++ .hss = 104,
++ .dmcfs = 208,
++ .df_clk = 52,
++ .empi_clk = 52,
++ .power_mode = POWER_MODE_D0,
++ .flag = OP_FLAG_FACTORY,
++ .lpj = 778128*100/HZ,
++ .name = "156M",
++ },
++ /* 208MHz */
++ {
++ .vcc_core = 1250,
++ .xl = 16,
++ .xn = 1,
++ .smcfs = 104,
++ .sflfs = 156,
++ .hss = 104,
++ .dmcfs = 260,
++ .df_clk = 52,
++ .empi_clk = 52,
++ .power_mode = POWER_MODE_D0,
++ .flag = OP_FLAG_FACTORY,
++ .lpj = 1036288*100/HZ,
++ .name = "208M",
++ },
++ /* 416MHz */
++ {
++ .vcc_core = 1250,
++ .xl = 16,
++ .xn = 2,
++ .smcfs = 104,
++ .sflfs = 208,
++ .hss = 156,
++ .dmcfs = 260,
++ .df_clk = 52,
++ .empi_clk = 52,
++ .power_mode = POWER_MODE_D0,
++ .flag = OP_FLAG_FACTORY,
++ .lpj = 2076672*100/HZ,
++ .name = "416M",
++ },
++ /* 624MHz */
++ {
++ .vcc_core = 1250,
++ .xl = 24,
++ .xn = 2,
++ .smcfs = 208,
++ .sflfs = 312,
++ .hss = 208,
++ .dmcfs = 260,
++ .df_clk = 52,
++ .empi_clk = 52,
++ .power_mode = POWER_MODE_D0,
++ .flag = OP_FLAG_FACTORY,
++ .lpj = 3112960*100/HZ,
++ .name = "624M",
++ },
++#if 0
++ /* D1 mode */
++ {
++ .vcc_core = 1250,
++ .power_mode = POWER_MODE_D1,
++ .flag = OP_FLAG_FACTORY,
++ .name = "D1",
++ },
++#endif
++ /* D2 mode */
++ {
++ .vcc_core = 1250,
++ .power_mode = POWER_MODE_D2,
++ .flag = OP_FLAG_FACTORY,
++ .name = "D2",
++ },
++ /* CG (clock gated) mode */
++ {
++ .vcc_core = 1250,
++ .power_mode = POWER_MODE_CG,
++ .flag = OP_FLAG_FACTORY,
++ .name = "CG",
++ },
++
++};
++
++struct proc_op_array {
++ unsigned int cpuid;
++ char *cpu_name;
++ struct dvfm_md_opt *op_array;
++ unsigned int nr_op;
++};
++
++#define ARRAY_AND_SIZE(x) (x), ARRAY_SIZE(x)
++static struct proc_op_array proc_op_arrays[] = {
++ {0x6880, "PXA300", ARRAY_AND_SIZE(pxa300_op_array)},
++ {0x6890, "PXA310", ARRAY_AND_SIZE(pxa300_op_array)},
++ {0x6820, "PXA320", ARRAY_AND_SIZE(pxa320_op_array)},
++ {0x6830, "PXA930", ARRAY_AND_SIZE(pxa930_op_array)},
++ {0x6930, "PXA935/PXA940", ARRAY_AND_SIZE(pxa935_op_array)},
++};
++
++extern void pxa_clkcfg_write(unsigned int);
++
++static int prepare_dmc(void *driver_data, int flag);
++static int polling_dmc(void *driver_data);
++
++#ifdef CONFIG_ISPT
++static int ispt_dvfm_op(int old, int new)
++{
++ return ispt_dvfm_msg(old, new);
++}
++
++static int ispt_block_dvfm(int enable, int dev_id)
++{
++ int ret;
++ if (enable)
++ ret = ispt_driver_msg(CT_P_DVFM_BLOCK_REQ, dev_id);
++ else
++ ret = ispt_driver_msg(CT_P_DVFM_BLOCK_REL, dev_id);
++ return ret;
++}
++
++static int ispt_power_state_d2(void)
++{
++ return ispt_power_msg(CT_P_PWR_STATE_ENTRY_D2);
++}
++#else
++static int ispt_dvfm_op(int old, int new) { return 0; }
++static int ispt_block_dvfm(int enable, int dev_id) { return 0; }
++static int ispt_power_state_d2(void) { return 0; }
++#endif
++
++unsigned int pxa3xx_clk_to_lpj(unsigned int clk)
++{
++ if (clk == 624000000)
++ return LPJ_624M;
++ if (clk == 416000000)
++ return LPJ_416M;
++ if (clk == 208000000)
++ return LPJ_208M;
++ if (clk == 156000000)
++ return LPJ_156M;
++ if (clk == 104000000)
++ return LPJ_104M;
++ if (clk == 60000000)
++ return LPJ_D0CS;
++
++ printk(KERN_CRIT "%s does not support clk (%d MHz)\n",
++ __FILE__, clk/1000000);
++
++ return 0;
++}
++
++/* #####################Debug Function######################## */
++static int dump_op(void *driver_data, struct op_info *p, char *buf)
++{
++ int len, count, x;
++ struct dvfm_md_opt *q = (struct dvfm_md_opt *)p->op;
++
++ if (q == NULL)
++ len = sprintf(buf, "Can't dump the op info\n");
++ else {
++ /* calculate how much bits is set in device word */
++ x = p->device;
++ for (count = 0; x; x = x & (x - 1), count++);
++ len = sprintf(buf, "OP:%d name:%s [%s, %d]\n",
++ p->index, q->name, (count)?"Disabled"
++ :"Enabled", count);
++ len += sprintf(buf + len, "vcore:%d vsram:%d xl:%d xn:%d "
++ "smcfs:%d sflfs:%d hss:%d dmcfs:%d df_clk:%d "
++ "power_mode:%d flag:%d\n",
++ q->vcc_core, q->vcc_sram, q->xl, q->xn,
++ q->smcfs, q->sflfs, q->hss, q->dmcfs,
++ q->df_clk, q->power_mode, q->flag);
++ }
++ return len;
++}
++
++static int dump_op_list(void *driver_data, struct info_head *op_table, int flag)
++{
++ struct op_info *p = NULL;
++ struct dvfm_md_opt *q = NULL;
++ struct list_head *list = NULL;
++ struct pxa3xx_dvfm_info *info = driver_data;
++ char buf[256];
++
++ if (!op_table || list_empty(&op_table->list)) {
++ printk(KERN_WARNING "op list is null\n");
++ return -EINVAL;
++ }
++ memset(buf, 0, 256);
++ list_for_each(list, &op_table->list) {
++ p = list_entry(list, struct op_info, list);
++ q = (struct dvfm_md_opt *)p->op;
++ if (q->flag <= flag) {
++ dump_op(info, p, buf);
++ pr_debug("%s", buf);
++ }
++ }
++ return 0;
++}
++
++/* ########################################################## */
++static int freq2reg(struct pxa3xx_fv_info *fv_info, struct dvfm_md_opt *orig)
++{
++ int res = -EFAULT, tmp;
++
++ if (orig && fv_info) {
++ fv_info->vcc_core = orig->vcc_core;
++ fv_info->vcc_sram = orig->vcc_sram;
++ if (orig->power_mode == POWER_MODE_D0) {
++ res = 0;
++ fv_info->xl = orig->xl;
++ fv_info->xn = orig->xn;
++ fv_info->d0cs = 0;
++ if (orig->smcfs == 78)
++ fv_info->smcfs = 0;
++ else if (orig->smcfs == 104)
++ fv_info->smcfs = 2;
++ else if (orig->smcfs == 208)
++ fv_info->smcfs = 5;
++ else
++ res = -EINVAL;
++ if (orig->sflfs == 104)
++ fv_info->sflfs = 0;
++ else if (orig->sflfs == 156)
++ fv_info->sflfs = 1;
++ else if (orig->sflfs == 208)
++ fv_info->sflfs = 2;
++ else if (orig->sflfs == 312)
++ fv_info->sflfs = 3;
++ else
++ res = -EINVAL;
++ if (orig->hss == 104)
++ fv_info->hss = 0;
++ else if (orig->hss == 156)
++ fv_info->hss = 1;
++ else if (orig->hss == 208)
++ fv_info->hss = 2;
++ else
++ res = -EINVAL;
++ if (orig->dmcfs == 26)
++ fv_info->dmcfs = 0;
++ else if (orig->dmcfs == 208)
++ fv_info->dmcfs = 2;
++ else if (orig->dmcfs == 260)
++ fv_info->dmcfs = 3;
++ else
++ res = -EINVAL;
++ tmp = orig->smcfs / orig->df_clk;
++ if (tmp == 2)
++ fv_info->df_clk = 2;
++ else if (tmp == 4)
++ fv_info->df_clk = 3;
++ fv_info->empi_clk = fv_info->df_clk;
++ } else if (orig->power_mode == POWER_MODE_D0CS) {
++ fv_info->d0cs = 1;
++ res = 0;
++ }
++ }
++ return res;
++}
++
++int md2fvinfo(struct pxa3xx_fv_info *fv_info, struct dvfm_md_opt *orig)
++{
++ return freq2reg(fv_info, orig);
++}
++
++static int reg2freq(void *driver_data, struct dvfm_md_opt *fv_info)
++{
++ struct pxa3xx_dvfm_info *info = driver_data;
++ int res = -EFAULT, tmp;
++ uint32_t accr;
++
++ if (fv_info) {
++ res = 0;
++ if (fv_info->power_mode == POWER_MODE_D0CS) {
++ /* set S0D0CS operating pointer */
++ fv_info->power_mode = POWER_MODE_D0CS;
++ fv_info->xl = 0;
++ fv_info->xn = 0;
++ fv_info->smcfs = 15;
++ fv_info->sflfs = 60;
++ fv_info->hss = 60;
++ /* PXA310 A2 or PXA935/PXA940 */
++ accr = __raw_readl(info->clkmgr_base + ACCR_OFF);
++ if (accr & 0x80)
++ fv_info->dmcfs = 60;
++ else
++ fv_info->dmcfs = 30;
++ fv_info->df_clk = 15;
++ fv_info->empi_clk = 15;
++ } else {
++ /* set S0D0 operating pointer */
++ fv_info->power_mode = POWER_MODE_D0;
++ tmp = fv_info->smcfs;
++ if (tmp == 0)
++ fv_info->smcfs = 78;
++ else if (tmp == 2)
++ fv_info->smcfs = 104;
++ else if (tmp == 5)
++ fv_info->smcfs = 208;
++ else
++ res = -EINVAL;
++ tmp = fv_info->sflfs;
++ if (tmp == 0)
++ fv_info->sflfs = 104;
++ else if (tmp == 1)
++ fv_info->sflfs = 156;
++ else if (tmp == 2)
++ fv_info->sflfs = 208;
++ else if (tmp == 3)
++ fv_info->sflfs = 312;
++ tmp = fv_info->hss;
++ if (tmp == 0)
++ fv_info->hss = 104;
++ else if (tmp == 1)
++ fv_info->hss = 156;
++ else if (tmp == 2)
++ fv_info->hss = 208;
++ else
++ res = -EINVAL;
++ tmp = fv_info->dmcfs;
++ if (tmp == 0)
++ fv_info->dmcfs = 26;
++ else if (tmp == 2)
++ fv_info->dmcfs = 208;
++ else if (tmp == 3)
++ fv_info->dmcfs = 260;
++ else
++ res = -EINVAL;
++ tmp = fv_info->df_clk;
++ if (tmp == 1)
++ fv_info->df_clk = fv_info->smcfs;
++ else if (tmp == 2)
++ fv_info->df_clk = fv_info->smcfs / 2;
++ else if (tmp == 3)
++ fv_info->df_clk = fv_info->smcfs / 4;
++ fv_info->empi_clk = fv_info->df_clk;
++ }
++ }
++ return res;
++}
++
++/* Get current setting, and record it in fv_info structure
++ */
++static int capture_op_info(void *driver_data, struct dvfm_md_opt *fv_info)
++{
++ struct pxa3xx_dvfm_info *info = driver_data;
++ int res = -EFAULT;
++ uint32_t acsr, memclkcfg;
++
++ if (fv_info) {
++ memset(fv_info, 0, sizeof(struct dvfm_md_opt));
++ acsr = __raw_readl(info->clkmgr_base + ACSR_OFF);
++ fv_info->xl = (acsr >> ACCR_XL_OFFSET) & 0x1F;
++ fv_info->xn = (acsr >> ACCR_XN_OFFSET) & 0x07;
++ fv_info->smcfs = (acsr >> ACCR_SMCFS_OFFSET) & 0x07;
++ fv_info->sflfs = (acsr >> ACCR_SFLFS_OFFSET) & 0x03;
++ fv_info->hss = (acsr >> ACCR_HSS_OFFSET) & 0x03;
++ fv_info->dmcfs = (acsr >> ACCR_DMCFS_OFFSET) & 0x03;
++ fv_info->power_mode = (acsr >> ACCR_D0CS_OFFSET) & 0x01;
++ memclkcfg = __raw_readl(info->smc_base + MEMCLKCFG_OFF);
++ fv_info->df_clk = (memclkcfg >> MEMCLKCFG_DF_OFFSET) & 0x07;
++ fv_info->empi_clk = (memclkcfg >> MEMCLKCFG_EMPI_OFFSET) & 0x07;
++ res = reg2freq(info, fv_info);
++ pxa3xx_pmic_get_voltage(VCC_CORE, &fv_info->vcc_core);
++ if ((info->cpuid & 0xFFF0) == 0x6930) {
++ /* PXA935/PXA940 doesn't have VCC_SRAM */
++ fv_info->vcc_sram = 0;
++ } else {
++ pxa3xx_pmic_get_voltage(VCC_SRAM, &fv_info->vcc_sram);
++ }
++ /* TODO: mix up the usage of struct dvfm_md_opt and struct pxa3xx_fv_info
++ * better to define reg2freq(struct dvfm_md_opt *md_info,
++ * struct pxa3xx_fv_info *fv_info)
++ */
++ }
++ return res;
++}
++
++/* return all op including user defined op, and boot op */
++static int get_op_num(void *driver_data, struct info_head *op_table)
++{
++ struct list_head *entry = NULL;
++ int num = 0;
++
++ if (!op_table)
++ goto out;
++ read_lock(&op_table->lock);
++ if (list_empty(&op_table->list)) {
++ read_unlock(&op_table->lock);
++ goto out;
++ }
++ list_for_each(entry, &op_table->list) {
++ num++;
++ }
++ read_unlock(&op_table->lock);
++out:
++ return num;
++}
++
++/* return op name. */
++static char *get_op_name(void *driver_data, struct op_info *p)
++{
++ struct dvfm_md_opt *q = NULL;
++ if (p == NULL)
++ return NULL;
++ q = (struct dvfm_md_opt *)p->op;
++ return q->name;
++}
++
++static int update_voltage(void *driver_data, struct dvfm_md_opt *old, struct dvfm_md_opt *new)
++{
++ struct pxa3xx_dvfm_info *info = driver_data;
++
++ if (!(info->flags & PXA3xx_USE_POWER_I2C)) {
++ pxa3xx_pmic_set_voltage(VCC_CORE, new->vcc_core);
++ pxa3xx_pmic_set_voltage(VCC_SRAM, new->vcc_sram);
++ }
++ return 0;
++}
++
++static void pxa3xx_enter_d0cs(void *driver_data)
++{
++ struct pxa3xx_dvfm_info *info = driver_data;
++
++ unsigned int reg, spll = 0;
++ uint32_t accr, mdrefr;
++
++ reg = (12 << ACCR_XL_OFFSET) | (1 << ACCR_XN_OFFSET);
++ accr = __raw_readl(info->clkmgr_base + ACCR_OFF);
++ if (reg == (accr & (ACCR_XN_MASK | ACCR_XL_MASK))) {
++ spll = 1;
++ }
++ /* clk_disable(info->lcd_clk);*/
++ enter_d0cs_a((volatile u32 *)info->clkmgr_base, (volatile u32 *)info->dmc_base);
++ pxafb_set_pcd();
++ /* clk_enable(info->lcd_clk);*/
++ /* update to D0CS LPJ, it must be updated before udelay() */
++ loops_per_jiffy = d0cs_lpj;
++ if (cpu_is_pxa930())
++ udelay(200);
++ else
++ udelay(100);
++
++ /* disable PLL */
++ accr = __raw_readl(info->clkmgr_base + ACCR_OFF);
++ if (spll) {
++ /* single PLL mode only disable System PLL */
++ accr |= (1 << ACCR_SPDIS_OFFSET);
++ } else {
++ /* Disable both System PLL and Core PLL */
++ accr |= (1 << ACCR_XPDIS_OFFSET) | (1 << ACCR_SPDIS_OFFSET);
++ }
++ __raw_writel(accr, info->clkmgr_base + ACCR_OFF);
++
++ mdrefr = __raw_readl(info->dmc_base + MDREFR_OFF);
++ __raw_writel(mdrefr, info->dmc_base + MDREFR_OFF);
++}
++
++static void pxa3xx_exit_d0cs(void *driver_data)
++{
++ struct pxa3xx_dvfm_info *info = driver_data;
++ unsigned int spll = 0;
++ uint32_t reg, accr, acsr, mdrefr;
++
++ reg = (12 << ACCR_XL_OFFSET) | (1 << ACCR_XN_OFFSET);
++ accr = __raw_readl(info->clkmgr_base + ACCR_OFF);
++ if (reg == (accr & (ACCR_XN_MASK | ACCR_XL_MASK))) {
++ spll = 1;
++ }
++ /* enable PLL */
++ if (spll) {
++ /* single PLL mode only enable System PLL */
++ accr = __raw_readl(info->clkmgr_base + ACCR_OFF);
++ accr &= ~(1 << ACCR_SPDIS_OFFSET);
++ __raw_writel(accr, info->clkmgr_base + ACCR_OFF);
++ do {
++ acsr = __raw_readl(info->clkmgr_base + ACSR_OFF);
++ } while (acsr & (1 << ACCR_SPDIS_OFFSET));
++ } else {
++ /* enable both System PLL and Core PLL */
++ accr = __raw_readl(info->clkmgr_base + ACCR_OFF);
++ accr &= ~((1 << ACCR_XPDIS_OFFSET) |
++ (1 << ACCR_SPDIS_OFFSET));
++ __raw_writel(accr, info->clkmgr_base + ACCR_OFF);
++ do {
++ acsr = __raw_readl(info->clkmgr_base + ACSR_OFF);
++ } while (acsr & (1 << ACCR_XPDIS_OFFSET)
++ || acsr & (1 << ACCR_SPDIS_OFFSET));
++ }
++
++ /* clk_disable(info->lcd_clk);*/
++ exit_d0cs_a((volatile u32 *)info->clkmgr_base, (volatile u32 *)info->dmc_base);
++ mdrefr = __raw_readl(info->dmc_base + MDREFR_OFF);
++ __raw_writel(mdrefr, info->dmc_base + MDREFR_OFF);
++ pxafb_set_pcd();
++ /* clk_enable(info->lcd_clk);*/
++}
++
++/* Return 1 if Grayback PLL is on. */
++static int check_grayback_pll(void *driver_data)
++{
++ struct pxa3xx_dvfm_info *info = driver_data;
++
++ return (__raw_readl(info->clkmgr_base + OSCC_OFF) & (1 << 17));
++}
++
++static int set_grayback_pll(void *driver_data, int lev)
++{
++ struct pxa3xx_dvfm_info *info = driver_data;
++ int timeout = 100, turnoff;
++ uint32_t oscc, agenp;
++
++ if ((info->cpuid & 0xFFF0) != 0x6830 && (info->cpuid & 0xFFF0) != 0x6930) {
++ /* It's not PXA930/PXA935/PXA940*/
++ return 0;
++ }
++ if (lev) {
++ /* turn on grayback PLL */
++ for (;;){
++ timeout = 100;
++ /* clear OSCC[GPRM] */
++ oscc = __raw_readl(info->clkmgr_base + OSCC_OFF);
++ oscc &= ~(1 << 18);
++ __raw_writel(oscc, info->clkmgr_base + OSCC_OFF);
++
++ /* set AGENP[GBPLL_CTRL] and AGENP[GBPLL_ST] */
++ agenp = __raw_readl(info->bpmu_base + AGENP_OFF);
++ agenp |= (3 << 28);
++ __raw_writel(agenp, info->bpmu_base + AGENP_OFF);
++
++ /* check OSCC[GPRL] */
++ do {
++ oscc = __raw_readl(info->clkmgr_base + OSCC_OFF);
++ if (--timeout == 0)
++ break;
++ } while (!(oscc & (1 << 17)));
++
++ if (timeout)
++ break;
++ }
++ } else {
++ /* turn off Grayback PLL */
++ for (;;){
++ timeout = 100;
++ /* clear AGENP[GBPLL_CTRL] and AGENP[GBPLL_ST] */
++ agenp = __raw_readl(info->bpmu_base + AGENP_OFF);
++ if (agenp & (1 << 28)) {
++ turnoff = 1;
++ agenp &= ~(3 << 28);
++ agenp |= (2 << 28);
++ __raw_writel(agenp, info->bpmu_base + AGENP_OFF);
++
++ /* check OSCC[GPRL] */
++ do {
++ oscc = __raw_readl(info->clkmgr_base + OSCC_OFF);
++ if (--timeout == 0)
++ break;
++ } while ((oscc & (1 << 17)));
++ }
++
++ if (timeout)
++ break;
++ }
++ if (turnoff) {
++ /* set OSCC[GPRM] */
++ oscc = __raw_readl(info->clkmgr_base + OSCC_OFF);
++ oscc |= (1 << 18);
++ __raw_writel(oscc, info->clkmgr_base + OSCC_OFF);
++ }
++ }
++ return 0;
++}
++
++/*
++ * Return 2 if MTS should be changed to 2.
++ * Return 1 if MTS should be changed to 1.
++ * Return 0 if MTS won't be changed.
++ * In this function, the maxium MTS is 2.
++ */
++static int check_mts(struct dvfm_md_opt *old, struct dvfm_md_opt *new)
++{
++ int ret = 0;
++ if ((old->xn == 1) && (new->xn == 2))
++ ret = 2;
++ if ((old->xn == 2) && (new->xn == 1))
++ ret = 1;
++ return ret;
++}
++
++static int set_mts(void *driver_data, int mts)
++{
++ struct pxa3xx_dvfm_info *info = driver_data;
++ unsigned int ascr;
++
++ ascr = __raw_readl(info->bpmu_base + ASCR_OFF);
++ ascr &= ~(3 << ASCR_MTS_OFFSET);
++ ascr |= (mts << ASCR_MTS_OFFSET);
++ __raw_writel(ascr, info->bpmu_base + ASCR_OFF);
++
++ /* wait MTS is set */
++ do {
++ ascr = __raw_readl(info->bpmu_base + ASCR_OFF);
++ }while (((ascr >> ASCR_MTS_OFFSET) & 0x3)
++ != ((ascr >> ASCR_MTS_S_OFFSET) & 0x3));
++
++ return 0;
++}
++
++static int prepare_dmc(void *driver_data, int flag)
++{
++ struct pxa3xx_dvfm_info *info = driver_data;
++ int pll;
++ uint32_t mdcnfg, ddr_hcal;
++
++ if (flag == DMEMC_D0CS_ENTER) {
++ mdcnfg = __raw_readl(info->dmc_base + MDCNFG_OFF);
++ mdcnfg |= (1 << MDCNFG_HWFREQ_OFFSET);
++ __raw_writel(mdcnfg, info->dmc_base + MDCNFG_OFF);
++
++ ddr_hcal = __raw_readl(info->dmc_base + DDR_HCAL_OFF);
++ ddr_hcal &= ~(1 << HCAL_HCEN_OFFSET);
++ __raw_writel(ddr_hcal, info->dmc_base + DDR_HCAL_OFF);
++
++ return 0;
++ } else if (flag == DMEMC_D0CS_EXIT) {
++ mdcnfg = __raw_readl(info->dmc_base + MDCNFG_OFF);
++ mdcnfg |= (1 << MDCNFG_HWFREQ_OFFSET);
++ __raw_writel(mdcnfg, info->dmc_base + MDCNFG_OFF);
++
++ ddr_hcal = __raw_readl(info->dmc_base + DDR_HCAL_OFF);
++ ddr_hcal |= (1 << HCAL_HCEN_OFFSET);
++ __raw_writel(ddr_hcal, info->dmc_base + DDR_HCAL_OFF);
++
++ return 0;
++ } else if (flag == DMEMC_FREQ_LOW) {
++ pll = 3;
++ } else {
++ pll = 2;
++ }
++
++ mdcnfg = __raw_readl(info->dmc_base + MDCNFG_OFF);
++ mdcnfg &= ~(3 << 28);
++ mdcnfg |= (pll << 28);
++ __raw_writel(mdcnfg, info->dmc_base + MDCNFG_OFF);
++ mdcnfg = __raw_readl(info->dmc_base + MDCNFG_OFF);
++
++ ddr_hcal = __raw_readl(info->dmc_base + DDR_HCAL_OFF);
++ ddr_hcal |= (1 << HCAL_HCEN_OFFSET);
++ __raw_writel(ddr_hcal, info->dmc_base + DDR_HCAL_OFF);
++ ddr_hcal = __raw_readl(info->dmc_base + DDR_HCAL_OFF);
++
++ do {
++ /*pr_debug("polling MDCNFG:0x%x\n", MDCNFG);*/
++ mdcnfg = __raw_readl(info->dmc_base + MDCNFG_OFF);
++ } while (((mdcnfg >> 28) & 0x3) != pll);
++
++ return 0;
++}
++
++static int set_dmc60(void *driver_data, int flag)
++{
++ struct pxa3xx_dvfm_info *info = driver_data;
++ uint32_t accr, reg;
++
++ accr = __raw_readl(info->clkmgr_base + ACCR_OFF);
++ if (flag)
++ accr |= 0x80;
++ else
++ accr &= ~0x80;
++ __raw_writel(accr, info->clkmgr_base + ACCR_OFF);
++ /* polling ACCR */
++ do {
++ reg = __raw_readl(info->clkmgr_base + ACCR_OFF);
++ } while ((accr & 0x80) != (reg & 0x80));
++
++ return 0;
++}
++
++/* set DF and EMPI divider */
++/* TODO: why did not we see DF/EMPI clock as input here? If we want to set DFI_clock or
++ * EMPI clock as other frequecy than 52, how can we do?
++ */
++static int set_df(void *driver_data, int smc)
++{
++ struct pxa3xx_dvfm_info *info = driver_data;
++ uint32_t memclkcfg;
++ int fix_empi;
++
++ if (((info->cpuid > 0x6880) && (info->cpuid <= 0x6881))
++ || ((info->cpuid >= 0x6890) && (info->cpuid <= 0x6892)))
++ /* It's PXA300 or PXA310 */
++ fix_empi = 1;
++ else
++ fix_empi = 0;
++
++ memclkcfg = __raw_readl(info->smc_base + MEMCLKCFG_OFF);
++ memclkcfg &= ~((7 << MEMCLKCFG_DF_OFFSET) | (7 << MEMCLKCFG_EMPI_OFFSET));
++ if (fix_empi) {
++ memclkcfg |= (3 << MEMCLKCFG_EMPI_OFFSET);
++ switch (smc) {
++ case 208:
++ /* divider -- 4 */
++ memclkcfg |= (3 << MEMCLKCFG_DF_OFFSET);
++ break;
++ case 104:
++ /* divider -- 2 */
++ memclkcfg |= (2 << MEMCLKCFG_DF_OFFSET);
++ break;
++ case 78:
++ /* divider -- 4 */
++ memclkcfg |= (3 << MEMCLKCFG_DF_OFFSET);
++ break;
++ }
++ } else {
++ switch (smc) {
++ case 208:
++ /* divider -- 4 */
++ memclkcfg |= (3 << MEMCLKCFG_DF_OFFSET);
++ memclkcfg |= (3 << MEMCLKCFG_EMPI_OFFSET);
++ break;
++ case 104:
++ /* divider -- 2 */
++ memclkcfg |= (2 << MEMCLKCFG_DF_OFFSET);
++ memclkcfg |= (2 << MEMCLKCFG_EMPI_OFFSET);
++ break;
++ case 78:
++ /* divider -- 4 */
++ memclkcfg |= (3 << MEMCLKCFG_DF_OFFSET);
++ memclkcfg |= (3 << MEMCLKCFG_EMPI_OFFSET);
++ break;
++ }
++ }
++ __raw_writel(memclkcfg, info->smc_base + MEMCLKCFG_OFF);
++ memclkcfg = __raw_readl(info->smc_base + MEMCLKCFG_OFF);
++
++ return 0;
++}
++
++/* TODO: sugguest to differentiate the operating point definition from
++ * register info.And we can remove *reg_new here, and convert dvfm_md_opt to
++ * it in the routine. That will make it much more clear.
++ */
++static int update_hss(void *driver_data, struct dvfm_md_opt *old, struct dvfm_md_opt *new,
++ struct pxa3xx_fv_info *fv_info)
++{
++ struct pxa3xx_dvfm_info *info = driver_data;
++ unsigned int accr, acsr;
++
++ if (old->hss != new->hss) {
++ accr = __raw_readl(info->clkmgr_base + ACCR_OFF);
++ accr &= ~ACCR_HSS_MASK;
++ accr |= (fv_info->hss << ACCR_HSS_OFFSET);
++ __raw_writel(accr, info->clkmgr_base + ACCR_OFF);
++ /* wait until ACSR is changed */
++ do {
++ accr = __raw_readl(info->clkmgr_base + ACCR_OFF) ;
++ acsr = __raw_readl(info->clkmgr_base + ACSR_OFF) ;
++ }while ((accr & ACCR_HSS_MASK) != (acsr & ACCR_HSS_MASK));
++ /* clk_disable(info->lcd_clk);*/
++ /* set PCD just after HSS updated */
++ pxafb_set_pcd();
++ /* clk_enable(info->lcd_clk);*/
++ }
++
++ return 0;
++}
++
++static int update_bus_freq(void *driver_data, struct dvfm_md_opt *old, struct dvfm_md_opt *new)
++{
++ struct pxa3xx_dvfm_info *info = driver_data;
++ struct pxa3xx_fv_info fv_info;
++ uint32_t accr, acsr, mdcnfg, mask;
++ int timeout, dmcflag = 1;
++
++ freq2reg(&fv_info, new);
++ if (old->dmcfs < new->dmcfs)
++ prepare_dmc(info, DMEMC_FREQ_HIGH);
++ else if (old->dmcfs > new->dmcfs)
++ prepare_dmc(info, DMEMC_FREQ_LOW);
++ else
++ dmcflag = 0;
++ if (new->smcfs == 208 || new->smcfs == 78)
++ set_df(info, new->smcfs);
++
++ accr = __raw_readl(info->clkmgr_base + ACCR_OFF);
++ mask = 0;
++ if (old->smcfs != new->smcfs) {
++ accr &= ~ACCR_SMCFS_MASK;
++ accr |= (fv_info.smcfs << ACCR_SMCFS_OFFSET);
++ mask |= ACCR_SMCFS_MASK;
++ }
++ if (old->sflfs != new->sflfs) {
++ accr &= ~ACCR_SFLFS_MASK;
++ accr |= (fv_info.sflfs << ACCR_SFLFS_OFFSET);
++ mask |= ACCR_SFLFS_MASK;
++ }
++ if (old->dmcfs != new->dmcfs) {
++ accr &= ~ACCR_DMCFS_MASK;
++ accr |= (fv_info.dmcfs << ACCR_DMCFS_OFFSET);
++ mask |= ACCR_DMCFS_MASK;
++ }
++ __raw_writel(accr, info->clkmgr_base + ACCR_OFF);
++ accr = __raw_readl(info->clkmgr_base + ACCR_OFF);
++
++ /* wait until ACSR is changed */
++ do {
++ accr = __raw_readl(info->clkmgr_base + ACCR_OFF);
++ acsr = __raw_readl(info->clkmgr_base + ACSR_OFF);
++ } while ((accr & mask) != (acsr & mask));
++
++ if (dmcflag) {
++ timeout = 10;
++ do {
++ mdcnfg = __raw_readl(info->dmc_base + MDCNFG_OFF);
++ udelay(1);
++ if (--timeout == 0) {
++ printk(KERN_WARNING "MDCNFG[29:28] isn't zero\n");
++ break;
++ }
++ } while (mdcnfg & ( 3 << 28));
++ }
++
++ if (new->smcfs == 104) {
++ set_df(info, new->smcfs);
++ }
++
++ update_hss(info, old, new, &fv_info);
++
++ return 0;
++}
++
++static int set_freq(void *driver_data, struct dvfm_md_opt *old, struct dvfm_md_opt *new)
++{
++ struct pxa3xx_dvfm_info *info = driver_data;
++ int spll;
++ uint32_t accr, acsr;
++
++ /* check whether new OP is single PLL mode */
++ if ((new->xl == 0x0c) && (new->xn == 0x1))
++ spll = 1;
++ else
++ spll = 0;
++
++ /* turn on Grayback PLL */
++ if (!spll & !check_grayback_pll(info))
++ set_grayback_pll(info ,1);
++ if (check_mts(old, new) == 2)
++ set_mts(info, 2);
++
++ accr = __raw_readl(info->clkmgr_base + ACCR_OFF);
++ accr &= ~(ACCR_XL_MASK | ACCR_XN_MASK | ACCR_XSPCLK_MASK);
++ accr |= ((new->xl << ACCR_XL_OFFSET) | (new->xn << ACCR_XN_OFFSET)
++ | (3 << ACCR_XSPCLK_OFFSET));
++ __raw_writel(accr, info->clkmgr_base + ACCR_OFF);
++ /* delay 2 cycles of 13MHz clock */
++ udelay(1);
++
++ if (check_mts(old, new) == 1)
++ set_mts(info, 1);
++
++ if ((new->xl == old->xl) && (new->xn != old->xn))
++ /* set T bit */
++ pxa_clkcfg_write(1);
++ else
++ /* set F bit */
++ pxa_clkcfg_write(2);
++ do {
++ accr = __raw_readl(info->clkmgr_base + ACCR_OFF);
++ acsr = __raw_readl(info->clkmgr_base + ACSR_OFF);
++ } while ((accr & (ACCR_XL_MASK | ACCR_XN_MASK))
++ != (acsr & (ACCR_XL_MASK | ACCR_XN_MASK)));
++
++ udelay(1);
++ update_bus_freq(info, old, new);
++
++ /* turn off Grayback PLL */
++ if (spll)
++ set_grayback_pll(info, 0);
++ return 0;
++}
++
++static int update_freq(void *driver_data, struct dvfm_freqs *freqs)
++{
++ struct pxa3xx_dvfm_info *info = driver_data;
++ static struct dvfm_md_opt before_d0cs;
++ struct dvfm_md_opt old, new;
++ struct op_info *p = NULL;
++ unsigned long flags;
++ int found = 0, new_op = cur_op;
++
++ memset(&old, 0, sizeof(struct dvfm_md_opt));
++ memset(&new, 0, sizeof(struct dvfm_md_opt));
++ write_lock_irqsave(&pxa3xx_dvfm_op_list.lock, flags);
++ if (!list_empty(&pxa3xx_dvfm_op_list.list)) {
++ list_for_each_entry(p, &pxa3xx_dvfm_op_list.list, list) {
++ if (p->index == freqs->old) {
++ found++;
++ memcpy(&old, (struct dvfm_md_opt *)p->op,
++ sizeof(struct dvfm_md_opt));
++ }
++ if (p->index == freqs->new) {
++ found++;
++ memcpy(&new, (struct dvfm_md_opt *)p->op,
++ sizeof(struct dvfm_md_opt));
++ new_op = p->index;
++ }
++ if (found == 2)
++ break;
++ }
++ }
++ write_unlock_irqrestore(&pxa3xx_dvfm_op_list.lock, flags);
++ if (found != 2)
++ return -EINVAL;
++
++ if ((old.power_mode == POWER_MODE_D0)
++ && (new.power_mode == POWER_MODE_D0CS)) {
++ memcpy(&before_d0cs, &old, sizeof(struct dvfm_md_opt));
++
++ pxa3xx_enter_d0cs(info);
++ update_voltage(info, &old, &new);
++ cur_op = new_op;
++ loops_per_jiffy = new.lpj;
++ return 0;
++ } else if ((old.power_mode == POWER_MODE_D0CS)
++ && (new.power_mode == POWER_MODE_D0)) {
++ if (memcmp(&before_d0cs, &new, sizeof(struct dvfm_md_opt))) {
++ /* exit d0cs and set new operating point */
++ if ((before_d0cs.vcc_core < new.vcc_core) ||
++ (before_d0cs.vcc_sram < new.vcc_sram)) {
++ update_voltage(info, &old, &new);
++ } else {
++ update_voltage(info, &old, &before_d0cs);
++ }
++ pxa3xx_exit_d0cs(info);
++ set_freq(info, &before_d0cs, &new);
++
++ if ((before_d0cs.vcc_core > new.vcc_core) ||
++ (before_d0cs.vcc_sram > new.vcc_sram))
++ update_voltage(info, &before_d0cs, &new);
++ } else {
++ update_voltage(info, &old, &new);
++ /* exit d0cs */
++ pxa3xx_exit_d0cs(info);
++ }
++ cur_op = new_op;
++ loops_per_jiffy = new.lpj;
++ return 0;
++ } else if ((old.power_mode == POWER_MODE_D0CS)
++ && (new.power_mode == POWER_MODE_D0CS)) {
++ cur_op = new_op;
++ return 0;
++ }
++
++ if (old.core < new.core) {
++ update_voltage(info, &old, &new);
++ }
++ set_freq(info, &old, &new);
++ if (old.core > new.core) {
++ update_voltage(info, &old, &new);
++ }
++ cur_op = new_op;
++ if ((new.power_mode == POWER_MODE_D0)
++ || (new.power_mode == POWER_MODE_D0CS))
++ loops_per_jiffy = new.lpj;
++ return 0;
++}
++
++/* function of entering low power mode */
++extern void enter_lowpower_mode(int state);
++
++static void do_freq_notify(void *driver_data, struct dvfm_freqs *freqs)
++{
++ struct pxa3xx_dvfm_info *info = driver_data;
++
++ dvfm_notifier_frequency(freqs, DVFM_FREQ_PRECHANGE);
++ update_freq(info, freqs);
++ dvfm_notifier_frequency(freqs, DVFM_FREQ_POSTCHANGE);
++ ispt_dvfm_op(freqs->old, freqs->new);
++
++ printk("-- dvfm: cur_op=%d\n",cur_op);
++}
++
++static void do_lowpower_notify(void *driver_data, struct dvfm_freqs *freqs, unsigned int state)
++{
++ dvfm_notifier_frequency(freqs, DVFM_FREQ_PRECHANGE);
++ //enter_lowpower_mode(state);
++ dvfm_notifier_frequency(freqs, DVFM_FREQ_POSTCHANGE);
++ ispt_power_state_d2();
++}
++
++static int check_op(void *driver_data, struct dvfm_freqs *freqs, unsigned int new,
++ unsigned int relation)
++{
++ struct op_info *p = NULL;
++ struct dvfm_md_opt *q = NULL;
++ int core, tmp_core = -1, found = 0;
++ int first_op = 0;
++
++ freqs->new = -1;
++ if (!dvfm_find_op(new, &p)) {
++ q = (struct dvfm_md_opt *)p->op;
++ core = q->core;
++ } else
++ return -EINVAL;
++ /*
++ pr_debug("%s, old:%d, new:%d, core:%d\n", __FUNCTION__, freqs->old,
++ new, core);
++ */
++ read_lock(&pxa3xx_dvfm_op_list.lock);
++ if (relation == RELATION_LOW) {
++ /* Set the lowest frequency that is higher than specifed one */
++ list_for_each_entry(p, &pxa3xx_dvfm_op_list.list, list) {
++ q = (struct dvfm_md_opt *)p->op;
++ if (core == 0) {
++ /* Lowpower mode */
++ if ((q->power_mode == POWER_MODE_D1)
++ || (q->power_mode == POWER_MODE_D2)
++ || (q->power_mode == POWER_MODE_CG)) {
++ if (!p->device && (new == p->index)) {
++ freqs->new = p->index;
++ /*
++ pr_debug("%s, found op%d\n",
++ __FUNCTION__, p->index);
++ */
++ break;
++ }
++ }
++ continue;
++ }
++
++ if (!p->device && (q->core >= core)) {
++ if (tmp_core == -1 || (tmp_core >= q->core)) {
++ /*
++ pr_debug("%s, found op%d, core:%d\n",
++ __FUNCTION__, p->index,
++ q->core);
++ */
++ if (first_op == 0)
++ first_op = p->index;
++ freqs->new = p->index;
++ tmp_core = q->core;
++ found = 1;
++ }
++ if (found && (new == p->index))
++ break;
++ }
++ }
++ if (found && (first_op == 1) && (new != p->index))
++ freqs->new = first_op;
++ } else if (relation == RELATION_HIGH) {
++ /* Set the highest frequency that is lower than specified one */
++ list_for_each_entry(p, &pxa3xx_dvfm_op_list.list, list) {
++ q = (struct dvfm_md_opt *)p->op;
++ if (!p->device && (q->core <= core)) {
++ if (tmp_core == -1 || tmp_core < q->core) {
++ freqs->new = p->index;
++ tmp_core = q->core;
++ }
++ }
++ }
++ } else if (relation == RELATION_STICK) {
++ /* Set the specified frequency */
++ list_for_each_entry(p, &pxa3xx_dvfm_op_list.list, list) {
++ if (!p->device && (p->index == new)) {
++ freqs->new = p->index;
++ break;
++ }
++ }
++ }
++ read_unlock(&pxa3xx_dvfm_op_list.lock);
++ if (freqs->new == -1) {
++ /*
++ pr_debug("%s, Can't find op\n", __FUNCTION__);
++ pr_debug("%s, old:%d, new:%d, core:%d\n", __FUNCTION__,
++ freqs->old, new, core);
++ */
++ return -EINVAL;
++ }
++ return 0;
++}
++
++static int pxa3xx_get_freq(void *driver_data, struct op_info *p, struct op_freq *freq)
++{
++ struct dvfm_md_opt *q = (struct dvfm_md_opt *)p->op;
++ freq->cpu_freq = q->core;
++ return 0;
++}
++
++static int pxa3xx_check_active_op(void *driver_data, struct op_info *p)
++{
++ struct dvfm_md_opt *q = (struct dvfm_md_opt *)p->op;
++
++ if ((!strcmp(q->name, "D0CS")) && (boot_core_freq >= q->core))
++ return 0;
++
++ if ((!strcmp(q->name, "104M")) && (boot_core_freq >= q->core))
++ return 0;
++
++ if ((!strcmp(q->name, "156M")) && (boot_core_freq >= q->core))
++ return 0;
++
++ if ((!strcmp(q->name, "208M")) && (boot_core_freq >= q->core))
++ return 0;
++
++ if ((!strcmp(q->name, "416M")) && (boot_core_freq >= q->core))
++ return 0;
++
++ if ((!strcmp(q->name, "624M")) && (boot_core_freq >= q->core))
++ return 0;
++
++ return -EINVAL;
++}
++
++
++static int pxa3xx_set_op(void *driver_data, struct dvfm_freqs *freqs, unsigned int new,
++ unsigned int relation)
++{
++ struct pxa3xx_dvfm_info *info = driver_data;
++ struct dvfm_md_opt *md = NULL, *old_md = NULL;
++ struct op_info *p = NULL;
++ unsigned long flags;
++ int ret;
++ out_d0cs = 0;
++
++ local_fiq_disable();
++ local_irq_save(flags);
++ ret = dvfm_find_op(freqs->old, &p);
++ if (ret) {
++ printk("---- pxa3xx_set_op1 check_op failed to %d\n",new);
++ goto out;
++ }
++
++ memcpy(&freqs->old_info, p, sizeof(struct op_info));
++ ret = check_op(info, freqs, new, relation);
++ if (ret) {
++ printk("---- pxa3xx_set_op2 check_op failed to %d\n",new);
++ goto out;
++ }
++
++ if (!dvfm_find_op(freqs->new, &p)) {
++ memcpy(&(freqs->new_info), p, sizeof(struct op_info));
++ /* If find old op and new op is same, skip it.
++ * At here, ret should be zero.
++ */
++ if (freqs->old_info.index == freqs->new_info.index)
++ goto out;
++#ifdef DVFM_LP_SAFE
++ md = (struct dvfm_md_opt *)(freqs->new_info.op);
++ old_md = (struct dvfm_md_opt *)(freqs->old_info.op);
++ if ((old_md->power_mode == POWER_MODE_D0CS)
++ && ((md->power_mode == POWER_MODE_D1)
++ || (md->power_mode == POWER_MODE_D2))) {
++ dvfm_disable_op_name("D0CS", dvfm_dev_id);
++ out_d0cs = 1;
++ }
++
++ md = (struct dvfm_md_opt *)p->op;
++ switch (md->power_mode) {
++ case POWER_MODE_D0:
++ case POWER_MODE_D0CS:
++ do_freq_notify(info, freqs);
++ break;
++ case POWER_MODE_D1:
++ case POWER_MODE_D2:
++ case POWER_MODE_CG:
++ do_lowpower_notify(info, freqs, md->power_mode);
++ break;
++ }
++ local_irq_restore(flags);
++ local_fiq_enable();
++
++ if (out_d0cs) {
++ dvfm_enable_op_name("D0CS", dvfm_dev_id);
++ }
++#else
++ md = (struct dvfm_md_opt *)p->op;
++ switch (md->power_mode) {
++ case POWER_MODE_D0:
++ case POWER_MODE_D0CS:
++ do_freq_notify(info, freqs);
++ break;
++ case POWER_MODE_D1:
++ case POWER_MODE_D2:
++ case POWER_MODE_CG:
++ do_lowpower_notify(info, freqs, md->power_mode);
++ break;
++ }
++ local_irq_restore(flags);
++ local_fiq_enable();
++#endif
++ }
++ return 0;
++out:
++ local_irq_restore(flags);
++ local_fiq_enable();
++ return ret;
++}
++
++static int pxa3xx_request_op(void *driver_data, int index)
++{
++ struct dvfm_freqs freqs;
++ struct op_info *info = NULL;
++ struct dvfm_md_opt *md = NULL;
++ int relation, ret;
++ ret = dvfm_find_op(index, &info);
++ if (ret)
++ goto out;
++ freqs.old = cur_op;
++ freqs.new = index;
++ md = (struct dvfm_md_opt *)(info->op);
++ switch (md->power_mode) {
++ case POWER_MODE_D1:
++ case POWER_MODE_D2:
++ case POWER_MODE_CG:
++ relation = RELATION_STICK;
++ ret = pxa3xx_set_op(driver_data, &freqs, index, relation);
++ break;
++ default:
++ relation = RELATION_LOW;
++ /* only use non-low power mode as preferred op */
++ ret = pxa3xx_set_op(driver_data, &freqs, index, relation);
++ if (!ret)
++ preferred_op = index;
++ break;
++ }
++out:
++ return ret;
++}
++
++static int is_d0cs(void *driver_data)
++{
++ struct pxa3xx_dvfm_info *info = driver_data;
++ unsigned int acsr;
++ /* read ACSR */
++ acsr = __raw_readl(info->clkmgr_base + ACSR_OFF);
++ /* Check ring oscillator status */
++ if (acsr & (1 << 26))
++ return 1;
++ return 0;
++}
++
++/* Produce a operating point table */
++static int op_init(void *driver_data, struct info_head *op_table)
++{
++ struct pxa3xx_dvfm_info *info = driver_data;
++ unsigned long flags;
++ int i, index;
++ struct op_info *p = NULL, *q = NULL;
++ struct dvfm_md_opt *md = NULL, *smd = NULL;
++ struct proc_op_array *proc = NULL;
++
++ write_lock_irqsave(&op_table->lock, flags);
++ for (i = 0; i < ARRAY_SIZE(proc_op_arrays); i++){
++ if (proc_op_arrays[i].cpuid == (info->cpuid & 0xfff0)) {
++ proc = &proc_op_arrays[i];
++ break;
++ }
++ }
++ if (proc == NULL) {
++ printk(KERN_ERR "Failed to find op tables for cpu_id 0x%08x", info->cpuid);
++ write_unlock_irqrestore(&op_table->lock, flags);
++ return -EIO;
++ } else {
++ printk("initializing op table for %s\n", proc->cpu_name);
++ }
++ for (i = 0, index = 0; i < proc->nr_op; i++) {
++ /* PXA310 A2 or PXA935/PXA940, dmcfs 60MHz in S0D0CS mode */
++ if ((proc->op_array[i].power_mode == POWER_MODE_D0CS)
++ && (info->cpuid == 0x6892 || (info->cpuid & 0xFFF0) == 0x6930)) {
++ set_dmc60(info, 1);
++ proc->op_array[i].dmcfs = 60;
++ }
++
++ /* Set index of operating point used in idle */
++ if (proc->op_array[i].power_mode != POWER_MODE_D0) {
++ //set_idle_op(index, proc->op_array[i].power_mode);
++ }
++
++ md = (struct dvfm_md_opt *)kzalloc(sizeof(struct dvfm_md_opt),
++ GFP_KERNEL);
++ p = (struct op_info *)kzalloc(sizeof(struct op_info),
++ GFP_KERNEL);
++ p->op = (void *)md;
++ memcpy(p->op, &proc->op_array[i], sizeof(struct dvfm_md_opt));
++ md->core = 13 * md->xl * md->xn;
++ if (md->power_mode == POWER_MODE_D0CS)
++ md->core = 60;
++ p->index = index++;
++ list_add_tail(&(p->list), &(op_table->list));
++ }
++ md = (struct dvfm_md_opt *)kzalloc(sizeof(struct dvfm_md_opt),
++ GFP_KERNEL);
++ p = (struct op_info *)kzalloc(sizeof(struct op_info), GFP_KERNEL);
++ p->op = (void *)md;
++ if (capture_op_info(info, md)) {
++ printk(KERN_WARNING "Failed to get current op setting\n");
++ } else {
++ def_op = 0x5a5a; /* magic number */
++ list_for_each_entry(q, &(op_table->list), list) {
++ smd = (struct dvfm_md_opt *)q->op;
++ md->flag = smd->flag;
++ md->lpj = smd->lpj;
++ md->core = smd->core;
++ if (memcmp(md, smd, sizeof(struct dvfm_md_opt)) == 0) {
++ def_op = q->index;
++ break;
++ }
++ }
++ }
++ if (is_d0cs(driver_data))
++ md->core = 60;
++ else
++ md->core = 13 * md->xl * md->xn;
++ md->lpj = loops_per_jiffy;
++ md->flag = OP_FLAG_BOOT;
++ sprintf(md->name, "BOOT OP");
++
++ boot_core_freq = md->core;
++
++#if 0 /* disable CUSTOM OP for borq platfrom */
++ smd = (struct dvfm_md_opt *)kzalloc(sizeof(struct dvfm_md_opt),
++ GFP_KERNEL);
++ q = (struct op_info *)kzalloc(sizeof(struct op_info), GFP_KERNEL);
++ memcpy(q, p, sizeof(struct op_info));
++ memcpy(smd, md, sizeof(struct dvfm_md_opt));
++ smd->core = md->core;
++ smd->lpj = md->lpj;
++ smd->flag = OP_FLAG_USER_DEFINED;
++ sprintf(smd->name, "CUSTOM OP");
++ q->op = (void *)smd;
++ /* Add CUSTOM OP into op list */
++ q->index = index++;
++ list_add_tail(&q->list, &op_table->list);
++#endif
++ /* Add BOOT OP into op list */
++ p->index = index++;
++ preferred_op = p->index;
++ list_add_tail(&p->list, &op_table->list);
++ /* BOOT op */
++ if (def_op == 0x5a5a) {
++ cur_op = p->index;
++ def_op = p->index;
++ } else
++ cur_op = def_op;
++ pr_debug("%s, def_op:%d, cur_op:%d\n", __FUNCTION__, def_op, cur_op);
++
++ op_nums = proc->nr_op + 2; /* set the operating point number */
++
++ pr_debug("Current Operating Point is %d\n", cur_op);
++ dump_op_list(info, op_table, OP_FLAG_ALL);
++ write_unlock_irqrestore(&op_table->lock, flags);
++
++ return 0;
++}
++
++/*
++ * The machine operation of dvfm_enable
++ */
++static int pxa3xx_enable_dvfm(void *driver_data, int dev_id)
++{
++ struct pxa3xx_dvfm_info *info = driver_data;
++ struct dvfm_md_opt *md = NULL;
++ struct op_info *p = NULL;
++ int i, num;
++ num = get_op_num(info, &pxa3xx_dvfm_op_list);
++ for (i = 0; i < num; i++) {
++ if (!dvfm_find_op(i, &p)) {
++ md = (struct dvfm_md_opt *)p->op;
++ if (md->core < boot_core_freq)
++ dvfm_enable_op_name(md->name, dev_id);
++ }
++ }
++ ispt_block_dvfm(0, dev_id);
++ return 0;
++}
++
++/*
++ * The mach operation of dvfm_disable
++ */
++static int pxa3xx_disable_dvfm(void *driver_data, int dev_id)
++{
++ struct pxa3xx_dvfm_info *info = driver_data;
++ struct dvfm_md_opt *md = NULL;
++ struct op_info *p = NULL;
++ int i, num;
++ num = get_op_num(info, &pxa3xx_dvfm_op_list);
++ for (i = 0; i < num; i++) {
++ if (!dvfm_find_op(i, &p)) {
++ md = (struct dvfm_md_opt *)p->op;
++ if (md->core < boot_core_freq)
++ dvfm_disable_op_name(md->name, dev_id);
++ }
++ }
++ ispt_block_dvfm(1, dev_id);
++ return 0;
++}
++
++static int pxa3xx_enable_op(void *driver_data, int index, int relation)
++{
++ /*
++ * Restore preferred_op. Because this op is sugguested by policy maker
++ * or user.
++ */
++ return pxa3xx_request_op(driver_data, preferred_op);
++}
++
++static int pxa3xx_disable_op(void *driver_data, int index, int relation)
++{
++ struct dvfm_freqs freqs;
++ if (cur_op == index) {
++ freqs.old = index;
++ freqs.new = -1;
++ dvfm_set_op(&freqs, freqs.old, relation);
++ }
++ return 0;
++}
++
++static int pxa3xx_volt_show(void *driver_data, char *buf)
++{
++ struct dvfm_md_opt new;
++ int len = 0;
++
++ memset(&new, 0, sizeof(struct dvfm_md_opt));
++ pxa3xx_pmic_get_voltage(VCC_CORE, &new.vcc_core);
++ pxa3xx_pmic_get_voltage(VCC_SRAM, &new.vcc_sram);
++ len = sprintf(buf, "core voltage:%dmv, sram voltage:%dmv\n",
++ new.vcc_core, new.vcc_sram);
++ return len;
++}
++
++#ifdef CONFIG_CPU_PXA310
++static int pxa3xx_freq_show(void *driver_data, struct op_info *p, char *buf)
++{
++ struct dvfm_md_opt *q = (struct dvfm_md_opt *)p->op;
++ struct pxa3xx_fv_info info;
++
++ if (q == NULL)
++ return sprintf(buf, "unable to get frequency info\n");
++ else {
++ freq2reg(&info, q);
++ if (!info.d0cs){
++ return sprintf(buf, "current frequency is %luMhz"
++ " (XL: %lu, XN: %lu, %s) with\n"
++ " SMEM: %lu (%dMhz)\n"
++ " SRAM: %lu (%dMhz)\n"
++ " HSS: %lu (%dMhz)\n"
++ " DDR: %lu (%dMhz)\n"
++ " DFCLK: %lu (%dMhz)\n"
++ " EMPICLK: %lu (%dMhz)\n"
++ " D0CKEN_A: 0x%08x\n"
++ " D0CKEN_B: 0x%08x\n"
++ " ACCR: 0x%08x\n"
++ " ACSR: 0x%08x\n"
++ " OSCC: 0x%08x\n",
++ FREQ_CORE(info.xl, info.xn), info.xl, info.xn,
++ (info.xn != 0x1)? "Turbo Mode" : "Run Mode",
++ info.smcfs, FREQ_STMM(info.smcfs),
++ info.sflfs, FREQ_SRAM(info.sflfs),
++ info.hss, FREQ_HSS(info.hss),
++ info.dmcfs, FREQ_DDR(info.dmcfs),
++ info.df_clk, FREQ_DFCLK(info.smcfs, info.df_clk),
++ info.empi_clk, FREQ_EMPICLK(info.smcfs, info.empi_clk),
++ CKENA, CKENB, ACCR, ACSR, OSCC);
++ } else {
++ return sprintf(buf, "current frequency is 60Mhz"
++ " (ring oscillator mode) with\n"
++ " SMEM:15Mhz\n"
++ " SRAM:60Mhz\n"
++ " HSS:60Mhz\n"
++ " DDR:30Mhz\n"
++ " DFCLK:%sMhz\n"
++ " EMPICLK:%sMhz\n"
++ " D0CKEN_A: 0x%08x\n"
++ " D0CKEN_B: 0x%08x\n"
++ " ACCR: 0x%08x\n"
++ " ACSR: 0x%08x\n"
++ " OSCC: 0x%08x\n",
++ (info.df_clk == 1)?"15":
++ (info.df_clk == 2)?"7.5":
++ (info.df_clk == 3)?"3.75":"0",
++ (info.empi_clk == 1)?"15":
++ (info.empi_clk == 2)?"7.5":
++ (info.empi_clk == 3)?"3.75":"0",
++ CKENA, CKENB, ACCR, ACSR, OSCC);
++ }
++
++
++ }
++}
++#endif
++
++#ifdef CONFIG_PXA3xx_DVFM_STATS
++/* Convert ticks from 32K timer to microseconds */
++static unsigned int pxa3xx_ticks_to_usec(unsigned int ticks)
++{
++ return (ticks * 5 * 5 * 5 * 5 * 5 * 5) >> 9;
++}
++
++static unsigned int pxa3xx_ticks_to_sec(unsigned int ticks)
++{
++ return (ticks >> 15);
++}
++
++static unsigned int pxa3xx_read_time(void)
++{
++ return OSCR4;
++}
++
++/* It's invoked by PM functions.
++ * PM functions can store the accurate time of entering/exiting low power
++ * mode.
++ */
++int calc_switchtime(unsigned int end, unsigned int start)
++{
++ switch_lowpower_before = end;
++ switch_lowpower_after = start;
++ return 0;
++}
++
++static int pxa3xx_stats_notifier_freq(struct notifier_block *nb,
++ unsigned long val, void *data)
++{
++ struct dvfm_freqs *freqs = (struct dvfm_freqs *)data;
++ struct op_info *info = &(freqs->new_info);
++ struct dvfm_md_opt *md = NULL;
++ unsigned int ticks;
++
++ ticks = pxa3xx_read_time();
++ md = (struct dvfm_md_opt *)(info->op);
++ if (md->power_mode == POWER_MODE_D0 ||
++ md->power_mode == POWER_MODE_D0CS) {
++ switch (val) {
++ case DVFM_FREQ_PRECHANGE:
++ calc_switchtime_start(freqs->old, freqs->new, ticks);
++ break;
++ case DVFM_FREQ_POSTCHANGE:
++ /* Calculate the costed time on switching frequency */
++ calc_switchtime_end(freqs->old, freqs->new, ticks);
++ dvfm_add_event(freqs->old, CPU_STATE_RUN,
++ freqs->new, CPU_STATE_RUN);
++ dvfm_add_timeslot(freqs->old, CPU_STATE_RUN);
++ mspm_add_event(freqs->old, CPU_STATE_RUN);
++ break;
++ }
++ } else if (md->power_mode == POWER_MODE_D1 ||
++ md->power_mode == POWER_MODE_D2 ||
++ md->power_mode == POWER_MODE_CG) {
++ switch (val) {
++ case DVFM_FREQ_PRECHANGE:
++ calc_switchtime_start(freqs->old, freqs->new, ticks);
++ /* Consider lowpower mode as idle mode */
++ dvfm_add_event(freqs->old, CPU_STATE_RUN,
++ freqs->new, CPU_STATE_IDLE);
++ dvfm_add_timeslot(freqs->old, CPU_STATE_RUN);
++ mspm_add_event(freqs->old, CPU_STATE_RUN);
++ break;
++ case DVFM_FREQ_POSTCHANGE:
++ /* switch_lowpower_start before switch_lowpower_after
++ * is updated in calc_switchtime().
++ * It's invoked in pm function.
++ */
++ calc_switchtime_end(freqs->old, freqs->new,
++ switch_lowpower_before);
++ calc_switchtime_start(freqs->new, freqs->old,
++ switch_lowpower_after);
++ calc_switchtime_end(freqs->new, freqs->old,
++ ticks);
++ dvfm_add_event(freqs->new, CPU_STATE_IDLE,
++ freqs->old, CPU_STATE_RUN);
++ dvfm_add_timeslot(freqs->new, CPU_STATE_IDLE);
++ mspm_add_event(freqs->new, CPU_STATE_IDLE);
++ break;
++ }
++ }
++ return 0;
++}
++#else
++#define pxa3xx_ticks_to_usec NULL
++#define pxa3xx_ticks_to_sec NULL
++#define pxa3xx_read_time NULL
++#endif
++
++static struct dvfm_driver pxa3xx_driver = {
++ .count = get_op_num,
++ .set = pxa3xx_set_op,
++ .dump = dump_op,
++ .name = get_op_name,
++ .request_set = pxa3xx_request_op,
++ .enable_dvfm = pxa3xx_enable_dvfm,
++ .disable_dvfm = pxa3xx_disable_dvfm,
++ .enable_op = pxa3xx_enable_op,
++ .disable_op = pxa3xx_disable_op,
++ .volt_show = pxa3xx_volt_show,
++#ifdef CONFIG_CPU_PXA310
++ .freq_show = pxa3xx_freq_show,
++#endif
++ .ticks_to_usec = pxa3xx_ticks_to_usec,
++ .ticks_to_sec = pxa3xx_ticks_to_sec,
++ .read_time = pxa3xx_read_time,
++ .get_freq = pxa3xx_get_freq,
++ .check_active_op = pxa3xx_check_active_op,
++};
++
++#ifdef CONFIG_PM
++static int pxa3xx_freq_suspend(struct platform_device *pdev, pm_message_t state)
++{
++ current_op = cur_op;
++ dvfm_request_op(1);
++ return 0;
++}
++
++static int pxa3xx_freq_resume(struct platform_device *pdev)
++{
++ dvfm_request_op(current_op);
++ return 0;
++}
++#else
++#define pxa3xx_freq_suspend NULL
++#define pxa3xx_freq_resume NULL
++#endif
++
++static void pxa3xx_poweri2c_init(struct pxa3xx_dvfm_info *info)
++{
++ uint32_t avcr, svcr, cvcr, pcfr, pvcr;
++
++ if ((info->flags & PXA3xx_USE_POWER_I2C) &&
++ ((info->cpuid & 0xfff0) == 0x6930)) {
++ /* set AVCR for PXA935/PXA940:
++ * level 0: 1250mv, 0x15
++ * level 1: 1250mv, 0x15
++ * level 2: 1250mv, 0x15
++ * level 3: 1250mv, 0x15
++ */
++ avcr = __raw_readl(info->spmu_base + AVCR_OFF);
++ avcr &= 0xE0E0E0E0;
++ avcr |= (0x15 << 24) | (0x15 << 16) | (0x15 << 8) | 0x15;
++ __raw_writel(avcr, info->spmu_base + AVCR_OFF);
++ avcr = __raw_readl(info->spmu_base + AVCR_OFF);
++
++ /* set delay */
++ pcfr = __raw_readl(info->spmu_base + PCFR_OFF);
++ pcfr &= 0x000FFFFF;
++ pcfr |= 0xCCF00000;
++ /* Disable pullup/pulldown in PWR_SCL and PWR_SDA */
++ pcfr |= 0x04;
++ __raw_writel(pcfr, info->spmu_base + PCFR_OFF);
++ pcfr = __raw_readl(info->spmu_base + PCFR_OFF);
++
++ /* enable FVE,PVE,TVE bit */
++ __raw_writel(0xe0500034, info->spmu_base + PVCR_OFF);
++ } else if (info->flags & PXA3xx_USE_POWER_I2C) {
++ /* set AVCR for PXA300/PXA310/PXA320/PXA930
++ * level 0: 1000mv, 0x0b
++ * level 1: 1100mv, 0x0f
++ * level 2: 1375mv, 0x1a
++ * level 3: 1400mv, 0x1b
++ */
++ avcr = __raw_readl(info->spmu_base + AVCR_OFF);
++ avcr &= 0xE0E0E0E0;
++ /* PXA930 B0(cpuid 0x6835) requires special setting */
++ if (info->cpuid == 0x6835)
++ avcr |= (0x1b << 24) | (0x1a << 16) | (0x0f << 8) | 0xb;
++ else
++ avcr |= (0x0f << 24) | (0x1a << 16) | (0x0f << 8) | 0xb;
++ __raw_writel(avcr, info->spmu_base + AVCR_OFF);
++ avcr = __raw_readl(info->spmu_base + AVCR_OFF);
++ /* set SVCR:
++ * level 0: 1100mv, 0x0f
++ * level 1: 1200mv, 0x13
++ * level 2: 1400mv, 0x1b
++ * level 3: 1400mv, 0x1b
++ */
++ svcr = __raw_readl(info->spmu_base + SVCR_OFF);
++ svcr &= 0xE0E0E0E0;
++ if (info->cpuid == 0x6835)
++ svcr |= (0x1b << 24) | (0x1b << 16) | (0x13 << 8) | 0xf;
++ else
++ svcr |= (0x0f << 24) | (0x1b << 16) | (0x13 << 8) | 0xf;
++ __raw_writel(svcr, info->spmu_base + SVCR_OFF);
++ svcr = __raw_readl(info->spmu_base + SVCR_OFF);
++ /* set CVCR:
++ * level 0: 925mv, 0x08
++ * level 1: 1250mv, 0x15
++ * level 2: 1375mv, 0x1a
++ * level 3: 1400mv, 0x1b
++ */
++ cvcr = __raw_readl(info->spmu_base + CVCR_OFF);
++ cvcr &= 0xE0E0E0E0;
++ if (info->cpuid == 0x6835)
++ cvcr |= (0x1b << 24) | (0x1a << 16) | (0x15 << 8) | 0x08;
++ else
++ cvcr |= (0x0f << 24) | (0x1a << 16) | (0x15 << 8) | 0x08;
++ __raw_writel(cvcr, info->spmu_base + CVCR_OFF);
++ cvcr = __raw_readl(info->spmu_base + CVCR_OFF);
++
++ /* set delay */
++ pcfr = __raw_readl(info->spmu_base + PCFR_OFF);
++ pcfr &= 0x000FFFFF;
++ pcfr |= 0xCCF00000;
++ /* Disable pullup/pulldown in PWR_SCL and PWR_SDA */
++ pcfr |= 0x04;
++ __raw_writel(pcfr, info->spmu_base + PCFR_OFF);
++ pcfr = __raw_readl(info->spmu_base + PCFR_OFF);
++
++ /* enable FVE,PVE,TVE bit */
++ __raw_writel(0xe0500034, info->spmu_base + PVCR_OFF);
++ } else {
++ /* disable FVE,PVE,TVE,FVC bit */
++ pvcr = __raw_readl(info->spmu_base + PVCR_OFF);
++ pvcr &= 0x0fffffff;
++ __raw_writel(pvcr, info->spmu_base + PVCR_OFF);
++ }
++}
++
++int gpio_reset_work_around(void)
++{
++ dvfm_disable_op_name("624M", dvfm_dev_id);
++ dvfm_disable_op_name("416M", dvfm_dev_id);
++ dvfm_disable_op_name("208M", dvfm_dev_id);
++ return 0;
++}
++
++static int pxa3xx_freq_probe(struct platform_device *pdev)
++{
++ struct resource *res;
++ struct pxa3xx_freq_mach_info *pdata;
++ struct pxa3xx_dvfm_info *info;
++ int rc;
++
++ /* initialize the information necessary to frequency/voltage change operation */
++ pdata = pdev->dev.platform_data;
++ info = kzalloc(sizeof(struct pxa3xx_dvfm_info), GFP_KERNEL);
++ info->flags = pdata->flags;
++ info->cpuid = read_cpuid(0) & 0xFFFF;
++
++ //info->lcd_clk = clk_get(&pxa_device_fb.dev, "LCDCLK");
++ //if (IS_ERR(info->lcd_clk)) goto err;
++
++ res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "clkmgr_regs");
++ if (!res) goto err;
++ info->clkmgr_base = ioremap(res->start, res->end - res->start + 1);
++
++ res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "spmu_regs");
++ if (!res) goto err;
++ info->spmu_base = ioremap(res->start, res->end - res->start + 1);
++
++ res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "bpmu_regs");
++ if (!res) goto err;
++ info->bpmu_base = ioremap(res->start, res->end - res->start + 1);
++
++ res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "dmc_regs");
++ if (!res) goto err;
++ info->dmc_base = ioremap(res->start, res->end - res->start + 1);
++
++ res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "smc_regs");
++ if (!res) goto err;
++ info->smc_base = ioremap(res->start, res->end - res->start + 1);
++
++ pxa3xx_driver.priv = info;
++
++ pxa3xx_poweri2c_init(info);
++ op_init(info, &pxa3xx_dvfm_op_list);
++
++ return dvfm_register_driver(&pxa3xx_driver, &pxa3xx_dvfm_op_list);
++err:
++ printk("pxa3xx_dvfm init failed\n");
++ return -EIO;
++}
++
++static int pxa3xx_freq_remove(struct platform_device *pdev)
++{
++ kfree(pxa3xx_driver.priv);
++ return dvfm_unregister_driver(&pxa3xx_driver);
++}
++
++static struct platform_driver pxa3xx_freq_driver = {
++ .driver = {
++ .name = "pxa3xx-freq",
++ },
++ .probe = pxa3xx_freq_probe,
++ .remove = pxa3xx_freq_remove,
++#ifdef CONFIG_PM
++ //.suspend = pxa3xx_freq_suspend,
++ //.resume = pxa3xx_freq_resume,
++#endif
++};
++
++
++static int __init pxa3xx_freq_init(void)
++{
++ int ret;
++ ret = platform_driver_register(&pxa3xx_freq_driver);
++ if (ret)
++ goto out;
++#ifdef CONFIG_PXA3xx_DVFM_STATS
++ ret = dvfm_register_notifier(&notifier_freq_block,
++ DVFM_FREQUENCY_NOTIFIER);
++#endif
++ ret = dvfm_register("DVFM", &dvfm_dev_id);
++out:
++ return ret;
++}
++
++static void __exit pxa3xx_freq_exit(void)
++{
++#ifdef CONFIG_PXA3xx_DVFM_STATS
++ dvfm_unregister_notifier(&notifier_freq_block,
++ DVFM_FREQUENCY_NOTIFIER);
++#endif
++ dvfm_unregister("DVFM", &dvfm_dev_id);
++ platform_driver_unregister(&pxa3xx_freq_driver);
++}
++
++module_init(pxa3xx_freq_init);
++module_exit(pxa3xx_freq_exit);
++
+diff -ur linux-2.6.32/arch/arm/mach-pxa/pxa3xx_dvfm_ll.S kernel/arch/arm/mach-pxa/pxa3xx_dvfm_ll.S
+--- linux-2.6.32/arch/arm/mach-pxa/pxa3xx_dvfm_ll.S 2009-12-13 13:00:42.108609192 +0200
++++ kernel/arch/arm/mach-pxa/pxa3xx_dvfm_ll.S 2009-12-12 16:09:26.482948915 +0200
+@@ -0,0 +1,261 @@
++@
++@ This program is free software; you can redistribute it and/or modify
++@ it under the terms of the GNU General Public License as published by
++@ the Free Software Foundation; either version 2 of the License, or
++@ (at your option) any later version.
++@
++@ This program is distributed in the hope that it will be useful,
++@ but WITHOUT ANY WARRANTY; without even the implied warranty of
++@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++@ GNU General Public License for more details.
++@
++@ You should have received a copy of the GNU General Public License
++@ along with this program; if not, write to the Free Software
++@ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++@
++@
++@ FILENAME: pxa3xx_dvfm_ll.S
++@
++@ PURPOSE: Provides low level DVFM primitive functions written specifically
++@ for the Monahans/Zylonite processor/platform.
++@
++@******************************************************************************
++
++
++@
++@ List of primitive functions in this module:
++@
++ .global enter_d0cs_a
++ .global exit_d0cs_a
++ .global pxa_clkcfg_read
++ .global pxa_clkcfg_write
++
++.equ CLKMGR_ACCR_OFFSET,0x0000
++.equ CLKMGR_ACSR_OFFSET,0x0004
++
++.equ DMEMC_MDCNFG_OFFSET, 0x0000
++.equ DMEMC_DDRHCAL_OFFSET,0x0060
++
++ .text
++
++@
++@
++@ UINT32 enter_d0cs_a
++@
++@
++@ Description:
++@ put system into D0CS mode.
++@
++@ Input Parameters:
++@ r0 - arg1, the address of Clock Manager Controller
++@ r1 - arg2, the address of Dynamic Memory controller
++@ Returns:
++@ r0 - success (0) or failure(1)
++@
++@ Registers Modified:
++@ ACCR, MDCNFG, DDR_HCAL
++@ General Purpose Registers Modified: r3, r4
++@
++@ NOTE:
++@
++
++enter_d0cs_a:
++ stmfd sp!, {r3, r4, lr}
++ @
++ @ return directly if current mode is D0CS already
++ @
++ ldr r3, [r0, #CLKMGR_ACSR_OFFSET] @ load ACSR
++ tst r3, #0x04000000
++ movne r0, #0
++ bne 6f
++0:
++ @
++ @ set DMEMC.MDCFG[29]
++ @
++ ldr r3, [r1, #DMEMC_MDCNFG_OFFSET] @ get MDCNFG
++ orr r3, r3, #0x20000000 @ Set DMEMC.MDCNFG[29].
++ str r3, [r1, #DMEMC_MDCNFG_OFFSET] @ load MDCNFG
++1:
++ ldr r3, [r1, #DMEMC_MDCNFG_OFFSET] @ ensure DMEMC.MDCNFG[29] bit is written
++ tst r3, #0x20000000
++ beq 1b
++
++ @
++ @ clear DMEMC.DDR_HCAL[31]
++ @
++ ldr r3, [r1, #DMEMC_DDRHCAL_OFFSET] @ get DDR_HCAL
++ bic r3, r3, #0x80000000 @ Insure DDR_HCAL[31] is clear
++ str r3, [r1, #DMEMC_DDRHCAL_OFFSET] @ load DDR_HCAL
++2:
++ ldr r3, [r1, #DMEMC_DDRHCAL_OFFSET] @ Insure DDR_HCAL[31] is clear
++ tst r3, #0x80000000
++ bne 2b
++
++ @
++ @ set ACCR[D0CS] bit
++ @
++ ldr r3, [r0, #CLKMGR_ACCR_OFFSET] @ get ACCR
++ orr r3, r3, #0x04000000 @ set D0CS bit in ACCR
++ str r3, [r0, #CLKMGR_ACCR_OFFSET] @ load ACCR
++3:
++ ldr r3, [r0, #CLKMGR_ACCR_OFFSET] @ ensure D0CS bit is written
++ tst r3, #0x04000000
++ beq 3b
++
++ @
++ @ enter D0CS mode
++ @
++ mov r4, #5 @ r4: power mode
++ b enterd0cs @ skip the garbage before .align 5
++ .align 5
++enterd0cs:
++ mcr p14, 0, r4, c7, c0, 0 @ enter D0CS mode
++4: @ wait for system to enter D0CS really
++ ldr r3, [r0, #CLKMGR_ACSR_OFFSET] @ load ACSR
++ tst r3, #0x04000000
++ beq 4b
++5: @ wait for DMEMC.MDCNFG[29] clear
++ ldr r3, [r1, #DMEMC_MDCNFG_OFFSET]
++ tst r3, #0x20000000
++ bne 5b
++
++6:
++ @
++ @ return
++ @
++ mov r0, #0
++ ldmfd sp!, {r3, r4, pc} @ return
++
++@
++@
++@ UINT32 exit_d0cs_a
++@
++@
++@ Description:
++@ let system exit D0CS mode.
++@
++@ r0 - arg1, the address of Clock Manager Controller
++@ r1 - arg2, the address of Dynamic Memory controller
++@ Returns:
++@ r0 - success (0) or failure(1)
++@
++@ Registers Modified:
++@ ACCR, MDCNFG, DDR_HCAL
++@ General Purpose Registers Modified: r3, r4
++@
++@ NOTE:
++@
++
++exit_d0cs_a:
++ stmfd sp!, {r3,r4,lr}
++ @
++ @ return directly if current mode is not D0CS
++ @
++ ldr r3, [r0, #CLKMGR_ACSR_OFFSET] @ load ACSR
++ tst r3, #0x04000000
++ beq 6f
++0:
++ @
++ @ set DMEMC.MDCFG[29]
++ @
++ ldr r3, [r1, #DMEMC_MDCNFG_OFFSET] @ get MDCNFG
++ orr r3, r3, #0x20000000 @ Set DMEMC.MDCNFG[29].
++ str r3, [r1, #DMEMC_MDCNFG_OFFSET] @ load MDCNFG
++1:
++ ldr r3, [r1, #DMEMC_MDCNFG_OFFSET] @ ensure DMEMC.MDCNFG[29] bit is written
++ tst r3, #0x20000000
++ beq 1b
++
++ @
++ @ set DMEMC.DDR_HCAL[31]
++ @
++ ldr r3, [r1, #DMEMC_DDRHCAL_OFFSET] @ get DDR_HCAL
++ orr r3, r3, #0x80000000 @ Insure DDR_HCAL[31] is set
++ str r3, [r1, #DMEMC_DDRHCAL_OFFSET] @ load DDR_HCAL
++2:
++ ldr r3, [r1, #DMEMC_DDRHCAL_OFFSET] @ Insure DDR_HCAL[31] is set
++ tst r3, #0x80000000
++ beq 2b
++
++ @
++ @ clear ACCR[D0CS] bit
++ @
++ ldr r3, [r0, #CLKMGR_ACCR_OFFSET] @ get ACCR
++ bic r3, r3, #0x04000000 @ clear D0CS bit in ACCR
++ str r3, [r0, #CLKMGR_ACCR_OFFSET] @ load ACCR
++3:
++ ldr r3, [r0, #CLKMGR_ACCR_OFFSET] @ ensure D0CS bit is clear
++ tst r3, #0x04000000
++ bne 3b
++
++ @
++ @ exit D0CS mode
++ @
++ mov r4, #5 @ r4: power mode
++ b exitd0cs @ skip the garbage before .align 5
++ .align 5
++exitd0cs:
++ mcr p14, 0, r4, c7, c0, 0 @ exit D0CS mode
++4: @ wait for system to exit D0CS really
++ ldr r3, [r0, #CLKMGR_ACSR_OFFSET] @ load ACSR
++ tst r3, #0x04000000
++ bne 4b
++5: @ wait for DMEMC.MDCNFG[29] clear
++ ldr r3, [r1, #DMEMC_MDCNFG_OFFSET]
++ tst r3, #0x20000000
++ bne 5b
++6:
++ @
++ @ return
++ @
++ mov r0, #0
++ ldmfd sp!, {r3,r4,pc} @ return
++
++@
++@ UINT32 pxa_clkcfg_read
++@
++@ Description:
++@ This routine reads the designated PMU register via CoProcesser 14.
++@
++@ Input Parameters:
++@
++@ Returns:
++@ r0 - clkcfg value
++@
++@ Registers Modified:
++@ CoProcessor Register Modified: None
++@ General Purpose Registers Modified: None
++@
++@
++
++pxa_clkcfg_read:
++ mrc p14, 0, r0, c6, c0, 0 @ Read clkcfg
++ bx lr @ return
++
++
++
++@
++@ void pxa_clkcfg_write
++@
++@ Description:
++@ This routine writes to the designated ClkCFG register via CoProcesser 14.
++@
++@ Input Parameters:
++@ r0 - arg1 - Value to write to ClkCFG register
++@
++
++@ Returns:
++@ None
++@
++@ Registers Modified:
++@ CoProcessor Register Modified: ClkCFG Register
++@ General Purpose Registers Modified: None
++@
++@ NOTE
++@ Error checking not included
++@
++
++pxa_clkcfg_write:
++ mcr p14, 0, r0, c6, c0, 0 @ Write ClkCFG
++ bx lr @ return
++
+diff -ur linux-2.6.32/arch/arm/mach-pxa/pxa3xx_pmic.c kernel/arch/arm/mach-pxa/pxa3xx_pmic.c
+--- linux-2.6.32/arch/arm/mach-pxa/pxa3xx_pmic.c 2009-12-13 13:00:47.651947246 +0200
++++ kernel/arch/arm/mach-pxa/pxa3xx_pmic.c 2009-12-12 16:09:26.482948915 +0200
+@@ -0,0 +1,394 @@
++/*
++ * Monahans PMIC abstrction layer
++ *
++ * This software program is licensed subject to the GNU General Public License
++ * (GPL).Version 2,June 1991, available at http://www.fsf.org/copyleft/gpl.html
++
++ * (C) Copyright 2007 Marvell International Ltd.
++ * All Rights Reserved
++ */
++
++#include <mach/pxa3xx_pmic.h>
++
++#include <mach/mfp.h>
++static struct pmic_ops *pxa3xx_pmic_ops;
++
++#ifdef DEBUG
++/* calculate the elapsed time on operating PMIC */
++static unsigned int start_time, end_time;
++void start_calc_time(void)
++{
++ start_time = OSCR;
++}
++
++void end_calc_time(void)
++{
++ unsigned int time;
++ end_time = OSCR
++ time = (end_time - start_time) * 100 / 325;
++
++ pr_debug("\n%s:\t:%dus\n", __func__, time);
++}
++#else
++void start_calc_time(void) {}
++void end_calc_time(void) {}
++#endif
++
++void pmic_set_ops(struct pmic_ops *ops)
++{
++ printk("pmic_set_ops:%x\n", ops);
++ if (pxa3xx_pmic_ops != NULL) {
++ printk(KERN_ERR "set pmic_ops when pmic_ops is not NULL\n");
++ return;
++ }
++ pxa3xx_pmic_ops = ops;
++ INIT_LIST_HEAD(&pxa3xx_pmic_ops->list);
++ spin_lock_init(&pxa3xx_pmic_ops->cb_lock);
++}
++
++/*****************************************************************************
++ * Operation of PMIC *
++ *****************************************************************************/
++int check_pmic_ops(void)
++{
++ if (!pxa3xx_pmic_ops) {
++ printk(KERN_WARNING "No pmic_ops registered!\n");
++ return -EINVAL;
++ } else
++ return 0;
++}
++
++int pxa3xx_pmic_get_voltage(int cmd, int *pval)
++{
++ int ret;
++
++ ret = check_pmic_ops();
++ if (ret < 0)
++ return ret;
++
++ if (pxa3xx_pmic_ops->get_voltage)
++ return pxa3xx_pmic_ops->get_voltage(cmd, pval);
++ else
++ return -EINVAL;
++}
++EXPORT_SYMBOL(pxa3xx_pmic_get_voltage);
++
++int pxa3xx_pmic_set_voltage(int cmd, int val)
++{
++ int ret;
++
++ ret = check_pmic_ops();
++ if (ret < 0)
++ return ret;
++
++ if (pxa3xx_pmic_ops->set_voltage)
++ return pxa3xx_pmic_ops->set_voltage(cmd, val);
++ else
++ return -EINVAL;
++}
++EXPORT_SYMBOL(pxa3xx_pmic_set_voltage);
++
++int pxa3xx_pmic_check_voltage(int cmd)
++{
++ int ret;
++
++ ret = check_pmic_ops();
++ if (ret < 0)
++ return ret;
++
++ if (pxa3xx_pmic_ops->check_voltage)
++ return pxa3xx_pmic_ops->check_voltage(cmd);
++ else
++ return -EINVAL;
++}
++EXPORT_SYMBOL(pxa3xx_pmic_check_voltage);
++
++int pxa3xx_pmic_enable_voltage(int cmd, int enable)
++{
++ int ret;
++
++ ret = check_pmic_ops();
++ if (ret < 0)
++ return ret;
++
++ if (pxa3xx_pmic_ops->enable_voltage)
++ return pxa3xx_pmic_ops->enable_voltage(cmd, enable);
++ else
++ return -EINVAL;
++}
++EXPORT_SYMBOL(pxa3xx_pmic_enable_voltage);
++
++int pxa3xx_pmic_enable_led(int cmd, int enable)
++{
++ int ret;
++
++ ret=check_pmic_ops();
++ if (ret > 0)
++ return ret;
++
++ if(pxa3xx_pmic_ops->enable_led)
++ return pxa3xx_pmic_ops->enable_led(cmd, enable);
++ else
++ return -EINVAL;
++}
++
++EXPORT_SYMBOL(pxa3xx_pmic_enable_led);
++
++int pxa3xx_pmic_is_vbus_assert(void)
++{
++ int ret;
++
++ ret = check_pmic_ops();
++ if (ret < 0) /* If illegal pmic_ops, always no vbus activity */
++ return 0;
++
++ if (pxa3xx_pmic_ops->is_vbus_assert)
++ return pxa3xx_pmic_ops->is_vbus_assert();
++
++ return 0;
++}
++EXPORT_SYMBOL(pxa3xx_pmic_is_vbus_assert);
++
++int pxa3xx_pmic_is_avbusvld(void)
++{
++ int ret;
++
++ ret = check_pmic_ops();
++ if (ret < 0) /* If illegal pmic_ops, always no A vbus valid */
++ return 0;
++
++ if (pxa3xx_pmic_ops->is_avbusvld)
++ return pxa3xx_pmic_ops->is_avbusvld();
++
++ return 0;
++}
++EXPORT_SYMBOL(pxa3xx_pmic_is_avbusvld);
++
++int pxa3xx_pmic_is_asessvld(void)
++{
++ int ret;
++
++ ret = check_pmic_ops();
++ if (ret < 0) /* If illegal pmic_ops, always no A assert valid */
++ return 0;
++
++ if (pxa3xx_pmic_ops->is_asessvld)
++ return pxa3xx_pmic_ops->is_asessvld();
++
++ return 0;
++}
++EXPORT_SYMBOL(pxa3xx_pmic_is_asessvld);
++
++int pxa3xx_pmic_is_bsessvld(void)
++{
++ int ret;
++
++ ret = check_pmic_ops();
++ if (ret < 0) /* If illegal pmic_ops, always no B assert valid */
++ return 0;
++
++ if (pxa3xx_pmic_ops->is_bsessvld)
++ return pxa3xx_pmic_ops->is_bsessvld();
++
++ return 0;
++}
++EXPORT_SYMBOL(pxa3xx_pmic_is_bsessvld);
++
++int pxa3xx_pmic_is_srp_ready(void)
++{
++ int ret;
++
++ ret = check_pmic_ops();
++ if (ret < 0) /* If illegal pmic_ops, always no SRP detect */
++ return 0;
++
++ if (pxa3xx_pmic_ops->is_srp_ready)
++ return pxa3xx_pmic_ops->is_srp_ready();
++
++ return 0;
++
++}
++EXPORT_SYMBOL(pxa3xx_pmic_is_srp_ready);
++
++int pxa3xx_pmic_set_pump(int enable)
++{
++ int ret;
++
++ ret = check_pmic_ops();
++ if (ret < 0)
++ return ret;
++
++ if (pxa3xx_pmic_ops->set_pump)
++ return pxa3xx_pmic_ops->set_pump(enable);
++
++ return 0;
++}
++EXPORT_SYMBOL(pxa3xx_pmic_set_pump);
++
++int pxa3xx_pmic_set_vbus_supply(int enable, int srp)
++{
++ int ret;
++
++ ret = check_pmic_ops();
++ if (ret < 0)
++ return ret;
++
++ if (pxa3xx_pmic_ops->set_vbus_supply)
++ return pxa3xx_pmic_ops->set_vbus_supply(enable, srp);
++
++ return 0;
++}
++EXPORT_SYMBOL(pxa3xx_pmic_set_vbus_supply);
++
++int pxa3xx_pmic_set_usbotg_a_mask(void)
++{
++ int ret;
++
++ ret = check_pmic_ops();
++ if (ret < 0)
++ return ret;
++
++ if (pxa3xx_pmic_ops->set_usbotg_a_mask)
++ return pxa3xx_pmic_ops->set_usbotg_a_mask();
++
++ return 0;
++}
++EXPORT_SYMBOL(pxa3xx_pmic_set_usbotg_a_mask);
++
++int pxa3xx_pmic_set_usbotg_b_mask(void)
++{
++ int ret;
++
++ ret = check_pmic_ops();
++ if (ret < 0)
++ return ret;
++
++ if (pxa3xx_pmic_ops->set_usbotg_b_mask)
++ return pxa3xx_pmic_ops->set_usbotg_b_mask();
++
++ return 0;
++}
++EXPORT_SYMBOL(pxa3xx_pmic_set_usbotg_b_mask);
++
++int pxa3xx_pmic_is_onkey_assert(void)
++{
++ int ret;
++
++ ret = check_pmic_ops();
++ if (ret < 0)
++ return ret;
++
++ if (pxa3xx_pmic_ops->is_onkey_assert)
++ return pxa3xx_pmic_ops->is_onkey_assert();
++
++ return 0;
++}
++EXPORT_SYMBOL(pxa3xx_pmic_is_onkey_assert);
++
++/* Register pmic callback */
++int pmic_callback_register(unsigned long event,
++ void (*func)(unsigned long event))
++{
++ int ret;
++ unsigned long flags;
++ struct pmic_callback *pmic_cb;
++
++ might_sleep();
++
++ ret = check_pmic_ops();
++ if (ret < 0)
++ return ret;
++
++ pmic_cb = kzalloc(sizeof(*pmic_cb), GFP_KERNEL);
++ if (!pmic_cb)
++ return -ENOMEM;
++
++ INIT_LIST_HEAD(&pmic_cb->list);
++ pmic_cb->event = event;
++ pmic_cb->func = func;
++
++ spin_lock_irqsave(&pxa3xx_pmic_ops->cb_lock, flags);
++ list_add(&pmic_cb->list, &pxa3xx_pmic_ops->list);
++ spin_unlock_irqrestore(&pxa3xx_pmic_ops->cb_lock, flags);
++
++ return 0;
++}
++EXPORT_SYMBOL(pmic_callback_register);
++
++/* Unregister pmic callback */
++int pmic_callback_unregister(unsigned long event,
++ void (*func)(unsigned long event))
++{
++ unsigned long flags;
++ struct pmic_callback *pmic_cb, *next;
++
++ spin_lock_irqsave(&pxa3xx_pmic_ops->cb_lock, flags);
++ list_for_each_entry_safe(pmic_cb, next, &pxa3xx_pmic_ops->list, list) {
++ if ((pmic_cb->event == event) && (pmic_cb->func == func)) {
++ list_del_init(&pmic_cb->list);
++ kfree(pmic_cb);
++ }
++ }
++ spin_unlock_irqrestore(&pxa3xx_pmic_ops->cb_lock, flags);
++ return 0;
++}
++EXPORT_SYMBOL(pmic_callback_unregister);
++
++int pmic_event_handle(unsigned long event)
++{
++ int ret;
++ unsigned long flags;
++ struct pmic_callback *pmic_cb;
++ ret = check_pmic_ops();
++ if (ret < 0)
++ return ret;
++
++ spin_lock_irqsave(&pxa3xx_pmic_ops->cb_lock, flags);
++ list_for_each_entry(pmic_cb, &pxa3xx_pmic_ops->list, list) {
++ spin_unlock_irqrestore(&pxa3xx_pmic_ops->cb_lock, flags);
++ /* event is bit-wise parameter, need bit AND here as filter */
++ if ((pmic_cb->event & event) && (pmic_cb->func))
++ pmic_cb->func(event);
++ spin_lock_irqsave(&pxa3xx_pmic_ops->cb_lock, flags);
++ }
++ spin_unlock_irqrestore(&pxa3xx_pmic_ops->cb_lock, flags);
++ return 0;
++}
++EXPORT_SYMBOL(pmic_event_handle);
++
++
++int px3xx_pmic_event_enable(unsigned long event, int enable)
++{
++ int ret;
++ u8 val;
++ unsigned long flags;
++ struct pmic_callback *pmic_cb;
++ ret = check_pmic_ops();
++ if (ret < 0)
++ return ret;
++ printk("pxa pmic event enable 11\n");
++ if(pxa3xx_pmic_ops->enable_event)
++ {
++ printk("pxa pmic event enable 22\n");
++ return pxa3xx_pmic_ops->enable_event(event, enable);
++ }
++ else
++ return -EINVAL;
++}
++EXPORT_SYMBOL(px3xx_pmic_event_enable);
++
++int pxa3xx_pmic_is_hookswitch_assert(void)
++{
++ int ret;
++
++ ret = check_pmic_ops();
++ if (ret < 0)
++ return ret;
++
++ if (pxa3xx_pmic_ops->is_hookswitch_assert)
++ return pxa3xx_pmic_ops->is_hookswitch_assert();
++
++ return 0;
++}
++EXPORT_SYMBOL(pxa3xx_pmic_is_hookswitch_assert);
++
+diff -ur linux-2.6.32/arch/arm/mach-pxa/sgh_i780_i900.c kernel/arch/arm/mach-pxa/sgh_i780_i900.c
+--- linux-2.6.32/arch/arm/mach-pxa/sgh_i780_i900.c 2009-12-13 13:00:53.329024629 +0200
++++ kernel/arch/arm/mach-pxa/sgh_i780_i900.c 2009-12-12 16:09:26.486282481 +0200
+@@ -0,0 +1,618 @@
++/**
++ * Support for the PXA311 and PXA312 based Samsung SGH devices
++ * m480, i780, i900, i904, i908, i910
++ *
++ * Copyright (C) 2009 Sacha Refshauge <xsacha@gmail.com>
++ * Copyright (C) 2009 Stefan Schmidt <stefan@datenfreihafen.org>
++ * Copyright (C) 2009 Mustafa Ozsakalli <ozsakalli@hotmail.com>
++ *
++ * Based on zylonite.c Copyright (C) 2006 Marvell International Ltd.
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++#include <linux/module.h>
++#include <linux/kernel.h>
++#include <linux/delay.h>
++#include <linux/interrupt.h>
++#include <linux/init.h>
++#include <linux/platform_device.h>
++#include <linux/gpio.h>
++#include <linux/pwm_backlight.h>
++#include <linux/power_supply.h>
++#include <linux/pda_power.h>
++#include <linux/spi/spi.h>
++#include <linux/spi/libertas_spi.h>
++#include <../drivers/staging/android/timed_gpio.h>
++
++#include <plat/i2c.h>
++#include <asm/mach-types.h>
++#include <asm/mach/arch.h>
++#include <mach/hardware.h>
++#include <mach/pxafb.h>
++#include <mach/audio.h>
++#include <mach/mmc.h>
++#include <mach/udc.h>
++#include <mach/ohci.h>
++#include <mach/pxa27x-udc.h>
++#include <mach/pxa27x_keypad.h>
++#include <mach/pxa2xx_spi.h>
++#include <mach/pxa3xx-regs.h>
++#include <mach/mfp-pxa300.h>
++#if defined(CONFIG_PXA_DVFM)
++#include <mach/dvfm.h>
++#include <mach/pxa3xx_dvfm.h>
++#include <mach/pmu.h>
++#endif
++
++#include <mach/sgh_msm6k.h>
++
++#include "devices.h"
++#include "generic.h"
++
++#define SGH_BATT_I2C_SLAVE_ADDRESS 0x34
++
++#define GPIO09_SGH_LED_GREEN 9
++#define GPIO23_SGH_TOUCHSCREEN 23
++#define GPIO71_SGH_LED_BLUE 71
++#define GPIO79_SGH_LED_VIBRATE 79
++#define GPIO88_SGH_BATT_CHARGE 88
++#define GPIO104_SGH_WIFI_CMD 104
++#define GPIO105_SGH_CARD_DETECT 105
++
++#define GPIO18_SGH_I780_WIFI_CMD 11
++#define GPIO19_SGH_I780_SPK_AUDIO 19
++#define GPIO48_SGH_I780_LED_BACKLIGHT 48
++#define GPIO75_SGH_I780_LED_RED 75
++#define GPIO94_SGH_I780_WIFI_POWER 94
++
++#define GPIO03_SGH_I900_WIFI_POWER 3
++#define GPIO17_SGH_I900_SPK_AUDIO 17
++#define GPIO48_SGH_I900_LED_RED 48
++#define GPIO76_SGH_I900_BT_POWER 76
++#define GPIO118_SGH_I900_WIFI_CMD 118
++
++#define GPIO16_SGH_SPI_CHIP_SEL 16
++
++#if defined(CONFIG_LEDS_GPIO) || defined(CONFIG_LEDS_GPIO_MODULE)
++static struct gpio_led sgh_leds[] = {
++ [0] = {
++ .name = "red",
++ },
++ [1] = {
++ .name = "green",
++ .default_trigger = "mmc0",
++ .gpio = GPIO09_SGH_LED_GREEN,
++ },
++ [2] = {
++ .name = "blue",
++ .default_trigger = "mmc0",
++ .gpio = GPIO71_SGH_LED_BLUE,
++ },
++ [3] = {
++ .name = "keyboard",
++ },
++};
++
++static struct gpio_led_platform_data sgh_leds_info = {
++ .leds = sgh_leds,
++ .num_leds = ARRAY_SIZE(sgh_leds),
++};
++
++static struct platform_device sgh_device_leds = {
++ .name = "leds-gpio",
++ .id = -1,
++ .dev = {
++ .platform_data = &sgh_leds_info,
++ }
++};
++
++static struct timed_gpio sgh_vibrator = {
++ .name = "vibrator",
++ .gpio = GPIO79_SGH_LED_VIBRATE,
++ .max_timeout = 1000,
++};
++
++static struct timed_gpio_platform_data sgh_vibrator_info = {
++ .gpios = &sgh_vibrator,
++ .num_gpios = 1,
++};
++
++static struct platform_device sgh_device_vibrator = {
++ .name = "timed-gpio",
++ .id = -1,
++ .dev = {
++ .platform_data = &sgh_vibrator_info,
++ }
++};
++
++static void __init sgh_init_leds(void)
++{
++
++ sgh_leds[0].gpio = (machine_is_sgh_i780()) ? GPIO75_SGH_I780_LED_RED : GPIO48_SGH_I900_LED_RED;
++ if(machine_is_sgh_i780())
++ sgh_leds[3].gpio = GPIO48_SGH_I780_LED_BACKLIGHT;
++
++ platform_device_register(&sgh_device_leds);
++ //timed_gpio doesnt request gpio
++ gpio_request(GPIO79_SGH_LED_VIBRATE, "SGH-VIBRATOR");
++ platform_device_register(&sgh_device_vibrator);
++
++}
++#else
++static inline void sgh_init_leds(void) {}
++#endif
++
++#if defined(CONFIG_FB_PXA) || defined(CONFIG_FB_PXA_MODULE)
++static struct platform_pwm_backlight_data sgh_backlight_data = {
++ .pwm_id = 3,
++ .max_brightness = 100,
++ .dft_brightness = 100,
++ .pwm_period_ns = 10000,
++};
++
++static struct platform_device sgh_backlight_device = {
++ .name = "backlight",
++ .dev = {
++ .parent = &pxa27x_device_pwm1.dev,
++ .platform_data = &sgh_backlight_data,
++ },
++};
++/* Pixclock Calculation
++ Calculated from reviewing HaRET source: http://xanadux.cvs.sourceforge.net/viewvc/xanadux/haret/haret-gnu/src/script.cpp?view=markup
++ pixclock = K * 8MHz / CLK ; where CLK is 312MHz and K is last 8 bits of lccr3
++
++ New: pixclock = (K * 200000000) / 15600
++*/
++static struct pxafb_mode_info sgh_i780_mode = {
++ .pixclock = 243600, // K = 19
++ .xres = 320, // HACK: Android does not like square resolutions
++ .yres = 319,
++ .bpp = 16,
++ .hsync_len = 16,
++ .left_margin = 24,
++ .right_margin = 24,
++ .vsync_len = 2,
++ .upper_margin = 3,
++ .lower_margin = 0,
++ .sync = 0,
++};
++static struct pxafb_mode_info sgh_i900_mode = {
++ .pixclock = 256500, // K = 20
++ .xres = 240,
++ .yres = 400,
++ .bpp = 16,
++ .hsync_len = 8,
++ .left_margin = 8,
++ .right_margin = 8,
++ .vsync_len = 4,
++ .upper_margin = 38,
++ .lower_margin = 38,
++ .sync = 0, //FB_SYNC_VERT_HIGH_ACT,
++};
++
++static struct pxafb_mach_info sgh_lcd_info = {
++ .num_modes = 1,
++ .lcd_conn = LCD_COLOR_TFT_16BPP | LCD_PCLK_EDGE_FALL,
++};
++
++static void __init sgh_init_lcd(void)
++{
++ platform_device_register(&sgh_backlight_device);
++ sgh_lcd_info.modes = (machine_is_sgh_i780()) ? &sgh_i780_mode : &sgh_i900_mode;
++ set_pxa_fb_info(&sgh_lcd_info);
++}
++#else
++static inline void sgh_init_lcd(void) {}
++#endif
++
++/****************************
++* Keypad *
++****************************/
++
++/*Android (i.e. non-linux) keys:
++Name: defined as: function:
++KEY_SEND 231 Send key
++KEY_END 107 End key
++KEY_BACK 158 Go back a page
++KEY_MENU 139 Open a special menu
++KEY_HOME 102 Return to the home screen
++KEY_SEARCH 217 Open the Android search
++KEY_VOLUMEUP 115 Increase volume
++KEY_VOLUMEDOWN 114 Decrease volume
++KEY_CAMERA 212 Opens camera
++KEY_CAMERAFOCUS 211 Focuses camera (Omnia only, replaces KEY_HP in kernel/include/linux/input.h)
++*/
++
++#if defined(CONFIG_KEYBOARD_PXA27x) || defined(CONFIG_KEYBOARD_PXA27x_MODULE)
++/* KEY(row, col, key_code) */
++static unsigned int sgh_i780_matrix_key_map[] = {
++/* QWERTY Keyboard */
++/* 1st row */
++KEY(0, 0, KEY_Q), KEY(7, 1, KEY_W), KEY(2, 0, KEY_E), KEY(3, 0, KEY_R), KEY(4, 0, KEY_T),
++KEY(0, 4, KEY_Y), KEY(1, 4, KEY_U), KEY(2, 4, KEY_I), KEY(3, 4, KEY_O), KEY(4, 4, KEY_P),
++/* 2nd row */
++KEY(0, 1, KEY_A), KEY(7, 2, KEY_S), KEY(2, 1, KEY_D), KEY(3, 1, KEY_F), KEY(4, 1, KEY_G),
++KEY(0, 5, KEY_H), KEY(1, 5, KEY_J), KEY(2, 5, KEY_K), KEY(3, 5, KEY_L), KEY(4, 5, KEY_BACKSPACE),
++/* 3rd row */
++KEY(0, 2, KEY_LEFTALT), KEY(1, 2, KEY_Z), KEY(2, 2, KEY_X), KEY(3, 2, KEY_C), KEY(4, 2, KEY_V),
++KEY(0, 6, KEY_B), KEY(1, 6, KEY_N), KEY(2, 6, KEY_M), KEY(3, 6, KEY_DOT), KEY(4, 6, KEY_ENTER),
++/* 4th row */
++KEY(0, 3, KEY_LEFTSHIFT), KEY(1, 3, KEY_RIGHTALT), KEY(2, 3, KEY_0), KEY(3, 3, KEY_SPACE),
++KEY(4, 3, KEY_COMMA), KEY(7, 6, KEY_SLASH), /* Message */ KEY(5, 1, KEY_TAB), /* GPS */
++
++/* Volume Keys */
++KEY(1, 0, KEY_VOLUMEUP),
++KEY(1, 1, KEY_VOLUMEDOWN),
++
++/* Left Softkey */ /* Windows Key */ /* OK */ /* Right Softkey */
++KEY(5, 4, KEY_MINUS), KEY(5, 2, KEY_MENU), KEY(5, 3, KEY_EXIT), KEY(5, 6, KEY_F2),
++KEY(5, 5, KEY_SEND), KEY(6, 4, KEY_REPLY), KEY(7, 0, KEY_END),
++/* Green Key */ /* Center */ /* Red Key */
++
++/* Camera */
++KEY(7, 3, KEY_CAMERA),
++};
++
++static unsigned int sgh_i900_matrix_key_map[] = {
++ /* KEY(row, col, key_code) */
++ KEY(0, 0, KEY_CAMERAFOCUS), //Camera half-press
++ KEY(0, 1, KEY_CAMERA), //Camera full-press
++ KEY(0, 2, KEY_ENTER), //Center optical dpad button
++ KEY(1, 0, KEY_VOLUMEUP), //Volume up
++ KEY(1, 1, KEY_VOLUMEDOWN), //Volume down
++ KEY(1, 2, KEY_SEND), //Send key
++ KEY(2, 0, KEY_MENU), //Top right key (Main Menu button)
++ KEY(2, 1, KEY_END), //???
++ KEY(2, 2, KEY_BACK), //End key (Back button)
++
++};
++
++static struct pxa27x_keypad_platform_data sgh_keypad_info = {
++ .enable_rotary0 = 0,
++
++ .debounce_interval = 30,
++};
++
++static void __init sgh_init_keypad(void)
++{
++ if(machine_is_sgh_i780())
++ {
++ sgh_keypad_info.matrix_key_rows = 8;
++ sgh_keypad_info.matrix_key_cols = 7;
++ sgh_keypad_info.matrix_key_map = sgh_i780_matrix_key_map;
++ sgh_keypad_info.matrix_key_map_size = ARRAY_SIZE(sgh_i780_matrix_key_map);
++ }
++ else
++ {
++ sgh_keypad_info.matrix_key_rows = 3;
++ sgh_keypad_info.matrix_key_cols = 3;
++ sgh_keypad_info.matrix_key_map = sgh_i900_matrix_key_map;
++ sgh_keypad_info.matrix_key_map_size = ARRAY_SIZE(sgh_i900_matrix_key_map);
++ }
++
++ pxa_set_keypad_info(&sgh_keypad_info);
++}
++#else
++static inline void sgh_init_keypad(void) {}
++#endif
++
++#if defined(CONFIG_MMC)
++static int sgh_mci_sdcard_init(struct device *dev,
++ irq_handler_t sgh_detect_int,
++ void *data)
++{
++ int err, cd_irq;
++ int gpio_cd = GPIO105_SGH_CARD_DETECT;
++
++ cd_irq = gpio_to_irq(gpio_cd);
++
++ /*
++ * setup GPIO for MMC controller
++ */
++ err = gpio_request(gpio_cd, "microSD card detect");
++ if (err)
++ goto err_request_cd;
++ gpio_direction_input(gpio_cd);
++
++ err = request_irq(cd_irq, sgh_detect_int,
++ IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING,
++ "microSD card detect", data);
++ if (err) {
++ printk(KERN_ERR "%s: MicroSD: "
++ "can't request card detect IRQ\n", __func__);
++ goto err_request_cd;
++ }
++
++ return 0;
++
++err_request_cd:
++ return err;
++}
++
++static void sgh_mci_sdcard_exit(struct device *dev, void *data)
++{
++ int cd_irq, gpio_cd;
++
++ cd_irq = gpio_to_irq(105);
++ gpio_cd = 105;
++
++ free_irq(cd_irq, data);
++ gpio_free(gpio_cd);
++}
++
++static struct pxamci_platform_data sgh_mci_sdcard_platform_data = {
++ .detect_delay = 20,
++ .ocr_mask = MMC_VDD_32_33|MMC_VDD_33_34,
++ .init = sgh_mci_sdcard_init,
++ .exit = sgh_mci_sdcard_exit,
++ .gpio_card_detect = -1,
++ .gpio_card_ro = -1,
++ .gpio_power = -1,
++};
++
++
++static void __init sgh_init_mmc(void)
++{
++ pxa_set_mci_info(&sgh_mci_sdcard_platform_data); // External MicroSD
++ if(machine_is_sgh_i900())
++ pxa3xx_set_mci2_info(&sgh_mci_sdcard_platform_data); // Internal MicroSD
++}
++#else
++static inline void sgh_init_mmc(void) {}
++#endif
++static void sgh_udc_command(int cmd)
++{
++ switch (cmd) {
++ case PXA2XX_UDC_CMD_CONNECT:
++ //UP2OCR |= UP2OCR_HXOE | UP2OCR_DPPUE | UP2OCR_DPPUBE;
++ UP2OCR |= 0xf024; // USB Port 2 Output Control Register
++ break;
++ case PXA2XX_UDC_CMD_DISCONNECT:
++ //UP2OCR &= ~(UP2OCR_HXOE | UP2OCR_DPPUE | UP2OCR_DPPUBE);
++ UP2OCR &= 0xf024;
++ break;
++ }
++}
++static struct pxa2xx_udc_mach_info sgh_udc_info __initdata = {
++ .udc_command = sgh_udc_command,
++};
++ /* WinMo: UHCHR_SSEP2 | UHCHR_SSEP1 | UHCHR_SSE | UHCHR_CGR | UHCHR_FHR
++ Set the Power Control Polarity Low */
++/* UHCHR = (UHCHR | UHCHR_PCPL) &
++ ~(UHCHR_SSEP1 | UHCHR_SSEP2 | UHCHR_SSE);
++*/
++static int sgh_init_udc(void)
++{
++ pxa_set_udc_info(&sgh_udc_info);
++ return 0;
++}
++
++#if defined(CONFIG_USB_OHCI_HCD) || defined(CONFIG_USB_OHCI_HCD_MODULE)
++static int sgh_ohci_init(struct device *dev)
++{
++ return 0;
++}
++static struct pxaohci_platform_data sgh_ohci_platform_data = {
++ .port_mode = PMM_PERPORT_MODE,
++ .init = sgh_ohci_init
++};
++
++static void __init sgh_init_ohci(void)
++{
++ pxa_set_ohci_info(&sgh_ohci_platform_data);
++}
++#else
++static inline void sgh_init_ohci(void) {}
++#endif /* CONFIG_USB_OHCI_HCD || CONFIG_USB_OHCI_HCD_MODULE */
++
++#if defined(CONFIG_I2C) || defined(CONFIG_I2C_MODULE)
++static struct i2c_board_info __initdata sgh_i2c_board_info[] = {
++ { /* PM6558 Battery */
++ .type = "sgh_battery",
++ .addr = SGH_BATT_I2C_SLAVE_ADDRESS,
++ },
++};
++static void __init sgh_init_i2c(void)
++{
++ i2c_register_board_info(0, sgh_i2c_board_info,
++ ARRAY_SIZE(sgh_i2c_board_info));
++ pxa_set_i2c_info(NULL);
++}
++#else
++static inline void sgh_init_i2c(void) {}
++#endif
++
++#if defined(CONFIG_SPI_PXA2XX) || defined(CONFIG_SPI_PXA2XX_MASTER)
++static void sgh_spi_wifi_cs(u32 command)
++{
++ gpio_set_value(GPIO16_SGH_SPI_CHIP_SEL, !(command == PXA2XX_CS_ASSERT));
++}
++
++static int sgh_libertas_setup(struct spi_device *spi)
++{
++ int WifiPwr = 0;
++ int WifiCmd = 0;
++ if(machine_is_sgh_i780())
++ {
++ WifiPwr = GPIO94_SGH_I780_WIFI_POWER;
++ WifiCmd = GPIO18_SGH_I780_WIFI_CMD;
++ }
++ else if(machine_is_sgh_i900())
++ {
++ WifiPwr = GPIO03_SGH_I900_WIFI_POWER;
++ WifiCmd = GPIO118_SGH_I900_WIFI_CMD;
++ }
++ gpio_request(WifiPwr,"WLAN");
++ gpio_request(0x10,"WLAN");
++ gpio_request(0x68,"WLAN");
++ gpio_request(WifiCmd,"WLAN");
++
++ //pxa_init_hw
++ gpio_direction_output(0x68,1);
++ gpio_direction_output(WifiCmd,1);
++ gpio_direction_output(WifiPwr,1);
++ gpio_direction_output(0x10,1);
++ mdelay(60);
++
++ gpio_set_value(WifiPwr,1);
++ mdelay(60);
++ gpio_set_value(WifiCmd,1);
++ gpio_set_value(0x10,1);
++ gpio_set_value(0x68,1);
++ mdelay(60);
++
++
++ //gspx_power_up
++ gpio_set_value(WifiPwr,1);
++ mdelay(60);
++ gpio_set_value(WifiCmd,1);
++ gpio_set_value(0x68,1);
++ mdelay(150);
++
++ //gspx_reset_module
++ gpio_set_value(0x68,1);
++ mdelay(60);
++ gpio_set_value(0x68,0);
++ mdelay(60);
++ gpio_set_value(0x68,1);
++ mdelay(100);
++
++ spi->bits_per_word = 16;
++ spi_setup(spi);
++
++ return 0;
++}
++
++static struct pxa2xx_spi_chip sgh_wifi_chip = {
++ .rx_threshold = 8,
++ .tx_threshold = 8,
++ .timeout = 235,
++ .dma_burst_size = 16,
++ .cs_control = sgh_spi_wifi_cs,
++};
++
++static struct pxa2xx_spi_master sgh_spi_info = {
++ .clock_enable = CKEN_SSP1,
++ .num_chipselect = 1,
++ .enable_dma = 1,
++};
++
++struct libertas_spi_platform_data sgh_wifi_pdata = {
++ .use_dummy_writes = 0,
++ .setup = sgh_libertas_setup,
++};
++
++static struct spi_board_info sgh_spi_devices[] __initdata = {
++ { //wireless
++ .modalias = "libertas_spi",
++ .max_speed_hz = 13000000,
++ .bus_num = 1,
++ .irq = IRQ_GPIO(8),
++ .chip_select = 0,
++ .controller_data = &sgh_wifi_chip,
++ .platform_data = &sgh_wifi_pdata,
++ },
++};
++
++static void __init sgh_init_spi(void)
++{
++ sgh_spi_devices[0].irq = IRQ_GPIO(machine_is_sgh_i780() ? 11 : 8);
++ pxa2xx_set_spi_info(1, &sgh_spi_info);
++ spi_register_board_info(ARRAY_AND_SIZE(sgh_spi_devices));
++}
++#else
++static inline void sgh_init_spi(void){}
++#endif
++
++#if defined(CONFIG_PXA_DVFM)
++struct pxa3xx_freq_mach_info sgh_freq_mach_info = {
++ .flags = 0,
++};
++
++static void __init sgh_init_dvfm() {
++ set_pxa3xx_freq_info(&sgh_freq_mach_info);
++ pxa3xx_set_pmu_info(NULL);
++}
++#else
++static inline void sgh_init_dvfm(void){}
++#endif
++
++static mfp_cfg_t sgh_mfp_cfg[] __initdata = {
++ /* AC97 */
++ //GPIO23_AC97_nACRESET,
++ GPIO25_AC97_SDATA_IN_0,
++ GPIO27_AC97_SDATA_OUT,
++ GPIO28_AC97_SYNC,
++ GPIO29_AC97_BITCLK,
++
++ /* KEYPAD */
++ GPIO115_KP_MKIN_0 | MFP_LPM_EDGE_BOTH,
++ GPIO116_KP_MKIN_1 | MFP_LPM_EDGE_BOTH,
++ GPIO117_KP_MKIN_2 | MFP_LPM_EDGE_BOTH,
++ GPIO121_KP_MKOUT_0,
++ GPIO122_KP_MKOUT_1,
++ GPIO123_KP_MKOUT_2,
++ GPIO124_KP_MKOUT_3,
++
++};
++
++static struct platform_device sgh_audio = {
++ .name = "sgh-asoc",
++ .id = -1,
++};
++
++static struct platform_device *devices[] __initdata = {
++ &sgh_audio,
++};
++
++
++static void __init sgh_init(void)
++{
++ static int dvfm = 0;
++
++ pxa3xx_mfp_config(ARRAY_AND_SIZE(sgh_mfp_cfg));
++ sgh_init_dvfm();
++
++ rpc_init();
++
++ sgh_init_lcd();
++ sgh_init_mmc();
++ sgh_init_leds();
++ sgh_init_keypad();
++
++ pxa_set_ac97_info(NULL);
++ platform_add_devices(devices, ARRAY_SIZE(devices));
++
++ sgh_init_ohci();
++ sgh_init_udc();
++ sgh_init_i2c();
++ sgh_init_spi();
++ /*
++ dvfm_register("Test", &dvfm);
++ dvfm_disable_op_name("D1", dvfm);
++ dvfm_disable_op_name("D2", dvfm);
++ */
++}
++
++MACHINE_START(SGH_I780, "Samsung SGH-i780 (Mirage) phone")
++ .phys_io = 0x40000000,
++ .boot_params = 0xa0000100,
++ .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc,
++ .map_io = pxa_map_io,
++ .init_irq = pxa3xx_init_irq,
++ .timer = &pxa_timer,
++ .init_machine = sgh_init,
++MACHINE_END
++
++MACHINE_START(SGH_I900, "Samsung SGH-i900 (Omnia) phone")
++ .phys_io = 0x40000000,
++ .boot_params = 0xa0000100,
++ .io_pg_offst = (io_p2v(0x40000000) >> 18) & 0xfffc,
++ .map_io = pxa_map_io,
++ .init_irq = pxa3xx_init_irq,
++ .timer = &pxa_timer,
++ .init_machine = sgh_init,
++MACHINE_END
+diff -ur linux-2.6.32/arch/arm/mach-pxa/sgh_rpc.c kernel/arch/arm/mach-pxa/sgh_rpc.c
+--- linux-2.6.32/arch/arm/mach-pxa/sgh_rpc.c 2009-12-13 13:00:59.168618858 +0200
++++ kernel/arch/arm/mach-pxa/sgh_rpc.c 2009-12-12 16:09:26.486282481 +0200
+@@ -0,0 +1,333 @@
++/**
++ * Samsung SGH I900 RPC Driver for MSM6K
++ *
++ * Copyright (C) 2009 Mustafa Ozsakalli <ozsakalli@hotmail.com>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++#include <linux/module.h>
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/interrupt.h>
++#include <linux/irq.h>
++#include <linux/miscdevice.h>
++#include <linux/io.h>
++#include <linux/platform_device.h>
++#include <linux/gpio.h>
++#include <linux/delay.h>
++#include <linux/workqueue.h>
++#include <linux/completion.h>
++#include <linux/list.h>
++#include <linux/fs.h>
++#include <linux/cdev.h>
++
++#include <asm/uaccess.h>
++
++#include <mach/hardware.h>
++#include <mach/sgh_msm6k.h>
++
++
++#include "devices.h"
++
++static DEFINE_SPINLOCK(msgs_lock);
++static DEFINE_SPINLOCK(crc_lock);
++
++static void do_read_data(struct work_struct *work);
++static DECLARE_WORK(work_read, do_read_data);
++static struct workqueue_struct *workqueue;
++
++struct class *sgh_rpc_class;
++dev_t sgh_rpc_devno;
++
++static struct cdev rpc_cdev;
++static struct device *rpc_device;
++
++struct __rpc_msg {
++ int command;
++ int type;
++ int index;
++ int len;
++ int crc;
++ char *data;
++
++ struct __rpc_msg *next;
++};
++
++static struct __rpc_msg *msgs_head = NULL;
++static struct __rpc_msg *msgs_tail = NULL;
++
++static void *rpc_malloc(unsigned sz) {
++ void *ptr = kmalloc(sz, GFP_KERNEL);
++
++ if(ptr)
++ return ptr;
++
++ printk(KERN_ERR "sgh_rpc: kmalloc of %d failed, retrying...\n", sz);
++
++ do {
++ ptr = kmalloc(sz, GFP_KERNEL);
++ } while (!ptr);
++
++ return ptr;
++}
++
++static void do_read_data(struct work_struct *work) {
++ struct __rpc_msg *msg;
++ int pktlen, rpclen;
++ unsigned char end_flag;
++ char buf[11];
++ unsigned long flags=0;
++
++ msg = (struct __rpc_msg *)rpc_malloc(sizeof(struct __rpc_msg));
++ msg->data = NULL;
++
++ if(smd_read(CH_RPC, buf,11) == 0) {
++ if(buf[0] != 0x7f) {
++ goto cleanup;
++ }
++
++ pktlen = (buf[2]<<8)|(buf[1]);
++ msg->crc = buf[3];
++ rpclen = (buf[5]<<8)|(buf[4]);
++ msg->len = rpclen - 7;
++ msg->index = (buf[7]<<8)|(buf[6]);
++ msg->command = (buf[8]<<8)|(buf[9]);
++ msg->type = buf[10];
++
++ if(msg->len > 0) {
++ msg->data = (char *)rpc_malloc(msg->len);
++ if(smd_read(CH_RPC, msg->data, msg->len) != 0) {
++ goto cleanup;
++ }
++ }
++
++ if(smd_read(CH_RPC, &end_flag,1)!=0 || end_flag!=0x7e){
++ goto cleanup;
++ }
++
++ spin_lock_irqsave(&msgs_lock, flags);
++ if(msgs_tail != NULL)
++ msgs_tail->next = msg;
++ msgs_tail = msg;
++ msgs_tail->next = NULL;
++ if(msgs_head == NULL)
++ msgs_head = msg;
++ spin_unlock_irqrestore(&msgs_lock, flags);
++
++ goto success;
++
++ }
++
++cleanup:
++ if(msg->data)
++ kfree(msg->data);
++
++ kfree(msg);
++
++success:
++ queue_work(workqueue, &work_read);
++}
++
++static int write_index = 0xff00;
++
++static char __crc;
++
++static char calc_crc() {
++ int64_t m;
++ int u, rc;
++
++ m = (__crc+1) * -2130574327; //0x81020409
++ u = m>>32;
++ u += __crc+1;
++ u >>= 6;
++
++ u += ((unsigned)u>>31);
++ u += ((unsigned)u<<7);
++ u = __crc+1 - u;
++
++ rc = __crc;
++ __crc = u;
++
++ return rc;
++}
++
++static int rpc_write(unsigned cmd, unsigned type,void *data, unsigned len) {
++ char *pkt;
++ char *p;
++ int crc;
++ unsigned long flags=0;
++ unsigned n;
++
++ pkt = rpc_malloc(len+11);
++ p = pkt;
++
++ n = len + 10;
++
++ *p++ = 0x7f;
++ *p++ = n & 0xff;
++ *p++ = (n>>8) & 0xff;
++ spin_lock_irqsave(&crc_lock, flags);
++ crc = calc_crc();
++ spin_unlock_irqrestore(&crc_lock, flags);
++ *p++ = crc;
++
++ n = len + 7;
++ *p++ = (n) & 0xff;
++ *p++ = (n>>8) & 0xff;
++ *p++ = write_index++ & 0xff; //index
++ *p++ = 0xff;
++ *p++ = (cmd>>8) & 0xff;
++ *p++ = cmd & 0xff;
++ *p++ = type & 0xff;
++
++ if(len > 0 && data != NULL) {
++ copy_from_user(p, data, len);
++ p += len;
++ }
++
++ *p++ = 0x7e;
++
++ smd_write(CH_RPC, pkt, (unsigned)(p - pkt));
++
++ kfree(pkt);
++
++ return len;
++}
++
++
++static int rpc_ops_open(struct inode *inode, struct file *filp) {
++ int rc;
++
++ rc = nonseekable_open(inode, filp);
++ if (rc < 0)
++ return rc;
++
++ return 0;
++}
++
++static int rpc_ops_release(struct inode *inode, struct file *filp) {
++ return 0;
++}
++
++static ssize_t rpc_ops_read(struct file *filp, char __user *buf,size_t count, loff_t *ppos) {
++ unsigned long flags = 0;
++ struct __rpc_msg *msg = NULL;
++ int len = 0;
++
++
++ msg = msgs_head;
++ if(msg == NULL) return -EIO;
++
++ spin_lock_irqsave(&msgs_lock, flags);
++ msgs_head = msgs_head->next;
++ if(msgs_head == NULL)
++ msgs_tail = NULL;
++ spin_unlock_irqrestore(&msgs_lock, flags);
++
++ if(msg->data != NULL && msg->len > 0) {
++ len = count > msg->len ? msg->len : count;
++ if(copy_to_user(buf, msg->data, len)!=0)
++ len = -EIO;
++ }
++ if(msg->data != NULL)
++ kfree(msg->data);
++ kfree(msg);
++
++ return len;
++}
++
++static ssize_t rpc_ops_write(struct file *filp, const char __user *buf,size_t count, loff_t *ppos) {
++ char h[6];
++ short *sh;
++
++ if(copy_from_user(h, buf, 6))
++ return 0;
++
++ buf += 6;
++
++ sh = (short *)h;
++
++ return rpc_write(sh[0], sh[1], sh[2]>0 ? buf : NULL, sh[2]);
++}
++
++static unsigned int rpc_ops_poll(struct file *filp, struct poll_table_struct *wait) {
++ unsigned mask = 0;
++
++ return mask;
++}
++
++static long rpc_ops_ioctl(struct file *filp, unsigned int cmd,unsigned long arg) {
++ struct __rpc_msg *msg;
++
++ msg = msgs_head;
++ if(msg == NULL)
++ return -EIO;
++
++ return copy_to_user((void *)arg, msg, 20);
++}
++
++static struct file_operations rpc_fops = {
++ .owner = THIS_MODULE,
++ .open = rpc_ops_open,
++ .release = rpc_ops_release,
++ .read = rpc_ops_read,
++ .write = rpc_ops_write,
++ //.poll = rpc_ops_poll,
++ .unlocked_ioctl = rpc_ops_ioctl,
++
++};
++
++
++void rpc_init(void) {
++ int rc;
++ int major;
++
++ smd_init();
++
++ /* Create the device nodes */
++ sgh_rpc_class = class_create(THIS_MODULE, "sghrpc");
++ if (IS_ERR(sgh_rpc_class)) {
++ rc = -ENOMEM;
++ printk(KERN_ERR
++ "sgh_rpc: failed to create sghrpc class\n");
++ return;
++ }
++
++ rc = alloc_chrdev_region(&sgh_rpc_devno, 0, 1, "sghrpc");
++ if (rc < 0) {
++ printk(KERN_ERR
++ "rpcrouter: Failed to alloc chardev region (%d)\n", rc);
++ goto fail_destroy_class;
++ }
++
++ major = MAJOR(sgh_rpc_devno);
++ rpc_device = device_create(sgh_rpc_class, NULL,
++ sgh_rpc_devno, NULL, "sghrpc%d:%d",
++ 0, 0);
++ if (IS_ERR(rpc_device)) {
++ rc = -ENOMEM;
++ goto fail_unregister_cdev_region;
++ }
++
++ cdev_init(&rpc_cdev, &rpc_fops);
++ rpc_cdev.owner = THIS_MODULE;
++
++ rc = cdev_add(&rpc_cdev, sgh_rpc_devno, 1);
++ if (rc < 0)
++ goto fail_destroy_device;
++
++ workqueue = create_singlethread_workqueue("sgh-rpc");
++ queue_work(workqueue, &work_read);
++
++ return;
++
++fail_destroy_device:
++ device_destroy(sgh_rpc_class, sgh_rpc_devno);
++fail_unregister_cdev_region:
++ unregister_chrdev_region(sgh_rpc_devno, 1);
++fail_destroy_class:
++ class_destroy(sgh_rpc_class);
++}
+diff -ur linux-2.6.32/arch/arm/mach-pxa/sgh_smd.c kernel/arch/arm/mach-pxa/sgh_smd.c
+--- linux-2.6.32/arch/arm/mach-pxa/sgh_smd.c 2009-12-13 13:01:03.799036125 +0200
++++ kernel/arch/arm/mach-pxa/sgh_smd.c 2009-12-12 16:09:26.486282481 +0200
+@@ -0,0 +1,458 @@
++/**
++ * Support for Samsung SGH I900 MSM6K Shared Memory
++ *
++ * Copyright (C) 2009 Mustafa Ozsakalli <ozsakalli@hotmail.com>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ */
++
++#include <linux/platform_device.h>
++#include <linux/module.h>
++#include <linux/kernel.h>
++#include <linux/init.h>
++#include <linux/interrupt.h>
++#include <linux/irq.h>
++#include <linux/miscdevice.h>
++#include <linux/io.h>
++#include <linux/gpio.h>
++#include <linux/delay.h>
++#include <linux/freezer.h>
++#include <linux/wait.h>
++#include <linux/workqueue.h>
++#include <linux/completion.h>
++
++#include <mach/hardware.h>
++#include <mach/sgh_msm6k.h>
++
++#include "devices.h"
++
++static unsigned mmio;
++static int smd_initialized;
++
++static DEFINE_SPINLOCK(smd_lock);
++
++#define MEMP(x) (void *)(mmio + x)
++#define MEMW(x) *((unsigned short *)(mmio + x))
++#define MEML(x) *((unsigned long *)(mmio + x))
++
++#define HEAD(c) MEMW(c.head)
++#define TAIL(c) MEMW(c.tail)
++#define HEADPTR(c) MEMP(c.base + HEAD(c))
++#define TAILPTR(c) MEMP(c.base + TAIL(c))
++#define SETTAIL(c,t) TAIL(c)=t; TAIL(c)=t; TAIL(c)=t
++#define SETHEAD(c,h) HEAD(c)=h; HEAD(c)=h; HEAD(c)=h
++#define AVAIL(h,t,s) t<=h ? h-t : s - (t-h)
++
++struct smd_half_channel {
++ unsigned head;
++ unsigned tail;
++ unsigned base;
++ unsigned size;
++};
++
++struct smd_channel {
++ struct smd_half_channel send;
++ struct smd_half_channel recv;
++ unsigned head_mask;
++ unsigned tail_mask;
++ unsigned data_mask;
++ unsigned ex_mask;
++ wait_queue_head_t wait_recv;
++ wait_queue_head_t wait_send;
++};
++
++static struct smd_channel smd_channels[] = {
++ //msm6k rpc channel
++ {
++
++ .send = {
++ .head = 0x4,
++ .tail = 0x6,
++ .base = 0x8,
++ .size = 0x3fc,
++ },
++
++ .recv = {
++ .head = 0x1298,
++ .tail = 0x129a,
++ .base = 0x129c,
++ .size = 0x3fc,
++ },
++
++ .head_mask = 0x2,
++ .tail_mask = 0x8,
++ .data_mask = 0x20,
++
++ },
++
++ {
++
++ .send = {
++ .head = 0x404,
++ .tail = 0x406,
++ .base = 0x408,
++ .size = 0xe90,
++ },
++
++ .recv = {
++ .head = 0x1698,
++ .tail = 0x169a,
++ .base = 0x169c,
++ .size = 0x2950,
++ },
++
++ .head_mask = 0x1,
++ .tail_mask = 0x4,
++ .data_mask = 0x10,
++
++ },
++
++};
++
++void smd_phone_power(int on) {
++ if(on){
++ gpio_set_value(0x66,1);
++ gpio_set_value(0x51,1);
++ mdelay(500);
++ gpio_set_value(0x51,0);
++ } else {
++ gpio_set_value(0x66,0);
++ mdelay(500);
++ gpio_set_value(0x66,1);
++
++ }
++}
++
++
++void smd_init_mem(void)
++{
++ int i;
++
++ if(smd_initialized)
++ return;
++
++ MEML(0x20) = 0;
++ MEMW(0x3ffe) = 0x00C1;
++ MEML(0x20) = 0;
++
++ MEMW(0x2) = 0;
++ MEMW(0x4) = 0;
++ MEMW(0x6) = 0;
++
++ for(i = 8; i < 0x404; i += 2)
++ MEMW(i) = 0x1111;
++
++ MEMW(0x404) = 0;
++ MEMW(0x406) = 0;
++
++ for(i = 0x408; i < 0x1298; i += 2)
++ MEMW(i) = 0x2222;
++
++ MEMW(0x1298) = 0;
++ MEMW(0x129A) = 0;
++
++ for(i = 0x129C; i < 0x1698; i += 2)
++ MEMW(i) = 0x3333;
++
++ MEMW(0x1698) = 0;
++ MEMW(0x169A) = 0;
++
++ for(i = 0x169C; i < 0x3FEC; i += 2)
++ MEMW(i) = 0x4444;
++
++ if(MEML(0x18) == 0) {
++ MEMW(0) = 0x00AA;
++ MEMW(2) = 0x0001;
++ }
++
++ MEMW(0x3ffe) = 0x00C2;
++ MEML(0x20) = 0;
++
++ smd_initialized = 1;
++
++ printk("SMD: Initialize Completed\n");
++}
++
++static int smd_write_and_check(unsigned adr, void* data, int len) {
++ int try;
++
++ for(try=0; try<3; try++){
++ memcpy(MEMP(adr), data, len);
++ if(memcmp(MEMP(adr), data, len)==0) break;
++ }
++
++ if(adr == 0x3FFE)
++ MEML(0x20) = 0;
++
++ return try<3 ? 1 : 0;
++
++}
++
++static int smd_read_and_check(unsigned adr, void *data, int len) {
++ int try;
++
++
++ for(try=0;try<3;try++){
++ memcpy(data,MEMP(adr),len);
++ if(memcmp(data,MEMP(adr),len)==0) break;
++ }
++
++ if(try > 2 || adr == 0x3ffc)
++ MEML(0x20) = 0;
++
++ //synch problem
++ if(try>2) return 0;
++
++ return 1;
++
++}
++
++static int smd_get_mask() {
++ unsigned short mask;
++
++ smd_read_and_check(0x3ffc, &mask, 2);
++
++ return mask;
++}
++
++static void smd_set_mask(short mask) {
++ smd_write_and_check(0x3ffe, &mask, 2);
++}
++
++irqreturn_t smd_irq_handler(int irq, void *dev_id){
++ unsigned long flags;
++ int mask,i;
++
++ //printk("SMD: IRQ fired\n");
++
++ spin_lock_irqsave(&smd_lock, flags);
++
++ mask = smd_get_mask();
++
++ if(!(mask&0x80)) goto done;
++
++ switch(mask & ~0x80){
++ case 0x48 : //initialize
++ smd_init_mem();
++ break;
++
++ case 0x4A :
++ printk("SMD: Phone Deep Sleep??\n");
++ /*fire PhoneDeepSleepEvent?*/
++ break;
++ }
++
++
++ for(i=0;i<2;i++){
++ struct smd_channel *c = &smd_channels[i];
++ if(HEAD(c->recv) != TAIL(c->recv))
++ mask |= c->head_mask;
++ }
++
++ if((mask & 0x2a) != 0)
++ smd_channels[0].ex_mask = mask;
++
++ if((mask & 0x15) != 0)
++ smd_channels[1].ex_mask = mask;
++
++
++ for(i=0;i<2;i++){
++ struct smd_channel *c = &smd_channels[i];
++
++ if(HEAD(c->recv) != TAIL(c->recv)){
++ wake_up(&c->wait_recv);
++ }
++
++ if((mask & (0x80 | c->tail_mask)) != 0)
++ wake_up(&c->wait_send);
++ }
++
++done:
++ spin_unlock_irqrestore(&smd_lock, flags);
++
++ return IRQ_HANDLED;
++}
++
++int smd_read_avail(struct smd_channel *c) {
++ unsigned head, tail;
++
++ if(!smd_initialized)
++ return 0;
++
++ head = HEAD(c->recv);
++ tail = TAIL(c->recv);
++
++ return AVAIL(head,tail,c->recv.size);
++}
++
++int ch_read(struct smd_channel *c, void *_buf, int len) {
++ int n;
++ int head, tail;
++ int orig_len = len;
++ unsigned char *buf = _buf;
++
++ if(!smd_initialized) return 0;
++
++
++ while(len > 0) {
++ head = HEAD(c->recv);
++ tail = TAIL(c->recv);
++
++ n = tail<=head ? head - tail : c->recv.size - tail;
++ if(n==0) break;
++
++ if(n > len) n = len;
++
++ memcpy(buf, TAILPTR(c->recv), n);
++
++ buf += n;
++ len -= n;
++
++ tail = (tail + n) % (c->recv.size);
++ SETTAIL(c->recv,tail);
++ }
++
++ if(orig_len!=len || HEAD(c->recv)==TAIL(c->recv)) {
++ int mask = c->ex_mask;
++ mask &= c->data_mask;
++ if(mask != 0)
++ smd_set_mask(0x80 | c->tail_mask);
++ }
++
++ return orig_len - len;
++}
++
++int ch_write(struct smd_channel *c, void *buf, int len) {
++ unsigned head, tail ,mask;
++ int n;
++
++ head = HEAD(c->send);
++ tail = TAIL(c->send);
++
++ n = (head < tail) ? tail - head :
++ c->send.size - head;
++
++
++ mask = 0x80;
++
++ if(n > len) n = len;
++
++ if(n > 0) {
++ memcpy(HEADPTR(c->send), buf, n);
++ head = (head + n) % c->send.size;
++ SETHEAD(c->send, head);
++ mask |= c->head_mask;
++ }
++ head = HEAD(c->send);
++ tail = TAIL(c->send);
++
++ if(n < len)
++ mask |= c->data_mask;
++
++ smd_set_mask(mask);
++
++ return n;
++}
++
++struct smd_channel *smd_get_channel(int c) {
++ return &smd_channels[c];
++}
++
++int smd_read(int ch, void *buf, int len) {
++ struct smd_channel *c;
++ unsigned long flags;
++ int rc;
++
++ c = smd_get_channel(ch);
++ for(;;) {
++ spin_lock_irqsave(&smd_lock, flags);
++ if(smd_read_avail(c) >= len) {
++ rc = ch_read(c, buf, len);
++ spin_unlock_irqrestore(&smd_lock, flags);
++ if(rc == len)
++ return 0;
++ else
++ return -EIO;
++ }
++
++ spin_unlock_irqrestore(&smd_lock, flags);
++ wait_event(c->wait_recv, smd_read_avail(c) >= len);
++ }
++
++ return 0;
++}
++
++int smd_write(int ch, void *_buf, int len) {
++ struct smd_channel *c;
++ unsigned long flags;
++ int n;
++ char *buf = _buf;
++
++ c = smd_get_channel(ch);
++ while(len > 0) {
++ spin_lock_irqsave(&smd_lock, flags);
++ n = ch_write(c, buf, len);
++ spin_unlock_irqrestore(&smd_lock, flags);
++
++ len -= n;
++ buf += n;
++
++ wait_event(c->wait_send, len <= 0);
++ }
++
++ return 0;
++}
++
++
++void smd_init(void) {
++ struct resource *r;
++ unsigned short *ram;
++ int rc, i;
++
++ gpio_request(0x6b,"dpram");
++ gpio_request(0x46,"dpram");
++ gpio_request(0x6e,"dpram");
++ gpio_request(0x51,"dpram");
++ gpio_request(0x66,"dpram");
++
++ gpio_direction_output(0x6b,0);
++ gpio_direction_output(0x46,0);
++ gpio_direction_output(0x6e,0);
++ gpio_direction_output(0x51,1);
++ gpio_direction_output(0x66,1);
++
++ smd_phone_power(0);
++
++ gpio_set_value(0x46,0);
++ gpio_set_value(0x6b,0);
++
++ r = request_mem_region(0,0x4000,"dpram");
++ if(r==NULL){
++ printk("SMD: Can't get memory region!\n");
++ return;
++ }
++
++ mmio = (unsigned long)ioremap(r->start,r->end-r->start+1);
++
++ for(i=0;i<2;i++) {
++ init_waitqueue_head(&smd_channels[i].wait_recv);
++ init_waitqueue_head(&smd_channels[i].wait_send);
++ }
++
++ ram = ((unsigned short *)(mmio));
++ //check dpram
++ for(i=0;i<0x2000;i++)
++ ram[i] = 0;
++
++ ram[0] = 0xaa;
++ ram[1] = 1;
++
++ rc = request_irq(IRQ_GPIO(0x46), smd_irq_handler,
++ IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING,
++ "SMD-17", NULL);
++
++ smd_phone_power(0);
++ smd_phone_power(0);
++}
+diff -ur linux-2.6.32/arch/arm/tools/mach-types kernel/arch/arm/tools/mach-types
+--- linux-2.6.32/arch/arm/tools/mach-types 2009-12-03 05:51:21.000000000 +0200
++++ kernel/arch/arm/tools/mach-types 2009-12-12 16:09:26.746279722 +0200
+@@ -2249,7 +2249,7 @@
+ darwin MACH_DARWIN DARWIN 2262
+ oratiscomu MACH_ORATISCOMU ORATISCOMU 2263
+ rtsbc20 MACH_RTSBC20 RTSBC20 2264
+-sgh_i780 MACH_I780 I780 2265
++sgh_i780 MACH_SGH_I780 SGH_I780 2265
+ gemini324 MACH_GEMINI324 GEMINI324 2266
+ oratislan MACH_ORATISLAN ORATISLAN 2267
+ oratisalog MACH_ORATISALOG ORATISALOG 2268
+diff -ur linux-2.6.32/drivers/i2c/busses/i2c-pxa.c kernel/drivers/i2c/busses/i2c-pxa.c
+--- linux-2.6.32/drivers/i2c/busses/i2c-pxa.c 2009-12-03 05:51:21.000000000 +0200
++++ kernel/drivers/i2c/busses/i2c-pxa.c 2009-12-12 16:09:31.776280278 +0200
+@@ -1173,7 +1173,7 @@
+ .owner = THIS_MODULE,
+ .pm = I2C_PXA_DEV_PM_OPS,
+ },
+- .id_table = i2c_pxa_id_table,
++ .id_table = &i2c_pxa_id_table,
+ };
+
+ static int __init i2c_adap_pxa_init(void)
+diff -ur linux-2.6.32/drivers/input/keyboard/pxa27x_keypad.c kernel/drivers/input/keyboard/pxa27x_keypad.c
+--- linux-2.6.32/drivers/input/keyboard/pxa27x_keypad.c 2009-12-03 05:51:21.000000000 +0200
++++ kernel/drivers/input/keyboard/pxa27x_keypad.c 2009-12-12 16:09:32.012943837 +0200
+@@ -32,6 +32,16 @@
+
+ #include <mach/hardware.h>
+ #include <mach/pxa27x_keypad.h>
++#if defined(CONFIG_PXA3xx_DVFM)
++#include <linux/notifier.h>
++#include <linux/timer.h>
++#include <mach/dvfm.h>
++#include <mach/pxa3xx_dvfm.h>
++#endif
++#ifdef CONFIG_ANDROID_POWER
++#include <linux/android_power.h>
++static android_suspend_lock_t pxa27x_keypad_suspend_lock;
++#endif
+ /*
+ * Keypad Controller registers
+ */
+@@ -98,6 +108,25 @@
+ #define MAX_MATRIX_KEY_NUM (MAX_MATRIX_KEY_ROWS * MAX_MATRIX_KEY_COLS)
+ #define MAX_KEYPAD_KEYS (MAX_MATRIX_KEY_NUM + MAX_DIRECT_KEY_NUM)
+
++#if defined(CONFIG_PXA3xx_DVFM)
++#define D2_STABLE_JIFFIES 6
++
++static int keyevent_enable = 0;
++static int keypad_notifier_freq(struct notifier_block *nb,
++ unsigned long val, void *data);
++static struct notifier_block notifier_freq_block = {
++ .notifier_call = keypad_notifier_freq,
++};
++
++static struct dvfm_lock dvfm_lock = {
++ .lock = SPIN_LOCK_UNLOCKED,
++ .dev_idx = -1,
++ .count = 0,
++};
++
++static struct timer_list kp_timer;
++#endif
++
+ struct pxa27x_keypad {
+ struct pxa27x_keypad_platform_data *pdata;
+
+@@ -334,6 +363,8 @@
+ struct pxa27x_keypad *keypad = dev_id;
+ unsigned long kpc = keypad_readl(KPC);
+
++ printk("-- irq handled --\n");
++
+ if (kpc & KPC_DI)
+ pxa27x_keypad_scan_direct(keypad);
+
+@@ -402,6 +433,87 @@
+ clk_disable(keypad->clk);
+ }
+
++#if defined(CONFIG_PXA3xx_DVFM)
++static void set_dvfm_constraint(void)
++{
++ spin_lock_irqsave(&dvfm_lock.lock, dvfm_lock.flags);
++ if (dvfm_lock.count++ == 0) {
++ /* Disable lowpower mode */
++ dvfm_disable_op_name("D1", dvfm_lock.dev_idx);
++ dvfm_disable_op_name("D2", dvfm_lock.dev_idx);
++ if (cpu_is_pxa935())
++ dvfm_disable_op_name("CG", dvfm_lock.dev_idx);
++ }
++ spin_unlock_irqrestore(&dvfm_lock.lock, dvfm_lock.flags);
++}
++
++static void unset_dvfm_constraint(void)
++{
++ spin_lock_irqsave(&dvfm_lock.lock, dvfm_lock.flags);
++ if (dvfm_lock.count == 0) {
++ printk(KERN_WARNING "Keypad constraint has been removed.\n");
++ } else if (--dvfm_lock.count == 0) {
++ /* Enable lowpower mode */
++ dvfm_enable_op_name("D1", dvfm_lock.dev_idx);
++ dvfm_enable_op_name("D2", dvfm_lock.dev_idx);
++ if (cpu_is_pxa935())
++ dvfm_enable_op_name("CG", dvfm_lock.dev_idx);
++ }
++ spin_unlock_irqrestore(&dvfm_lock.lock, dvfm_lock.flags);
++}
++
++/*
++ * FIXME: Here a timer is used to disable entering D1/D2 for a while.
++ * Because keypad event wakeup system from D1/D2 mode. But keypad device
++ * can't detect the interrupt since it's in standby state.
++ * Keypad device need time to detect it again. So we use a timer here.
++ * D1/D2 idle is determined by idle time. It's better to comine these
++ * timers together.
++ */
++static void keypad_timer_handler(unsigned long data)
++{
++ unset_dvfm_constraint();
++}
++
++extern void get_wakeup_source(pm_wakeup_src_t *);
++
++static int keypad_notifier_freq(struct notifier_block *nb,
++ unsigned long val, void *data)
++{
++ struct dvfm_freqs *freqs = (struct dvfm_freqs *)data;
++ struct op_info *new = NULL;
++ struct dvfm_md_opt *op;
++ pm_wakeup_src_t src;
++
++ if (freqs)
++ new = &freqs->new_info;
++ else
++ return 0;
++
++ op = (struct dvfm_md_opt *)new->op;
++ if (val == DVFM_FREQ_POSTCHANGE) {
++ if ((op->power_mode == POWER_MODE_D1) ||
++ (op->power_mode == POWER_MODE_D2) ||
++ (op->power_mode == POWER_MODE_CG)) {
++ //get_wakeup_source(&src);
++ //if (src.bits.mkey || src.bits.dkey) {
++ /* If keypad event happens and wake system
++ * from D1/D2. Disable D1/D2 to make keypad
++ * work for a while.
++ */
++ kp_timer.expires = jiffies + D2_STABLE_JIFFIES;
++ add_timer(&kp_timer);
++ set_dvfm_constraint();
++ #ifdef CONFIG_ANDROID_POWER
++ android_lock_suspend_auto_expire(&pxa27x_keypad_suspend_lock, D2_STABLE_JIFFIES);
++ #endif
++ //}
++ }
++ }
++ return 0;
++}
++#endif
++
+ #ifdef CONFIG_PM
+ static int pxa27x_keypad_suspend(struct device *dev)
+ {
+@@ -410,8 +522,10 @@
+
+ clk_disable(keypad->clk);
+
+- if (device_may_wakeup(&pdev->dev))
++ if (device_may_wakeup(&pdev->dev)) {
++ printk("-- keypad wake set %d\n",keypad->irq);
+ enable_irq_wake(keypad->irq);
++ }
+
+ return 0;
+ }
+@@ -495,6 +609,15 @@
+ goto failed_free_mem;
+ }
+
++#if defined(CONFIG_PXA3xx_DVFM)
++ dvfm_register("Keypad", &dvfm_lock.dev_idx);
++ dvfm_register_notifier(&notifier_freq_block,
++ DVFM_FREQUENCY_NOTIFIER);
++ init_timer(&kp_timer);
++ kp_timer.function = keypad_timer_handler;
++ kp_timer.data = 0;
++#endif
++
+ keypad->clk = clk_get(&pdev->dev, NULL);
+ if (IS_ERR(keypad->clk)) {
+ dev_err(&pdev->dev, "failed to get keypad clock\n");
+@@ -596,11 +719,18 @@
+
+ static int __init pxa27x_keypad_init(void)
+ {
++#ifdef CONFIG_ANDROID_POWER
++ pxa27x_keypad_suspend_lock.name = "pxa27x_keypad";
++ android_init_suspend_lock(&pxa27x_keypad_suspend_lock);
++#endif
+ return platform_driver_register(&pxa27x_keypad_driver);
+ }
+
+ static void __exit pxa27x_keypad_exit(void)
+ {
++#ifdef CONFIG_ANDROID_POWER
++ android_uninit_suspend_lock(&pxa27x_keypad_suspend_lock);
++#endif
+ platform_driver_unregister(&pxa27x_keypad_driver);
+ }
+
+diff -ur linux-2.6.32/drivers/mmc/host/pxamci.c kernel/drivers/mmc/host/pxamci.c
+--- linux-2.6.32/drivers/mmc/host/pxamci.c 2009-12-03 05:51:21.000000000 +0200
++++ kernel/drivers/mmc/host/pxamci.c 2009-12-12 16:09:33.709612828 +0200
+@@ -127,9 +127,10 @@
+ break;
+ udelay(1);
+ } while (timeout--);
+-
++ /*
+ if (v & STAT_CLK_EN)
+ dev_err(mmc_dev(host->mmc), "unable to stop clock\n");
++ */
+ }
+ }
+
+diff -ur linux-2.6.32/drivers/net/wireless/libertas/if_spi.c kernel/drivers/net/wireless/libertas/if_spi.c
+--- linux-2.6.32/drivers/net/wireless/libertas/if_spi.c 2009-12-03 05:51:21.000000000 +0200
++++ kernel/drivers/net/wireless/libertas/if_spi.c 2009-12-12 16:09:35.289611714 +0200
+@@ -1020,9 +1020,9 @@
+ lbs_pr_err("Unsupported chip_id: 0x%02x\n", card_id);
+ return -EAFNOSUPPORT;
+ }
+- snprintf(helper_fw, IF_SPI_FW_NAME_MAX, "libertas/gspi%d_hlp.bin",
++ snprintf(helper_fw, IF_SPI_FW_NAME_MAX, "gspi%d_hlp.bin",
+ chip_id_to_device_name[i].name);
+- snprintf(main_fw, IF_SPI_FW_NAME_MAX, "libertas/gspi%d.bin",
++ snprintf(main_fw, IF_SPI_FW_NAME_MAX, "gspi%d.bin",
+ chip_id_to_device_name[i].name);
+ return 0;
+ }
+diff -ur linux-2.6.32/drivers/power/Kconfig kernel/drivers/power/Kconfig
+--- linux-2.6.32/drivers/power/Kconfig 2009-12-03 05:51:21.000000000 +0200
++++ kernel/drivers/power/Kconfig 2009-12-12 16:09:35.736280931 +0200
+@@ -110,4 +110,10 @@
+ help
+ Say Y to include support for NXP PCF50633 Main Battery Charger.
+
++config BATTERY_SGH
++ tristate "SGH battery driver"
++ depends on I2C
++ help
++ Say Y here to enable support for PM6558(I2C) chip used on Samsung I780/I900.
++
+ endif # POWER_SUPPLY
+diff -ur linux-2.6.32/drivers/power/Makefile kernel/drivers/power/Makefile
+--- linux-2.6.32/drivers/power/Makefile 2009-12-03 05:51:21.000000000 +0200
++++ kernel/drivers/power/Makefile 2009-12-12 16:09:35.736280931 +0200
+@@ -29,3 +29,5 @@
+ obj-$(CONFIG_BATTERY_DA9030) += da9030_battery.o
+ obj-$(CONFIG_BATTERY_MAX17040) += max17040_battery.o
+ obj-$(CONFIG_CHARGER_PCF50633) += pcf50633-charger.o
++obj-$(CONFIG_BATTERY_SGH) += sgh_battery.o
++
+diff -ur linux-2.6.32/drivers/power/sgh_battery.c kernel/drivers/power/sgh_battery.c
+--- linux-2.6.32/drivers/power/sgh_battery.c 2009-12-13 13:03:35.181931149 +0200
++++ kernel/drivers/power/sgh_battery.c 2009-12-12 16:09:35.746280509 +0200
+@@ -0,0 +1,474 @@
++/*
++ * Samsung I780/I900 battery driver
++ *
++ * Copyright (C) 2009 Sacha Refshauge <xsacha@gmail.com>
++ *
++ * Based on DQ27x00 battery driver:
++ * Copyright (C) 2008 Rodolfo Giometti <giometti@linux.it>
++ * Copyright (C) 2008 Eurotech S.p.A. <info@eurotech.it>
++ *
++ * which was based on a previous work by Copyright (C) 2008 Texas Instruments, Inc.
++ *
++ * This package is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License version 2 as
++ * published by the Free Software Foundation.
++ *
++ * THIS PACKAGE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
++ * IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
++ * WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE.
++ *
++ */
++#include <linux/module.h>
++#include <linux/param.h>
++#include <linux/jiffies.h>
++#include <linux/workqueue.h>
++#include <linux/delay.h>
++#include <linux/platform_device.h>
++#include <linux/power_supply.h>
++#include <linux/idr.h>
++#include <linux/i2c.h>
++#include <linux/gpio.h>
++
++#define DRIVER_VERSION "1.0.1"
++
++#define SGH_CHARGE_GPIO 88
++
++#define SGH_BATT_REG_TEMP 0x25
++#define SGH_BATT_REG_VDIFF 0x23
++#define SGH_BATT_REG_VOLT 0x21
++
++/* Reg Table
++This is what is known of the register banks in PM6558 by
++observation. Assumed that all registers are WORDs, so
++address increases by 2. Also assumed that all registers
++are 12-bit right justified (& 0xFFF).
++
++Register Task Value
++0x21 Voltage The voltage
++0x23 Charging True if charging, False if not charging
++0x25 Temperature The temperature (which is used to determine charge)
++0xC2 Shutdown Write-only regisiter
++
++*/
++
++struct sgh_batt_device_info;
++struct sgh_batt_access_methods {
++ int (*read)(u8 reg, int *rt_value, int b_single,
++ struct sgh_batt_device_info *di);
++};
++struct sgh_batt_device_info {
++ struct device *dev;
++ int id;
++ int voltage_uV;
++ int current_uA;
++ int temp_C;
++ int charge_rsoc;
++ struct sgh_batt_access_methods *bus;
++ struct power_supply bat;
++ struct power_supply bat_ac;
++ struct power_supply bat_usb;
++
++ struct i2c_client *client;
++
++ struct delayed_work work;
++ struct workqueue_struct *wqueue;
++
++ int voltage;
++ int voltage_sum;
++ int voltage_count;
++ int capacity;
++ int charging_status;
++ int poll_count;
++};
++
++
++static enum power_supply_property sgh_batt_battery_props[] = {
++ POWER_SUPPLY_PROP_STATUS,
++ POWER_SUPPLY_PROP_HEALTH,
++ POWER_SUPPLY_PROP_TECHNOLOGY,
++ POWER_SUPPLY_PROP_PRESENT,
++ POWER_SUPPLY_PROP_BATT_VOL,
++ POWER_SUPPLY_PROP_CAPACITY,
++ POWER_SUPPLY_PROP_BATT_TEMP,
++};
++
++static enum power_supply_property sgh_batt_power_props[] = {
++ POWER_SUPPLY_PROP_ONLINE,
++};
++
++static int sgh_batt_read(u8 reg, int *rt_value, struct sgh_batt_device_info *di)
++{
++ struct i2c_client *client = di->client;
++
++ *rt_value = be16_to_cpu(i2c_smbus_read_word_data(client, reg));
++ *rt_value = *rt_value & 0xFFF;
++
++ return 0;
++}
++
++/*
++ * Return the battery voltage in millivolts
++ *
++ */
++static int sgh_batt_get_voltage(struct sgh_batt_device_info *di)
++{
++ int i;
++ int voltages[5];
++ int voltage = 0, largest = 0, smallest = 0;
++
++ for(i = 0; i < 5; i++)
++ {
++ sgh_batt_read(SGH_BATT_REG_VOLT, &voltages[i], di);
++ if (voltages[i] > voltages[largest])
++ largest = i;
++
++ if (voltages[i] < voltages[smallest])
++ smallest = i;
++ }
++ for(i = 0; i < 5; i++)
++ {
++ if (i != smallest && i != largest)
++ voltage += voltages[i];
++ }
++
++ voltage /= 3;
++
++ if(di->voltage_count < 10) {
++ di->voltage_sum += voltage;
++ di->voltage_count++;
++ voltage = di->voltage_sum / di->voltage_count;
++ } else {
++ di->voltage_sum = di->voltage_sum - di->voltage + voltage;
++ voltage = di->voltage_sum / 10;
++ }
++
++ return voltage;
++}
++
++/*
++ * Return the battery temperature in (10x) Celcius degrees.
++ *
++ * From Windows Mobile:
++ * Temp Sample [ Min: 0x21B, 0x368, 0x89e : Max]
++ * 539 872 2206
++ */
++static int sgh_batt_get_temp(struct sgh_batt_device_info *di)
++{
++ int temp = 0;
++
++ sgh_batt_read(SGH_BATT_REG_TEMP, &temp, di);
++
++ return temp >> 2;
++}
++
++/*
++ * Return the battery charge in percentage.
++ */
++static int sgh_batt_get_charge(struct sgh_batt_device_info *di)
++{
++ int volt = di->voltage;
++ int i, k = 0, d = 10;
++ int ndist, tdist;
++ int vsamp[] = {0xe38, 0xdb6, 0xd66, 0xd25, 0xce4, 0xc94, 0xb79};
++ // Charging applies a greater voltage. USB: ~0x30 AC: ~0x60
++ // volt -= be16_to_cpu(i2c_smbus_read_word_data(di->client, SGH_BATT_REG_VDIFF)) & 0xFFF; // FIXME
++
++ /* Use voltage to work out charge.
++ Closer to 100%, the voltage has less impact on gradient (linear).
++ Whereas closer to 0%, it is purely the gradient.
++ */
++ for (i = 6; i >= 0; i--)
++ {
++ if (volt < vsamp[i])
++ {
++ switch (i) {
++ case 0:
++ k = k + 1;
++ case 1:
++ k = k + 1;
++ case 2:
++ k = k + 1;
++ case 3:
++ d = d >> 1;
++ case 4:
++ k = k + 1;
++ case 5:
++ ndist = 100 * (volt - vsamp[i+1]);
++ tdist = (vsamp[i] - vsamp[i+1]);
++ volt = (k * 100) + (ndist / tdist);
++ return volt / d;
++ default:
++ return 0;
++ }
++ }
++ }
++ return 100;
++}
++
++#define to_sgh_batt_device_info(x) container_of((x), \
++ struct sgh_batt_device_info, bat);
++
++static int sgh_batt_battery_get_property(struct power_supply *psy,
++ enum power_supply_property psp,
++ union power_supply_propval *val)
++{
++ struct sgh_batt_device_info *di = to_sgh_batt_device_info(psy);
++ switch (psp) {
++
++ case POWER_SUPPLY_PROP_BATT_VOL:
++ val->intval = sgh_batt_get_voltage(di);
++ break;
++
++ case POWER_SUPPLY_PROP_PRESENT:
++ val->intval = true; // Device can't run without it
++ break;
++ case POWER_SUPPLY_PROP_CAPACITY:
++ val->intval = di->capacity;
++ break;
++ case POWER_SUPPLY_PROP_BATT_TEMP:
++ val->intval = sgh_batt_get_temp(di);
++ break;
++
++ case POWER_SUPPLY_PROP_STATUS:
++ val->intval = di->charging_status ? POWER_SUPPLY_STATUS_CHARGING : POWER_SUPPLY_STATUS_NOT_CHARGING;
++ break;
++ case POWER_SUPPLY_PROP_TECHNOLOGY:
++ val->intval = POWER_SUPPLY_TECHNOLOGY_LION;
++ break;
++ case POWER_SUPPLY_PROP_HEALTH:
++ val->intval = POWER_SUPPLY_HEALTH_GOOD;
++ break;
++ default:
++ return -EINVAL;
++ }
++
++ return 0;
++}
++
++static int sgh_batt_power_get_property(struct power_supply *psy,
++ enum power_supply_property psp,
++ union power_supply_propval *val)
++{
++ struct sgh_batt_device_info *di = to_sgh_batt_device_info(psy);
++ switch (psp) {
++ case POWER_SUPPLY_PROP_ONLINE:
++ if (psy->type == POWER_SUPPLY_TYPE_MAINS)
++ val->intval = (di->charging_status == 1) ? 1 : 0;
++ else if (psy->type == POWER_SUPPLY_TYPE_USB)
++ val->intval = (di->charging_status == 2) ? 1 : 0;
++ else val->intval = 0;
++ break;
++ default:
++ return -EINVAL;
++ }
++
++ return 0;
++}
++
++static void sgh_batt_battery_update(struct power_supply *psy)
++{
++ int charging_status;
++ struct sgh_batt_device_info *di = to_sgh_batt_device_info(psy);
++ charging_status = di->charging_status;
++
++ di->poll_count++;
++ if(gpio_get_value(SGH_CHARGE_GPIO)) {
++ di->charging_status = 0; //not charging
++ } else {
++ di->charging_status = 1; //ac
++ //TODO: Detect usb
++ }
++
++ if(di->charging_status != charging_status || di->poll_count >= 5) {
++ if(di->charging_status != charging_status)
++ di->voltage_sum = di->voltage_count = 0;
++
++ di->voltage = sgh_batt_get_voltage(di);
++ di->capacity = sgh_batt_get_charge(di);
++
++ printk("pwr: V:%x C:%d\n",di->voltage,di->capacity);
++
++ power_supply_changed(psy);
++ di->poll_count = 0;
++ }
++
++ /*
++ di->charging_status = gpio_get_value(SGH_CHARGE_GPIO) ?
++ POWER_SUPPLY_STATUS_NOT_CHARGING :
++ POWER_SUPPLY_STATUS_CHARGING;
++ */
++/*
++ if (di->charging_status != charging_status)
++ {
++ di->reset_avg = 1;
++ di->poll_count = 0xff;
++ }
++
++ if(di->poll_count >= 10) {
++ di->poll_count = 0;
++ power_supply_changed(psy);
++ }
++*/
++}
++
++static void sgh_batt_battery_work(struct work_struct *work)
++{
++ struct sgh_batt_device_info *di = container_of(work, struct sgh_batt_device_info, work.work);
++
++ sgh_batt_battery_update(&di->bat);
++ queue_delayed_work(di->wqueue, &di->work, HZ*5);
++}
++
++static char *supply_list[] = {
++ "battery",
++};
++
++static void sgh_powersupply_init(struct sgh_batt_device_info *di) {
++ di->bat.type = POWER_SUPPLY_TYPE_BATTERY;
++ di->bat.properties = sgh_batt_battery_props;
++ di->bat.num_properties = ARRAY_SIZE(sgh_batt_battery_props);
++ di->bat.get_property = sgh_batt_battery_get_property;
++ di->bat.external_power_changed = NULL;
++}
++
++static void sgh_powersupply_power_init(struct power_supply *bat,int is_usb) {
++ bat->name = is_usb ? "usb" : "ac";
++ bat->type = is_usb ? POWER_SUPPLY_TYPE_USB : POWER_SUPPLY_TYPE_MAINS;
++ bat->supplied_to = supply_list;
++ bat->num_supplicants = ARRAY_SIZE(supply_list);
++ bat->properties = sgh_batt_power_props;
++ bat->num_properties = ARRAY_SIZE(sgh_batt_power_props);
++ bat->get_property = sgh_batt_power_get_property;
++}
++
++static int sgh_batt_battery_probe(struct i2c_client *client,
++ const struct i2c_device_id *id)
++{
++ struct sgh_batt_device_info *di;
++ struct sgh_batt_access_methods *bus;
++ int retval = 0;
++
++ retval = gpio_request(SGH_CHARGE_GPIO, "BATT CHRG");
++ if (retval)
++ goto batt_failed_0;
++
++ di = kzalloc(sizeof(*di), GFP_KERNEL);
++ if (!di) {
++ dev_err(&client->dev, "failed to allocate device info data\n");
++ retval = -ENOMEM;
++ return retval;
++ }
++
++ bus = kzalloc(sizeof(*bus), GFP_KERNEL);
++ if (!bus) {
++ dev_err(&client->dev, "failed to allocate access method "
++ "data\n");
++ retval = -ENOMEM;
++ goto batt_failed_1;
++ }
++
++ i2c_set_clientdata(client, di);
++ di->dev = &client->dev;
++ di->bat.name = "battery"; // Android only looks for this
++ di->bus = bus;
++ di->client = client;
++ di->poll_count = 0;
++ sgh_powersupply_init(di);
++ retval = power_supply_register(&client->dev, &di->bat);
++ if (retval) {
++ dev_err(&client->dev, "failed to register battery\n");
++ goto batt_failed_2;
++ }
++
++ sgh_powersupply_power_init(&di->bat_ac,0);
++ retval = power_supply_register(&client->dev, &di->bat_ac);
++ if (retval) {
++ dev_err(&client->dev, "failed to register battery (ac)\n");
++ goto batt_failed_2;
++ }
++
++ sgh_powersupply_power_init(&di->bat_usb,1);
++ retval = power_supply_register(&client->dev, &di->bat_usb);
++ if (retval) {
++ dev_err(&client->dev, "failed to register battery (usb)\n");
++ goto batt_failed_2;
++ }
++
++ INIT_DELAYED_WORK(&di->work, sgh_batt_battery_work);
++ di->wqueue = create_singlethread_workqueue("battery");
++ queue_delayed_work(di->wqueue, &di->work, 1);
++
++ dev_info(&client->dev, "support ver. %s enabled\n", DRIVER_VERSION);
++
++ return 0;
++
++batt_failed_2:
++ kfree(bus);
++batt_failed_1:
++ kfree(di);
++batt_failed_0:
++
++ return retval;
++}
++
++static int sgh_batt_battery_remove(struct i2c_client *client)
++{
++ struct sgh_batt_device_info *di = i2c_get_clientdata(client);
++
++ cancel_rearming_delayed_workqueue(di->wqueue,
++ &di->work);
++ destroy_workqueue(di->wqueue);
++
++ gpio_free(SGH_CHARGE_GPIO);
++
++ power_supply_unregister(&di->bat);
++
++ kfree(di->bat.name);
++
++ kfree(di);
++
++ return 0;
++}
++
++
++/*
++ * Module stuff
++ */
++
++static const struct i2c_device_id sgh_batt_id[] = {
++ { "sgh_battery", 0 },
++ {},
++};
++
++static struct i2c_driver sgh_batt_battery_driver = {
++ .driver = {
++ .name = "battery",
++ },
++ .probe = sgh_batt_battery_probe,
++ .remove = sgh_batt_battery_remove,
++ .suspend = NULL,
++ .resume = NULL, //todo: power management
++ .id_table = sgh_batt_id,
++};
++
++static int __init sgh_batt_battery_init(void)
++{
++ int ret;
++
++ ret = i2c_add_driver(&sgh_batt_battery_driver);
++ if (ret)
++ printk(KERN_ERR "Unable to register Samsung I780/I900 driver\n");
++
++ return ret;
++}
++module_init(sgh_batt_battery_init);
++
++static void __exit sgh_batt_battery_exit(void)
++{
++ i2c_del_driver(&sgh_batt_battery_driver);
++}
++module_exit(sgh_batt_battery_exit);
++
++MODULE_AUTHOR("Sacha Refshauge <xsacha@gmail.com>");
++MODULE_DESCRIPTION("Samsung I780/I900 battery monitor driver");
++MODULE_LICENSE("GPL");
+diff -ur linux-2.6.32/drivers/video/pxafb.c kernel/drivers/video/pxafb.c
+--- linux-2.6.32/drivers/video/pxafb.c 2009-12-03 05:51:21.000000000 +0200
++++ kernel/drivers/video/pxafb.c 2009-12-13 14:40:18.638427304 +0200
+@@ -62,6 +62,11 @@
+ #include <mach/bitfield.h>
+ #include <mach/pxafb.h>
+
++#ifdef CONFIG_PXA3xx_DVFM
++#include <mach/dvfm.h>
++#include <mach/pxa3xx_dvfm.h>
++#endif
++
+ /*
+ * Complain if VAR is out of range.
+ */
+@@ -86,6 +91,19 @@
+
+ static unsigned long video_mem_size = 0;
+
++#ifdef CONFIG_PXA3xx_DVFM
++static int fb_notifier_freq(struct notifier_block *nb,
++ unsigned long val, void *data);
++static struct notifier_block notifier_freq_block = {
++ .notifier_call = fb_notifier_freq,
++};
++
++static void *dev_id = NULL;
++
++static int hss = 0;
++static int pxafb_adjust_pcd(struct pxafb_info *fbi, int hss);
++#endif
++
+ static inline unsigned long
+ lcd_readl(struct pxafb_info *fbi, unsigned int off)
+ {
+@@ -1468,6 +1486,11 @@
+ lcd_writel(fbi, LCSR1, lcsr1);
+ }
+ #endif
++ if( lcsr & (LCSR_BS|LCSR_SOF))
++ {
++ wake_up(&fbi->ctrlr_wait);
++ }
++
+ return IRQ_HANDLED;
+ }
+
+@@ -1642,7 +1665,7 @@
+ {
+ struct pxafb_info *fbi = dev_get_drvdata(dev);
+
+- set_ctrlr_state(fbi, C_DISABLE_PM);
++ //set_ctrlr_state(fbi, C_DISABLE_PM);
+ return 0;
+ }
+
+@@ -1650,7 +1673,7 @@
+ {
+ struct pxafb_info *fbi = dev_get_drvdata(dev);
+
+- set_ctrlr_state(fbi, C_ENABLE_PM);
++ //set_ctrlr_state(fbi, C_ENABLE_PM);
+ return 0;
+ }
+
+@@ -1660,6 +1683,87 @@
+ };
+ #endif
+
++#ifdef CONFIG_PXA3xx_DVFM
++static int dvfm_dev_idx;
++static void set_dvfm_constraint(void)
++{
++ /* Disable Lowpower mode */
++ /* Remove D0CS constraint since LCCR3_STALL is set */
++// dvfm_disable_op_name("D0CS", dvfm_dev_idx);
++ dvfm_disable_op_name("D1", dvfm_dev_idx);
++ dvfm_disable_op_name("D2", dvfm_dev_idx);
++ if (cpu_is_pxa935())
++ dvfm_disable_op_name("CG", dvfm_dev_idx);
++}
++
++static void unset_dvfm_constraint(void)
++{
++ /* Enable Lowpower mode */
++ /* Remove D0CS constraint since LCCR3_STALL is set */
++// dvfm_enable_op_name("D0CS", dvfm_dev_idx);
++ dvfm_enable_op_name("D1", dvfm_dev_idx);
++ dvfm_enable_op_name("D2", dvfm_dev_idx);
++ if (cpu_is_pxa935())
++ dvfm_enable_op_name("CG", dvfm_dev_idx);
++}
++
++static int fb_notifier_freq(struct notifier_block *nb,
++ unsigned long val, void *data)
++{
++ struct dvfm_freqs *freqs = (struct dvfm_freqs *)data;
++ struct op_info *new = NULL;
++ struct dvfm_md_opt *op;
++/*
++ if (freqs) {
++ new = &freqs->new_info;
++ } else
++ return 0;
++
++ op = (struct dvfm_md_opt *)new->op;
++ switch (val) {
++ case DVFM_FREQ_PRECHANGE:
++ if ((op->power_mode == POWER_MODE_D0) ||
++ (op->power_mode == POWER_MODE_D0CS))
++ hss = op->hss;
++ else if ((op->power_mode == POWER_MODE_D1) ||
++ (op->power_mode == POWER_MODE_D2) ||
++ (op->power_mode == POWER_MODE_CG))
++ lcd_update = 0;
++ break;
++ case DVFM_FREQ_POSTCHANGE:
++ if ((op->power_mode == POWER_MODE_D1) ||
++ (op->power_mode == POWER_MODE_D2) ||
++ (op->power_mode == POWER_MODE_CG))
++ lcd_update = 1;
++ break;
++ }
++*/
++ return 0;
++}
++
++static int pxafb_adjust_pcd(struct pxafb_info *fbi, int hss)
++{
++
++ return 0;
++}
++
++void pxafb_set_pcd(void)
++{
++/*
++ struct pxafb_info *fbi = (struct pxafb_info *)dev_id;
++
++ if (fbi)
++ pxafb_adjust_pcd(fbi, hss);
++*/
++ return;
++}
++
++EXPORT_SYMBOL(pxafb_set_pcd);
++#else
++static void set_dvfm_constraint(void) {}
++static void unset_dvfm_constraint(void) {}
++#endif
++
+ static int __devinit pxafb_init_video_memory(struct pxafb_info *fbi)
+ {
+ int size = PAGE_ALIGN(fbi->video_mem_size);
+
+diff -ur linux-2.6.32/include/linux/input.h kernel/include/linux/input.h
+--- linux-2.6.32/include/linux/input.h 2009-12-03 05:51:21.000000000 +0200
++++ kernel/include/linux/input.h 2009-12-12 16:09:40.056274324 +0200
+@@ -333,6 +333,7 @@
+ #define KEY_BASSBOOST 209
+ #define KEY_PRINT 210 /* AC Print */
+ #define KEY_HP 211
++#define KEY_CAMERAFOCUS 211
+ #define KEY_CAMERA 212
+ #define KEY_SOUND 213
+ #define KEY_QUESTION 214
+diff -ur linux-2.6.32/include/linux/power_supply.h kernel/include/linux/power_supply.h
+--- linux-2.6.32/include/linux/power_supply.h 2009-12-03 05:51:21.000000000 +0200
++++ kernel/include/linux/power_supply.h 2009-12-12 16:09:40.166275516 +0200
+@@ -113,6 +113,8 @@
+ POWER_SUPPLY_PROP_TIME_TO_EMPTY_AVG,
+ POWER_SUPPLY_PROP_TIME_TO_FULL_NOW,
+ POWER_SUPPLY_PROP_TIME_TO_FULL_AVG,
++ POWER_SUPPLY_PROP_BATT_VOL,
++ POWER_SUPPLY_PROP_BATT_TEMP,
+ /* Properties of type `const char *' */
+ POWER_SUPPLY_PROP_MODEL_NAME,
+ POWER_SUPPLY_PROP_MANUFACTURER,
+diff -ur linux-2.6.32/include/linux/time.h kernel/include/linux/time.h
+--- linux-2.6.32/include/linux/time.h 2009-12-03 05:51:21.000000000 +0200
++++ kernel/include/linux/time.h 2009-12-12 16:09:40.246280545 +0200
+@@ -107,6 +107,7 @@
+ extern int no_sync_cmos_clock __read_mostly;
+ void timekeeping_init(void);
+ extern int timekeeping_suspended;
++extern void update_sleep_time(struct timespec ts);
+
+ unsigned long get_seconds(void);
+ struct timespec current_kernel_time(void);
+diff -ur linux-2.6.32/kernel/printk.c kernel/kernel/printk.c
+--- linux-2.6.32/kernel/printk.c 2009-12-03 05:51:21.000000000 +0200
++++ kernel/kernel/printk.c 2009-12-12 16:09:40.512534939 +0200
+@@ -257,6 +257,53 @@
+ #endif
+
+ /*
++ * Return the number of unread characters in the log buffer.
++ */
++static int log_buf_get_len(void)
++{
++ return logged_chars;
++}
++
++/*
++ * Clears the ring-buffer
++ */
++void log_buf_clear(void)
++{
++ logged_chars = 0;
++}
++
++/*
++ * Copy a range of characters from the log buffer.
++ */
++int log_buf_copy(char *dest, int idx, int len)
++{
++ int ret, max;
++ bool took_lock = false;
++
++ if (!oops_in_progress) {
++ spin_lock_irq(&logbuf_lock);
++ took_lock = true;
++ }
++
++ max = log_buf_get_len();
++ if (idx < 0 || idx >= max) {
++ ret = -1;
++ } else {
++ if (len > max - idx)
++ len = max - idx;
++ ret = len;
++ idx += (log_end - max);
++ while (len-- > 0)
++ dest[len] = LOG_BUF(idx + len);
++ }
++
++ if (took_lock)
++ spin_unlock_irq(&logbuf_lock);
++
++ return ret;
++}
++
++/*
+ * Commands to do_syslog:
+ *
+ * 0 -- Close the log. Currently a NOP.
+@@ -1405,3 +1452,4 @@
+ }
+ EXPORT_SYMBOL(printk_timed_ratelimit);
+ #endif
++
+diff -ur linux-2.6.32/kernel/time/timekeeping.c kernel/kernel/time/timekeeping.c
+--- linux-2.6.32/kernel/time/timekeeping.c 2009-12-03 05:51:21.000000000 +0200
++++ kernel/kernel/time/timekeeping.c 2009-12-12 16:09:40.559199813 +0200
+@@ -886,3 +886,14 @@
+ now.tv_nsec + mono.tv_nsec);
+ return now;
+ }
++
++void update_sleep_time(struct timespec ts)
++{
++ long wtm_sec, wtm_nsec;
++ wtm_sec = wall_to_monotonic.tv_sec - ts.tv_sec;
++ wtm_nsec = wall_to_monotonic.tv_nsec - ts.tv_nsec;
++ set_normalized_timespec(&wall_to_monotonic, wtm_sec, wtm_nsec);
++ set_normalized_timespec(&total_sleep_time,
++ (ts.tv_sec + total_sleep_time.tv_sec),
++ (ts.tv_nsec + total_sleep_time.tv_nsec));
++}
+diff -ur linux-2.6.32/sound/soc/pxa/Kconfig kernel/sound/soc/pxa/Kconfig
+--- linux-2.6.32/sound/soc/pxa/Kconfig 2009-12-03 05:51:21.000000000 +0200
++++ kernel/sound/soc/pxa/Kconfig 2009-12-12 16:09:41.692528097 +0200
+@@ -144,3 +144,14 @@
+ help
+ Say Y if you want to add support for SoC audio on the
+ IMote 2.
++
++config SND_SOC_SGH
++ tristate "SoC Audio support for Samsung SGH I900"
++ depends on SND_PXA2XX_SOC && MACH_SGH_I900
++ select SND_PXA2XX_SOC_AC97
++ select SND_PXA_SOC_SSP
++ select SND_SOC_WM9713
++ help
++ Say Y if you want to add support for SoC audio on the
++ Samsung SGH I900 mobile phone.
++
+diff -ur linux-2.6.32/sound/soc/pxa/Makefile kernel/sound/soc/pxa/Makefile
+--- linux-2.6.32/sound/soc/pxa/Makefile 2009-12-03 05:51:21.000000000 +0200
++++ kernel/sound/soc/pxa/Makefile 2009-12-12 16:09:41.692528097 +0200
+@@ -23,6 +23,7 @@
+ snd-soc-magician-objs := magician.o
+ snd-soc-mioa701-objs := mioa701_wm9713.o
+ snd-soc-imote2-objs := imote2.o
++snd-soc-sgh-objs := sgh.o
+
+ obj-$(CONFIG_SND_PXA2XX_SOC_CORGI) += snd-soc-corgi.o
+ obj-$(CONFIG_SND_PXA2XX_SOC_POODLE) += snd-soc-poodle.o
+@@ -37,3 +38,4 @@
+ obj-$(CONFIG_SND_PXA2XX_SOC_MIOA701) += snd-soc-mioa701.o
+ obj-$(CONFIG_SND_SOC_ZYLONITE) += snd-soc-zylonite.o
+ obj-$(CONFIG_SND_PXA2XX_SOC_IMOTE2) += snd-soc-imote2.o
++obj-$(CONFIG_SND_SOC_SGH) += snd-soc-sgh.o
+diff -ur linux-2.6.32/sound/soc/pxa/sgh.c kernel/sound/soc/pxa/sgh.c
+--- linux-2.6.32/sound/soc/pxa/sgh.c 2009-12-13 13:07:09.965238502 +0200
++++ kernel/sound/soc/pxa/sgh.c 2009-12-12 16:09:41.695861483 +0200
+@@ -0,0 +1,310 @@
++/*
++ * Handles the Samsung I780-I900 SoC system
++ *
++ * Copyright (C) 2009 Mustafa Ozsakalli
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation in version 2 of the License.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
++ */
++
++#include <linux/module.h>
++#include <linux/moduleparam.h>
++#include <linux/platform_device.h>
++#include <linux/gpio.h>
++#include <linux/delay.h>
++#include <linux/irq.h>
++
++#include <asm/mach-types.h>
++#include <mach/audio.h>
++
++#include <sound/core.h>
++#include <sound/pcm.h>
++#include <sound/pcm_params.h>
++#include <sound/soc.h>
++#include <sound/soc-dapm.h>
++#include <sound/initval.h>
++#include <sound/ac97_codec.h>
++
++#include "pxa2xx-pcm.h"
++#include "pxa2xx-ac97.h"
++#include "../codecs/wm9713.h"
++#include "pxa-ssp.h"
++
++#define ARRAY_AND_SIZE(x) (x), ARRAY_SIZE(x)
++
++#define SGH_I780_AUDIO_GPIO 0x13
++#define SGH_I900_AUDIO_GPIO 0x11
++
++static const struct snd_soc_dapm_widget sgh_dapm_widgets[] = {
++ SND_SOC_DAPM_SPK("Front Speaker", NULL),
++ SND_SOC_DAPM_HP("Headset", NULL),
++ SND_SOC_DAPM_LINE("GSM Line Out", NULL),
++ SND_SOC_DAPM_LINE("GSM Line In", NULL),
++ SND_SOC_DAPM_LINE("Radio Line Out", NULL),
++ SND_SOC_DAPM_MIC("Front Mic", NULL),
++};
++
++static const struct snd_soc_dapm_route audio_map[] = {
++ /* Microphone */
++ {"MIC1", NULL, "Front Mic"},
++
++ /* Speaker */
++ {"Front Speaker", NULL, "SPKL"},
++ {"Front Speaker", NULL, "SPKR"},
++
++ /* Earpiece */
++ {"Headset", NULL, "HPL"},
++ {"Headset", NULL, "HPR"},
++
++ /* GSM Module */
++ {"MONOIN", NULL, "GSM Line Out"},
++ {"PCBEEP", NULL, "GSM Line Out"},
++ {"GSM Line In", NULL, "MONO"},
++
++ /* FM Radio Module */
++ {"LINEL", NULL, "Radio Line Out"},
++ {"LINER", NULL, "Radio Line Out"},
++};
++
++static int sgh_wm9713_init(struct snd_soc_codec *codec)
++{
++ unsigned short reg;
++
++ snd_soc_dapm_new_controls(codec, ARRAY_AND_SIZE(sgh_dapm_widgets));
++ snd_soc_dapm_add_routes(codec, ARRAY_AND_SIZE(audio_map));
++
++ snd_soc_dapm_enable_pin(codec, "Front Speaker");
++
++ snd_soc_dapm_sync(codec);
++
++
++ return 0;
++}
++
++static int sgh_hifi_startup(struct snd_pcm_substream *substream){
++ struct snd_soc_pcm_runtime *rtd = substream->private_data;
++ struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
++
++ cpu_dai->playback.channels_min = 2;
++ cpu_dai->playback.channels_max = 2;
++
++ return 0;
++}
++
++static int sgh_hifi_prepare(struct snd_pcm_substream *substream) {
++ struct snd_soc_pcm_runtime *rtd = substream->private_data;
++ struct snd_soc_codec *codec = rtd->socdev->card->codec;
++ struct snd_soc_dai *codec_dai = rtd->dai->codec_dai;
++ u16 reg;
++ int gpio = machine_is_sgh_i780() ? SGH_I780_AUDIO_GPIO : SGH_I900_AUDIO_GPIO;
++
++ codec->write(codec, AC97_POWERDOWN, 0);
++ mdelay(1);
++ codec_dai->ops->set_pll(codec_dai, 0, 4096000, 0);
++ schedule_timeout_interruptible(msecs_to_jiffies(10));
++ codec->write(codec, AC97_HANDSET_RATE, 0x0000);
++ schedule_timeout_interruptible(msecs_to_jiffies(10));
++
++ if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
++ reg = AC97_PCM_FRONT_DAC_RATE;
++ else
++ reg = AC97_PCM_LR_ADC_RATE;
++ codec->write(codec, AC97_EXTENDED_STATUS, 0x1);
++ codec->write(codec, reg, substream->runtime->rate);
++
++ //Turn on external speaker
++ //TODO: Headset detection
++ gpio_set_value(gpio, 1);
++
++ return 0;
++}
++
++static void sgh_hifi_shutdown(struct snd_pcm_substream *substream) {
++ int gpio = machine_is_sgh_i780() ? SGH_I780_AUDIO_GPIO : SGH_I900_AUDIO_GPIO;
++ gpio_direction_output(gpio, 1);
++ gpio_set_value(gpio, 0);
++}
++
++static int sgh_voice_startup(struct snd_pcm_substream *substream)
++{
++ struct snd_soc_pcm_runtime *rtd = substream->private_data;
++ struct snd_soc_dai *cpu_dai = rtd->dai->cpu_dai;
++
++ cpu_dai->playback.channels_min = 1;
++ cpu_dai->playback.channels_max = 1;
++
++ return 0;
++};
++
++static int sgh_voice_prepare(struct snd_pcm_substream *substream)
++{
++#define WM9713_DR_8000 0x1F40 /* 8000 samples/sec */
++#define WM9713_DR_11025 0x2B11 /* 11025 samples/sec */
++#define WM9713_DR_12000 0x2EE0 /* 12000 samples/sec */
++#define WM9713_DR_16000 0x3E80 /* 16000 samples/sec */
++#define WM9713_DR_22050 0x5622 /* 22050 samples/sec */
++#define WM9713_DR_24000 0x5DC0 /* 24000 samples/sec */
++#define WM9713_DR_32000 0x7D00 /* 32000 samples/sec */
++#define WM9713_DR_44100 0xAC44 /* 44100 samples/sec */
++#define WM9713_DR_48000 0xBB80 /* 48000 samples/sec */
++
++ return 0;
++};
++
++static void sgh_voice_shutdown(struct snd_pcm_substream *substream)
++{
++
++};
++
++static struct snd_soc_ops sgh_ops[] = {
++{
++ .startup = sgh_hifi_startup,
++ .prepare = sgh_hifi_prepare,
++ .shutdown = sgh_hifi_shutdown,
++},
++{
++ .startup = sgh_voice_startup,
++ .prepare = sgh_voice_prepare,
++ .shutdown = sgh_voice_shutdown,
++},
++};
++
++static struct snd_soc_dai_link sgh_dai[] = {
++ {
++ .name = "AC97",
++ .stream_name = "AC97 HiFi",
++ .cpu_dai = &pxa_ac97_dai[PXA2XX_DAI_AC97_HIFI],
++ .codec_dai = &wm9713_dai[WM9713_DAI_AC97_HIFI],
++ .init = sgh_wm9713_init,
++ .ops = &sgh_ops[0],
++ },
++ {
++ .name = "AC97 Aux",
++ .stream_name = "AC97 Aux",
++ .cpu_dai = &pxa_ac97_dai[PXA2XX_DAI_AC97_AUX],
++ .codec_dai = &wm9713_dai[WM9713_DAI_AC97_AUX],
++ },
++ {
++ .name = "WM9713 Voice",
++ .stream_name = "WM9713 Voice",
++ .cpu_dai = &pxa_ssp_dai[PXA_DAI_SSP3],
++ .codec_dai = &wm9713_dai[WM9713_DAI_PCM_VOICE],
++ .ops = &sgh_ops[1],
++ },
++};
++
++static struct snd_soc_card sgh = {
++ .name = "SGHAudio",
++ .platform = &pxa2xx_soc_platform,
++ .dai_link = sgh_dai,
++ .num_links = ARRAY_SIZE(sgh_dai),
++};
++
++static struct snd_soc_device sgh_snd_devdata = {
++ .card = &sgh,
++ .codec_dev = &soc_codec_dev_wm9713,
++};
++
++static struct platform_device *sgh_snd_device;
++
++static int sgh_wm9713_probe(struct platform_device *pdev)
++{
++ int ret;
++ int gpio = machine_is_sgh_i780() ? SGH_I780_AUDIO_GPIO : SGH_I900_AUDIO_GPIO;
++
++ gpio_request(0x64, "WM9713 Power");
++ gpio_direction_output(0x64, 1);
++ gpio_set_value(0x64, 0);
++ mdelay(10);
++ gpio_set_value(0x64, 1);
++
++ gpio_request(gpio, "Speaker");
++ gpio_direction_output(gpio, 1);
++ gpio_set_value(gpio, 0);
++
++ sgh_snd_device = platform_device_alloc("soc-audio", -1);
++ if (!sgh_snd_device)
++ return -ENOMEM;
++
++ platform_set_drvdata(sgh_snd_device, &sgh_snd_devdata);
++ sgh_snd_devdata.dev = &sgh_snd_device->dev;
++
++ ret = platform_device_add(sgh_snd_device);
++ if (ret != 0)
++ platform_device_put(sgh_snd_device);
++
++ return ret;
++}
++
++static int __devexit sgh_wm9713_remove(struct platform_device *pdev)
++{
++ platform_device_unregister(sgh_snd_device);
++ return 0;
++}
++
++#ifdef CONFIG_PM
++
++static int sgh_wm9713_suspend(struct platform_device *pdev,
++ pm_message_t state)
++{
++ //struct snd_soc_card *card = platform_get_drvdata(pdev);
++ return 0;
++ //return snd_soc_card_suspend_pcms(card, state);
++}
++
++static int sgh_wm9713_resume(struct platform_device *pdev)
++{
++ //struct snd_soc_card *card = platform_get_drvdata(pdev);
++ return 0;
++ //return snd_soc_card_resume_pcms(card);
++}
++
++#else
++#define sgh_wm9713_suspend NULL
++#define sgh_wm9713_resume NULL
++#define sgh_wm9713_suspend_late NULL
++#define sgh_wm9713_resume_early NULL
++#endif
++
++static struct platform_driver sgh_wm9713_driver = {
++ .probe = sgh_wm9713_probe,
++ .remove = __devexit_p(sgh_wm9713_remove),
++ .suspend = sgh_wm9713_suspend,
++ .resume = sgh_wm9713_resume,
++ .driver = {
++ .name = "sgh-asoc",
++ .owner = THIS_MODULE,
++ },
++};
++
++static int __init sgh_asoc_init(void)
++{
++ int ret;
++
++ ret = platform_driver_register(&sgh_wm9713_driver);
++
++ return ret;
++}
++
++static void __exit sgh_asoc_exit(void)
++{
++ platform_driver_unregister(&sgh_wm9713_driver);
++}
++
++module_init(sgh_asoc_init);
++module_exit(sgh_asoc_exit);
++
++/* Module information */
++MODULE_AUTHOR("Mustafa Ozsakalli (ozsakalli@hotmail.com)");
++MODULE_DESCRIPTION("ALSA SoC WM9713 Samsung SGH I780/I900");
++MODULE_LICENSE("GPL");
diff --git a/recipes/linux/linux-sgh-i900/sgh_i900_defconfig b/recipes/linux/linux-sgh-i900/sgh_i900_defconfig
index bca41c1090..60fc936cdd 100644
--- a/recipes/linux/linux-sgh-i900/sgh_i900_defconfig
+++ b/recipes/linux/linux-sgh-i900/sgh_i900_defconfig
@@ -1,7 +1,7 @@
#
# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.29
-# Thu Oct 1 16:49:04 2009
+# Linux kernel version: 2.6.32
+# Mon Dec 7 05:59:02 2009
#
CONFIG_ARM=y
CONFIG_HAVE_PWM=y
@@ -9,8 +9,6 @@ CONFIG_SYS_SUPPORTS_APM_EMULATION=y
CONFIG_GENERIC_GPIO=y
CONFIG_GENERIC_TIME=y
CONFIG_GENERIC_CLOCKEVENTS=y
-CONFIG_MMU=y
-# CONFIG_NO_IOPORT is not set
CONFIG_GENERIC_HARDIRQS=y
CONFIG_STACKTRACE_SUPPORT=y
CONFIG_HAVE_LATENCYTOP_SUPPORT=y
@@ -19,14 +17,14 @@ CONFIG_TRACE_IRQFLAGS_SUPPORT=y
CONFIG_HARDIRQS_SW_RESEND=y
CONFIG_GENERIC_IRQ_PROBE=y
CONFIG_RWSEM_GENERIC_SPINLOCK=y
-# CONFIG_ARCH_HAS_ILOG2_U32 is not set
-# CONFIG_ARCH_HAS_ILOG2_U64 is not set
+CONFIG_ARCH_HAS_CPUFREQ=y
CONFIG_GENERIC_HWEIGHT=y
CONFIG_GENERIC_CALIBRATE_DELAY=y
CONFIG_ARCH_MTD_XIP=y
CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
CONFIG_VECTORS_BASE=0xffff0000
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+CONFIG_CONSTRUCTORS=y
#
# General setup
@@ -47,11 +45,12 @@ CONFIG_SYSVIPC_SYSCTL=y
#
# RCU Subsystem
#
-CONFIG_CLASSIC_RCU=y
-# CONFIG_TREE_RCU is not set
-# CONFIG_PREEMPT_RCU is not set
+CONFIG_TREE_RCU=y
+# CONFIG_TREE_PREEMPT_RCU is not set
+# CONFIG_RCU_TRACE is not set
+CONFIG_RCU_FANOUT=32
+# CONFIG_RCU_FANOUT_EXACT is not set
# CONFIG_TREE_RCU_TRACE is not set
-# CONFIG_PREEMPT_RCU_TRACE is not set
CONFIG_IKCONFIG=y
CONFIG_IKCONFIG_PROC=y
CONFIG_LOG_BUF_SHIFT=17
@@ -72,10 +71,12 @@ CONFIG_NAMESPACES=y
# CONFIG_NET_NS is not set
CONFIG_BLK_DEV_INITRD=y
CONFIG_INITRAMFS_SOURCE=""
+CONFIG_RD_GZIP=y
+CONFIG_RD_BZIP2=y
+CONFIG_RD_LZMA=y
CONFIG_CC_OPTIMIZE_FOR_SIZE=y
CONFIG_SYSCTL=y
CONFIG_ANON_INODES=y
-CONFIG_PANIC_TIMEOUT=0
# CONFIG_EMBEDDED is not set
CONFIG_UID16=y
CONFIG_SYSCTL_SYSCALL=y
@@ -93,8 +94,12 @@ CONFIG_SIGNALFD=y
CONFIG_TIMERFD=y
CONFIG_EVENTFD=y
CONFIG_SHMEM=y
-CONFIG_AIO=y
CONFIG_ASHMEM=y
+CONFIG_AIO=y
+
+#
+# Kernel Performance Events And Counters
+#
CONFIG_VM_EVENT_COUNTERS=y
CONFIG_SLUB_DEBUG=y
CONFIG_COMPAT_BRK=y
@@ -102,13 +107,17 @@ CONFIG_COMPAT_BRK=y
CONFIG_SLUB=y
# CONFIG_SLOB is not set
# CONFIG_PROFILING is not set
-CONFIG_TRACEPOINTS=y
-CONFIG_MARKERS=y
CONFIG_HAVE_OPROFILE=y
# CONFIG_KPROBES is not set
CONFIG_HAVE_KPROBES=y
CONFIG_HAVE_KRETPROBES=y
CONFIG_HAVE_CLK=y
+
+#
+# GCOV-based kernel profiling
+#
+# CONFIG_GCOV_KERNEL is not set
+# CONFIG_SLOW_WORK is not set
CONFIG_HAVE_GENERIC_DMA_COHERENT=y
CONFIG_SLABINFO=y
CONFIG_RT_MUTEXES=y
@@ -120,8 +129,7 @@ CONFIG_MODULE_FORCE_UNLOAD=y
CONFIG_MODVERSIONS=y
# CONFIG_MODULE_SRCVERSION_ALL is not set
CONFIG_BLOCK=y
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
+CONFIG_LBDAF=y
# CONFIG_BLK_DEV_BSG is not set
# CONFIG_BLK_DEV_INTEGRITY is not set
@@ -142,18 +150,22 @@ CONFIG_FREEZER=y
#
# System Type
#
+CONFIG_MMU=y
# CONFIG_ARCH_AAEC2000 is not set
# CONFIG_ARCH_INTEGRATOR is not set
# CONFIG_ARCH_REALVIEW is not set
# CONFIG_ARCH_VERSATILE is not set
# CONFIG_ARCH_AT91 is not set
# CONFIG_ARCH_CLPS711X is not set
+# CONFIG_ARCH_GEMINI is not set
# CONFIG_ARCH_EBSA110 is not set
# CONFIG_ARCH_EP93XX is not set
# CONFIG_ARCH_FOOTBRIDGE is not set
+# CONFIG_ARCH_MXC is not set
+# CONFIG_ARCH_STMP3XXX is not set
# CONFIG_ARCH_NETX is not set
# CONFIG_ARCH_H720X is not set
-# CONFIG_ARCH_IMX is not set
+# CONFIG_ARCH_NOMADIK is not set
# CONFIG_ARCH_IOP13XX is not set
# CONFIG_ARCH_IOP32X is not set
# CONFIG_ARCH_IOP33X is not set
@@ -162,24 +174,27 @@ CONFIG_FREEZER=y
# CONFIG_ARCH_IXP4XX is not set
# CONFIG_ARCH_L7200 is not set
# CONFIG_ARCH_KIRKWOOD is not set
-# CONFIG_ARCH_KS8695 is not set
-# CONFIG_ARCH_NS9XXX is not set
# CONFIG_ARCH_LOKI is not set
# CONFIG_ARCH_MV78XX0 is not set
-# CONFIG_ARCH_MXC is not set
# CONFIG_ARCH_ORION5X is not set
+# CONFIG_ARCH_MMP is not set
+# CONFIG_ARCH_KS8695 is not set
+# CONFIG_ARCH_NS9XXX is not set
+# CONFIG_ARCH_W90X900 is not set
# CONFIG_ARCH_PNX4008 is not set
CONFIG_ARCH_PXA=y
+# CONFIG_ARCH_MSM is not set
# CONFIG_ARCH_RPC is not set
# CONFIG_ARCH_SA1100 is not set
# CONFIG_ARCH_S3C2410 is not set
# CONFIG_ARCH_S3C64XX is not set
+# CONFIG_ARCH_S5PC1XX is not set
# CONFIG_ARCH_SHARK is not set
# CONFIG_ARCH_LH7A40X is not set
+# CONFIG_ARCH_U300 is not set
# CONFIG_ARCH_DAVINCI is not set
# CONFIG_ARCH_OMAP is not set
-# CONFIG_ARCH_MSM is not set
-# CONFIG_ARCH_W90X900 is not set
+# CONFIG_ARCH_BCMRING is not set
#
# Intel PXA2xx/PXA3xx Implementations
@@ -193,12 +208,16 @@ CONFIG_CPU_PXA310=y
# CONFIG_CPU_PXA320 is not set
# CONFIG_CPU_PXA930 is not set
# CONFIG_CPU_PXA935 is not set
+# CONFIG_CPU_PXA950 is not set
+CONFIG_PXA3xx_PMIC=y
# CONFIG_ARCH_GUMSTIX is not set
# CONFIG_MACH_INTELMOTE2 is not set
+# CONFIG_MACH_STARGATE2 is not set
# CONFIG_ARCH_LUBBOCK is not set
# CONFIG_MACH_LOGICPD_PXA270 is not set
# CONFIG_MACH_MAINSTONE is not set
# CONFIG_MACH_MP900C is not set
+# CONFIG_MACH_BALLOON3 is not set
# CONFIG_ARCH_PXA_IDP is not set
# CONFIG_PXA_SHARPSL is not set
# CONFIG_ARCH_VIPER is not set
@@ -206,23 +225,30 @@ CONFIG_CPU_PXA310=y
# CONFIG_TRIZEPS_PXA is not set
# CONFIG_MACH_H5000 is not set
# CONFIG_MACH_EM_X270 is not set
+# CONFIG_MACH_EXEDA is not set
# CONFIG_MACH_COLIBRI is not set
+# CONFIG_MACH_COLIBRI300 is not set
+# CONFIG_MACH_COLIBRI320 is not set
# CONFIG_MACH_ZYLONITE is not set
-CONFIG_MACH_SGH_I780=y
CONFIG_MACH_SGH_I900=y
+CONFIG_MACH_SGH_I780=y
# CONFIG_MACH_LITTLETON is not set
# CONFIG_MACH_TAVOREVB is not set
# CONFIG_MACH_SAAR is not set
# CONFIG_MACH_ARMCORE is not set
# CONFIG_MACH_CM_X300 is not set
+# CONFIG_MACH_H4700 is not set
# CONFIG_MACH_MAGICIAN is not set
+# CONFIG_MACH_HIMALAYA is not set
# CONFIG_MACH_MIOA701 is not set
# CONFIG_MACH_PCM027 is not set
# CONFIG_ARCH_PXA_PALM is not set
+# CONFIG_MACH_CSB726 is not set
# CONFIG_PXA_EZX is not set
+# CONFIG_MACH_XCEP is not set
CONFIG_PXA3xx=y
CONFIG_PXA_SSP=y
-# CONFIG_PXA_PWM is not set
+CONFIG_PLAT_PXA=y
#
# Processor Type
@@ -231,7 +257,7 @@ CONFIG_CPU_32=y
CONFIG_CPU_XSC3=y
CONFIG_CPU_32v5=y
CONFIG_CPU_ABRT_EV5T=y
-CONFIG_CPU_PABRT_NOIFAR=y
+CONFIG_CPU_PABRT_LEGACY=y
CONFIG_CPU_CACHE_VIVT=y
CONFIG_CPU_TLB_V4WBI=y
CONFIG_CPU_CP15=y
@@ -246,6 +272,7 @@ CONFIG_ARM_THUMB=y
# CONFIG_CPU_BPREDICT_DISABLE is not set
CONFIG_OUTER_CACHE=y
CONFIG_CACHE_XSC3L2=y
+CONFIG_ARM_L1_CACHE_SHIFT=5
CONFIG_IWMMXT=y
CONFIG_COMMON_CLKDEV=y
@@ -261,19 +288,21 @@ CONFIG_COMMON_CLKDEV=y
#
CONFIG_TICK_ONESHOT=y
# CONFIG_NO_HZ is not set
-CONFIG_HIGH_RES_TIMERS=y
+# CONFIG_HIGH_RES_TIMERS is not set
CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
CONFIG_VMSPLIT_3G=y
# CONFIG_VMSPLIT_2G is not set
# CONFIG_VMSPLIT_1G is not set
CONFIG_PAGE_OFFSET=0xC0000000
+CONFIG_PREEMPT_NONE=y
+# CONFIG_PREEMPT_VOLUNTARY is not set
# CONFIG_PREEMPT is not set
CONFIG_HZ=100
CONFIG_AEABI=y
CONFIG_OABI_COMPAT=y
-CONFIG_ARCH_FLATMEM_HAS_HOLES=y
# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set
# CONFIG_ARCH_SELECT_MEMORY_MODEL is not set
+# CONFIG_HIGHMEM is not set
CONFIG_SELECT_MEMORY_MODEL=y
CONFIG_FLATMEM_MANUAL=y
# CONFIG_DISCONTIGMEM_MANUAL is not set
@@ -285,9 +314,12 @@ CONFIG_SPLIT_PTLOCK_CPUS=4096
# CONFIG_PHYS_ADDR_T_64BIT is not set
CONFIG_ZONE_DMA_FLAG=0
CONFIG_VIRT_TO_BUS=y
-CONFIG_UNEVICTABLE_LRU=y
+CONFIG_HAVE_MLOCK=y
+CONFIG_HAVE_MLOCKED_PAGE_BIT=y
+# CONFIG_KSM is not set
CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
CONFIG_ALIGNMENT_TRAP=y
+# CONFIG_UACCESS_WITH_MEMCPY is not set
#
# Boot options
@@ -302,25 +334,8 @@ CONFIG_ATAGS_PROC=y
#
# CPU Power Management
#
-CONFIG_CPU_FREQ=y
-CONFIG_CPU_FREQ_TABLE=y
-# CONFIG_CPU_FREQ_DEBUG is not set
-CONFIG_CPU_FREQ_STAT=y
-CONFIG_CPU_FREQ_STAT_DETAILS=y
-# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
-# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set
-CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE=y
-# CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND is not set
-# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set
-# CONFIG_CPU_FREQ_GOV_PERFORMANCE is not set
-# CONFIG_CPU_FREQ_GOV_POWERSAVE is not set
-CONFIG_CPU_FREQ_GOV_USERSPACE=y
-# CONFIG_CPU_FREQ_GOV_ONDEMAND is not set
-# CONFIG_CPU_FREQ_GOV_CONSERVATIVE is not set
-CONFIG_CPU_FREQ_MIN_TICKS=10
-CONFIG_CPU_FREQ_SAMPLING_LATENCY_MULTIPLIER=1000
-CONFIG_CPU_IDLE=y
-CONFIG_CPU_IDLE_GOV_LADDER=y
+# CONFIG_CPU_FREQ is not set
+# CONFIG_CPU_IDLE is not set
#
# Floating point emulation
@@ -360,13 +375,19 @@ CONFIG_EARLYSUSPEND=y
# CONFIG_CONSOLE_EARLYSUSPEND is not set
CONFIG_FB_EARLYSUSPEND=y
# CONFIG_APM_EMULATION is not set
+CONFIG_PM_RUNTIME=y
CONFIG_ARCH_SUSPEND_POSSIBLE=y
+CONFIG_PXA_DVFM=y
+# CONFIG_PXA_MIPSRAM is not set
+CONFIG_PXA3xx_DVFM=y
+# CONFIG_PXA3xx_DVFM_STATS is not set
+# CONFIG_PXA3xx_PMU is not set
+# CONFIG_PERIPHERAL_STATUS is not set
CONFIG_NET=y
#
# Networking options
#
-CONFIG_COMPAT_NET_DEV_OPS=y
CONFIG_PACKET=y
CONFIG_PACKET_MMAP=y
CONFIG_UNIX=y
@@ -401,11 +422,11 @@ CONFIG_TCP_CONG_CUBIC=y
CONFIG_DEFAULT_TCP_CONG="cubic"
# CONFIG_TCP_MD5SIG is not set
# CONFIG_IPV6 is not set
-# CONFIG_ANDROID_PARANOID_NETWORK is not set
# CONFIG_NETWORK_SECMARK is not set
# CONFIG_NETFILTER is not set
# CONFIG_IP_DCCP is not set
# CONFIG_IP_SCTP is not set
+# CONFIG_RDS is not set
# CONFIG_TIPC is not set
# CONFIG_ATM is not set
# CONFIG_BRIDGE is not set
@@ -419,6 +440,8 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
# CONFIG_LAPB is not set
# CONFIG_ECONET is not set
# CONFIG_WAN_ROUTER is not set
+CONFIG_PHONET=m
+# CONFIG_IEEE802154 is not set
# CONFIG_NET_SCHED is not set
# CONFIG_DCB is not set
@@ -433,26 +456,25 @@ CONFIG_DEFAULT_TCP_CONG="cubic"
CONFIG_AF_RXRPC=m
# CONFIG_AF_RXRPC_DEBUG is not set
CONFIG_RXKAD=m
-CONFIG_PHONET=m
CONFIG_WIRELESS=y
CONFIG_CFG80211=y
+# CONFIG_NL80211_TESTMODE is not set
+# CONFIG_CFG80211_DEVELOPER_WARNINGS is not set
# CONFIG_CFG80211_REG_DEBUG is not set
-CONFIG_NL80211=y
+CONFIG_CFG80211_DEFAULT_PS=y
+CONFIG_CFG80211_DEFAULT_PS_VALUE=1
+# CONFIG_CFG80211_DEBUGFS is not set
CONFIG_WIRELESS_OLD_REGULATORY=y
CONFIG_WIRELESS_EXT=y
CONFIG_WIRELESS_EXT_SYSFS=y
CONFIG_LIB80211=y
CONFIG_LIB80211_DEBUG=y
CONFIG_MAC80211=y
-
-#
-# Rate control algorithm selection
-#
CONFIG_MAC80211_RC_MINSTREL=y
# CONFIG_MAC80211_RC_DEFAULT_PID is not set
CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y
CONFIG_MAC80211_RC_DEFAULT="minstrel"
-CONFIG_MAC80211_MESH=y
+# CONFIG_MAC80211_MESH is not set
# CONFIG_MAC80211_LEDS is not set
# CONFIG_MAC80211_DEBUGFS is not set
# CONFIG_MAC80211_DEBUG_MENU is not set
@@ -468,21 +490,22 @@ CONFIG_MAC80211_MESH=y
# Generic Driver Options
#
CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
+# CONFIG_DEVTMPFS is not set
CONFIG_STANDALONE=y
CONFIG_PREVENT_FIRMWARE_BUILD=y
CONFIG_FW_LOADER=y
# CONFIG_FIRMWARE_IN_KERNEL is not set
# CONFIG_EXTRA_FIRMWARE is not set
-# CONFIG_EXTRA_FIRMWARE_DIR is not set
+# CONFIG_EXTRA_FIRMWARE is not set
# CONFIG_DEBUG_DRIVER is not set
# CONFIG_DEBUG_DEVRES is not set
# CONFIG_SYS_HYPERVISOR is not set
# CONFIG_CONNECTOR is not set
CONFIG_MTD=y
# CONFIG_MTD_DEBUG is not set
+# CONFIG_MTD_TESTS is not set
# CONFIG_MTD_CONCAT is not set
# CONFIG_MTD_PARTITIONS is not set
-# CONFIG_MTD_TESTS is not set
#
# User Modules And Translation Layers
@@ -520,7 +543,6 @@ CONFIG_MTD_CFI_I2=y
# Mapping drivers for chip access
#
# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-# CONFIG_MTD_SHARP_SL is not set
# CONFIG_MTD_PLATRAM is not set
#
@@ -528,6 +550,7 @@ CONFIG_MTD_CFI_I2=y
#
# CONFIG_MTD_DATAFLASH is not set
# CONFIG_MTD_M25P80 is not set
+# CONFIG_MTD_SST25L is not set
# CONFIG_MTD_SLRAM is not set
# CONFIG_MTD_PHRAM is not set
# CONFIG_MTD_MTDRAM is not set
@@ -563,7 +586,21 @@ CONFIG_BLK_DEV_RAM_SIZE=16384
# CONFIG_BLK_DEV_XIP is not set
# CONFIG_CDROM_PKTCDVD is not set
# CONFIG_ATA_OVER_ETH is not set
-# CONFIG_MISC_DEVICES is not set
+# CONFIG_MG_DISK is not set
+CONFIG_MISC_DEVICES=y
+# CONFIG_ICS932S401 is not set
+# CONFIG_ENCLOSURE_SERVICES is not set
+# CONFIG_ISL29003 is not set
+# CONFIG_C2PORT is not set
+
+#
+# EEPROM support
+#
+# CONFIG_EEPROM_AT24 is not set
+# CONFIG_EEPROM_AT25 is not set
+# CONFIG_EEPROM_LEGACY is not set
+# CONFIG_EEPROM_MAX6875 is not set
+# CONFIG_EEPROM_93CX6 is not set
CONFIG_HAVE_IDE=y
# CONFIG_IDE is not set
@@ -586,10 +623,7 @@ CONFIG_NETDEVICES=y
# CONFIG_NET_ETHERNET is not set
# CONFIG_NETDEV_1000 is not set
# CONFIG_NETDEV_10000 is not set
-
-#
-# Wireless LAN
-#
+CONFIG_WLAN=y
# CONFIG_WLAN_PRE80211 is not set
CONFIG_WLAN_80211=y
CONFIG_LIBERTAS=m
@@ -598,17 +632,20 @@ CONFIG_LIBERTAS=m
CONFIG_LIBERTAS_SPI=m
# CONFIG_LIBERTAS_DEBUG is not set
# CONFIG_LIBERTAS_THINFIRM is not set
+# CONFIG_AT76C50X_USB is not set
# CONFIG_USB_ZD1201 is not set
# CONFIG_USB_NET_RNDIS_WLAN is not set
# CONFIG_RTL8187 is not set
# CONFIG_MAC80211_HWSIM is not set
# CONFIG_P54_COMMON is not set
-# CONFIG_IWLWIFI_LEDS is not set
+# CONFIG_ATH_COMMON is not set
# CONFIG_HOSTAP is not set
# CONFIG_B43 is not set
# CONFIG_B43LEGACY is not set
# CONFIG_ZD1211RW is not set
# CONFIG_RT2X00 is not set
+# CONFIG_WL12XX is not set
+# CONFIG_IWM is not set
#
# Enable WiMAX (Networking options) to see the WiMAX drivers
@@ -622,6 +659,7 @@ CONFIG_LIBERTAS_SPI=m
# CONFIG_USB_PEGASUS is not set
# CONFIG_USB_RTL8150 is not set
# CONFIG_USB_USBNET is not set
+# CONFIG_USB_CDC_PHONET is not set
# CONFIG_WAN is not set
# CONFIG_PPP is not set
# CONFIG_SLIP is not set
@@ -629,6 +667,7 @@ CONFIG_LIBERTAS_SPI=m
# CONFIG_NETPOLL is not set
# CONFIG_NET_POLL_CONTROLLER is not set
# CONFIG_ISDN is not set
+# CONFIG_PHONE is not set
#
# Input device support
@@ -647,34 +686,44 @@ CONFIG_INPUT_MOUSEDEV_SCREEN_Y=400
# CONFIG_INPUT_JOYDEV is not set
CONFIG_INPUT_EVDEV=y
# CONFIG_INPUT_EVBUG is not set
-# CONFIG_INPUT_KEYRESET is not set
#
# Input Device Drivers
#
CONFIG_INPUT_KEYBOARD=y
+# CONFIG_KEYBOARD_ADP5588 is not set
# CONFIG_KEYBOARD_ATKBD is not set
-# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_QT2160 is not set
# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_GPIO is not set
+# CONFIG_KEYBOARD_MATRIX is not set
+# CONFIG_KEYBOARD_LM8323 is not set
+# CONFIG_KEYBOARD_MAX7359 is not set
# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_KEYBOARD_OPENCORES is not set
CONFIG_KEYBOARD_PXA27x=y
-CONFIG_KEYBOARD_GPIO=y
+# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
# CONFIG_INPUT_MOUSE is not set
# CONFIG_INPUT_JOYSTICK is not set
# CONFIG_INPUT_TABLET is not set
CONFIG_INPUT_TOUCHSCREEN=y
# CONFIG_TOUCHSCREEN_ADS7846 is not set
+# CONFIG_TOUCHSCREEN_AD7877 is not set
+# CONFIG_TOUCHSCREEN_AD7879_I2C is not set
+# CONFIG_TOUCHSCREEN_AD7879_SPI is not set
+# CONFIG_TOUCHSCREEN_AD7879 is not set
+# CONFIG_TOUCHSCREEN_EETI is not set
# CONFIG_TOUCHSCREEN_FUJITSU is not set
# CONFIG_TOUCHSCREEN_GUNZE is not set
# CONFIG_TOUCHSCREEN_ELO is not set
# CONFIG_TOUCHSCREEN_WACOM_W8001 is not set
+# CONFIG_TOUCHSCREEN_MCS5000 is not set
# CONFIG_TOUCHSCREEN_MTOUCH is not set
# CONFIG_TOUCHSCREEN_INEXIO is not set
# CONFIG_TOUCHSCREEN_MK712 is not set
# CONFIG_TOUCHSCREEN_PENMOUNT is not set
-# CONFIG_TOUCHSCREEN_SYNAPTICS_I2C_RMI is not set
# CONFIG_TOUCHSCREEN_TOUCHRIGHT is not set
# CONFIG_TOUCHSCREEN_TOUCHWIN is not set
CONFIG_TOUCHSCREEN_WM97XX=y
@@ -682,10 +731,11 @@ CONFIG_TOUCHSCREEN_WM97XX=y
# CONFIG_TOUCHSCREEN_WM9712 is not set
CONFIG_TOUCHSCREEN_WM9713=y
# CONFIG_TOUCHSCREEN_WM97XX_MAINSTONE is not set
-CONFIG_TOUCHSCREEN_WM97XX_ZYLONITE=y
+CONFIG_TOUCHSCREEN_SGH=y
# CONFIG_TOUCHSCREEN_USB_COMPOSITE is not set
# CONFIG_TOUCHSCREEN_TOUCHIT213 is not set
# CONFIG_TOUCHSCREEN_TSC2007 is not set
+# CONFIG_TOUCHSCREEN_W90X900 is not set
CONFIG_INPUT_MISC=y
# CONFIG_INPUT_ATI_REMOTE is not set
# CONFIG_INPUT_ATI_REMOTE2 is not set
@@ -694,8 +744,7 @@ CONFIG_INPUT_MISC=y
# CONFIG_INPUT_YEALINK is not set
# CONFIG_INPUT_CM109 is not set
# CONFIG_INPUT_UINPUT is not set
-# CONFIG_INPUT_GPIO is not set
-# CONFIG_INPUT_KEYCHORD is not set
+# CONFIG_INPUT_GPIO_ROTARY_ENCODER is not set
#
# Hardware I/O ports
@@ -713,7 +762,6 @@ CONFIG_CONSOLE_TRANSLATIONS=y
CONFIG_VT_CONSOLE=y
CONFIG_HW_CONSOLE=y
# CONFIG_VT_HW_CONSOLE_BINDING is not set
-CONFIG_DEVMEM=y
# CONFIG_DEVKMEM is not set
# CONFIG_SERIAL_NONSTANDARD is not set
@@ -725,22 +773,23 @@ CONFIG_DEVMEM=y
#
# Non-8250 serial port support
#
+# CONFIG_SERIAL_MAX3100 is not set
CONFIG_SERIAL_PXA=y
CONFIG_SERIAL_PXA_CONSOLE=y
CONFIG_SERIAL_CORE=y
CONFIG_SERIAL_CORE_CONSOLE=y
-# CONFIG_SERIAL_SGH_MODEM is not set
CONFIG_UNIX98_PTYS=y
CONFIG_DEVPTS_MULTIPLE_INSTANCES=y
# CONFIG_LEGACY_PTYS is not set
# CONFIG_IPMI_HANDLER is not set
CONFIG_HW_RANDOM=y
+# CONFIG_HW_RANDOM_TIMERIOMEM is not set
# CONFIG_R3964 is not set
# CONFIG_RAW_DRIVER is not set
# CONFIG_TCG_TPM is not set
-# CONFIG_DCC_TTY is not set
CONFIG_I2C=y
CONFIG_I2C_BOARDINFO=y
+CONFIG_I2C_COMPAT=y
CONFIG_I2C_CHARDEV=y
CONFIG_I2C_HELPER_AUTO=y
CONFIG_I2C_ALGOBIT=y
@@ -752,6 +801,7 @@ CONFIG_I2C_ALGOBIT=y
#
# I2C system bus drivers (mostly embedded / system-on-chip)
#
+# CONFIG_I2C_DESIGNWARE is not set
CONFIG_I2C_GPIO=y
# CONFIG_I2C_OCORES is not set
CONFIG_I2C_PXA=y
@@ -775,13 +825,7 @@ CONFIG_I2C_PXA=y
# Miscellaneous I2C Chip support
#
# CONFIG_DS1682 is not set
-# CONFIG_SENSORS_PCF8574 is not set
-# CONFIG_PCF8575 is not set
-# CONFIG_SENSORS_PCA9539 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_MAX6875 is not set
# CONFIG_SENSORS_TSL2550 is not set
-# CONFIG_SENSORS_PCA963X is not set
# CONFIG_I2C_DEBUG_CORE is not set
# CONFIG_I2C_DEBUG_ALGO is not set
# CONFIG_I2C_DEBUG_BUS is not set
@@ -802,6 +846,11 @@ CONFIG_SPI_PXA2XX=y
#
CONFIG_SPI_SPIDEV=y
# CONFIG_SPI_TLE62X0 is not set
+
+#
+# PPS support
+#
+# CONFIG_PPS is not set
CONFIG_ARCH_REQUIRE_GPIOLIB=y
CONFIG_GPIOLIB=y
# CONFIG_DEBUG_GPIO is not set
@@ -827,18 +876,23 @@ CONFIG_GPIOLIB=y
#
# CONFIG_GPIO_MAX7301 is not set
# CONFIG_GPIO_MCP23S08 is not set
+# CONFIG_GPIO_MC33880 is not set
+
+#
+# AC97 GPIO expanders:
+#
# CONFIG_W1 is not set
CONFIG_POWER_SUPPLY=y
# CONFIG_POWER_SUPPLY_DEBUG is not set
CONFIG_PDA_POWER=y
# CONFIG_BATTERY_DS2760 is not set
-# CONFIG_BATTERY_FAKE_BATTERY is not set
+# CONFIG_BATTERY_DS2782 is not set
# CONFIG_BATTERY_WM97XX is not set
# CONFIG_BATTERY_BQ27x00 is not set
+# CONFIG_BATTERY_MAX17040 is not set
CONFIG_BATTERY_SGH=y
# CONFIG_HWMON is not set
# CONFIG_THERMAL is not set
-# CONFIG_THERMAL_HWMON is not set
# CONFIG_WATCHDOG is not set
CONFIG_SSB_POSSIBLE=y
@@ -850,7 +904,7 @@ CONFIG_SSB_POSSIBLE=y
#
# Multifunction device drivers
#
-# CONFIG_MFD_CORE is not set
+CONFIG_MFD_CORE=y
# CONFIG_MFD_SM501 is not set
# CONFIG_MFD_ASIC3 is not set
# CONFIG_HTC_EGPIO is not set
@@ -864,24 +918,14 @@ CONFIG_HTC_PASIC3=y
# CONFIG_MFD_TC6393XB is not set
# CONFIG_PMIC_DA903X is not set
# CONFIG_MFD_WM8400 is not set
+# CONFIG_MFD_WM831X is not set
# CONFIG_MFD_WM8350_I2C is not set
# CONFIG_MFD_PCF50633 is not set
-
-#
-# Multimedia devices
-#
-
-#
-# Multimedia core support
-#
-# CONFIG_VIDEO_DEV is not set
-# CONFIG_DVB_CORE is not set
-# CONFIG_VIDEO_MEDIA is not set
-
-#
-# Multimedia drivers
-#
-# CONFIG_DAB is not set
+# CONFIG_MFD_MC13783 is not set
+# CONFIG_AB3100_CORE is not set
+# CONFIG_EZX_PCAP is not set
+# CONFIG_REGULATOR is not set
+# CONFIG_MEDIA_SUPPORT is not set
#
# Graphics support
@@ -915,13 +959,17 @@ CONFIG_FB_PXA=y
CONFIG_FB_PXA_OVERLAY=y
CONFIG_FB_PXA_SMARTPANEL=y
CONFIG_FB_PXA_PARAMETERS=y
+CONFIG_FB_PXA_PAN_FIX=y
# CONFIG_FB_MBX is not set
# CONFIG_FB_W100 is not set
+# CONFIG_FB_TMIO is not set
# CONFIG_FB_VIRTUAL is not set
# CONFIG_FB_METRONOME is not set
# CONFIG_FB_MB862XX is not set
+# CONFIG_FB_BROADSHEET is not set
CONFIG_BACKLIGHT_LCD_SUPPORT=y
CONFIG_LCD_CLASS_DEVICE=y
+# CONFIG_LCD_LMS283GF05 is not set
# CONFIG_LCD_LTV350QV is not set
# CONFIG_LCD_ILI9320 is not set
# CONFIG_LCD_TDO24M is not set
@@ -965,32 +1013,36 @@ CONFIG_SOUND=y
CONFIG_SND=y
CONFIG_SND_TIMER=y
CONFIG_SND_PCM=y
-CONFIG_SND_SEQUENCER=y
-# CONFIG_SND_SEQ_DUMMY is not set
+CONFIG_SND_JACK=y
+# CONFIG_SND_SEQUENCER is not set
# CONFIG_SND_MIXER_OSS is not set
# CONFIG_SND_PCM_OSS is not set
-# CONFIG_SND_SEQUENCER_OSS is not set
-# CONFIG_SND_HRTIMER is not set
# CONFIG_SND_DYNAMIC_MINORS is not set
-# CONFIG_SND_SUPPORT_OLD_API is not set
-# CONFIG_SND_VERBOSE_PROCFS is not set
+CONFIG_SND_SUPPORT_OLD_API=y
+CONFIG_SND_VERBOSE_PROCFS=y
CONFIG_SND_VERBOSE_PRINTK=y
CONFIG_SND_DEBUG=y
-# CONFIG_SND_DEBUG_VERBOSE is not set
+CONFIG_SND_DEBUG_VERBOSE=y
+CONFIG_SND_PCM_XRUN_DEBUG=y
CONFIG_SND_VMASTER=y
+# CONFIG_SND_RAWMIDI_SEQ is not set
+# CONFIG_SND_OPL3_LIB_SEQ is not set
+# CONFIG_SND_OPL4_LIB_SEQ is not set
+# CONFIG_SND_SBAWE_SEQ is not set
+# CONFIG_SND_EMU10K1_SEQ is not set
CONFIG_SND_AC97_CODEC=y
# CONFIG_SND_DRIVERS is not set
CONFIG_SND_ARM=y
-CONFIG_SND_PXA2XX_PCM=m
CONFIG_SND_PXA2XX_LIB=y
CONFIG_SND_PXA2XX_LIB_AC97=y
-CONFIG_SND_PXA2XX_AC97=m
+# CONFIG_SND_PXA2XX_AC97 is not set
# CONFIG_SND_SPI is not set
# CONFIG_SND_USB is not set
CONFIG_SND_SOC=y
CONFIG_SND_SOC_AC97_BUS=y
CONFIG_SND_PXA2XX_SOC=y
CONFIG_SND_PXA2XX_SOC_AC97=y
+CONFIG_SND_PXA_SOC_SSP=y
CONFIG_SND_SOC_SGH=y
CONFIG_SND_SOC_I2C_AND_SPI=y
# CONFIG_SND_SOC_ALL_CODECS is not set
@@ -999,7 +1051,6 @@ CONFIG_SND_SOC_WM9713=y
CONFIG_AC97_BUS=y
CONFIG_HID_SUPPORT=y
CONFIG_HID=y
-CONFIG_HID_DEBUG=y
# CONFIG_HIDRAW is not set
#
@@ -1011,7 +1062,6 @@ CONFIG_HID_DEBUG=y
#
# Special HID drivers
#
-CONFIG_HID_COMPAT=y
CONFIG_USB_SUPPORT=y
CONFIG_USB_ARCH_HAS_HCD=y
CONFIG_USB_ARCH_HAS_OHCI=y
@@ -1038,6 +1088,8 @@ CONFIG_USB_MON=m
# CONFIG_USB_C67X00_HCD is not set
# CONFIG_USB_OXU210HP_HCD is not set
# CONFIG_USB_ISP116X_HCD is not set
+# CONFIG_USB_ISP1760_HCD is not set
+# CONFIG_USB_ISP1362_HCD is not set
CONFIG_USB_OHCI_HCD=m
# CONFIG_USB_OHCI_BIG_ENDIAN_DESC is not set
# CONFIG_USB_OHCI_BIG_ENDIAN_MMIO is not set
@@ -1060,11 +1112,11 @@ CONFIG_USB_OHCI_LITTLE_ENDIAN=y
# CONFIG_USB_TMC is not set
#
-# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may also be needed;
+# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may
#
#
-# see USB_STORAGE Help for more information
+# also be needed; see USB_STORAGE Help for more info
#
# CONFIG_USB_LIBUSUAL is not set
@@ -1092,7 +1144,6 @@ CONFIG_USB_OHCI_LITTLE_ENDIAN=y
# CONFIG_USB_LED is not set
# CONFIG_USB_CYPRESS_CY7C63 is not set
# CONFIG_USB_CYTHERM is not set
-# CONFIG_USB_PHIDGET is not set
# CONFIG_USB_IDMOUSE is not set
# CONFIG_USB_FTDI_ELAN is not set
# CONFIG_USB_APPLEDISPLAY is not set
@@ -1109,20 +1160,16 @@ CONFIG_USB_OHCI_LITTLE_ENDIAN=y
#
CONFIG_USB_OTG_UTILS=y
CONFIG_USB_GPIO_VBUS=m
+# CONFIG_NOP_USB_XCEIV is not set
CONFIG_MMC=y
# CONFIG_MMC_DEBUG is not set
CONFIG_MMC_UNSAFE_RESUME=y
-# CONFIG_SDIO_FORCE_OPCOND_1_8V is not set
-# CONFIG_SDIO_WORKAROUND_MARVELL_CIS_B1_BUG is not set
-# CONFIG_MMC_EMBEDDED_SDIO is not set
-# CONFIG_MMC_PARANOID_SD_INIT is not set
#
# MMC/SD/SDIO Card Drivers
#
CONFIG_MMC_BLOCK=y
CONFIG_MMC_BLOCK_BOUNCE=y
-# CONFIG_MMC_BLOCK_DEFERRED_RESUME is not set
# CONFIG_SDIO_UART is not set
# CONFIG_MMC_TEST is not set
@@ -1131,9 +1178,11 @@ CONFIG_MMC_BLOCK_BOUNCE=y
#
CONFIG_MMC_PXA=y
CONFIG_MMC_SDHCI=y
+# CONFIG_MMC_SDHCI_PLTFM is not set
+# CONFIG_MMC_AT91 is not set
+# CONFIG_MMC_ATMELMCI is not set
# CONFIG_MMC_SPI is not set
# CONFIG_MEMSTICK is not set
-# CONFIG_ACCESSIBILITY is not set
CONFIG_NEW_LEDS=y
CONFIG_LEDS_CLASS=y
@@ -1142,7 +1191,12 @@ CONFIG_LEDS_CLASS=y
#
# CONFIG_LEDS_PCA9532 is not set
CONFIG_LEDS_GPIO=y
+CONFIG_LEDS_GPIO_PLATFORM=y
+# CONFIG_LEDS_LP3944 is not set
# CONFIG_LEDS_PCA955X is not set
+# CONFIG_LEDS_DAC124S085 is not set
+# CONFIG_LEDS_PWM is not set
+# CONFIG_LEDS_BD2802 is not set
#
# LED Triggers
@@ -1151,9 +1205,13 @@ CONFIG_LEDS_TRIGGERS=y
CONFIG_LEDS_TRIGGER_TIMER=y
CONFIG_LEDS_TRIGGER_HEARTBEAT=y
CONFIG_LEDS_TRIGGER_BACKLIGHT=y
+# CONFIG_LEDS_TRIGGER_GPIO is not set
CONFIG_LEDS_TRIGGER_DEFAULT_ON=y
-# CONFIG_LEDS_TRIGGER_SLEEP is not set
-# CONFIG_SWITCH is not set
+
+#
+# iptables trigger is under Netfilter config (LED target)
+#
+# CONFIG_ACCESSIBILITY is not set
CONFIG_RTC_LIB=y
CONFIG_RTC_CLASS=y
CONFIG_RTC_HCTOSYS=y
@@ -1167,7 +1225,6 @@ CONFIG_RTC_INTF_SYSFS=y
CONFIG_RTC_INTF_PROC=y
CONFIG_RTC_INTF_DEV=y
# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
-CONFIG_RTC_INTF_ALARM=y
# CONFIG_RTC_DRV_TEST is not set
#
@@ -1186,6 +1243,7 @@ CONFIG_RTC_INTF_ALARM=y
# CONFIG_RTC_DRV_S35390A is not set
# CONFIG_RTC_DRV_FM3130 is not set
# CONFIG_RTC_DRV_RX8581 is not set
+# CONFIG_RTC_DRV_RX8025 is not set
#
# SPI RTC drivers
@@ -1197,6 +1255,7 @@ CONFIG_RTC_INTF_ALARM=y
# CONFIG_RTC_DRV_R9701 is not set
# CONFIG_RTC_DRV_RS5C348 is not set
# CONFIG_RTC_DRV_DS3234 is not set
+# CONFIG_RTC_DRV_PCF2123 is not set
#
# Platform RTC drivers
@@ -1219,17 +1278,18 @@ CONFIG_RTC_INTF_ALARM=y
# CONFIG_RTC_DRV_SA1100 is not set
CONFIG_RTC_DRV_PXA=y
# CONFIG_DMADEVICES is not set
-# CONFIG_REGULATOR is not set
+# CONFIG_AUXDISPLAY is not set
# CONFIG_UIO is not set
+
+#
+# TI VLYNQ
+#
CONFIG_STAGING=y
# CONFIG_STAGING_EXCLUDE_BUILD is not set
-# CONFIG_MEILHAUS is not set
# CONFIG_USB_IP_COMMON is not set
# CONFIG_W35UND is not set
# CONFIG_PRISM2_USB is not set
# CONFIG_ECHO is not set
-# CONFIG_USB_ATMEL is not set
-# CONFIG_AGNX is not set
# CONFIG_OTUS is not set
# CONFIG_COMEDI is not set
# CONFIG_ASUS_OLED is not set
@@ -1237,18 +1297,25 @@ CONFIG_STAGING=y
# CONFIG_TRANZPORT is not set
#
-# Android
+# Qualcomm MSM Camera And Video
#
-# CONFIG_ANDROID is not set
-# CONFIG_ANDROID_BINDER_IPC is not set
-# CONFIG_ANDROID_LOGGER is not set
-# CONFIG_ANDROID_RAM_CONSOLE is not set
-# CONFIG_ANDROID_RAM_CONSOLE_ENABLE_VERBOSE is not set
-# CONFIG_ANDROID_RAM_CONSOLE_ERROR_CORRECTION is not set
-# CONFIG_ANDROID_RAM_CONSOLE_EARLY_INIT is not set
-# CONFIG_ANDROID_TIMED_OUTPUT is not set
-# CONFIG_ANDROID_TIMED_GPIO is not set
-# CONFIG_ANDROID_LOW_MEMORY_KILLER is not set
+
+#
+# Camera Sensor Selection
+#
+# CONFIG_INPUT_GPIO is not set
+# CONFIG_DST is not set
+# CONFIG_POHMELFS is not set
+# CONFIG_PLAN9AUTH is not set
+# CONFIG_LINE6_USB is not set
+# CONFIG_VT6656 is not set
+# CONFIG_FB_UDL is not set
+
+#
+# RAR Register Driver
+#
+# CONFIG_RAR_REGISTER is not set
+# CONFIG_IIO is not set
#
# File systems
@@ -1257,6 +1324,7 @@ CONFIG_EXT2_FS=y
# CONFIG_EXT2_FS_XATTR is not set
# CONFIG_EXT2_FS_XIP is not set
CONFIG_EXT3_FS=y
+# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
CONFIG_EXT3_FS_XATTR=y
# CONFIG_EXT3_FS_POSIX_ACL is not set
# CONFIG_EXT3_FS_SECURITY is not set
@@ -1267,10 +1335,13 @@ CONFIG_FS_MBCACHE=y
# CONFIG_REISERFS_FS is not set
# CONFIG_JFS_FS is not set
# CONFIG_FS_POSIX_ACL is not set
-CONFIG_FILE_LOCKING=y
# CONFIG_XFS_FS is not set
+# CONFIG_GFS2_FS is not set
# CONFIG_OCFS2_FS is not set
# CONFIG_BTRFS_FS is not set
+# CONFIG_NILFS2_FS is not set
+CONFIG_FILE_LOCKING=y
+CONFIG_FSNOTIFY=y
CONFIG_DNOTIFY=y
CONFIG_INOTIFY=y
CONFIG_INOTIFY_USER=y
@@ -1280,6 +1351,11 @@ CONFIG_INOTIFY_USER=y
# CONFIG_FUSE_FS is not set
#
+# Caches
+#
+# CONFIG_FSCACHE is not set
+
+#
# CD-ROM/DVD Filesystems
#
# CONFIG_ISO9660_FS is not set
@@ -1315,16 +1391,6 @@ CONFIG_MISC_FILESYSTEMS=y
# CONFIG_BEFS_FS is not set
# CONFIG_BFS_FS is not set
# CONFIG_EFS_FS is not set
-CONFIG_YAFFS_FS=y
-CONFIG_YAFFS_YAFFS1=y
-# CONFIG_YAFFS_9BYTE_TAGS is not set
-# CONFIG_YAFFS_DOES_ECC is not set
-CONFIG_YAFFS_YAFFS2=y
-CONFIG_YAFFS_AUTO_YAFFS2=y
-# CONFIG_YAFFS_DISABLE_LAZY_LOAD is not set
-# CONFIG_YAFFS_DISABLE_WIDE_TNODES is not set
-# CONFIG_YAFFS_ALWAYS_CHECK_CHUNK_ERASED is not set
-CONFIG_YAFFS_SHORT_NAMES_IN_RAM=y
# CONFIG_JFFS2_FS is not set
# CONFIG_CRAMFS is not set
# CONFIG_SQUASHFS is not set
@@ -1393,6 +1459,7 @@ CONFIG_ENABLE_WARN_DEPRECATED=y
CONFIG_ENABLE_MUST_CHECK=y
CONFIG_FRAME_WARN=1024
# CONFIG_MAGIC_SYSRQ is not set
+# CONFIG_STRIP_ASM_SYMS is not set
# CONFIG_UNUSED_SYMBOLS is not set
CONFIG_DEBUG_FS=y
# CONFIG_HEADERS_CHECK is not set
@@ -1401,12 +1468,16 @@ CONFIG_DEBUG_KERNEL=y
CONFIG_DETECT_SOFTLOCKUP=y
# CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC is not set
CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
+CONFIG_DETECT_HUNG_TASK=y
+# CONFIG_BOOTPARAM_HUNG_TASK_PANIC is not set
+CONFIG_BOOTPARAM_HUNG_TASK_PANIC_VALUE=0
# CONFIG_SCHED_DEBUG is not set
# CONFIG_SCHEDSTATS is not set
# CONFIG_TIMER_STATS is not set
# CONFIG_DEBUG_OBJECTS is not set
# CONFIG_SLUB_DEBUG_ON is not set
# CONFIG_SLUB_STATS is not set
+# CONFIG_DEBUG_KMEMLEAK is not set
# CONFIG_DEBUG_RT_MUTEXES is not set
# CONFIG_RT_MUTEX_TESTER is not set
# CONFIG_DEBUG_SPINLOCK is not set
@@ -1416,7 +1487,6 @@ CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC_VALUE=0
# CONFIG_LOCK_STAT is not set
# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
-CONFIG_STACKTRACE=y
# CONFIG_DEBUG_KOBJECT is not set
CONFIG_DEBUG_BUGVERBOSE=y
# CONFIG_DEBUG_INFO is not set
@@ -1426,35 +1496,37 @@ CONFIG_DEBUG_MEMORY_INIT=y
# CONFIG_DEBUG_LIST is not set
# CONFIG_DEBUG_SG is not set
# CONFIG_DEBUG_NOTIFIERS is not set
-CONFIG_FRAME_POINTER=y
+# CONFIG_DEBUG_CREDENTIALS is not set
# CONFIG_BOOT_PRINTK_DELAY is not set
# CONFIG_RCU_TORTURE_TEST is not set
# CONFIG_RCU_CPU_STALL_DETECTOR is not set
# CONFIG_BACKTRACE_SELF_TEST is not set
# CONFIG_DEBUG_BLOCK_EXT_DEVT is not set
+# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set
# CONFIG_FAULT_INJECTION is not set
# CONFIG_LATENCYTOP is not set
CONFIG_SYSCTL_SYSCALL_CHECK=y
-CONFIG_NOP_TRACER=y
+# CONFIG_PAGE_POISONING is not set
CONFIG_HAVE_FUNCTION_TRACER=y
-CONFIG_RING_BUFFER=y
-CONFIG_TRACING=y
-
-#
-# Tracers
-#
+CONFIG_TRACING_SUPPORT=y
+CONFIG_FTRACE=y
# CONFIG_FUNCTION_TRACER is not set
# CONFIG_IRQSOFF_TRACER is not set
# CONFIG_SCHED_TRACER is not set
-CONFIG_CONTEXT_SWITCH_TRACER=y
+# CONFIG_ENABLE_DEFAULT_TRACERS is not set
# CONFIG_BOOT_TRACER is not set
-# CONFIG_TRACE_BRANCH_PROFILING is not set
+CONFIG_BRANCH_PROFILE_NONE=y
+# CONFIG_PROFILE_ANNOTATED_BRANCHES is not set
+# CONFIG_PROFILE_ALL_BRANCHES is not set
# CONFIG_STACK_TRACER is not set
-# CONFIG_FTRACE_STARTUP_TEST is not set
-# CONFIG_DYNAMIC_PRINTK_DEBUG is not set
+# CONFIG_KMEMTRACE is not set
+# CONFIG_WORKQUEUE_TRACER is not set
+# CONFIG_BLK_DEV_IO_TRACE is not set
+# CONFIG_DYNAMIC_DEBUG is not set
# CONFIG_SAMPLES is not set
CONFIG_HAVE_ARCH_KGDB=y
# CONFIG_KGDB is not set
+CONFIG_ARM_UNWIND=y
# CONFIG_DEBUG_USER is not set
CONFIG_DEBUG_ERRORS=y
# CONFIG_DEBUG_STACK_USAGE is not set
@@ -1473,7 +1545,6 @@ CONFIG_CRYPTO=y
#
# Crypto core or helper
#
-# CONFIG_CRYPTO_FIPS is not set
CONFIG_CRYPTO_ALGAPI=y
CONFIG_CRYPTO_ALGAPI2=y
CONFIG_CRYPTO_AEAD=m
@@ -1483,10 +1554,12 @@ CONFIG_CRYPTO_BLKCIPHER2=y
CONFIG_CRYPTO_HASH=y
CONFIG_CRYPTO_HASH2=y
CONFIG_CRYPTO_RNG2=y
+CONFIG_CRYPTO_PCOMP=y
CONFIG_CRYPTO_MANAGER=y
CONFIG_CRYPTO_MANAGER2=y
# CONFIG_CRYPTO_GF128MUL is not set
# CONFIG_CRYPTO_NULL is not set
+CONFIG_CRYPTO_WORKQUEUE=y
# CONFIG_CRYPTO_CRYPTD is not set
CONFIG_CRYPTO_AUTHENC=m
# CONFIG_CRYPTO_TEST is not set
@@ -1514,11 +1587,13 @@ CONFIG_CRYPTO_PCBC=m
#
CONFIG_CRYPTO_HMAC=m
# CONFIG_CRYPTO_XCBC is not set
+# CONFIG_CRYPTO_VMAC is not set
#
# Digest
#
CONFIG_CRYPTO_CRC32C=m
+# CONFIG_CRYPTO_GHASH is not set
# CONFIG_CRYPTO_MD4 is not set
CONFIG_CRYPTO_MD5=y
# CONFIG_CRYPTO_MICHAEL_MIC is not set
@@ -1555,6 +1630,7 @@ CONFIG_CRYPTO_FCRYPT=m
# Compression
#
CONFIG_CRYPTO_DEFLATE=m
+# CONFIG_CRYPTO_ZLIB is not set
# CONFIG_CRYPTO_LZO is not set
#
@@ -1562,6 +1638,7 @@ CONFIG_CRYPTO_DEFLATE=m
#
# CONFIG_CRYPTO_ANSI_CPRNG is not set
# CONFIG_CRYPTO_HW is not set
+# CONFIG_BINARY_PRINTF is not set
#
# Library routines
@@ -1575,9 +1652,12 @@ CONFIG_CRC_ITU_T=y
CONFIG_CRC32=y
# CONFIG_CRC7 is not set
CONFIG_LIBCRC32C=m
-CONFIG_ZLIB_INFLATE=m
+CONFIG_ZLIB_INFLATE=y
CONFIG_ZLIB_DEFLATE=m
-CONFIG_PLIST=y
+CONFIG_DECOMPRESS_GZIP=y
+CONFIG_DECOMPRESS_BZIP2=y
+CONFIG_DECOMPRESS_LZMA=y
CONFIG_HAS_IOMEM=y
CONFIG_HAS_IOPORT=y
CONFIG_HAS_DMA=y
+CONFIG_NLATTR=y
diff --git a/recipes/linux/linux-sgh-i900/wm97xx-ts-fix.patch b/recipes/linux/linux-sgh-i900/wm97xx-ts-fix.patch
deleted file mode 100644
index 1a36c337c5..0000000000
--- a/recipes/linux/linux-sgh-i900/wm97xx-ts-fix.patch
+++ /dev/null
@@ -1,130 +0,0 @@
-diff -ru git/drivers/input/touchscreen/wm97xx-core.c and/wm97xx-core.c
---- git/drivers/input/touchscreen/wm97xx-core.c 2009-11-14 20:38:03.000000000 +0200
-+++ git/drivers/input/touchscreen/wm97xx-core.c 2009-11-16 13:21:13.949140354 +0200
-@@ -70,13 +70,11 @@
- * Documentation/input/input-programming.txt for more details.
- */
-
--
--static int abs_x[3] = {350, 3900, 5};
-+static int abs_x[3] = {350, 3900, 5};
- module_param_array(abs_x, int, NULL, 0);
- MODULE_PARM_DESC(abs_x, "Touchscreen absolute X min, max, fuzz");
-
--
--static int abs_y[3] = {320, 3950, 5}; // Zylonite: 320, 3950
-+static int abs_y[3] = {320, 3750, 40};
- module_param_array(abs_y, int, NULL, 0);
- MODULE_PARM_DESC(abs_y, "Touchscreen absolute Y min, max, fuzz");
-
-@@ -411,7 +409,6 @@
- wm->pen_is_down = 0;
- dev_dbg(wm->dev, "pen up\n");
- input_report_abs(wm->input_dev, ABS_PRESSURE, 0);
-- input_report_key(wm->input_dev, BTN_TOUCH, 0);
- input_sync(wm->input_dev);
- } else if (!(rc & RC_AGAIN)) {
- /* We need high frequency updates only while
-@@ -429,22 +426,13 @@
- }
-
- } else if (rc & RC_VALID) {
-- int absy, absx;
- dev_dbg(wm->dev,
- "pen down: x=%x:%d, y=%x:%d, pressure=%x:%d\n",
- data.x >> 12, data.x & 0xfff, data.y >> 12,
- data.y & 0xfff, data.p >> 12, data.p & 0xfff);
-- absx = data.x & 0xfff;
-- if (machine_is_sgh_i780())
-- absx = (wm->input_dev->absmax[ABS_X] - absx) + wm->input_dev->absmin[ABS_X];
-- input_report_abs(wm->input_dev, ABS_X, absx);
-- //invert y coordinate
-- absy = data.y & 0xfff;
-- if (machine_is_sgh_i900())
-- absy = (wm->input_dev->absmax[ABS_Y] - absy) + wm->input_dev->absmin[ABS_Y];
-- input_report_abs(wm->input_dev, ABS_Y, absy);
-+ input_report_abs(wm->input_dev, ABS_X, data.x & 0xfff);
-+ input_report_abs(wm->input_dev, ABS_Y, data.y & 0xfff);
- input_report_abs(wm->input_dev, ABS_PRESSURE, data.p & 0xfff);
-- input_report_key(wm->input_dev, BTN_TOUCH, 1);
- input_sync(wm->input_dev);
- wm->pen_is_down = 1;
- wm->ts_reader_interval = wm->ts_reader_min_interval;
-@@ -641,23 +629,12 @@
- wm->input_dev->open = wm97xx_ts_input_open;
- wm->input_dev->close = wm97xx_ts_input_close;
- set_bit(EV_ABS, wm->input_dev->evbit);
-- set_bit(EV_KEY, wm->input_dev->evbit);
- set_bit(ABS_X, wm->input_dev->absbit);
- set_bit(ABS_Y, wm->input_dev->absbit);
- set_bit(ABS_PRESSURE, wm->input_dev->absbit);
-- set_bit(BTN_TOUCH, wm->input_dev->keybit);
--
-- if(machine_is_sgh_i780()){
-- input_set_abs_params(wm->input_dev, ABS_X, 350, 3900, 5, 0);
-- } else if(machine_is_sgh_i900()){
-- input_set_abs_params(wm->input_dev, ABS_X, 0, 39181660, 5, 0);
-- } else input_set_abs_params(wm->input_dev, ABS_X, abs_x[0], abs_x[1],
-+ input_set_abs_params(wm->input_dev, ABS_X, abs_x[0], abs_x[1],
- abs_x[2], 0);
-- if(machine_is_sgh_i780()){
-- input_set_abs_params(wm->input_dev, ABS_Y, 290, 3900, 5, 0);
-- } else if(machine_is_sgh_i900()){
-- input_set_abs_params(wm->input_dev, ABS_Y, 0, 65412060, 5, 0);
-- } else input_set_abs_params(wm->input_dev, ABS_Y, abs_y[0], abs_y[1],
-+ input_set_abs_params(wm->input_dev, ABS_Y, abs_y[0], abs_y[1],
- abs_y[2], 0);
- input_set_abs_params(wm->input_dev, ABS_PRESSURE, abs_p[0], abs_p[1],
- abs_p[2], 0);
-diff -ru git/drivers/input/touchscreen/zylonite-wm97xx.c and/zylonite-wm97xx.c
---- git/drivers/input/touchscreen/zylonite-wm97xx.c 2009-11-14 20:38:03.000000000 +0200
-+++ git/drivers/input/touchscreen/zylonite-wm97xx.c 2009-11-16 13:17:21.292645713 +0200
-@@ -76,9 +76,6 @@
- module_param(ac97_touch_slot, int, 0);
- MODULE_PARM_DESC(ac97_touch_slot, "Touch screen data slot AC97 number");
-
--static int calibration[7] = {11877, 137, -4688902, 231, -17973, 69206765, 163940}; //omnia calibration parameters
--
--
- /* flush AC97 slot 5 FIFO machines */
- static void wm97xx_acc_pen_up(struct wm97xx *wm)
- {
-@@ -101,7 +98,6 @@
- {
- u16 x, y, p = 0x100 | WM97XX_ADCSEL_PRES;
- int reads = 0;
-- int absx, absy;
- static u16 last, tries;
- static int skip_one;
-
-@@ -149,27 +145,9 @@
-
- /* coordinate is good */
- tries = 0;
-- if(machine_is_sgh_i900()){
-- x &= 0xfff;
-- y &= 0xfff;
-- absx = (calibration[0] * x + calibration[1] * y +
-- calibration[2]);// / calibration[6];
-- absy = (calibration[3] * x + calibration[4] * y +
-- calibration[5]);// / calibration[6];
-- if(absx<0) absx = 0;
-- if(absy<0) absy = 0;
-- } else {
-- absx = x & 0xfff;
-- if (machine_is_sgh_i780())
-- absx = (wm->input_dev->absmax[ABS_X] - absx) + wm->input_dev->absmin[ABS_X];
--
-- absy = y & 0xfff;
-- }
--
-- input_report_abs(wm->input_dev, ABS_X, absx);
-- input_report_abs(wm->input_dev, ABS_Y, absy);
-- p &= 0xfff;
-- input_report_abs(wm->input_dev, ABS_PRESSURE, p);
-+ input_report_abs(wm->input_dev, ABS_X, x & 0xfff);
-+ input_report_abs(wm->input_dev, ABS_Y, y & 0xfff);
-+ input_report_abs(wm->input_dev, ABS_PRESSURE, p & 0xfff);
- input_report_key(wm->input_dev, BTN_TOUCH, (p != 0));
- input_sync(wm->input_dev);
- reads++;
diff --git a/recipes/linux/linux-sgh-i900_2.6.29.bb b/recipes/linux/linux-sgh-i900_2.6.32.bb
index 5bd2f4f0f3..4b5df5b7aa 100644
--- a/recipes/linux/linux-sgh-i900_2.6.29.bb
+++ b/recipes/linux/linux-sgh-i900_2.6.32.bb
@@ -1,4 +1,4 @@
-DESCRIPTION = "Linux 2.6.29 kernel for the Samsung Omnia SGH-i900."
+DESCRIPTION = "Linux 2.6.32 kernel for the Samsung Omnia SGH-i900."
SECTION = "kernel"
LICENSE = "GPL"
@@ -6,11 +6,11 @@ RDEPENDS += "marvell-gspi-fw"
COMPATIBLE_MACHINE = "sgh-i900"
-SRC_URI = "git://andromnia.git.sourceforge.net/gitroot/andromnia/andromnia;protocol=git;branch=master \
- file://wm97xx-ts-fix.patch;patch=1 \
+SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${PV}.tar.bz2 \
+ file://sgh-i900-support.patch;patch=1 \
file://sgh_i900_defconfig"
-S = "${WORKDIR}/git"
+S = "${WORKDIR}/linux-${PV}"
inherit kernel
@@ -18,4 +18,4 @@ FILES_kernel-image = "/boot/${KERNEL_IMAGETYPE}*"
do_configure_prepend() {
install -m 0644 ${WORKDIR}/sgh_i900_defconfig ${S}/.config
-}
+} \ No newline at end of file
diff --git a/recipes/linux/linux_2.6.14.bb b/recipes/linux/linux_2.6.14.bb
index c7e5e614fc..702246bd8f 100644
--- a/recipes/linux/linux_2.6.14.bb
+++ b/recipes/linux/linux_2.6.14.bb
@@ -9,8 +9,8 @@ SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${PV}.tar.bz2 \
file://defconfig"
SRC_URI_append_acern30 = "\
- http://lechat.rtp-net.org/ipaq/patches/2.6.14-3/v2.6.14-gitcurrent.patch;patch=1 \
- http://lechat.rtp-net.org/ipaq/patches/2.6.14-3/full.patch;patch=1 \
+ http://rtp-net.org/ipaq/patches/2.6.14-3/v2.6.14-gitcurrent.patch;patch=1 \
+ http://rtp-net.org/ipaq/patches/2.6.14-3/full.patch;patch=1 \
file://n30-cleanup.patch;patch=1 \
file://n35.patch;patch=1 \
file://n30-lcd.patch;patch=1 \
diff --git a/recipes/linux/linux_2.6.18.bb b/recipes/linux/linux_2.6.18.bb
index b445325f2d..df7641565a 100644
--- a/recipes/linux/linux_2.6.18.bb
+++ b/recipes/linux/linux_2.6.18.bb
@@ -6,11 +6,12 @@ require linux.inc
DEFAULT_PREFERENCE = "-1"
DEFAULT_PREFERENCE_avr32 = "1"
-PR = "r0"
+PR = "r1"
PARALLEL_MAKE=""
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${PV}.tar.bz2 \
+ ${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/patch-${PV}.8.bz2;patch=1 \
file://defconfig \
"
diff --git a/recipes/linux/linux_2.6.20.bb b/recipes/linux/linux_2.6.20.bb
index d8427bfc6f..d46c623e6b 100644
--- a/recipes/linux/linux_2.6.20.bb
+++ b/recipes/linux/linux_2.6.20.bb
@@ -9,6 +9,8 @@ DEFAULT_PREFERENCE_nhk15 = "1"
PR = "r10"
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${PV}.tar.bz2 \
+ ${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/patch-${PV}.21.bz2;patch=1 \
+ file://0001-kbuild-include-limits.h-in-sumversion.c-for-PATH_MAX.patch;patch=1 \
file://defconfig"
SRC_URI_append_n2100 = "\
diff --git a/recipes/linux/linux_2.6.21+2.6.22-rc1.bb b/recipes/linux/linux_2.6.21+2.6.22-rc1.bb
index 35b2efe74a..563820fec7 100644
--- a/recipes/linux/linux_2.6.21+2.6.22-rc1.bb
+++ b/recipes/linux/linux_2.6.21+2.6.22-rc1.bb
@@ -9,7 +9,7 @@ KERNEL_RELEASE = "2.6.22-rc1"
PR = "r2"
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.21.tar.bz2 \
- ${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/testing/patch-2.6.22-rc1.bz2;patch=1 \
+ ${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/testing/v2.6.22/patch-2.6.22-rc1.bz2;patch=1 \
file://defconfig \
"
diff --git a/recipes/linux/linux_2.6.21.bb b/recipes/linux/linux_2.6.21.bb
index c4c7297f1c..bbac0c2ae9 100644
--- a/recipes/linux/linux_2.6.21.bb
+++ b/recipes/linux/linux_2.6.21.bb
@@ -5,9 +5,10 @@ DEFAULT_PREFERENCE_at91sam9263ek = "-1"
DEFAULT_PREFERENCE_gumstix-connex = "1"
DEFAULT_PREFERENCE_gumstix-verdex = "1"
-PR = "r12"
+PR = "r13"
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${PV}.tar.bz2 \
+ ${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/patch-${PV}.7.bz2;patch=1 \
file://tsc2003.c \
file://tsc2003-config.diff;patch=1 \
file://defconfig \
diff --git a/recipes/linux/linux_2.6.22+2.6.23-rc3.bb b/recipes/linux/linux_2.6.22+2.6.23-rc3.bb
index 47c3564087..e52800a8f4 100644
--- a/recipes/linux/linux_2.6.22+2.6.23-rc3.bb
+++ b/recipes/linux/linux_2.6.22+2.6.23-rc3.bb
@@ -10,7 +10,7 @@ KERNEL_RELEASE = "2.6.23-rc3"
PR = "r1"
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${BASE_KERNEL_VERSION}.tar.bz2 \
- ${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/testing/patch-${KERNEL_VERSION}.bz2;patch=1 \
+ ${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/testing/v2.6.23/patch-${KERNEL_VERSION}.bz2;patch=1 \
file://defconfig \
"
diff --git a/recipes/linux/linux_2.6.22+2.6.23-rc5.bb b/recipes/linux/linux_2.6.22+2.6.23-rc5.bb
index 3165c39a11..e21855269f 100644
--- a/recipes/linux/linux_2.6.22+2.6.23-rc5.bb
+++ b/recipes/linux/linux_2.6.22+2.6.23-rc5.bb
@@ -10,7 +10,7 @@ KERNEL_VERSION = "2.6.23-rc5"
KERNEL_RELEASE = "2.6.23-rc5"
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${BASE_KERNEL_VERSION}.tar.bz2 \
- ${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/testing/patch-${KERNEL_VERSION}.bz2;patch=1 \
+ ${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/testing/v2.6.23/patch-${KERNEL_VERSION}.bz2;patch=1 \
file://defconfig \
"
diff --git a/recipes/linux/linux_2.6.22.6.bb b/recipes/linux/linux_2.6.22.6.bb
deleted file mode 100644
index 69b988e332..0000000000
--- a/recipes/linux/linux_2.6.22.6.bb
+++ /dev/null
@@ -1,31 +0,0 @@
-require linux.inc
-
-DEFAULT_PREFERENCE = "-1"
-DEFAULT_PREFERENCE_ts72xx = "1"
-DEFAULT_PREFERENCE_mx31moboard = "1"
-
-PR = "r1"
-
-SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.22.tar.bz2 \
- ${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/patch-${PV}.bz2;patch=1 \
- file://defconfig \
- "
-
-SRC_URI_append_ts72xx = "\
- file://ep93xx-gpio-interrupt-debounce.diff;patch=1 \
- file://ep93xx-i2c-bus.diff;patch=1 \
- file://ep93xx-i2c.diff;patch=1 \
- file://ep93xx-leds.diff;patch=1 \
- file://ep93xx-serial-uartbaud.diff;patch=1 \
- file://ep93xx-serial-clocks.diff;patch=1 \
- file://ep93xx-timer-accuracy.diff;patch=1 \
- file://ep93xx-maverick-uniqid.patch;patch=1 \
- file://ts72xx-nfbit-fix.patch;patch=1 \
- file://ts72xx-machine-id-fix.patch;patch=1 \
- file://ts72xx-watchdog.patch;patch=1 \
- file://ts72xx-use-cpld-reset.patch;patch=1 \
- "
-
-SRC_URI_append_mx31moboard = "http://mobots.epfl.ch/mx31moboard/linux-2.6.22-moboard.patch.bz2;patch=1"
-
-S = "${WORKDIR}/linux-2.6.22"
diff --git a/recipes/linux/linux_2.6.22.bb b/recipes/linux/linux_2.6.22.bb
index bb8749f0d6..1e73139c5e 100644
--- a/recipes/linux/linux_2.6.22.bb
+++ b/recipes/linux/linux_2.6.22.bb
@@ -4,10 +4,12 @@ require linux.inc
DEFAULT_PREFERENCE = "-1"
DEFAULT_PREFERENCE_cm-x270 = "-1"
DEFAULT_PREFERENCE_bd-neon = "0"
+DEFAULT_PREFERENCE_mx31moboard = "1"
-PR = "r5"
+PR = "r6"
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.22.tar.bz2 \
+ ${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/patch-${PV}.19.bz2;patch=1 \
file://defconfig \
"
@@ -21,6 +23,8 @@ SRC_URI_append_cm-x270 = "\
file://0007-mmcsd_large_cards-r0.patch;patch=1 \
file://0008-cm-x270-nand-simplify-name.patch;patch=1"
+SRC_URI_append_mx31moboard = "http://mobots.epfl.ch/mx31moboard/linux-2.6.22-moboard.patch.bz2;patch=1"
+
CMDLINE_cm-x270 = "console=${CMX270_CONSOLE_SERIAL_PORT},38400 monitor=8 bpp=16 mem=64M mtdparts=physmap-flash.0:256k(boot)ro,0x180000(kernel),-(root);cm-x270-nand:64m(app),-(data) rdinit=/sbin/init root=mtd3 rootfstype=jffs2"
FILES_kernel-image_cm-x270 = ""
diff --git a/recipes/linux/linux_2.6.23+2.6.24-rc5.bb b/recipes/linux/linux_2.6.23+2.6.24-rc5.bb
index d22d5e8f27..32a3ac0a70 100644
--- a/recipes/linux/linux_2.6.23+2.6.24-rc5.bb
+++ b/recipes/linux/linux_2.6.23+2.6.24-rc5.bb
@@ -6,7 +6,7 @@ DEFAULT_PREFERENCE = "-1"
PR = "r3"
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.23.tar.bz2 \
- ${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/testing/patch-2.6.24-rc5.bz2;patch=1 \
+ ${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/testing/v2.6.24/patch-2.6.24-rc5.bz2;patch=1 \
file://defconfig \
"
diff --git a/recipes/linux/linux_2.6.23+2.6.24-rc6.bb b/recipes/linux/linux_2.6.23+2.6.24-rc6.bb
index 73100b62c3..035e6054f6 100644
--- a/recipes/linux/linux_2.6.23+2.6.24-rc6.bb
+++ b/recipes/linux/linux_2.6.23+2.6.24-rc6.bb
@@ -6,7 +6,7 @@ DEFAULT_PREFERENCE = "-1"
PR = "r0"
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.23.tar.bz2 \
- ${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/testing/patch-2.6.24-rc6.bz2;patch=1 \
+ ${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/testing/v2.6.24/patch-2.6.24-rc6.bz2;patch=1 \
file://defconfig \
"
diff --git a/recipes/linux/linux_2.6.23.bb b/recipes/linux/linux_2.6.23.bb
index 0f62a1c37c..a5367fda09 100644
--- a/recipes/linux/linux_2.6.23.bb
+++ b/recipes/linux/linux_2.6.23.bb
@@ -6,7 +6,7 @@ DEFAULT_PREFERENCE_mpc8313e-rdb = "1"
DEFAULT_PREFERENCE_mpc8323e-rdb = "1"
DEFAULT_PREFERENCE_avr32 = "1"
-PR = "r12"
+PR = "r13"
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.23.tar.bz2 \
file://binutils-buildid-arm.patch;patch=1 \
@@ -15,22 +15,23 @@ SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.23.tar.bz2 \
"
# Bug fixes on the 2.6.23.x stable branch
-SRC_URI += "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/patch-2.6.23.12.bz2;patch=1"
+SRC_URI += "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/patch-2.6.23.17.bz2;patch=1"
# Real-time preemption (includes CFS). This is experimental and requires a different defconfig.
#SRC_URI += "file://patch-2.6.23.12-rt14;patch=1"
-# Only the Completely Fair Scheduler (CFS), the official backport from 2.6.24
-SRC_URI += "http://people.redhat.com/mingo/cfs-scheduler/sched-cfs-v2.6.23.12-v24.1.patch;patch=1"
+# Only the Completely Fair Scheduler (CFS), the official backport from 2.6.24 (adapted for 2.6.23.17)
+SRC_URI += "file://sched-cfs-v2.6.23.12-v24.1.patch;patch=1"
# Add support for squashfs-lzma (a highly compressed read-only filesystem)
SRC_URI += "http://kamikaze.waninkoko.info/patches/2.6.23/klight1/broken-out/squashfs-lzma-2.6.23.patch;patch=1"
+SRC_URI += "file://time.h.patch;patch=1"
+
# The Atmel patch doesn't apply against 2.6.23.12 :(
SRC_URI_avr32 = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.23.tar.bz2 \
file://defconfig \
http://avr32linux.org/twiki/pub/Main/LinuxPatches/linux-2.6.23.atmel.3.patch.bz2;patch=1 \
"
SRC_URI_append_em-x270 = "\
- file://em-x270.patch;patch=1 \
- file://01-prevent_loop_timespec_add_ns.patch;patch=1"
+ file://em-x270.patch;patch=1 "
SRC_URI_append_cm-x270 = "\
file://0001-cm-x270-base2.patch;patch=1 \
@@ -90,5 +91,5 @@ python do_compulab_image() {
}
-addtask compulab_image after do_deploy before do_package
+addtask compulab_image after do_package before do_build
diff --git a/recipes/linux/linux_2.6.24.bb b/recipes/linux/linux_2.6.24.bb
index cb4389a702..c4549795d6 100644
--- a/recipes/linux/linux_2.6.24.bb
+++ b/recipes/linux/linux_2.6.24.bb
@@ -13,12 +13,12 @@ DEFAULT_PREFERENCE_hipox = "1"
DEFAULT_PREFERENCE_cs-e9302 = "1"
DEFAULT_PREFERENCE_smartq5 = "1"
-PR = "r33"
+PR = "r34"
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.24.tar.bz2 \
+ ${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/patch-${PV}.7.bz2;patch=1 \
file://squashfs-lzma-2.6.24.patch;patch=1 \
file://ubifs-v2.6.24.patch;patch=1 \
- file://time.h.patch;patch=1 \
file://defconfig"
# Moved away temporarely until committed properly (work in progress).
diff --git a/recipes/linux/linux_2.6.25.20.bb b/recipes/linux/linux_2.6.25.20.bb
deleted file mode 100644
index 6440e0650b..0000000000
--- a/recipes/linux/linux_2.6.25.20.bb
+++ /dev/null
@@ -1,33 +0,0 @@
-###########################################
-#@MAINTAINER: Marco Cavallini <m.cavallini@koansoftware.com>
-# linux_2.6.25.20.bb
-# recipe file for PM9261 and PM9263
-###########################################
-
-require linux.inc
-
-PR = "r2"
-
-DEFAULT_PREFERENCE = "-1"
-DEFAULT_PREFERENCE_ronetix-pm9263 = "1"
-DEFAULT_PREFERENCE_ronetix-pm9261 = "1"
-
-SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.25.tar.bz2 \
- ${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/patch-2.6.25.20.bz2;patch=1 \
- file://defconfig"
-
-# WARNING: for following patched is required the proper entry in conf/checksums.ini
-
-SRC_URI_append_ronetix-pm9263 = " \
- http://maxim.org.za/AT91RM9200/2.6/2.6.25-at91.patch.gz;patch=1 \
- http://download.ronetix.info/sk-eb926x/linux/kernel/2.6.25.4/linux-2.6.25.4-ronetix-08-11-02.2228.patch;patch=1 \
- http://download.ronetix.info/sk-eb926x/linux/kernel/2.6.25.4/socketcan-driver-at91.patch;patch=1 \
- "
-
-SRC_URI_append_ronetix-pm9261 = " \
- http://maxim.org.za/AT91RM9200/2.6/2.6.25-at91.patch.gz;patch=1 \
- http://download.ronetix.info/sk-eb926x/linux/kernel/2.6.25.4/linux-2.6.25.4-ronetix-08-11-02.2228.patch;patch=1 \
- http://download.ronetix.info/sk-eb926x/linux/kernel/2.6.25.4/socketcan-driver-at91.patch;patch=1 \
- "
-
-S = "${WORKDIR}/linux-2.6.25/"
diff --git a/recipes/linux/linux_2.6.25.bb b/recipes/linux/linux_2.6.25.bb
index b6ed3d82e2..a89374a652 100644
--- a/recipes/linux/linux_2.6.25.bb
+++ b/recipes/linux/linux_2.6.25.bb
@@ -1,6 +1,6 @@
require linux.inc
-PR = "r6"
+PR = "r8"
# Mark archs/machines that this kernel supports
DEFAULT_PREFERENCE = "-1"
@@ -13,8 +13,11 @@ DEFAULT_PREFERENCE_alix = "1"
DEFAULT_PREFERENCE_at32stk1000 = "1"
DEFAULT_PREFERENCE_at91-l9260 = "1"
DEFAULT_PREFERENCE_m8050 = "1"
+DEFAULT_PREFERENCE_ronetix-pm9263 = "1"
+DEFAULT_PREFERENCE_ronetix-pm9261 = "1"
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.25.tar.bz2 \
+ ${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/patch-${PV}.20.bz2;patch=1 \
file://defconfig"
SRC_URI_append_mpc8313e-rdb = "\
@@ -41,6 +44,18 @@ SRC_URI_append_at91-l9260 = " \
http://maxim.org.za/AT91RM9200/2.6/2.6.25-at91.patch.gz;patch=1 \
"
+SRC_URI_append_ronetix-pm9263 = " \
+ http://maxim.org.za/AT91RM9200/2.6/2.6.25-at91.patch.gz;patch=1 \
+ http://download.ronetix.info/sk-eb926x/linux/kernel/2.6.25.4/linux-2.6.25.4-ronetix-08-11-02.2228.patch;patch=1 \
+ http://download.ronetix.info/sk-eb926x/linux/kernel/2.6.25.4/socketcan-driver-at91.patch;patch=1 \
+"
+
+SRC_URI_append_ronetix-pm9261 = " \
+ http://maxim.org.za/AT91RM9200/2.6/2.6.25-at91.patch.gz;patch=1 \
+ http://download.ronetix.info/sk-eb926x/linux/kernel/2.6.25.4/linux-2.6.25.4-ronetix-08-11-02.2228.patch;patch=1 \
+ http://download.ronetix.info/sk-eb926x/linux/kernel/2.6.25.4/socketcan-driver-at91.patch;patch=1 \
+"
+
SRC_URI_append_m8050 = " file://m8050.diff;patch=1 file://update-mach-types.diff;patch=1"
CMDLINE_cm-x270 = "console=${CMX270_CONSOLE_SERIAL_PORT},38400 monitor=1 mem=64M mtdparts=physmap-flash.0:256k(boot)ro,0x180000(kernel),-(root);cm-x270-nand:64m(app),-(data) rdinit=/sbin/init root=mtd3 rootfstype=jffs2"
diff --git a/recipes/linux/linux_2.6.26.bb b/recipes/linux/linux_2.6.26.bb
index 53d55577b0..775d2d8ba1 100644
--- a/recipes/linux/linux_2.6.26.bb
+++ b/recipes/linux/linux_2.6.26.bb
@@ -1,6 +1,6 @@
require linux.inc
-PR = "r9"
+PR = "r10"
# Mark archs/machines that this kernel supports
DEFAULT_PREFERENCE = "-1"
@@ -11,6 +11,7 @@ DEFAULT_PREFERENCE_topas910 = "1"
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.26.tar.bz2 \
+ ${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/patch-${PV}.8.bz2;patch=1 \
file://defconfig"
SRC_URI_append_boc01 = "\
@@ -36,8 +37,7 @@ SRC_URI_append_mpc8313e-rdb = "\
file://mpc8313e-rdb-eth-fixed.patch;patch=1 \
"
-SRC_URI_append_topas910 = " ${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/patch-2.6.26.5.bz2;patch=1 \
- http://www.bplan-gmbh.org/data/toshiba/topas/linux/2.6.26.5/patch_2.6.26.5_topas910.bz2;patch=1"
+SRC_URI_append_topas910 = "http://www.bplan-gmbh.org/data/toshiba/topas/linux/2.6.26.5/patch_2.6.26.5_topas910.bz2;patch=1"
# see http://bugzilla.kernel.org/show_bug.cgi?id=11143
do_stage_append() {
diff --git a/recipes/linux/linux_2.6.27.bb b/recipes/linux/linux_2.6.27.bb
index 0b873a65a7..9e8d6a32e0 100644
--- a/recipes/linux/linux_2.6.27.bb
+++ b/recipes/linux/linux_2.6.27.bb
@@ -1,6 +1,6 @@
require linux.inc
-PR = "r8"
+PR = "r11"
# Mark archs/machines that this kernel supports
DEFAULT_PREFERENCE = "-1"
@@ -9,6 +9,7 @@ DEFAULT_PREFERENCE_progear = "1"
DEFAULT_PREFERENCE_simpad = "-1"
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${PV}.tar.bz2 \
+ ${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/patch-${PV}.41.bz2;patch=1 \
file://defconfig "
SRC_URI_append_boc01 = "\
diff --git a/recipes/linux/linux_2.6.28.bb b/recipes/linux/linux_2.6.28.bb
index 98cf19129d..05fe815d98 100644
--- a/recipes/linux/linux_2.6.28.bb
+++ b/recipes/linux/linux_2.6.28.bb
@@ -1,6 +1,6 @@
require linux.inc
-PR = "r12"
+PR = "r13"
# Mark archs/machines that this kernel supports
DEFAULT_PREFERENCE = "-1"
@@ -14,6 +14,7 @@ DEFAULT_PREFERENCE_wrap = "1"
DEFAULT_PREFERENCE_tx27 = "1"
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.28.tar.bz2 \
+ ${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/patch-${PV}.10.bz2;patch=1 \
file://defconfig"
SRC_URI_append_at91sam9263ek = " \
diff --git a/recipes/linux/linux_2.6.29+2.6.30-rc5.bb b/recipes/linux/linux_2.6.29+2.6.30-rc5.bb
index 2a38a546e0..08cb2fe3c5 100644
--- a/recipes/linux/linux_2.6.29+2.6.30-rc5.bb
+++ b/recipes/linux/linux_2.6.29+2.6.30-rc5.bb
@@ -19,6 +19,6 @@ DEFAULT_PREFERENCE_spitz = "-1"
DEFAULT_PREFERENCE_tosa = "-1"
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${OLD_KERNEL_RELEASE}.tar.bz2 \
- ${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/testing/patch-${KERNEL_RELEASE}.bz2;patch=1 \
+ ${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/testing/v2.6.30/patch-${KERNEL_RELEASE}.bz2;patch=1 \
file://defconfig"
diff --git a/recipes/linux/linux_2.6.29.bb b/recipes/linux/linux_2.6.29.bb
index f78193d711..240faf224d 100644
--- a/recipes/linux/linux_2.6.29.bb
+++ b/recipes/linux/linux_2.6.29.bb
@@ -1,6 +1,6 @@
require linux.inc
-PR = "r9"
+PR = "r10"
S = "${WORKDIR}/linux-2.6.29"
@@ -19,6 +19,7 @@ DEFAULT_PREFERENCE_tqm8540 = "1"
DEFAULT_PREFERENCE_stamp9g20evb = "1"
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-2.6.29.tar.bz2 \
+ ${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/patch-${PV}.6.bz2;patch=1 \
file://defconfig"
SRC_URI_append_boc01 = "\
@@ -42,14 +43,12 @@ SRC_URI_append_micro2440 = " \
file://0002-S3C-Backported-openmoko-s-touchscreen-filters.patch;patch=1 \
file://0003-VENDOR-armworks-logo.patch;patch=1 \
file://0004-920T-Use-specific-920t-mtune.patch;patch=1 \
- file://0005-920T-Temp-fix-for-the-40-relocation-binutils-pro.patch;patch=1 \
file://0006-S3C-Allow-the-machine-code-to-get-the-BBT-table-fro.patch;patch=1 \
file://0007-MINI2440-Add-machine-support.patch;patch=1 \
file://0008-MINI2440-Delays-command-check-response-on-SD.patch;patch=1 \
file://0009-MINI2440-Rename-the-SoC-tty-names.patch;patch=1 \
file://0010-MINI2440-creates-a-mini2440_defconfig-file.patch;patch=1 \
file://0011-MINI2440-Add-touchscreen-support.patch;patch=1 \
- file://0012-GRO-Disable-GRO-on-legacy-netif_rx-path.patch;patch=1 \
"
SRC_URI_append_tosa = " \
diff --git a/recipes/linux/linux_2.6.30.bb b/recipes/linux/linux_2.6.30.bb
index c30caa4b36..19247e2e5b 100644
--- a/recipes/linux/linux_2.6.30.bb
+++ b/recipes/linux/linux_2.6.30.bb
@@ -1,6 +1,6 @@
require linux.inc
-PR = "r4"
+PR = "r5"
S = "${WORKDIR}/linux-${PV}"
@@ -16,7 +16,7 @@ DEFAULT_PREFERENCE_at91sam9263ek = "-1"
DEFAULT_PREFERENCE_tosa = "-1"
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${PV}.tar.bz2 \
- ${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/patch-${PV}.9.bz2;patch=1 \
+ ${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/patch-${PV}.10.bz2;patch=1 \
http://maxim.org.za/AT91RM9200/2.6/2.6.30-at91.patch.gz;patch=1 \
file://aufs2-30.patch;patch=1 \
file://defconfig"
diff --git a/recipes/linux/linux_2.6.31.bb b/recipes/linux/linux_2.6.31.bb
index 839e808451..dcce779ebd 100644
--- a/recipes/linux/linux_2.6.31.bb
+++ b/recipes/linux/linux_2.6.31.bb
@@ -1,6 +1,6 @@
require linux.inc
-PR = "r6"
+PR = "r8"
S = "${WORKDIR}/linux-${PV}"
@@ -16,7 +16,7 @@ DEFAULT_PREFERENCE_ben-nanonote = "1"
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${PV}.tar.bz2 \
- ${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/patch-${PV}.5.bz2;patch=1 \
+ ${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/patch-${PV}.8.bz2;patch=1 \
file://defconfig"
SRC_URI += "file://0001-Squashfs-move-zlib-decompression-wrapper-code-into.patch;patch=1 \
diff --git a/recipes/linux/linux_2.6.32.bb b/recipes/linux/linux_2.6.32.bb
index 7f2ef0a2e8..be3d8ad7c6 100644
--- a/recipes/linux/linux_2.6.32.bb
+++ b/recipes/linux/linux_2.6.32.bb
@@ -1,14 +1,21 @@
require linux.inc
-PR = "r1"
+PR = "r2"
S = "${WORKDIR}/linux-${PV}"
# Mark archs/machines that this kernel supports
DEFAULT_PREFERENCE = "-1"
DEFAULT_PREFERENCE_simone = "1"
+DEFAULT_PREFERENCE_akita = "-1"
+DEFAULT_PREFERENCE_c7x0 = "-1"
+DEFAULT_PREFERENCE_collie = "-1"
+DEFAULT_PREFERENCE_poodle = "-1"
+DEFAULT_PREFERENCE_spitz = "-1"
+DEFAULT_PREFERENCE_tosa = "-1"
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/linux-${PV}.tar.bz2;name=kernel \
+ ${KERNELORG_MIRROR}/pub/linux/kernel/v2.6/patch-${PV}.1.bz2;patch=1 \
file://defconfig"
SRC_URI[kernel.md5sum] = "260551284ac224c3a43c4adac7df4879"
@@ -24,3 +31,17 @@ SRC_URI_append_simone = " \
file://ep93xx/ep93xx-touchscreen.patch;patch=1 \
file://ep93xx/ep93xx-spi.patch;patch=1 \
file://ep93xx/ep93xx-cpuinfo.patch;patch=1 "
+
+# Zaurus family bootloader patches
+RPSRC = "http://www.rpsys.net/openzaurus/patches/archive"
+ZAURUSPATCHES = " ${RPSRC}/pxa-linking-bug-r1.patch;patch=1;status=unmergable;name=pxa-linking-bug-r1 "
+SRC_URI[pxa-linking-bug-r1.md5sum] = "1e2a99787260c3566033e7f41180e2c8"
+SRC_URI[pxa-linking-bug-r1.sha256sum] = "785d2680022325ad54c1593082dce902f5fee31dae4c1922ba43956b1dcfcd8b"
+
+# Machine specific patches
+SRC_URI_append_akita = "${ZAURUSPATCHES}"
+SRC_URI_append_c7x0 = "${ZAURUSPATCHES}"
+SRC_URI_append_collie = "${ZAURUSPATCHES}"
+SRC_URI_append_poodle = "${ZAURUSPATCHES}"
+SRC_URI_append_spitz = "${ZAURUSPATCHES}"
+SRC_URI_append_tosa = "${ZAURUSPATCHES}"
diff --git a/recipes/matchbox2/matchbox2/matchbox-session-2.in b/recipes/matchbox2/matchbox2/matchbox-session-2.in
index 6e13fe0d69..60e599be0e 100644
--- a/recipes/matchbox2/matchbox2/matchbox-session-2.in
+++ b/recipes/matchbox2/matchbox2/matchbox-session-2.in
@@ -8,7 +8,7 @@ if [ -e /etc/profile ]
then
. /etc/profile
fi
-if [ -e $HOME/profile ]
+if [ -e $HOME/.profile ]
then
. $HOME/.profile
fi
diff --git a/recipes/matchbox2/matchbox2_2.0.bb b/recipes/matchbox2/matchbox2_2.0.bb
index 1762ff4766..fc7e9ef39d 100644
--- a/recipes/matchbox2/matchbox2_2.0.bb
+++ b/recipes/matchbox2/matchbox2_2.0.bb
@@ -3,7 +3,7 @@ LICENSE = "GPL"
DEPENDS = "matchbox-wm-2 matchbox-panel-2 matchbox-desktop-2"
RDEPENDS = "matchbox-wm-2 matchbox-panel-2 matchbox-desktop-2"
SECTION = "x11/wm"
-PR = "r0"
+PR = "r1"
SRC_URI = "file://matchbox-session-2.in \
file://defaults.in \
diff --git a/recipes/mesa/mesa-common-old.inc b/recipes/mesa/mesa-common-old.inc
index 402a82a6b3..a88a07f019 100644
--- a/recipes/mesa/mesa-common-old.inc
+++ b/recipes/mesa/mesa-common-old.inc
@@ -3,8 +3,13 @@ PE = "2"
SRC_URI = "${SOURCEFORGE_MIRROR}/mesa3d/MesaLib-${PV}.tar.bz2 \
file://mklib-rpath-link.patch;patch=1"
+
S = "${WORKDIR}/Mesa-${PV}"
+PROVIDES = "virtual/libgl"
+
LICENSE = "LGPL"
+INC_PR = "r3"
+
DEPENDS = "makedepend-native xf86vidmodeproto glproto virtual/libx11 libxext libxxf86vm libxi libxmu libice"
diff --git a/recipes/mesa/mesa-dri_6.5.2.bb b/recipes/mesa/mesa-dri_6.5.2.bb
index f94ea8b3d2..594848fd8b 100644
--- a/recipes/mesa/mesa-dri_6.5.2.bb
+++ b/recipes/mesa/mesa-dri_6.5.2.bb
@@ -6,7 +6,7 @@ FILESPATH = "${FILE_DIRNAME}/mesa-${PV}:${FILE_DIRNAME}/files:${FILE_DIRNAME}"
PACKAGES_DYNAMIC = "mesa-dri-driver-*"
-PR = "r2"
+PR = "${INC_PR}.0"
DEPENDS += "libdrm"
# DRI is useless without the kernel drivers
diff --git a/recipes/mesa/mesa-dri_7.0.3.bb b/recipes/mesa/mesa-dri_7.0.3.bb
index 330efb23af..0cb2fe2cce 100644
--- a/recipes/mesa/mesa-dri_7.0.3.bb
+++ b/recipes/mesa/mesa-dri_7.0.3.bb
@@ -7,7 +7,7 @@ FILESPATH = "${FILE_DIRNAME}/mesa-${PV}:${FILE_DIRNAME}/files:${FILE_DIRNAME}"
PACKAGES_DYNAMIC = "mesa-dri-driver-*"
-PR = "r1"
+PR = "${INC_PR}.0"
DEPENDS += "libdrm"
# DRI is useless without the kernel drivers
diff --git a/recipes/mesa/mesa-dri_7.6.bb b/recipes/mesa/mesa-dri_7.6.bb
index bea43c3596..f69303a1c5 100644
--- a/recipes/mesa/mesa-dri_7.6.bb
+++ b/recipes/mesa/mesa-dri_7.6.bb
@@ -13,6 +13,8 @@ PR = "${INC_PR}.0"
# most of our targets do not have DRI so will use mesa-xlib
DEFAULT_PREFERENCE = "-1"
+DEFAULT_PREFERENCE_om-gta01 = "2"
+
# ASUS EeePC 901 has DRI support so use mesa-dri by default
DEFAULT_PREFERENCE_eee901 = "1"
diff --git a/recipes/mesa/mesa-dri_git.bb b/recipes/mesa/mesa-dri_git.bb
index 732e2ae197..001b228bfd 100644
--- a/recipes/mesa/mesa-dri_git.bb
+++ b/recipes/mesa/mesa-dri_git.bb
@@ -23,5 +23,4 @@ FILES_${PN} += "${libdir}/dri/*.so"
FILES_${PN}-dbg += "${libdir}/dri/.debug/*"
FILES_mesa-utils = "${bindir}/*"
-EXTRA_OECONF += "--with-driver=dri --with-dri-drivers=swrast,${MACHINE_DRI_MODULES}"
-EXTRA_OECONF_append_om-gta02 = " --disable-glx-tls --disable-gallium-intel "
+EXTRA_OECONF += "--with-driver=dri --disable-glx-tls --disable-gallium-intel --with-dri-drivers=swrast,${MACHINE_DRI_MODULES}"
diff --git a/recipes/mesa/mesa-xlib_7.2.bb b/recipes/mesa/mesa-xlib_7.2.bb
index f6c44ebdb0..1e752dce6f 100644
--- a/recipes/mesa/mesa-xlib_7.2.bb
+++ b/recipes/mesa/mesa-xlib_7.2.bb
@@ -5,7 +5,8 @@ LIB_DEPS = "virtual/libx11 libxext libxxf86vm libxdamage libxfixes"
DEPENDS = "${PROTO_DEPS} ${LIB_DEPS}"
-PR = "r4"
+PE = "1"
+PR = "${INC_PR}.0"
EXTRA_OECONF += "--with-driver=xlib"
diff --git a/recipes/mesa/mesa-xlib_7.4.bb b/recipes/mesa/mesa-xlib_7.4.bb
new file mode 100644
index 0000000000..1e752dce6f
--- /dev/null
+++ b/recipes/mesa/mesa-xlib_7.4.bb
@@ -0,0 +1,20 @@
+include mesa-common.inc
+
+PROTO_DEPS = "xf86driproto glproto"
+LIB_DEPS = "virtual/libx11 libxext libxxf86vm libxdamage libxfixes"
+
+DEPENDS = "${PROTO_DEPS} ${LIB_DEPS}"
+
+PE = "1"
+PR = "${INC_PR}.0"
+
+EXTRA_OECONF += "--with-driver=xlib"
+
+PACKAGES =+ "${PN}-xprogs"
+
+FILES_${PN}-xprogs = "${bindir}/glxdemo ${bindir}/glxgears ${bindir}/glxheads ${bindir}/glxinfo"
+
+do_install_append () {
+ install -d ${D}/${bindir}
+ install -m 0755 ${S}/progs/xdemos/{glxdemo,glxgears,glxheads,glxinfo} ${D}/${bindir}
+}
diff --git a/recipes/mesa/mesa_6.5.2.bb b/recipes/mesa/mesa_6.5.2.bb
index 79993cc1f1..66078e1a7b 100644
--- a/recipes/mesa/mesa_6.5.2.bb
+++ b/recipes/mesa/mesa_6.5.2.bb
@@ -1,7 +1,7 @@
-PR = "r1"
-
include mesa-mesa.inc
+PR = "${INC_PR}.0"
+
SRC_URI_append = " file://fix-host-compile.patch;patch=1 "
diff --git a/recipes/mesa/mesa_7.0.2.bb b/recipes/mesa/mesa_7.0.2.bb
index 3eb1fbef8b..66078e1a7b 100644
--- a/recipes/mesa/mesa_7.0.2.bb
+++ b/recipes/mesa/mesa_7.0.2.bb
@@ -1,5 +1,7 @@
include mesa-mesa.inc
+PR = "${INC_PR}.0"
+
SRC_URI_append = " file://fix-host-compile.patch;patch=1 "
diff --git a/recipes/moblin/librest_git.bb b/recipes/moblin/librest_git.bb
index 0012e77025..52f649375e 100644
--- a/recipes/moblin/librest_git.bb
+++ b/recipes/moblin/librest_git.bb
@@ -2,7 +2,7 @@
SRC_URI = "git://git.moblin.org/${PN}.git;protocol=git"
PV = "0.0+gitr${SRCPV}"
PE = "1"
-PR = "r0"
+PR = "r1"
DEPENDS = "libsoup-2.4"
diff --git a/recipes/mpc/mpc-native_0.8.1.bb b/recipes/mpc/mpc-native_0.8.1.bb
new file mode 100644
index 0000000000..8dba0b7fc4
--- /dev/null
+++ b/recipes/mpc/mpc-native_0.8.1.bb
@@ -0,0 +1,3 @@
+require mpc_${PV}.bb
+inherit native
+DEPENDS = "mpfr-native gmp-native"
diff --git a/recipes/mpc/mpc.inc b/recipes/mpc/mpc.inc
new file mode 100644
index 0000000000..6e18e588be
--- /dev/null
+++ b/recipes/mpc/mpc.inc
@@ -0,0 +1,6 @@
+DESCRIPTION = "Mpc is a C library for the arithmetic of complex numbers with arbitrarily high precision and correct rounding of the result. It is built upon and follows the same principles as Mpfr"
+HOMEPAGE = "http://www.multiprecision.org/"
+LICENSE = "LGPLv2"
+SECTION = "libs"
+
+inherit autotools
diff --git a/recipes/mpc/mpc_0.8.1.bb b/recipes/mpc/mpc_0.8.1.bb
new file mode 100644
index 0000000000..b62c08673e
--- /dev/null
+++ b/recipes/mpc/mpc_0.8.1.bb
@@ -0,0 +1,10 @@
+require mpc.inc
+
+DEPENDS = "gmp mpfr"
+
+SRC_URI = "http://www.multiprecision.org/mpc/download/mpc-${PV}.tar.gz"
+S = "${WORKDIR}/mpc-${PV}"
+
+do_stage() {
+ autotools_stage_all
+}
diff --git a/recipes/mythtv/mythtv_0.22.bb b/recipes/mythtv/mythtv_0.22.bb
index 0ff2b4d0c6..ac6d2f8d30 100644
--- a/recipes/mythtv/mythtv_0.22.bb
+++ b/recipes/mythtv/mythtv_0.22.bb
@@ -5,7 +5,7 @@ mysql5-server mysql5-client"
RDEPENDS_${PN}_append_libc-glibc = " glibc-gconv-utf-16"
PV = "0.22"
-PR = "r0"
+PR = "r1"
# REALPV is here to support release candidates
# OE in that case has as PV something like 0.21+0.22rc1
# but for packaging the real PV is needed
@@ -60,38 +60,6 @@ do_install() {
install -d ${D}${datadir}/mythtv/sql
install -m 0644 ${S}/database/mc.sql ${D}${datadir}/mythtv/sql
}
-do_stage() {
- install -d ${STAGING_INCDIR}
- install -d ${STAGING_INCDIR}/${PN}
- install -d ${STAGING_INCDIR}/${PN}/dvdnav
- install -d ${STAGING_INCDIR}/${PN}/dvdread
- install -d ${STAGING_INCDIR}/${PN}/libavcodec
- install -d ${STAGING_INCDIR}/${PN}/libavformat
- install -d ${STAGING_INCDIR}/${PN}/libavutil
- install -d ${STAGING_INCDIR}/${PN}/libmyth
- install -d ${STAGING_INCDIR}/${PN}/libmythdb
- install -d ${STAGING_INCDIR}/${PN}/libmythui
- install -d ${STAGING_INCDIR}/${PN}/libswscale
- install -d ${STAGING_INCDIR}/${PN}/mpeg2dec
- install -d ${STAGING_INCDIR}/${PN}/upnp
- install -m 0644 ${D}/${includedir}/${PN}/*.h ${STAGING_INCDIR}/${PN}
- install -m 0644 ${D}/${includedir}/${PN}/mythconfig.mak ${STAGING_INCDIR}/${PN}
- install -m 0644 ${D}/${includedir}/${PN}/dvdnav/*.h ${STAGING_INCDIR}/${PN}/dvdnav
- install -m 0644 ${D}/${includedir}/${PN}/dvdread/*.h ${STAGING_INCDIR}/${PN}/dvdread
- install -m 0644 ${D}/${includedir}/${PN}/libavcodec/*.h ${STAGING_INCDIR}/${PN}/libavcodec
- install -m 0644 ${D}/${includedir}/${PN}/libavformat/*.h ${STAGING_INCDIR}/${PN}/libavformat
- install -m 0644 ${D}/${includedir}/${PN}/libavutil/*.h ${STAGING_INCDIR}/${PN}/libavutil
- install -m 0644 ${D}/${includedir}/${PN}/libmyth/*.h ${STAGING_INCDIR}/${PN}/libmyth
- install -m 0644 ${D}/${includedir}/${PN}/libmythdb/*.h ${STAGING_INCDIR}/${PN}/libmythdb
- install -m 0644 ${D}/${includedir}/${PN}/libmythui/*.h ${STAGING_INCDIR}/${PN}/libmythui
- install -m 0644 ${D}/${includedir}/${PN}/libswscale/*.h ${STAGING_INCDIR}/${PN}/libswscale
- install -m 0644 ${D}/${includedir}/${PN}/mpeg2dec/*.h ${STAGING_INCDIR}/${PN}/mpeg2dec
- install -m 0644 ${D}/${includedir}/${PN}/upnp/*.h ${STAGING_INCDIR}/${PN}/upnp
- # next part may need to be done better
- cp -R ${D}/${libdir}/* ${STAGING_LIBDIR}
- # ugly chmod ahead
- chmod -R ugo+r ${STAGING_LIBDIR}
-}
PACKAGES =+ "mythtv-backend mythtv-frontend mythtv-bin mythtv-filters mythtv-database"
PACKAGES_DYNAMIC = "mythtv-theme-*"
diff --git a/recipes/navit/files/navit.xml-so.patch b/recipes/navit/files/navit.xml-so.patch
index 9151bc4a5e..c374756447 100644
--- a/recipes/navit/files/navit.xml-so.patch
+++ b/recipes/navit/files/navit.xml-so.patch
@@ -1,17 +1,13 @@
---- navit/navit/navit.xml.orig 2009-07-19 13:08:16.000000000 +0200
-+++ navit/navit/navit.xml 2009-07-19 13:09:12.000000000 +0200
-@@ -6,10 +6,10 @@
- on upgrade. Rather copy it to ~/.navit/. Please read wiki -->
- <config xmlns:xi="http://www.w3.org/2001/XInclude">
- <plugins>
-- <plugin path="$NAVIT_LIBDIR/*/${NAVIT_LIBPREFIX}lib*.so" ondemand="yes"/>
-- <plugin path="$NAVIT_LIBDIR/autoload/${NAVIT_LIBPREFIX}lib*.so"/>
-- <plugin path="$NAVIT_LIBDIR/*/${NAVIT_LIBPREFIX}libbinding_dbus.so" active="no"/>
-- <plugin path="$NAVIT_LIBDIR/*/${NAVIT_LIBPREFIX}libgraphics_null.so" active="no"/>
-+ <plugin path="$NAVIT_LIBDIR/*/${NAVIT_LIBPREFIX}lib*.so.0" ondemand="yes"/>
-+ <plugin path="$NAVIT_LIBDIR/autoload/${NAVIT_LIBPREFIX}lib*.so.0"/>
-+ <plugin path="$NAVIT_LIBDIR/*/${NAVIT_LIBPREFIX}libbinding_dbus.so.0" active="no"/>
-+ <plugin path="$NAVIT_LIBDIR/*/${NAVIT_LIBPREFIX}libgraphics_null.so.0" active="no"/>
- </plugins>
-
- <debug name="navit:do_draw" level="0"/>
+--- navit-0.0.3/src/navit.xml.orig 2008-01-01 15:24:43.000000000 +0000
++++ navit-0.0.3/src/navit.xml 2008-01-01 15:25:01.000000000 +0000
+@@ -1,8 +1,8 @@
+ <?xml version="1.0" encoding="utf-8"?>
+ <!DOCTYPE navit SYSTEM "navit.dtd">
+ <plugins>
+- <plugin path="$NAVIT_LIBDIR/*/${NAVIT_LIBPREFIX}lib*.so"/>
+- <plugin path="$NAVIT_LIBDIR/*/${NAVIT_LIBPREFIX}libgraphics_null.so" active="no" />
++ <plugin path="$NAVIT_LIBDIR/*/${NAVIT_LIBPREFIX}lib*.so.0"/>
++ <plugin path="$NAVIT_LIBDIR/*/${NAVIT_LIBPREFIX}libgraphics_null.so.0" active="no" />
+ </plugins>
+ <debug name="navit:do_draw" level="0" />
+ <!--
diff --git a/recipes/navit/files/osd.xml b/recipes/navit/files/osd.xml
index a8a97d74c9..2d0f9ffdf4 100644
--- a/recipes/navit/files/osd.xml
+++ b/recipes/navit/files/osd.xml
@@ -1,44 +1,15 @@
- <!-- FreeRunner Layout 3 -->
- <osd enabled="yes" type="text" label="${navigation.item.street_name} ${navigation.item[1].street_name_systematic}" x="0" y="0" w="480" h="30" align="0" background_color="#000000cc" font_size="300" />
- <osd enabled="yes" type="gps_status" x="430" y="0" w="65" h="30" align="0" background_color="#000000cc" font_size="300" />
- <osd enabled="yes" type="compass" align="0" font_size="350" x="0" y="30" w="150" h="150" background_color="#000000cc" />
- <osd enabled="yes" type="navigation_next_turn" x="-150" y="30" w="150" h="60" background_color="#000000cc" />
- <osd enabled="yes" type="text" label="${navigation.item[1].length[named]}" x="-150" y="90" w="150" h="40" align="0" background_color="#000000cc" font_size="450"/>
- <osd enabled="yes" type="button" x="-55" y="-90" command="zoom_in()" src="gui_zoom_in.svg"/>
- <osd enabled="yes" type="button" x="5" y="-90" command="zoom_out()" src="gui_zoom_out.svg"/>
- <osd enabled="yes" type="text" label="${vehicle.position_speed}" x="120" y="-50" w="240" h="25" align="0" background_color="#000000cc" font_size="280"/>
- <osd enabled="yes" type="text" label="ETA:${navigation.item.destination_time[arrival]}" x="0" y="-25" w="160" h="25" align="4" background_color="#000000cc" font_size="350" />
- <osd enabled="yes" type="text" label="TL:${navigation.item.destination_time[remaining]}" x="160" y="-25" w="160" h="25" align="4" background_color="#000000cc" font_size="350" />
- <osd enabled="yes" type="text" label="Dist:${navigation.item.destination_length[named]}" x="320" y="-25" w="160" h="25" align="4" background_color="#000000cc" font_size="350" />
- <!-- / FreeRunner Layout 3 -->
+ <!-- osd items allow to position display and control items directly on top of the map: -->
+ <osd enabled="no" type="compass"/>
+ <osd enabled="no" type="eta"/>
+ <osd enabled="no" type="navigation_distance_to_target"/>
+ <osd enabled="no" type="navigation"/>
+ <osd enabled="no" type="navigation_distance_to_next"/>
+ <osd enabled="no" type="navigation_next_turn"/>
- <!-- Mineque's OSD 003 Layout -->
- <!--osd enabled="yes" type="text" label="Currently On ${navigation.item.street_name} ${navigation.item[1].street_name_systematic}" x="0" y="0" w="735" h="35" align="16" background_color="#a60c0f00" font_size="430" src="gui_fullscreen.svg" />
- <osd enabled="yes" type="gps_status" x="735" y="0" w="65" h="30" align="0" background_color="#a60c0f00" font_size="300" />
- <osd enabled="yes" type="text" label="ETA:${navigation.item.destination_time[arrival]}" x="50" y="-100" w="275" h="70" align="4" background_color="#a60c0f01" font_size="500" />
- <osd enabled="yes" type="text" label="TL:${navigation.item.destination_time[remaining]}" x="475" y="-100" w="275" h="70"align="4" background_color="#a60c0f00" font_size="500" />
- <osd enabled="yes" type="text" label="Dist:${navigation.item.destination_length[named]}" x="50" y="-60" w="275" h="70" align="4" background_color="#a60c0f00" font_size="500" />
- <osd enabled="yes" type="text" label="${vehicle.position_speed} / ${tracking.item.route_speed}" x="475" y="-60" w="275" h="70" align="4" background_color="#a60c0f00" font_size="500"/>
- <osd enabled="yes" type="text" label="${navigation.item[1].length[named]}" x="325" y="-40" w="150" h="40" align="0" background_color="#a60c0f00" font_size="500"/>
- <osd enabled="yes" type="navigation_next_turn" x="325" y="-135" w="150" h="100" align="15" background_color="#a60c0f00" />
- <osd enabled="yes" type="button" x="0" y="-120" w="800" h="120" command="" src="/home/mineque/.navit/skins/Mineque_003/M_003_01.png" />
- <osd enabled="yes" type="button" x="0" y="0" w="800" h="35" command="" src="/home/mineque/.navit/skins/Mineque_003/M_003_02.png" />
- <osd enabled="yes" type="button" x="5" y="35" command="gui.fullscreen()" src="gui_fullscreen.svg"/>
- <osd enabled="no" type="button" x="300" y="100" command="gui.menu()" src="menu.xpm"/>
- <osd enabled="yes" type="button" x="5" y="475" command="zoom_in()" src="gui_zoom_in.svg"/>
- <osd enabled="yes" type="button" x="-53" y="475" command="zoom_out()" src="gui_zoom_out.svg"/-->
- <!-- / Mineque's OSD 003 Layout -->
-
- <!-- Default -->
- <!-- osd items allow to position display and control items directly on top of the map: -->
- <!-- osd enabled="no" type="compass"/>
- <osd enabled="no" type="eta"/>
- <osd enabled="no" type="navigation_distance_to_target"/>
- <osd enabled="no" type="navigation"/>
- <osd enabled="no" type="navigation_distance_to_next"/>
- <osd enabled="no" type="navigation_next_turn"/>
- <osd enabled="no" type="button" x="0" y="0" command="gui.fullscreen()" src="toggle_fullscreen.xpm"/>
- <osd enabled="no" type="button" x="-96" y="0" command="gui.menu()" src="menu.xpm"/>
- <osd enabled="no" type="button" x="-96" y="-96" command="zoom_in()" src="zoom_in.xpm"/>
- <osd enabled="no" type="button" x="0" y="-96" command="zoom_out()" src="zoom_out.xpm"/-->
- <!-- Default -->
+ <!-- Commands include gui_internal_menu, gui_internal_fullscreen, zoom_in and zoom_out.
+ Usage of negative values change the button origins. x="0" y="0" specifies the top left, x="-0" y="-0" the bottom right corner.
+ It's always the top left corner of the icon, so you need to consider the icon's size when you enter the values. -->
+ <osd enabled="no" type="button" x="0" y="0" command="gui.fullscreen()" src="toggle_fullscreen.xpm"/>
+ <osd enabled="no" type="button" x="-96" y="0" command="gui.menu()" src="menu.xpm"/>
+ <osd enabled="no" type="button" x="-96" y="-96" command="zoom_in()" src="zoom_in.xpm"/>
+ <osd enabled="no" type="button" x="0" y="-96" command="zoom_out()" src="zoom_out.xpm"/>
diff --git a/recipes/navit/files/shr/osd.xml b/recipes/navit/files/shr/osd.xml
new file mode 100644
index 0000000000..a8a97d74c9
--- /dev/null
+++ b/recipes/navit/files/shr/osd.xml
@@ -0,0 +1,44 @@
+ <!-- FreeRunner Layout 3 -->
+ <osd enabled="yes" type="text" label="${navigation.item.street_name} ${navigation.item[1].street_name_systematic}" x="0" y="0" w="480" h="30" align="0" background_color="#000000cc" font_size="300" />
+ <osd enabled="yes" type="gps_status" x="430" y="0" w="65" h="30" align="0" background_color="#000000cc" font_size="300" />
+ <osd enabled="yes" type="compass" align="0" font_size="350" x="0" y="30" w="150" h="150" background_color="#000000cc" />
+ <osd enabled="yes" type="navigation_next_turn" x="-150" y="30" w="150" h="60" background_color="#000000cc" />
+ <osd enabled="yes" type="text" label="${navigation.item[1].length[named]}" x="-150" y="90" w="150" h="40" align="0" background_color="#000000cc" font_size="450"/>
+ <osd enabled="yes" type="button" x="-55" y="-90" command="zoom_in()" src="gui_zoom_in.svg"/>
+ <osd enabled="yes" type="button" x="5" y="-90" command="zoom_out()" src="gui_zoom_out.svg"/>
+ <osd enabled="yes" type="text" label="${vehicle.position_speed}" x="120" y="-50" w="240" h="25" align="0" background_color="#000000cc" font_size="280"/>
+ <osd enabled="yes" type="text" label="ETA:${navigation.item.destination_time[arrival]}" x="0" y="-25" w="160" h="25" align="4" background_color="#000000cc" font_size="350" />
+ <osd enabled="yes" type="text" label="TL:${navigation.item.destination_time[remaining]}" x="160" y="-25" w="160" h="25" align="4" background_color="#000000cc" font_size="350" />
+ <osd enabled="yes" type="text" label="Dist:${navigation.item.destination_length[named]}" x="320" y="-25" w="160" h="25" align="4" background_color="#000000cc" font_size="350" />
+ <!-- / FreeRunner Layout 3 -->
+
+ <!-- Mineque's OSD 003 Layout -->
+ <!--osd enabled="yes" type="text" label="Currently On ${navigation.item.street_name} ${navigation.item[1].street_name_systematic}" x="0" y="0" w="735" h="35" align="16" background_color="#a60c0f00" font_size="430" src="gui_fullscreen.svg" />
+ <osd enabled="yes" type="gps_status" x="735" y="0" w="65" h="30" align="0" background_color="#a60c0f00" font_size="300" />
+ <osd enabled="yes" type="text" label="ETA:${navigation.item.destination_time[arrival]}" x="50" y="-100" w="275" h="70" align="4" background_color="#a60c0f01" font_size="500" />
+ <osd enabled="yes" type="text" label="TL:${navigation.item.destination_time[remaining]}" x="475" y="-100" w="275" h="70"align="4" background_color="#a60c0f00" font_size="500" />
+ <osd enabled="yes" type="text" label="Dist:${navigation.item.destination_length[named]}" x="50" y="-60" w="275" h="70" align="4" background_color="#a60c0f00" font_size="500" />
+ <osd enabled="yes" type="text" label="${vehicle.position_speed} / ${tracking.item.route_speed}" x="475" y="-60" w="275" h="70" align="4" background_color="#a60c0f00" font_size="500"/>
+ <osd enabled="yes" type="text" label="${navigation.item[1].length[named]}" x="325" y="-40" w="150" h="40" align="0" background_color="#a60c0f00" font_size="500"/>
+ <osd enabled="yes" type="navigation_next_turn" x="325" y="-135" w="150" h="100" align="15" background_color="#a60c0f00" />
+ <osd enabled="yes" type="button" x="0" y="-120" w="800" h="120" command="" src="/home/mineque/.navit/skins/Mineque_003/M_003_01.png" />
+ <osd enabled="yes" type="button" x="0" y="0" w="800" h="35" command="" src="/home/mineque/.navit/skins/Mineque_003/M_003_02.png" />
+ <osd enabled="yes" type="button" x="5" y="35" command="gui.fullscreen()" src="gui_fullscreen.svg"/>
+ <osd enabled="no" type="button" x="300" y="100" command="gui.menu()" src="menu.xpm"/>
+ <osd enabled="yes" type="button" x="5" y="475" command="zoom_in()" src="gui_zoom_in.svg"/>
+ <osd enabled="yes" type="button" x="-53" y="475" command="zoom_out()" src="gui_zoom_out.svg"/-->
+ <!-- / Mineque's OSD 003 Layout -->
+
+ <!-- Default -->
+ <!-- osd items allow to position display and control items directly on top of the map: -->
+ <!-- osd enabled="no" type="compass"/>
+ <osd enabled="no" type="eta"/>
+ <osd enabled="no" type="navigation_distance_to_target"/>
+ <osd enabled="no" type="navigation"/>
+ <osd enabled="no" type="navigation_distance_to_next"/>
+ <osd enabled="no" type="navigation_next_turn"/>
+ <osd enabled="no" type="button" x="0" y="0" command="gui.fullscreen()" src="toggle_fullscreen.xpm"/>
+ <osd enabled="no" type="button" x="-96" y="0" command="gui.menu()" src="menu.xpm"/>
+ <osd enabled="no" type="button" x="-96" y="-96" command="zoom_in()" src="zoom_in.xpm"/>
+ <osd enabled="no" type="button" x="0" y="-96" command="zoom_out()" src="zoom_out.xpm"/-->
+ <!-- Default -->
diff --git a/recipes/navit/navit.inc b/recipes/navit/navit.inc
index 7b2c109ad5..0b0c36470d 100644
--- a/recipes/navit/navit.inc
+++ b/recipes/navit/navit.inc
@@ -2,60 +2,30 @@ DESCRIPTION = "Navit is a car navigation system with routing engine."
LICENSE = "GPL"
SECTION = "x11/applications"
DEPENDS = "glib-2.0 gtk+"
-RRECOMMENDS = "gpsd espeak flite"
+RRECOMMENDS = "gpsd speechd flite"
PE = "1"
-INC_PR = "r3"
+INC_PR = "r4"
inherit autotools
-EXTRA_OECONF = "--disable-binding-python --disable-gui-sdl --disable-samplemap --enable-avoid-float --enable-avoid-unaligned --enable-svg2png-scaling-flag=32 --disable-speech-speech-dispatcher"
+EXTRA_OECONF = "--disable-binding-python --disable-gui-sdl --disable-samplemap --enable-avoid-float --enable-avoid-unaligned"
PACKAGES = "${PN}-dbg ${PN}-dev ${PN} ${PN}-doc ${PN}-locale"
-FILES_${PN} += "${libdir}/${PN}/*/*.so ${datadir}/dbus-1/services/ ${datadir}/icons/*/*/apps/navit.png"
+FILES_${PN} += "${libdir}/${PN}/*/*.so"
FILES_${PN}-dbg += "${libdir}/${PN}/*/.debug"
-FILES_${PN}-dev += "${libdir}/${PN}/*/*.la"
-
-CONFFILES_${PN} += "${datadir}/navit/navit.default.xml \
- ${datadir}/navit/navit.xml \
- ${datadir}/navit/maps.xml \
- ${datadir}/navit/osd.xml \
- ${datadir}/navit/speech.xml \
- "
SRC_URI_append = " \
file://navit.desktop \
file://navit.png \
- file://navit.xml \
- file://maps.xml \
- file://osd.xml \
- file://speech.xml \
"
-SRC_URI_append_shr = "file://navitD.desktop \
- file://navitD.png \
- "
-
-DEPENDS_append_shr = " gypsy"
-RDEPENDS_append_shr = " fsoraw"
do_install_append() {
install -d ${D}${datadir}/applications/
install -m 0644 ${WORKDIR}/navit.desktop ${D}${datadir}/applications/
- install -m 0644 ${WORKDIR}/navitD.desktop ${D}${datadir}/applications/
-
install -d ${D}${datadir}/pixmaps/
install -m 0644 ${WORKDIR}/navit.png ${D}${datadir}/pixmaps/
- install -m 0644 ${WORKDIR}/navitD.png ${D}${datadir}/pixmaps/
-
- #Use split config
- mv ${D}${datadir}/navit/navit.xml ${D}${datadir}/navit/navit.default.xml
- install -m 0644 ${WORKDIR}/navit.xml ${D}${datadir}/navit/navit.xml
- install -m 0644 ${WORKDIR}/maps.xml ${D}${datadir}/navit/maps.xml
- install -m 0644 ${WORKDIR}/osd.xml ${D}${datadir}/navit/osd.xml
- install -m 0644 ${WORKDIR}/speech.xml ${D}${datadir}/navit/speech.xml
- #FIXME: don't install those in the first place,
- #FIXME: rather then deleting post-install?
rm ${D}${libdir}/${PN}/*/*.la
}
diff --git a/recipes/navit/navit_svn.bb b/recipes/navit/navit_svn.bb
index b17ae51387..7660d0128f 100644
--- a/recipes/navit/navit_svn.bb
+++ b/recipes/navit/navit_svn.bb
@@ -1,21 +1,63 @@
+require navit.inc
+
PV = "0.1.0+svnr${SRCPV}"
PR = "${INC_PR}.0"
-DEPENDS_shr += " librsvg-native"
+DEFAULT_PREFERENCE = "-1"
+DEFAULT_PREFERENCE_shr = "1"
+
+S = "${WORKDIR}/navit"
+# use espeak instead speechd
+RRECOMMENDS = "gpsd espeak flite"
+
+DEPENDS_shr += " librsvg-native"
RDEPENDS = " navit-icons"
+EXTRA_OECONF += " --enable-svg2png-scaling-flag=32 --disable-speech-speech-dispatcher --enable-cache-size=20971520"
-require navit.inc
+SRC_URI = "svn://anonymous@navit.svn.sourceforge.net/svnroot/navit/trunk;module=navit;proto=https"
-EXTRA_OECONF_shr += " --enable-cache-size=20971520"
+EXTRA_AUTORECONF = " -I m4"
-S = "${WORKDIR}/navit"
+FILES_${PN} += " ${datadir}/dbus-1/services/ "
-SRC_URI = "svn://anonymous@navit.svn.sourceforge.net/svnroot/navit/trunk;module=navit;proto=https"
+CONFFILES_${PN} += "${datadir}/navit/navit.default.xml \
+ ${datadir}/navit/navit.xml \
+ ${datadir}/navit/maps.xml \
+ ${datadir}/navit/osd.xml \
+ ${datadir}/navit/speech.xml \
+ "
+
+SRC_URI += "file://navit.xml \
+ file://maps.xml \
+ file://osd.xml \
+ file://speech.xml \
+ "
+
+#Second launcher for shr
+SRC_URI_append_shr = "file://navitD.desktop \
+ file://navitD.png \
+ "
+
+DEPENDS_append_shr = " gypsy"
+RDEPENDS_append_shr = " fsoraw"
do_configure_prepend() {
- #Remove xpm building
+ #Remove xpm building, replaced by icons in own package
sed -i 's/\(.*SUBDIRS.*\) xpm\( \|$\)\(.*\)/\1\2\3/g' ${S}/navit/Makefile.am
}
-EXTRA_AUTORECONF = " -I m4"
+do_install_append() {
+ #Use split config
+ mv ${D}${datadir}/navit/navit.xml ${D}${datadir}/navit/navit.default.xml
+ install -m 0644 ${WORKDIR}/navit.xml ${D}${datadir}/navit/navit.xml
+ install -m 0644 ${WORKDIR}/maps.xml ${D}${datadir}/navit/maps.xml
+ install -m 0644 ${WORKDIR}/osd.xml ${D}${datadir}/navit/osd.xml
+ install -m 0644 ${WORKDIR}/speech.xml ${D}${datadir}/navit/speech.xml
+}
+
+do_install_append_shr() {
+ #Install second launcher for shr
+ install -m 0644 ${WORKDIR}/navitD.desktop ${D}${datadir}/applications/
+ install -m 0644 ${WORKDIR}/navitD.png ${D}${datadir}/pixmaps/
+}
diff --git a/recipes/networkmanager/networkmanager_0.7.1.997.bb b/recipes/networkmanager/networkmanager_0.7.1.997.bb
index fe90d7ed71..8b89f9776c 100644
--- a/recipes/networkmanager/networkmanager_0.7.1.997.bb
+++ b/recipes/networkmanager/networkmanager_0.7.1.997.bb
@@ -1,5 +1,7 @@
require networkmanager-0.7.inc
+PR = "r1"
+
SRC_URI += " \
file://remove-gtk-doc-make.patch;patch=1 \
file://nm-system-settings.conf \
@@ -22,5 +24,9 @@ do_install_append () {
install -d ${D}/etc/NetworkManager/
install -m 0644 ${WORKDIR}/nm-system-settings.conf ${D}/etc/NetworkManager/
install -m 0755 ${WORKDIR}/NetworkManager ${D}/etc/init.d
+
+ # Install an empty VPN folder as nm-connection-editor will happily segfault without it :o.
+ # With or without VPN support built in ;).
+ install -d ${D}/etc/NetworkManager/VPN
}
diff --git a/recipes/obexpush/obexpush_1.0.0.bb b/recipes/obexpush/obexpush_1.0.0.bb
index 7b73b10da5..4de4cbe98f 100644
--- a/recipes/obexpush/obexpush_1.0.0.bb
+++ b/recipes/obexpush/obexpush_1.0.0.bb
@@ -3,7 +3,7 @@ HOMEPAGE = "http://www.caside.lancs.ac.uk/java_bt.php"
SECTION = "console/network"
LICENSE = "GPL"
DEPENDS = "glib-2.0 openobex bluez-libs"
-PR = "r5"
+PR = "r6"
SRC_URI = "http://www.caside.lancs.ac.uk/bt/obexpush.tar.gz \
file://add-obextool.patch;patch=1 \
@@ -14,7 +14,7 @@ S = "${WORKDIR}/obexpush"
inherit update-rc.d
INITSCRIPT_NAME = "opd"
-INITSCRIPT_PARAMS = "defaults 33 09"
+INITSCRIPT_PARAMS = "defaults 33 9"
export GLIBINC = "-I${STAGING_INCDIR}/glib-2.0"
export GLIBLIB = "-I${STAGING_LIBDIR} -lglib-2.0"
@@ -43,6 +43,7 @@ do_install() {
install -d ${D}${sysconfdir}/init.d
install -d ${D}${sysconfdir}/default
+ install -d ${D}/var/obexpush
install -m 0755 ${WORKDIR}/init ${D}${sysconfdir}/init.d/opd
install -m 0755 ${WORKDIR}/opd_args ${D}${sysconfdir}/default/opd_args
}
diff --git a/recipes/openmax/libomxil-bellagio_0.9.2.bb b/recipes/openmax/libomxil-bellagio_0.9.2.bb
new file mode 100644
index 0000000000..b0564f381e
--- /dev/null
+++ b/recipes/openmax/libomxil-bellagio_0.9.2.bb
@@ -0,0 +1,17 @@
+DESCRIPTION = "OpenMAX Integration Layer (IL) is a standard API to access Multimedia Components on mobile platforms. It has been defined by the Khronos group."
+LICENSE = "LGPLv2"
+DEPENDS = "alsa-lib ffmpeg \
+ ${@base_conditional('ENTERPRISE_DISTRO', '1', '', 'libmad', d)}"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/omxil/${PN}-${PV}.tar.gz"
+
+inherit autotools_stage
+
+AUTOTOOLS_STAGE_PKGCONFIG = "1"
+
+FILES_${PN} += "${libdir}/bellagio/*.so ${libdir}/bellagio/*.la"
+FILES_${PN}-dev += "${libdir}/bellagio/*.a"
+FILES_${PN}-dbg += "${libdir}/bellagio/.debug"
+
+PARALLEL_MAKE = ""
+
diff --git a/recipes/openmoko-3rdparty/epiano_0.3.1.bb b/recipes/openmoko-3rdparty/epiano_0.3.1.bb
index ecd7d26427..6426093bba 100644
--- a/recipes/openmoko-3rdparty/epiano_0.3.1.bb
+++ b/recipes/openmoko-3rdparty/epiano_0.3.1.bb
@@ -3,7 +3,7 @@ DEPENDS = "ecore evas edje fluidsynth"
LICENSE = "GPL"
SECTION = "x11/multimedia"
PV = "0.3.1"
-PR = "r1"
+PR = "r2"
inherit autotools pkgconfig
diff --git a/recipes/openmoko-3rdparty/guitartune_svn.bb b/recipes/openmoko-3rdparty/guitartune_svn.bb
new file mode 100644
index 0000000000..37fbd5ffa3
--- /dev/null
+++ b/recipes/openmoko-3rdparty/guitartune_svn.bb
@@ -0,0 +1,28 @@
+DESCRIPTION = "guitar tuner for openmoko phones"
+HOMEPAGE = "http://code.google.com/p/guitartune"
+AUTHOR = "cchandel"
+LICENSE = "GPLv2"
+SECTION = "e/apps"
+DEPENDS = "gtk+ libglade fftw sqlite3"
+
+PV = "0.36+svnr${SRCPV}"
+
+SRC_URI = "svn://guitartune.googlecode.com/svn;module=trunk;proto=http"
+S = "${WORKDIR}/trunk"
+
+inherit autotools
+
+do_install_append() {
+ install -d "${D}/${datadir}/pixmaps"
+ install -m 0644 "${S}/resources/guitartune.png" "${D}/${datadir}/pixmaps"
+ install -d "${D}/${datadir}/applications"
+ install -m 0644 "${S}/resources/guitartune.desktop" "${D}/${datadir}/applications"
+ install -d "${D}/${datadir}/guitartune"
+ for ico in "${S}/resources/"*.png; do
+ if [ "$(basename $ico)" != "guitartune.png" ]; then
+ install -m 0644 $ico "${D}/${datadir}/guitartune"
+ fi
+ done
+}
+
+FILES_${PN} += "/usr/share/guitartune/* /usr/share/applications/* /usr/share/pixmaps/*"
diff --git a/recipes/openmoko-projects/diversity-radar_svn.bb b/recipes/openmoko-projects/diversity-radar_svn.bb
index bdc6120b87..2a334a5021 100644
--- a/recipes/openmoko-projects/diversity-radar_svn.bb
+++ b/recipes/openmoko-projects/diversity-radar_svn.bb
@@ -5,7 +5,7 @@ LICENSE = "GPL"
DEPENDS = "python-evas python-edje python-ecore python-edbus python-dbus python-etk"
RDEPENDS_${PN} = "diversity-daemon"
PV = "0.0.4+svnr${SRCPV}"
-PR = "r0.01"
+PR = "r0.02"
SRC_URI = "svn://svn.projects.openmoko.org/svnroot/diversity/toys;module=diversity-radar;proto=http"
diff --git a/recipes/openmoko-projects/enlazar_svn.bb b/recipes/openmoko-projects/enlazar_svn.bb
index 9b2896bced..925f6d98d5 100644
--- a/recipes/openmoko-projects/enlazar_svn.bb
+++ b/recipes/openmoko-projects/enlazar_svn.bb
@@ -4,7 +4,7 @@ LICENSE = "GPL"
DEPENDS = "evas edje ecore edbus"
RDEPENDS = "networkmanager"
PV = "0.1+svnr${SRCPV}"
-PR = "r3"
+PR = "r4"
PE = "2"
SRC_URI = "svn://svn.projects.openmoko.org/svnroot/enlazar;module=trunk;proto=http"
diff --git a/recipes/openmoko-projects/om-locations_git.bb b/recipes/openmoko-projects/om-locations_git.bb
index 1d82d25d9f..0c18d82657 100644
--- a/recipes/openmoko-projects/om-locations_git.bb
+++ b/recipes/openmoko-projects/om-locations_git.bb
@@ -6,7 +6,7 @@ DEPENDS = "eet evas edje ecore edbus etk"
RDEPENDS_${PN} = "diversity-daemon"
PV = "0.2+gitr${SRCPV}"
PE = "1"
-PR = "r1.03"
+PR = "r1.04"
SRC_URI = "git://git.openmoko.org/git/om-locations.git;protocol=git"
diff --git a/recipes/openmoko-projects/pyefl-sudoku_svn.bb b/recipes/openmoko-projects/pyefl-sudoku_svn.bb
index ae1a162563..c22220437e 100644
--- a/recipes/openmoko-projects/pyefl-sudoku_svn.bb
+++ b/recipes/openmoko-projects/pyefl-sudoku_svn.bb
@@ -5,7 +5,7 @@ LICENSE = "GPL"
DEPENDS = "python-evas python-edje python-ecore"
RDEPENDS = "python-evas python-edje python-ecore"
PV = "0.0.2+svnr${SRCPV}"
-PR = "r2"
+PR = "r3"
SRC_URI = "svn://svn.projects.openmoko.org/svnroot/;module=pyefl-sudoku;proto=http"
diff --git a/recipes/openmoko-system/ompower_svn.bb b/recipes/openmoko-system/ompower_svn.bb
index 27065235e6..28381741c3 100644
--- a/recipes/openmoko-system/ompower_svn.bb
+++ b/recipes/openmoko-system/ompower_svn.bb
@@ -2,7 +2,7 @@ DESCRIPTION = "Openmoko Power State handling daemon via DBUS"
LICENSE = "MIT BSD"
DEPENDS = "ecore edbus"
PV = "0.0.0+svnr${SRCPV}"
-PR = "r3"
+PR = "r4"
RDEPENDS = "initscripts"
SRCNAME = "ompower"
diff --git a/recipes/openmoko2/openmoko-alsa-scenarios.bb b/recipes/openmoko2/openmoko-alsa-scenarios.bb
index 39a9fcfec0..72edfef1d1 100644
--- a/recipes/openmoko2/openmoko-alsa-scenarios.bb
+++ b/recipes/openmoko2/openmoko-alsa-scenarios.bb
@@ -7,6 +7,7 @@ PROVIDES = "virtual/alsa-scenarios"
COMPATIBLE_MACHINE = "(om-gta01|om-gta02)"
+SRC_URI = "svn://svn.openmoko.org/trunk/src/target/audio/;module=om-gta01;proto=http"
SRC_URI_${MACHINE_ARCH} = "svn://svn.openmoko.org/trunk/src/target/audio/;module=${MACHINE_ARCH};proto=http"
S = "${WORKDIR}/${MACHINE_ARCH}"
diff --git a/recipes/opkg/opkg-native_svn.bb b/recipes/opkg/opkg-native_svn.bb
index 1de472e156..e5fdfd027f 100644
--- a/recipes/opkg/opkg-native_svn.bb
+++ b/recipes/opkg/opkg-native_svn.bb
@@ -2,6 +2,7 @@ require opkg.inc
DEPENDS = "curl-native"
PR = "${INC_PR}"
+PROVIDES =+ "virtual/update-alternatives-native"
SRC_URI += "file://opkg-libdir.patch;patch=1;maxrev=342"
diff --git a/recipes/opkg/opkg-nogpg-nocurl-slugos_svn.bb b/recipes/opkg/opkg-nogpg-nocurl-slugos_svn.bb
new file mode 100644
index 0000000000..5491a28914
--- /dev/null
+++ b/recipes/opkg/opkg-nogpg-nocurl-slugos_svn.bb
@@ -0,0 +1,62 @@
+# This recipe is a regeneration of the original opkg-nogpg-nocurl_svn.bb
+# recipe, intended for temporary use by the SlugOS distro.
+
+# DO NOT USE this recipe for anything other than SlugOS and svn version 160
+# of the opkg sources. Also note that This recipe will be removed without
+# notice when the unfortunate commits to the original opkg-nogpg-nocurl_svn.bb
+# recipe are repaired, the small-memory patches updated to a newer opkg svn
+# version, and appropriate testing confirms that the resulting binary actually
+# works correctly on a 32MB system.
+
+# DO NOT CHANGE THIS RECIPE!
+
+require opkg.inc
+
+DEPENDS = ""
+PROVIDES += "opkg"
+
+SRC_URI += " \
+ file://isatty.patch;patch=1 \
+ file://opkg_wget.patch;patch=1;maxrev=180 \
+ file://reduce-nogpg-noise.patch;patch=1;maxrev=180 \
+ file://opkg_wget_nogpg_01_use_vfork_gunzip.patch;patch=1 \
+ file://opkg_wget_nogpg_02_use_vfork_system.patch;patch=1 \
+ file://opkg_wget_nogpg_03_fix_tmpdirs.patch;patch=1 \
+ file://opkg_wget_nogpg_04_default_tmpdir.patch;patch=1 \
+ "
+PR = "${INC_PR}"
+
+SRCREV = "${SRCREV_pn-opkg}"
+
+EXTRA_OECONF += "--disable-gpg --enable-static --disable-shared"
+
+# Not sure this is needed; needs to be investigated and removed if not
+do_stage() {
+ autotools_stage_all
+}
+
+# The nogpg version isn't getting much love and has an unused variable which trips up -Werror
+do_configure_prepend() {
+ sed -i -e s:-Werror::g ${S}/libopkg/Makefile.am
+}
+
+PACKAGES =+ "libopkg-dev"
+
+FILES_libopkg-dev = "${libdir}/*.a ${libdir}/*.la ${libdir}/*.so"
+# not happens automatically for opkg-nogpg:
+FILES_${PN} += "${datadir}/opkg/intercept"
+
+# Define a variable to allow distros to run configure earlier.
+# (for example, to enable loading of ethernet kernel modules before networking starts)
+OPKG_INIT_POSITION = "98"
+OPKG_INIT_POSITION_slugos = "41"
+
+pkg_postinst_${PN} () {
+ update-alternatives --install ${bindir}/opkg opkg ${bindir}/opkg-cl 100
+}
+
+pkg_postrm_${PN} () {
+ update-alternatives --remove opkg ${bindir}/opkg-cl
+}
+
+DEFAULT_PREFERENCE = "-1"
diff --git a/recipes/opkg/opkg.inc b/recipes/opkg/opkg.inc
index d31733d714..1716034429 100644
--- a/recipes/opkg/opkg.inc
+++ b/recipes/opkg/opkg.inc
@@ -4,14 +4,13 @@ SECTION = "base"
LICENSE = "GPL"
DEPENDS = "curl gpgme"
PV = "0.1.6+svnr${SRCPV}"
-INC_PR = "r17"
+INC_PR = "r18"
FILESPATHPKG =. "opkg:"
SRC_URI = "svn://opkg.googlecode.com/svn;module=trunk;proto=http \
file://opkg_unarchive.patch;patch=1;maxrev=201 \
file://opkg-intercept-cleanup.patch;patch=1;maxrev=241 \
- file://dont-install-update-alternatives.patch;patch=1 \
"
SRC_URI += "file://configure"
diff --git a/recipes/opkg/opkg/dont-install-update-alternatives.patch b/recipes/opkg/opkg/dont-install-update-alternatives.patch
deleted file mode 100644
index 4ab7707606..0000000000
--- a/recipes/opkg/opkg/dont-install-update-alternatives.patch
+++ /dev/null
@@ -1,6 +0,0 @@
-diff -uNr trunk.orig/utils/Makefile.am trunk/utils/Makefile.am
---- trunk.orig/utils/Makefile.am 2009-10-24 00:55:25.000000000 +0200
-+++ trunk/utils/Makefile.am 2009-11-11 16:56:00.000000000 +0100
-@@ -1 +1 @@
--bin_SCRIPTS = update-alternatives opkg-key
-+bin_SCRIPTS = opkg-key
diff --git a/recipes/opkg/opkg_svn.bb b/recipes/opkg/opkg_svn.bb
index 57b2774b65..44c0baf880 100644
--- a/recipes/opkg/opkg_svn.bb
+++ b/recipes/opkg/opkg_svn.bb
@@ -4,6 +4,8 @@ DEPENDS_append = " openssl"
PR = "${INC_PR}"
+PROVIDES =+ "virtual/update-alternatives"
+RPROVIDES_${PN} = "update-alternatives"
PACKAGES =+ "libopkg-dev libopkg"
FILES_libopkg-dev = "${libdir}/*.a ${libdir}/*.la ${libdir}/*.so"
diff --git a/recipes/php/php-5.2.11/acinclude-xml2-config.patch b/recipes/php/php-5.2.11/acinclude-xml2-config.patch
new file mode 100644
index 0000000000..bf519d2934
--- /dev/null
+++ b/recipes/php/php-5.2.11/acinclude-xml2-config.patch
@@ -0,0 +1,18 @@
+--- /orig-acinclude.m4 2007-02-20 15:03:25.000000000 +0200
++++ /acinclude.m4 2007-02-20 15:03:24.000000000 +0200
+@@ -2359,12 +2359,9 @@
+ AC_DEFUN([PHP_SETUP_LIBXML], [
+ AC_CACHE_CHECK([for xml2-config path], ac_cv_php_xml2_config_path,
+ [
+- for i in $PHP_LIBXML_DIR /usr/local /usr; do
+- if test -x "$i/bin/xml2-config"; then
+- ac_cv_php_xml2_config_path="$i/bin/xml2-config"
+- break
+- fi
+- done
++
++ ac_cv_php_xml2_config_path="$PHP_LIBXML_DIR/xml2-config"
++
+ ])
+
+ if test -x "$ac_cv_php_xml2_config_path"; then
diff --git a/recipes/php/php-5.2.11/imap-fix-autofoo.patch b/recipes/php/php-5.2.11/imap-fix-autofoo.patch
new file mode 100644
index 0000000000..3695b7bc42
--- /dev/null
+++ b/recipes/php/php-5.2.11/imap-fix-autofoo.patch
@@ -0,0 +1,41 @@
+Index: php-5.2.11/ext/imap/config.m4
+===================================================================
+--- php-5.2.11.orig/ext/imap/config.m4 2009-12-10 12:27:52.800974533 -0700
++++ php-5.2.11/ext/imap/config.m4 2009-12-10 12:28:33.720976583 -0700
+@@ -103,7 +103,7 @@
+ PHP_NEW_EXTENSION(imap, php_imap.c, $ext_shared)
+ AC_DEFINE(HAVE_IMAP,1,[ ])
+
+- for i in $PHP_IMAP /usr/local /usr; do
++ for i in $PHP_IMAP $PHP_IMAP/usr /usr/local /usr; do
+ IMAP_INC_CHK()
+ el[]IMAP_INC_CHK(/include/c-client)
+ el[]IMAP_INC_CHK(/include/imap)
+@@ -192,13 +192,7 @@
+ AC_MSG_ERROR(Cannot find rfc822.h. Please check your c-client installation.)
+ fi
+
+- if test -r "$IMAP_DIR/c-client/c-client.a"; then
+- ln -s "$IMAP_DIR/c-client/c-client.a" "$IMAP_DIR/c-client/libc-client.a" >/dev/null 2>&1
+- elif test -r "$IMAP_DIR/$PHP_LIBDIR/c-client.a"; then
+- ln -s "$IMAP_DIR/$PHP_LIBDIR/c-client.a" "$IMAP_DIR/$PHP_LIBDIR/libc-client.a" >/dev/null 2>&1
+- fi
+-
+- for lib in c-client4 c-client imap; do
++ for lib in /usr/lib c-client4 c-client imap; do
+ IMAP_LIB=$lib
+ IMAP_LIB_CHK($PHP_LIBDIR)
+ IMAP_LIB_CHK(c-client)
+Index: php-5.2.11/acinclude.m4
+===================================================================
+--- php-5.2.11.orig/acinclude.m4 2009-12-10 12:37:13.134722881 -0700
++++ php-5.2.11/acinclude.m4 2009-12-10 12:37:39.342007053 -0700
+@@ -2338,7 +2338,7 @@
+ PHP_OPENSSL_DIR="/usr/local/ssl /usr/local /usr /usr/local/openssl"
+ fi
+
+- for i in $PHP_OPENSSL_DIR; do
++ for i in $PHP_OPENSSL_DIR $PHP_OPENSSL_DIR/usr; do
+ if test -r $i/include/openssl/evp.h; then
+ OPENSSL_INCDIR=$i/include
+ fi
diff --git a/recipes/php/php-5.2.11/pear-makefile.patch b/recipes/php/php-5.2.11/pear-makefile.patch
new file mode 100644
index 0000000000..487f507a02
--- /dev/null
+++ b/recipes/php/php-5.2.11/pear-makefile.patch
@@ -0,0 +1,13 @@
+Index: php-5.2.11/pear/Makefile.frag
+===================================================================
+--- php-5.2.11.orig/pear/Makefile.frag 2009-08-02 13:11:15.000000000 -0600
++++ php-5.2.11/pear/Makefile.frag 2009-12-09 16:13:38.700972014 -0700
+@@ -11,7 +11,7 @@
+ PEAR_SUFFIX = -ds a$(program_suffix)
+
+ install-pear-installer: $(SAPI_CLI_PATH)
+- @$(top_builddir)/sapi/cli/php $(PEAR_INSTALL_FLAGS) pear/install-pear-nozlib.phar -d "$(peardir)" -b "$(bindir)" ${PEAR_PREFIX} ${PEAR_SUFFIX}
++ @$(PHP_NATIVE_DIR)/php $(PEAR_INSTALL_FLAGS) pear/install-pear-nozlib.phar -d "$(peardir)" -b "$(bindir)" ${PEAR_PREFIX} ${PEAR_SUFFIX}
+
+ install-pear:
+ @echo "Installing PEAR environment: $(INSTALL_ROOT)$(peardir)/"
diff --git a/recipes/php/php_5.2.11.bb b/recipes/php/php_5.2.11.bb
new file mode 100644
index 0000000000..5b4871cbc7
--- /dev/null
+++ b/recipes/php/php_5.2.11.bb
@@ -0,0 +1,94 @@
+require php.inc
+
+DEPENDS = "zlib libxml2 virtual/libiconv php-native lemon-native mysql5 \
+ libc-client openssl"
+
+PR = "r4"
+
+SRC_URI += "file://pear-makefile.patch;patch=1 \
+ file://imap-fix-autofoo.patch;patch=1 \
+ "
+export THREADS="pthread"
+export LIBS=" -lpthread "
+
+EXTRA_OECONF = " --without-iconv \
+ --enable-mbstring \
+ --enable-discard-path \
+ --enable-sockets \
+ --enable-shared \
+ --enable-pcntl \
+ --enable-memory-limit \
+ --enable-wddx \
+ --disable-embedded-mysqli \
+ --enable-magic-quotes \
+ --enable-fastcgi \
+ --with-imap=${STAGING_DIR_HOST} \
+ --with-imap-ssl=${STAGING_DIR_HOST} \
+ --with-zlib --with-zlib-dir=${STAGING_LIBDIR}/.. \
+ --with-libxml-dir=${STAGING_BINDIR_CROSS} \
+ --with-mysql="${STAGING_DIR_TARGET}${layout_exec_prefix}" \
+ --with-mysqli="${STAGING_BINDIR_CROSS}/mysql_config" \
+ --with-pdo-mysql="${STAGING_BINDIR_CROSS}/mysql_config" \
+ --without-pdo-sqlite \
+ "
+
+export LD_LIBRARY_PATH = "${STAGING_LIBDIR}"
+export PHP_NATIVE_DIR = "${STAGING_BINDIR_NATIVE}"
+export PHP_PEAR_PHP_BIN = "${bindir}/php"
+
+#LDFLAGS += "-lstdc++"
+
+do_configure_append() {
+ find ${S} -type f | xargs sed -i 's:I/usr/include:I${STAGING_INCDIR}:g'
+}
+
+# fixme
+do_install_append() {
+ mv ${D}/${STAGING_DIR_NATIVE}/${sysconfdir} ${D}/${sysconfdir}
+ rm -rf ${D}/${STAGING_DIR_NATIVE}
+ rm -rf ${D}/.registry
+ rm -rf ${D}/.channels
+ rm -rf ${D}/.[a-z]*
+}
+
+PACKAGES = "${PN}-dbg \
+ ${PN}-cli \
+ ${PN}-cgi \
+ ${PN}-pear \
+ ${PN}-dev \
+ ${PN}-doc \
+ ${PN} \
+"
+
+
+FILES_${PN}-dbg =+ "${bindir}/.debug"
+
+FILES_${PN}-doc += "${libdir}/php/doc"
+
+FILES_${PN}-cli = "${bindir}/php"
+FILES_${PN}-cgi = "${bindir}/php-cgi"
+
+FILES_${PN}-pear = "${bindir}/pear* ${bindir}/pecl \
+ ${libdir}/php/PEAR \
+ ${libdir}/php/PEAR.php \
+ ${libdir}/php/System.php ${libdir}php/peclcmd.php ${libdir}/php/pearcmd.php \
+ ${libdir}/php/.channels ${libdir}/php/.channels/.alias \
+ ${libdir}/php/.channels\__uri.reg \
+ ${libdir}/php/.channels\pear.php.net.reg ${libdir}/php/.channels/pecl.php.net.reg \
+ ${libdir}/php/.registry \
+ ${libdir}/php/Archive/Tar.php \
+ ${libdir}/php/Console/Getopt.php ${libdir}/php/OS/Guess.php \
+ ${sysconfdir}/pear.conf"
+
+
+FILES_${PN}-dev = "${includedir}/php ${libdir}/build \
+ ${bindir}/phpize ${bindir}/php-config \
+ ${libdir}/php/.depdb ${libdir}/php/.depdblock ${libdir}/php/.filemap ${libdir}/php/.lock \
+ ${libdir}/php/test "
+
+FILES_${PN} = "${libdir}/php"
+FILES_${PN} += "${bindir}"
+
+RDEPENDS_${PN}-pear = ${PN}
+RDEPENDS_${PN}-cli = ${PN}
+RDEPENDS_${PN}-dev = ${PN}
diff --git a/recipes/php/php_5.2.6.bb b/recipes/php/php_5.2.6.bb
index 0d9e1f42a5..8723a1e14f 100644
--- a/recipes/php/php_5.2.6.bb
+++ b/recipes/php/php_5.2.6.bb
@@ -1,8 +1,8 @@
require php.inc
-DEPENDS = "zlib libxml2 virtual/libiconv php-native lemon-native"
+DEPENDS = "zlib libxml2 virtual/libiconv php-native lemon-native mysql"
-PR = "r6"
+PR = "r7"
SRC_URI += "file://pear-makefile.patch;patch=1 \
file://string.c.patch;patch=1 "
@@ -24,6 +24,7 @@ EXTRA_OECONF = " --without-iconv \
--with-libxml-dir=${STAGING_BINDIR_CROSS} \
--with-mysql="${STAGING_DIR_TARGET}${layout_exec_prefix}" \
# --with-mysqli = "${STAGING_BINDIR_NATIVE}/mysql_config" \
+ --without-pdo-sqlite \
"
export LD_LIBRARY_PATH = "${STAGING_LIBDIR}"
diff --git a/recipes/poptop/poptop_1.3.4.bb b/recipes/poptop/poptop_1.3.4.bb
index 5c6a71bb2e..370f6a30ec 100644
--- a/recipes/poptop/poptop_1.3.4.bb
+++ b/recipes/poptop/poptop_1.3.4.bb
@@ -38,4 +38,4 @@ CONFFILES_${PN} = "${sysconfdir}/pptpd.conf \
${sysconfdir}/ppp/options.pptpd"
INITSCRIPT_NAME = "pptpd"
-INITSCRIPT_PARAMS = "defaults 92 08"
+INITSCRIPT_PARAMS = "defaults 92 8"
diff --git a/recipes/powervr-drivers/libgles-omap3.inc b/recipes/powervr-drivers/libgles-omap3.inc
index 208da9e052..360cb7790e 100644
--- a/recipes/powervr-drivers/libgles-omap3.inc
+++ b/recipes/powervr-drivers/libgles-omap3.inc
@@ -1,6 +1,7 @@
DESCRIPTION = "libGLES for the omap3"
LICENCE = "proprietary-binary"
+COMPATIBLE_MACHINE = "(am3517-evm|beagleboard|cm-t35|igep0020|omap3-pandora|omap3-touchbook|omap3evm|omapzoom|omapzoom2|overo|palmpre)"
RDEPENDS_${PN} += "devmem2"
#HACK! These are binaries, so we can't guarantee that LDFLAGS match :(
@@ -48,6 +49,9 @@ SRC_URI = "file://OMAP35x_Graphics_SDK_setuplinux_${SGXPV}.bin \
S = "${WORKDIR}/OMAP35x_Graphics_SDK_${SGXPV}"
+TI_BIN_UNPK_CMDS="Y: qY:workdir:Y"
+require ../ti/ti-eula-unpack.inc
+
BINLOCATION ?= "${S}/gfx_rel"
PACKAGES += " xserver-kdrive-powervrsgx ${PN}-tests ${PN}-demos"
@@ -69,7 +73,6 @@ inherit update-rc.d
INITSCRIPT_NAME = "pvr-init"
INITSCRIPT_PARAMS = "start 30 5 2 . stop 40 0 1 6 ."
-require ../ti/ti-dspbios.inc
do_compile() {
for sofile in $(find ${S} -name "lib*Open*.so") $(find ${S} -name "lib*srv*.so") $(find ${S} -name "lib*gl*.so") $(find ${S} -name "libpvr*.so") $(find ${S} -name "lib*GL*.so"); do
diff --git a/recipes/powervr-drivers/omap3-sgx-modules_1.4.14.2514.bb b/recipes/powervr-drivers/omap3-sgx-modules_1.4.14.2514.bb
index 9da9a478f8..a2c4d32aeb 100644
--- a/recipes/powervr-drivers/omap3-sgx-modules_1.4.14.2514.bb
+++ b/recipes/powervr-drivers/omap3-sgx-modules_1.4.14.2514.bb
@@ -3,11 +3,13 @@ LICENSE = "GPLv2"
DEFAULT_PREFERENCE = "-1"
-require ../ti/ti-dspbios.inc
# download required binary distribution from:
# http://software-dl.ti.com/dsps/forms/export.html?prod_no=/OMAP35x_Graphics_SDK_setuplinux_3_01_00_02.bin
+TI_BIN_UNPK_CMDS="Y: qY:workdir:Y"
+require ../ti/ti-eula-unpack.inc
+
SGXPV = "3_01_00_02"
IMGPV = "1.4.14.2514"
BINFILE := "OMAP35x_Graphics_SDK_setuplinux_${SGXPV}.bin"
diff --git a/recipes/prelink/prelink_20090925.bb b/recipes/prelink/prelink_20090925.bb
new file mode 100644
index 0000000000..49b319cc78
--- /dev/null
+++ b/recipes/prelink/prelink_20090925.bb
@@ -0,0 +1,48 @@
+SECTION = "devel"
+DEPENDS = "elfutils"
+DESCRIPTION = " The prelink package contains a utility which modifies ELF shared libraries \
+and executables, so that far fewer relocations need to be resolved at \
+runtime and thus programs come up faster."
+LICENSE = "GPL"
+
+SRC_URI = "${DEBIAN_MIRROR}/main/p/prelink/prelink_0.0.${PV}.orig.tar.gz \
+ file://prelink.conf \
+ file://prelink.cron.daily \
+ file://prelink.default"
+
+#TARGET_OS_ORIG := "${TARGET_OS}"
+#OVERRIDES_append = ":${TARGET_OS_ORIG}"
+#SRC_URI_append_linux-gnueabi = " file://arm_eabi.patch;patch=1"
+
+S = "${WORKDIR}/prelink-0.0.${PV}"
+
+EXTRA_OECONF = "--disable-64bit"
+
+inherit autotools
+
+do_install_append () {
+ install -d ${D}${sysconfdir}/cron.daily ${D}${sysconfdir}/default
+ install -m 0644 ${WORKDIR}/prelink.conf ${D}${sysconfdir}/prelink.conf
+ install -m 0644 ${WORKDIR}/prelink.cron.daily ${D}${sysconfdir}/cron.daily/prelink
+ install -m 0644 ${WORKDIR}/prelink.default ${D}${sysconfdir}/default/prelink
+}
+
+pkg_postinst_prelink() {
+#!/bin/sh
+
+if [ "x$D" != "x" ]; then
+ exit 1
+fi
+
+. ${sysconfdir}/cron.daily/prelink
+}
+
+pkg_prerm_prelink() {
+#!/bin/sh
+
+if [ -f ${sysconfdir}/prelink.cache ]; then
+ prelink -au
+ rm -f ${sysconfdir}/prelink.cache
+fi
+}
+
diff --git a/recipes/qt4/qt-4.6.0.inc b/recipes/qt4/qt-4.6.0.inc
new file mode 100644
index 0000000000..b29b708d74
--- /dev/null
+++ b/recipes/qt4/qt-4.6.0.inc
@@ -0,0 +1,46 @@
+DEFAULT_PREFERENCE = "-1"
+
+SRC_URI = "ftp://ftp.trolltech.com/qt/source/qt-everywhere-opensource-src-${PV}.tar.gz \
+ file://0001-cross-compile.patch;patch=1 \
+ file://0002-fix-resinit-declaration.patch;patch=1 \
+ file://0004-no-qmake.patch;patch=1 \
+ file://0006-freetype-host-includes.patch;patch=1 \
+ file://0008-qt-lib-infix.patch;patch=1 \
+ file://0009-support-2bpp.patch;patch=1 \
+ file://0010-no-simpledecoration-example.patch;patch=1 \
+ file://fix-config-tests.patch;patch=1 \
+ file://g++.conf \
+ file://linux.conf \
+ "
+S = "${WORKDIR}/qt-everywhere-opensource-src-${PV}"
+
+do_configure_prepend() {
+ sed -i s:SEDME:${S}: ${WORKDIR}/linux.conf
+ sed -i \
+ -e /QMAKE_MOC\ /d \
+ -e /QMAKE_UIC\ /d \
+ -e /QMAKE_UIC3\ /d \
+ -e /QMAKE_RCC\ /d \
+ ${S}/configure
+
+# sed -i /tools.pro/d ${S}/src/src.pro
+}
+
+QT_GLFLAGS ?= ""
+QT_CONFIG_FLAGS += "${QT_GLFLAGS}"
+
+do_compile() {
+ unset CFLAGS CXXFLAGS
+ oe_runmake ${EXTRA_ENV}
+}
+
+do_install_append() {
+ install -d ${D}${bindir}
+ for i in rcc uic moc ; do
+ install -m 0755 ${S}/bin/$i ${D}${bindir}/
+ done
+}
+
+LICENSE = "LGPLv2.1 GPLv3"
+SRC_URI += " \
+ file://hack-out-pg_config.patch;patch=1"
diff --git a/recipes/qt4/qt4-embedded-4.6.0/0010-no-simpledecoration-example.patch b/recipes/qt4/qt4-embedded-4.6.0/0010-no-simpledecoration-example.patch
index 070b4ac9c1..fce5bba938 100644
--- a/recipes/qt4/qt4-embedded-4.6.0/0010-no-simpledecoration-example.patch
+++ b/recipes/qt4/qt4-embedded-4.6.0/0010-no-simpledecoration-example.patch
@@ -1,9 +1,11 @@
---- qt-embedded-linux-opensource-src-4.5.0.orig/examples/qws/qws.pro 2009-02-25 22:32:34.000000000 +0100
-+++ qt-embedded-linux-opensource-src-4.5.0/examples/qws/qws.pro 2009-03-26 19:53:19.000000000 +0100
-@@ -1,5 +1,5 @@
+--- /tmp/qws.pro 2009-12-10 19:30:08.000000000 +0100
++++ qt-everywhere-opensource-src-4.6.0/examples/qws/qws.pro 2009-12-10 19:30:21.000000000 +0100
+@@ -1,7 +1,7 @@
TEMPLATE = subdirs
--SUBDIRS = framebuffer mousecalibration simpledecoration
-+SUBDIRS = framebuffer mousecalibration
+ # no /dev/fbX
+ !qnx:!vxworks:SUBDIRS = framebuffer
+-SUBDIRS += mousecalibration simpledecoration
++SUBDIRS += mousecalibration
# install
sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS README *.pro
diff --git a/recipes/qt4/qt4-embedded-4.6.0/linux.conf b/recipes/qt4/qt4-embedded-4.6.0/linux.conf
index 2e862407bc..68ae80b929 100644
--- a/recipes/qt4/qt4-embedded-4.6.0/linux.conf
+++ b/recipes/qt4/qt4-embedded-4.6.0/linux.conf
@@ -15,7 +15,7 @@ QMAKE_INCDIR_OPENGL =
QMAKE_LIBDIR_OPENGL =
-QMAKE_LIBS = -lglib-2.0
+QMAKE_LIBS = -Wl,-rpath-link,SEDME/lib -lglib-2.0
QMAKE_LIBS_DYNLOAD = -ldl
QMAKE_LIBS_X11 = $(OE_QMAKE_LIBS_X11)
QMAKE_LIBS_X11SM = $(OE_QMAKE_LIBS_X11SM)
diff --git a/recipes/qt4/qt4-embedded-gles/linux.conf b/recipes/qt4/qt4-embedded-gles/linux.conf
new file mode 100644
index 0000000000..a530c75913
--- /dev/null
+++ b/recipes/qt4/qt4-embedded-gles/linux.conf
@@ -0,0 +1,63 @@
+#
+# qmake configuration for common linux
+#
+
+QMAKE_CFLAGS_THREAD += -D_REENTRANT
+QMAKE_CXXFLAGS_THREAD += $$QMAKE_CFLAGS_THREAD
+
+QMAKE_INCDIR =
+QMAKE_LIBDIR =
+QMAKE_INCDIR_X11 =
+QMAKE_LIBDIR_X11 =
+QMAKE_INCDIR_QT = $(OE_QMAKE_INCDIR_QT)
+QMAKE_LIBDIR_QT = $(OE_QMAKE_LIBDIR_QT)
+QMAKE_INCDIR_EGL = ${STAGING_INCDIR}/GLES2
+QMAKE_INCDIR_OPENGL = ${STAGING_INCDIR}/GLES2
+QMAKE_INCDIR_OPENGL_ES2 = ${STAGING_INCDIR}/GLES2
+QMAKE_LIBDIR_EGL = ${STAGING_LIBDIR}
+QMAKE_LIBDIR_OPENGL = ${STAGING_LIBDIR}
+QMAKE_LIBDIR_OPENGL_ES2 = ${STAGING_LIBDIR}
+
+QMAKE_LIBS = -Wl,-rpath-link,SEDME/lib -lglib-2.0
+QMAKE_LIBS_DYNLOAD = -ldl
+QMAKE_LIBS_X11 = $(OE_QMAKE_LIBS_X11)
+QMAKE_LIBS_X11SM = $(OE_QMAKE_LIBS_X11SM)
+QMAKE_LIBS_NIS = -lnsl
+QMAKE_LIBS_EGL = -lEGL -lIMGegl -lsrv_um
+QMAKE_LIBS_OPENGL_QT = -lEGL -lGLESv2 -lGLES_CM -lIMGegl -lsrv_um
+QMAKE_LIBS_OPENVG = -lEGL -lGLESv2 -lGLES_CM -lIMGegl -lsrv_um -lOpenVG -lOpenVGU
+QMAKE_LIBS_OPENGL_ES2 = -lEGL -lGLESv2 -lGLES_CM -lIMGegl -lsrv_um
+
+QMAKE_LIBS_THREAD = -lpthread
+
+QMAKE_MOC = $(OE_QMAKE_MOC)
+QMAKE_UIC = $(OE_QMAKE_UIC)
+QMAKE_UIC3 = $(OE_QMAKE_UIC3)
+QMAKE_RCC = $(OE_QMAKE_RCC)
+QMAKE_QDBUSCPP2XML = $(OE_QMAKE_QDBUSCPP2XML)
+QMAKE_QDBUSXML2CPP = $(OE_QMAKE_QDBUSXML2CPP)
+
+QMAKE_AR = $(OE_QMAKE_AR) cqs
+QMAKE_OBJCOPY = ${OBJCOPY}
+QMAKE_RANLIB =
+
+QMAKE_TAR = tar -cf
+QMAKE_GZIP = gzip -9f
+
+QMAKE_COPY = cp -f
+QMAKE_COPY_FILE = $(COPY)
+QMAKE_COPY_DIR = $(COPY) -r
+QMAKE_MOVE = mv -f
+QMAKE_DEL_FILE = rm -f
+QMAKE_DEL_DIR = rmdir
+QMAKE_STRIP = $(OE_QMAKE_STRIP)
+QMAKE_STRIPFLAGS_LIB += --strip-unneeded
+QMAKE_CHK_DIR_EXISTS = test -d
+QMAKE_MKDIR = mkdir -p
+QMAKE_INSTALL_FILE = install -m 644 -p
+QMAKE_INSTALL_PROGRAM = install -m 755 -p
+
+#These defines are documented in the powervr README, please read it
+DEFINES += QT_QWS_CLIENTBLIT QT_NO_QWS_CURSOR
+
+include(unix.conf)
diff --git a/recipes/qt4/qt4-embedded-gles_4.6.0.bb b/recipes/qt4/qt4-embedded-gles_4.6.0.bb
new file mode 100644
index 0000000000..f819c66212
--- /dev/null
+++ b/recipes/qt4/qt4-embedded-gles_4.6.0.bb
@@ -0,0 +1,13 @@
+require qt4-embedded.inc
+PR = "${INC_PR}.0"
+
+QT_GLFLAGS = "-opengl es2 -openvg"
+
+require qt-4.6.0.inc
+
+
+FILESPATHPKG .= ":qt4-embedded-${PV}:qt4-embedded"
+
+DEPENDS += "virtual/egl"
+
+
diff --git a/recipes/qt4/qt4-embedded_4.6.0.bb b/recipes/qt4/qt4-embedded_4.6.0.bb
index 1bdca87a0d..58fda71ad1 100644
--- a/recipes/qt4/qt4-embedded_4.6.0.bb
+++ b/recipes/qt4/qt4-embedded_4.6.0.bb
@@ -1,38 +1,6 @@
-DEFAULT_PREFERENCE = "-1"
-
require qt4-embedded.inc
PR = "${INC_PR}.0"
-SRC_URI = "ftp://ftp.trolltech.com/qt/source/qt-everywhere-opensource-src-${PV}.tar.gz \
- file://0001-cross-compile.patch;patch=1 \
- file://0002-fix-resinit-declaration.patch;patch=1 \
- file://0004-no-qmake.patch;patch=1 \
- file://0006-freetype-host-includes.patch;patch=1 \
- file://0008-qt-lib-infix.patch;patch=1 \
- file://0009-support-2bpp.patch;patch=1 \
- file://fix-config-tests.patch;patch=1 \
- file://g++.conf \
- file://linux.conf \
- "
-S = "${WORKDIR}/qt-everywhere-opensource-src-${PV}"
-
-do_configure_prepend() {
- sed -i \
- -e /QMAKE_MOC\ /d \
- -e /QMAKE_UIC\ /d \
- -e /QMAKE_UIC3\ /d \
- -e /QMAKE_RCC\ /d \
- ${S}/configure
-}
-
-do_install_append() {
- install -d ${D}${bindir}
- for i in rcc uic moc ; do
- install -m 0755 ${S}/bin/$i ${D}${bindir}/
- done
-}
+require qt-4.6.0.inc
-LICENSE = "LGPLv2.1 GPLv3"
-SRC_URI += " \
- file://hack-out-pg_config.patch;patch=1"
diff --git a/recipes/qt4/qt4-tools-sdk_4.6.0.bb b/recipes/qt4/qt4-tools-sdk_4.6.0.bb
new file mode 100644
index 0000000000..b74b8a27e0
--- /dev/null
+++ b/recipes/qt4/qt4-tools-sdk_4.6.0.bb
@@ -0,0 +1,74 @@
+DESCRIPTION = "SDK tools for Qt/[X11|Mac|Embedded] version 4.x"
+DEPENDS = "zlib-native dbus-native"
+SECTION = "libs"
+HOMEPAGE = "http://www.trolltech.com"
+PRIORITY = "optional"
+LICENSE = "LGPLv2.1 GPLv3"
+
+DEFAULT_PREFERENCE = "-1"
+inherit sdk
+
+SRC_URI = "ftp://ftp.trolltech.com/qt/source/qt-everywhere-opensource-src-${PV}.tar.gz \
+ file://configure-lflags.patch;patch=1 \
+ file://qt-config.patch;patch=1 \
+ file://g++.conf \
+ file://linux.conf"
+
+S = "${WORKDIR}/qt-everywhere-opensource-src-${PV}"
+
+
+# FIXME: make it work with "${STAGING_BINDIR_NATIVE}/pkg-config --cflags dbus-1"
+EXTRA_OECONF = "-prefix ${prefix} \
+ -qt-libjpeg -qt-gif -system-zlib \
+ -no-libjpeg -no-libpng \
+ -no-accessibility \
+ -no-cups \
+ -no-exceptions \
+ -no-nas-sound \
+ -no-nis \
+ -verbose -release -fast -static \
+ -qt3support \
+ -I${STAGING_DIR_NATIVE}/usr/include \
+ -I${STAGING_DIR_NATIVE}/usr/include/dbus-1.0 \
+ -I${STAGING_DIR_NATIVE}/usr/lib/dbus-1.0/include"
+
+# yank default -e, otherwise we get the following error:
+# moc_qbuffer.cpp: No such file or directory
+EXTRA_OEMAKE = " "
+
+do_configure() {
+ (echo o; echo yes) | ./configure ${EXTRA_OECONF} || die "Configuring qt failed. EXTRA_OECONF was ${EXTRA_OECONF}"
+}
+
+TOBUILD = "\
+ src/tools/bootstrap \
+ src/tools/moc \
+ src/corelib \
+ src/sql \
+ src/dbus \
+ src/qt3support \
+ src/xml \
+ src/tools/uic \
+ src/tools/rcc \
+ src/network \
+ src/gui \
+ src/tools/uic3 \
+ tools/linguist/lrelease \
+ tools/linguist/lupdate \
+ tools/qdbus \
+"
+
+do_compile() {
+ for i in ${TOBUILD}; do
+ cd ${S}/$i && oe_runmake CC="${CC}" CXX="${CXX}"
+ done
+}
+
+do_install() {
+ install -d ${D}${bindir}
+ install -m 0755 bin/qmake ${D}${bindir}/qmake2
+ for i in moc uic uic3 rcc lrelease lupdate qdbuscpp2xml qdbusxml2cpp; do
+ install -m 0755 bin/${i} ${D}${bindir}/${i}4
+ done
+}
+
diff --git a/recipes/qt4/qt4-x11-free-4.6.0/0010-no-simpledecoration-example.patch b/recipes/qt4/qt4-x11-free-4.6.0/0010-no-simpledecoration-example.patch
new file mode 100644
index 0000000000..fce5bba938
--- /dev/null
+++ b/recipes/qt4/qt4-x11-free-4.6.0/0010-no-simpledecoration-example.patch
@@ -0,0 +1,11 @@
+--- /tmp/qws.pro 2009-12-10 19:30:08.000000000 +0100
++++ qt-everywhere-opensource-src-4.6.0/examples/qws/qws.pro 2009-12-10 19:30:21.000000000 +0100
+@@ -1,7 +1,7 @@
+ TEMPLATE = subdirs
+ # no /dev/fbX
+ !qnx:!vxworks:SUBDIRS = framebuffer
+-SUBDIRS += mousecalibration simpledecoration
++SUBDIRS += mousecalibration
+
+ # install
+ sources.files = $$SOURCES $$HEADERS $$RESOURCES $$FORMS README *.pro
diff --git a/recipes/qt4/qt4-x11-free-4.6.0/linux.conf b/recipes/qt4/qt4-x11-free-4.6.0/linux.conf
index 2e862407bc..68ae80b929 100644
--- a/recipes/qt4/qt4-x11-free-4.6.0/linux.conf
+++ b/recipes/qt4/qt4-x11-free-4.6.0/linux.conf
@@ -15,7 +15,7 @@ QMAKE_INCDIR_OPENGL =
QMAKE_LIBDIR_OPENGL =
-QMAKE_LIBS = -lglib-2.0
+QMAKE_LIBS = -Wl,-rpath-link,SEDME/lib -lglib-2.0
QMAKE_LIBS_DYNLOAD = -ldl
QMAKE_LIBS_X11 = $(OE_QMAKE_LIBS_X11)
QMAKE_LIBS_X11SM = $(OE_QMAKE_LIBS_X11SM)
diff --git a/recipes/qt4/qt4-x11-free-gles/linux.conf b/recipes/qt4/qt4-x11-free-gles/linux.conf
new file mode 100644
index 0000000000..b5741574b8
--- /dev/null
+++ b/recipes/qt4/qt4-x11-free-gles/linux.conf
@@ -0,0 +1,60 @@
+#
+# qmake configuration for common linux
+#
+
+QMAKE_CFLAGS_THREAD += -D_REENTRANT
+QMAKE_CXXFLAGS_THREAD += $$QMAKE_CFLAGS_THREAD
+
+QMAKE_INCDIR =
+QMAKE_LIBDIR =
+QMAKE_INCDIR_X11 =
+QMAKE_LIBDIR_X11 =
+QMAKE_INCDIR_QT = $(OE_QMAKE_INCDIR_QT)
+QMAKE_LIBDIR_QT = $(OE_QMAKE_LIBDIR_QT)
+QMAKE_INCDIR_EGL = ${STAGING_INCDIR}/GLES2
+QMAKE_INCDIR_OPENGL = ${STAGING_INCDIR}/GLES2
+QMAKE_INCDIR_OPENGL_ES2 = ${STAGING_INCDIR}/GLES2
+QMAKE_LIBDIR_EGL = ${STAGING_LIBDIR}
+QMAKE_LIBDIR_OPENGL = ${STAGING_LIBDIR}
+QMAKE_LIBDIR_OPENGL_ES2 = ${STAGING_LIBDIR}
+
+QMAKE_LIBS = -Wl,-rpath-link,SEDME/lib -lglib-2.0
+QMAKE_LIBS_DYNLOAD = -ldl
+QMAKE_LIBS_X11 = $(OE_QMAKE_LIBS_X11)
+QMAKE_LIBS_X11SM = $(OE_QMAKE_LIBS_X11SM)
+QMAKE_LIBS_NIS = -lnsl
+QMAKE_LIBS_EGL = -lEGL -lIMGegl -lsrv_um
+QMAKE_LIBS_OPENGL_QT = -lEGL -lGLESv2 -lGLES_CM -lIMGegl -lsrv_um
+QMAKE_LIBS_OPENVG = -lEGL -lGLESv2 -lGLES_CM -lIMGegl -lsrv_um -lOpenVG -lOpenVGU
+QMAKE_LIBS_OPENGL_ES2 = -lEGL -lGLESv2 -lGLES_CM -lIMGegl -lsrv_um
+
+QMAKE_LIBS_THREAD = -lpthread
+
+QMAKE_MOC = $(OE_QMAKE_MOC)
+QMAKE_UIC = $(OE_QMAKE_UIC)
+QMAKE_UIC3 = $(OE_QMAKE_UIC3)
+QMAKE_RCC = $(OE_QMAKE_RCC)
+QMAKE_QDBUSCPP2XML = $(OE_QMAKE_QDBUSCPP2XML)
+QMAKE_QDBUSXML2CPP = $(OE_QMAKE_QDBUSXML2CPP)
+
+QMAKE_AR = $(OE_QMAKE_AR) cqs
+QMAKE_OBJCOPY = ${OBJCOPY}
+QMAKE_RANLIB =
+
+QMAKE_TAR = tar -cf
+QMAKE_GZIP = gzip -9f
+
+QMAKE_COPY = cp -f
+QMAKE_COPY_FILE = $(COPY)
+QMAKE_COPY_DIR = $(COPY) -r
+QMAKE_MOVE = mv -f
+QMAKE_DEL_FILE = rm -f
+QMAKE_DEL_DIR = rmdir
+QMAKE_STRIP = $(OE_QMAKE_STRIP)
+QMAKE_STRIPFLAGS_LIB += --strip-unneeded
+QMAKE_CHK_DIR_EXISTS = test -d
+QMAKE_MKDIR = mkdir -p
+QMAKE_INSTALL_FILE = install -m 644 -p
+QMAKE_INSTALL_PROGRAM = install -m 755 -p
+
+include(unix.conf)
diff --git a/recipes/qt4/qt4-x11-free-gles_4.6.0.bb b/recipes/qt4/qt4-x11-free-gles_4.6.0.bb
new file mode 100644
index 0000000000..fcb935b8c7
--- /dev/null
+++ b/recipes/qt4/qt4-x11-free-gles_4.6.0.bb
@@ -0,0 +1,17 @@
+require qt4-x11-free.inc
+PR = "${INC_PR}.0"
+
+QT_GLFLAGS = "-opengl es2 -openvg"
+
+require qt-4.6.0.inc
+
+QT_CONFIG_FLAGS += " \
+ -no-embedded \
+ -xrandr \
+ -x11"
+
+FILESPATHPKG .= ":qt4-x11-free-${PV}:qt4-x11-free"
+
+DEPENDS += "virtual/egl"
+
+
diff --git a/recipes/qt4/qt4-x11-free_4.6.0.bb b/recipes/qt4/qt4-x11-free_4.6.0.bb
index 4b5eabff5c..80a25303bb 100644
--- a/recipes/qt4/qt4-x11-free_4.6.0.bb
+++ b/recipes/qt4/qt4-x11-free_4.6.0.bb
@@ -1,45 +1,11 @@
-DEFAULT_PREFERENCE = "-1"
-
require qt4-x11-free.inc
-LICENSE = "LGPLv2.1 GPLv3"
PR = "${INC_PR}.0"
-export MOC = "${OE_QMAKE_MOC}"
-export QMAKE_MOC = "${OE_QMAKE_MOC}"
-
-SRC_URI = "ftp://ftp.trolltech.com/qt/source/qt-everywhere-opensource-src-${PV}.tar.gz \
- file://0001-cross-compile.patch;patch=1 \
- file://0002-fix-resinit-declaration.patch;patch=1 \
- file://0004-no-qmake.patch;patch=1 \
- file://0006-freetype-host-includes.patch;patch=1 \
- file://0008-qt-lib-infix.patch;patch=1 \
- file://fix-config-tests.patch;patch=1 \
- file://g++.conf \
- file://linux.conf \
-"
-
-SRC_URI += "file://hack-out-pg_config.patch;patch=1"
-
-S = "${WORKDIR}/qt-everywhere-opensource-src-${PV}"
+require qt-4.6.0.inc
QT_CONFIG_FLAGS += " \
-no-embedded \
-xrandr \
-x11"
-do_configure_prepend() {
- sed -i \
- -e /QMAKE_MOC\ /d \
- -e /QMAKE_UIC\ /d \
- -e /QMAKE_UIC3\ /d \
- -e /QMAKE_RCC\ /d \
- ${S}/configure
-}
-
-do_install_append() {
- install -d ${D}${bindir}
- for i in rcc uic moc ; do
- install -m 0755 ${S}/bin/$i ${D}${bindir}/
- done
-}
diff --git a/recipes/qt4/qt4.inc b/recipes/qt4/qt4.inc
index 50dd1d8760..62fcec11a2 100644
--- a/recipes/qt4/qt4.inc
+++ b/recipes/qt4/qt4.inc
@@ -23,7 +23,7 @@ EXTRA_ENV = 'QMAKE="${STAGING_BINDIR_NATIVE}/qmake2 -after \
export QT_CONF_PATH="${WORKDIR}/qt.conf"
# Library packages
-QT_LIB_NAMES = "Qt3Support QtAssistantClient QtCLucene QtCore QtDBus QtDesigner QtDesignerComponents QtGui QtHelp QtNetwork QtOpenGL QtScript QtScriptTools QtSql QtSvg QtTest QtUiTools QtWebKit QtXml phonon"
+QT_LIB_NAMES = "Qt3Support QtAssistantClient QtCLucene QtCore QtDBus QtDesigner QtDesignerComponents QtGui QtHelp QtNetwork QtOpenGL QtScript QtScriptTools QtSql QtSvg QtTest QtUiTools QtWebKit QtXml phonon QtMultimedia QtOpenVG"
QT_EXTRA_LIBS = "pvrQWSWSEGL"
@@ -71,6 +71,7 @@ python __anonymous () {
}
OTHER_PACKAGES = "\
+ ${QT_BASE_NAME}-tools \
${QT_BASE_NAME}-assistant \
${QT_BASE_NAME}-common \
${QT_BASE_NAME}-dbus \
@@ -95,6 +96,7 @@ RRECOMMENDS_${PN} = "${LIB_PACKAGES} ${OTHER_PACKAGES}"
RRECOMMENDS_${PN}-dev = "${DEV_PACKAGES}"
RRECOMMENDS_${PN}-dbg = "${DBG_PACKAGES}"
+FILES_${QT_BASE_NAME}-tools = "${bindir}/uic* ${bindir}/moc ${bindir}/rcc ${bindir}/qttracereplay"
FILES_${QT_BASE_NAME}-assistant = "${bindir}/*assistant* ${bindir}/qcollectiongenerator ${bindir}/qhelpconverter ${bindir}/qhelpgenerator"
FILES_${QT_BASE_NAME}-assistant-dbg = "${bindir}/.debug/*assistant* ${bindir}/.debug/qcollectiongenerator ${bindir}/.debug/qhelpconverter ${bindir}/.debug/qhelpgenerator"
FILES_${QT_BASE_NAME}-common = "${bindir}/qtconfig"
@@ -243,6 +245,7 @@ do_install() {
-e s#-L${STAGING_LIBDIR}##g \
-e s#-L${libdir}##g \
-e s#'$(OE_QMAKE_LIBS_X11)'#"${OE_QMAKE_LIBS_X11}"#g \
+ -e s#"-Wl,-rpath-link,${S}/lib"##g \
${D}${libdir}/*.la ${D}${libdir}/*.prl ${D}${libdir}/pkgconfig/*.pc
# fix pkgconfig files
@@ -257,58 +260,4 @@ do_install() {
touch ${D}/${libdir}/fonts/fontdir
}
-STAGE_TEMP = "${WORKDIR}/temp-staging"
-do_stage() {
- rm -rf ${STAGE_TEMP}
- mkdir -p ${STAGE_TEMP}
- oe_runmake install INSTALL_ROOT=${STAGE_TEMP}
-
- # fix pkgconfig, libtool and prl files
- sed -i -e s#-L${S}/lib##g \
- -e s#-L${STAGING_LIBDIR}##g \
- -e s#-L${libdir}##g \
- -e s#'$(OE_QMAKE_LIBS_X11)'#"${OE_QMAKE_LIBS_X11}"#g \
- ${STAGE_TEMP}${libdir}/*.la ${STAGE_TEMP}${libdir}/*.prl ${STAGE_TEMP}${libdir}/pkgconfig/*.pc
-
- # fix pkgconfig files
- sed -i -e s#"moc_location=.*$"## \
- -e s#"uic_location=.*$"## \
- ${STAGE_TEMP}/${libdir}/pkgconfig/*.pc
- for name in ${QT_LIB_NAMES}; do
- sed -i -e "/Requires/s#${name}#${name}${QT_LIBINFIX}#"g ${D}${libdir}/pkgconfig/*.pc
- done
-
- # fix libtool files
- sed -i -e s#installed=yes#installed=no#g ${STAGE_TEMP}/${libdir}/*.la
-
- # install headers
- install -d ${STAGING_INCDIR}
- cp -pPRf ${STAGE_TEMP}/${includedir}/* ${STAGING_INCDIR}/
-
- # install libraries
- install -d ${STAGING_LIBDIR}
- for i in ${STAGE_TEMP}/${libdir}/*.prl; do
- cp -pPRf $i ${STAGING_LIBDIR}
- cp -pPRf ${STAGE_TEMP}/${libdir}/$(basename $i .prl).la ${STAGING_LIBDIR} || true
- oe_libinstall -C ${STAGE_TEMP}/${libdir} -a $(basename $i .prl) ${STAGING_LIBDIR} || true
- oe_libinstall -C ${STAGE_TEMP}/${libdir} -so $(basename $i .prl) ${STAGING_LIBDIR} || true
- done
-
- # install pkgconfig files
- install -d ${STAGING_LIBDIR}/pkgconfig
- cp -pPRf ${STAGE_TEMP}/${libdir}/pkgconfig/*.pc ${STAGING_LIBDIR}/pkgconfig/
-
- # install mkspecs
- install -d ${STAGING_DATADIR}/${QT_DIR_NAME}/mkspecs
- cp -pPRf ${STAGE_TEMP}/${datadir}/${QT_DIR_NAME}/mkspecs/* ${STAGING_DATADIR}/${QT_DIR_NAME}/mkspecs/
-
- rm -rf ${STAGE_TEMP}
-
- # FIXME: install symlinks to tools?
- #install -d ${STAGING_DATADIR}/${QT_DIR_NAME}/bin
- #ln -sf ${STAGING_BINDIR_NATIVE}/qmake2 ${STAGING_DATADIR}/${QT_DIR_NAME}/bin/qmake
- #for qttool in moc uic uic3 rcc lrelease lupdate; do
- # ln -sf ${STAGING_BINDIR_NATIVE}/${qttool}4 ${STAGING_DATADIR}/${QT_DIR_NAME}/bin/${qttool}
- #done
-}
diff --git a/recipes/qt4/wolfenqt-e_git.bb b/recipes/qt4/wolfenqt-e_git.bb
new file mode 100644
index 0000000000..661838842a
--- /dev/null
+++ b/recipes/qt4/wolfenqt-e_git.bb
@@ -0,0 +1,5 @@
+WOLFVARIANT = "e"
+require wolfenqt.inc
+
+
+
diff --git a/recipes/qt4/wolfenqt.inc b/recipes/qt4/wolfenqt.inc
new file mode 100644
index 0000000000..e1e08cf6ab
--- /dev/null
+++ b/recipes/qt4/wolfenqt.inc
@@ -0,0 +1,19 @@
+
+PE = "1"
+PV = "0.0"
+PR_append = "+gitr${SRCREV}"
+
+inherit qt4${WOLFVARIANT}
+
+SRCREV = "f43dfa2bfa1f72abd3500dfc94248b17c5f9ae05"
+SRC_URI = "git://gitorious.org/qt-labs/wolfenqt.git;protocol=git"
+
+S = "${WORKDIR}/git"
+
+do_install() {
+ install -d ${D}${bindir}
+ install -m 0755 qt3d ${D}${bindir}/wolfenqt-${WOLFVARIANT}
+}
+
+
+
diff --git a/recipes/qt4/wolfenqt_git.bb b/recipes/qt4/wolfenqt_git.bb
new file mode 100644
index 0000000000..2d762f3dc2
--- /dev/null
+++ b/recipes/qt4/wolfenqt_git.bb
@@ -0,0 +1,5 @@
+WOLFVARIANT = "x11"
+require wolfenqt.inc
+
+
+
diff --git a/recipes/rp-pppoe/rp-pppoe_3.8.bb b/recipes/rp-pppoe/rp-pppoe_3.8.bb
index 9852522da1..bc8b3b1510 100644
--- a/recipes/rp-pppoe/rp-pppoe_3.8.bb
+++ b/recipes/rp-pppoe/rp-pppoe_3.8.bb
@@ -52,5 +52,5 @@ CONFFILES_${PN}-server = "${sysconfdir}/ppp/pppoe-server-options \
INITSCRIPT_PACKAGES = "${PN}-server"
INITSCRIPT_NAME_${PN}-server = "pppoe-server"
-INITSCRIPT_PARAMS_${PN}-server = "defaults 92 08"
+INITSCRIPT_PARAMS_${PN}-server = "defaults 92 8"
diff --git a/recipes/sg3-utils/sg3-utils_1.24.bb b/recipes/sg3-utils/sg3-utils_1.24.bb
index 4a2c378676..8a4a603e8c 100644
--- a/recipes/sg3-utils/sg3-utils_1.24.bb
+++ b/recipes/sg3-utils/sg3-utils_1.24.bb
@@ -4,7 +4,9 @@ HOMEPAGE = "http://packages.qa.debian.org/s/sg3-utils.html"
SECTION = "console/admin"
LICENSE = "GPLv2"
AUTHOR = "Eric Schwartz (Skif) <emschwar@debian.org>"
-PR = "r1"
+PR = "r2"
+
+TARGET_CC_ARCH += "${LDFLAGS}"
SRC_URI = "${DEBIAN_MIRROR}/main/s/sg3-utils/sg3-utils_${PV}.orig.tar.gz \
file://Makefile-r1.patch;patch=1"
diff --git a/recipes/shr/e-wm-config-illume-shr_git.bb b/recipes/shr/e-wm-config-illume-shr_git.bb
index 36154cef8e..76ce8d3071 100644
--- a/recipes/shr/e-wm-config-illume-shr_git.bb
+++ b/recipes/shr/e-wm-config-illume-shr_git.bb
@@ -3,7 +3,7 @@ SECTION = "e/utils"
DEPENDS = "eet"
LICENSE = "MIT BSD"
PV = "1.1-${EFL_SRCREV}+gitr${SRCPV}"
-PR = "r6"
+PR = "r7"
inherit e
@@ -17,5 +17,12 @@ EXTRA_OECONF = "\
FILES_${PN} = "${datadir}/enlightenment/data/config/illume-shr"
-RRECOMMENDS_${PN} = "e-wm-theme-illume-shr e-wm-sysactions-shr e-wm-menu-shr"
+RRECOMMENDS_${PN} = "\
+ e-wm-theme-illume-shr \
+ e-wm-sysactions-shr \
+ e-wm-menu-shr \
+ illume-keyboard-default-alpha \
+ illume-keyboard-default-numeric \
+ illume-keyboard-default-terminal \
+"
diff --git a/recipes/shr/initscripts-shr/palmpre/usb-gadget.sh b/recipes/shr/initscripts-shr/palmpre/usb-gadget.sh
new file mode 100644
index 0000000000..d7554954d6
--- /dev/null
+++ b/recipes/shr/initscripts-shr/palmpre/usb-gadget.sh
@@ -0,0 +1,10 @@
+#!/bin/sh
+
+# usb gadget configuration:
+# there already different configurations on the palm pre defined,
+# we choose nr 5 cause it provides the usbnet, novacom
+# and storage gadget
+if [ -e /sys/class/usb_gadget/config_num ]; then
+ echo 5 > /sys/class/usb_gadget/config_num
+fi
+
diff --git a/recipes/shr/initscripts-shr_0.0.1.bb b/recipes/shr/initscripts-shr_0.0.1.bb
index f1be1c2fc7..89df6ce375 100644
--- a/recipes/shr/initscripts-shr_0.0.1.bb
+++ b/recipes/shr/initscripts-shr_0.0.1.bb
@@ -5,7 +5,7 @@ DEPENDS = ""
RDEPENDS = ""
LICENSE = "GPL"
PV = "0.0.1"
-PR = "r13"
+PR = "r14"
RPROVIDES_${PN} = "initscripts"
RCONFLICTS_${PN} = "initscripts"
@@ -33,6 +33,7 @@ SRC_URI = "file://alignment.sh \
file://umountfs \
file://umountnfs.sh \
"
+SRC_URI_append_palmpre = " file://usb-gadget.sh"
inherit base
@@ -76,6 +77,11 @@ do_install () {
install -m 0755 ${WORKDIR}/umountfs ${D}${sysconfdir}/init.d
install -m 0755 ${WORKDIR}/umountnfs.sh ${D}${sysconfdir}/init.d
+ if [ "${MACHINE}" == "palmpre" ]; then
+ install -m 0755 ${WORKDIR}/usb-gadget.sh ${D}${sysconfdir}/init.d
+ ln -sf ../init.d/usb-gadget.sh ${D}${sysconfdir}/rcS.d/S00usb-gadget.sh
+ fi
+
#
# Create runlevel links
#
diff --git a/recipes/shr/libframeworkd-phonegui-efl2_git.bb b/recipes/shr/libframeworkd-phonegui-efl2_git.bb
index cb1feade68..4d6f2c2eef 100644
--- a/recipes/shr/libframeworkd-phonegui-efl2_git.bb
+++ b/recipes/shr/libframeworkd-phonegui-efl2_git.bb
@@ -2,7 +2,7 @@ DESCRIPTION = "frameworkd EFL phonegui 2"
SECTION = "e/apps"
DEPENDS += " dbus-glib libframeworkd-glib libframeworkd-phonegui etk evas ecore edje edje-native elementary"
PV = "0.0.1+gitr${SRCPV}"
-PR = "r1"
+PR = "r2"
SRC_URI = "git://shr.bearstech.com/repo/libframeworkd-phonegui-efl2.git;protocol=http;branch=master"
S = "${WORKDIR}/git"
diff --git a/recipes/shr/libframeworkd-phonegui-efl_git.bb b/recipes/shr/libframeworkd-phonegui-efl_git.bb
index c4181cf345..aa2070c2c7 100644
--- a/recipes/shr/libframeworkd-phonegui-efl_git.bb
+++ b/recipes/shr/libframeworkd-phonegui-efl_git.bb
@@ -4,7 +4,7 @@ LICENSE = "GPL"
SECTION = "e/apps"
DEPENDS += " dbus-glib libframeworkd-glib libframeworkd-phonegui etk evas ecore edje edje-native elementary"
PV = "0.0.3+gitr${SRCPV}"
-PR = "r35"
+PR = "r36"
require libframeworkd-phonegui-efl-theme.inc
diff --git a/recipes/shr/libphone-ui-shr_git.bb b/recipes/shr/libphone-ui-shr_git.bb
index fcc076f237..08320fe5d2 100644
--- a/recipes/shr/libphone-ui-shr_git.bb
+++ b/recipes/shr/libphone-ui-shr_git.bb
@@ -2,7 +2,7 @@ DESCRIPTION = "SHR default module for the Phone UI daemon"
SECTION = "e/apps"
DEPENDS += " dbus-glib libframeworkd-glib libphone-ui etk evas ecore edje edje-native elementary"
PV = "0.0.0+gitr${SRCPV}"
-PR = "r3"
+PR = "r4"
SRC_URI = "git://shr.bearstech.com/repo/libphone-ui-shr.git;protocol=http;branch=master"
S = "${WORKDIR}/git"
diff --git a/recipes/shr/phonefsod_git.bb b/recipes/shr/phonefsod_git.bb
index e35cbf7649..2103122068 100644
--- a/recipes/shr/phonefsod_git.bb
+++ b/recipes/shr/phonefsod_git.bb
@@ -4,7 +4,7 @@ LICENSE = "GPL"
SECTION = "x11/applications"
DEPENDS += " dbus-glib libframeworkd-glib sqlite3 shr-specs"
PV = "0.0.0+gitr${SRCPV}"
-PR = "r3"
+PR = "r4"
SRC_URI = "git://git.shr-project.org/repo/phonefsod.git;protocol=http;branch=master"
S = "${WORKDIR}/git"
@@ -18,5 +18,6 @@ EXTRA_OECONF = "\
SPECS_PATH=${STAGING_DATADIR}/shr-specs \
"
+CONFFILES_${PN} = "${sysconfdir}/phonefsod.conf"
diff --git a/recipes/shr/phoneuid_git.bb b/recipes/shr/phoneuid_git.bb
index e786d3e4cd..603a1d1609 100644
--- a/recipes/shr/phoneuid_git.bb
+++ b/recipes/shr/phoneuid_git.bb
@@ -4,7 +4,9 @@ LICENSE = "GPL"
SECTION = "x11/applications"
DEPENDS += " dbus-glib libframeworkd-glib libphone-ui sqlite3 shr-specs"
PV = "0.0.0+gitr${SRCPV}"
-PR = "r3"
+PR = "r5"
+
+RREPLACES_${PN} = "shr-today"
SRC_URI = "git://git.shr-project.org/repo/phoneuid.git;protocol=http;branch=master"
S = "${WORKDIR}/git"
@@ -18,3 +20,5 @@ EXTRA_OECONF = "\
FILES_${PN} += "${datadir}"
+CONFFILES_${PN} = "${sysconfdir}/phoneuid.conf"
+
diff --git a/recipes/shr/shr-config_git.bb b/recipes/shr/shr-config_git.bb
index cc8d685a27..b1fddd8246 100644
--- a/recipes/shr/shr-config_git.bb
+++ b/recipes/shr/shr-config_git.bb
@@ -5,7 +5,7 @@ LICENSE = "GPLv2"
DEPENDS = "vala-native elementary libeflvala"
SECTION = "x11/application"
PV = "0.0.2+gitr${SRCPV}"
-PR = "r4"
+PR = "r5"
EXTRA_OECONF="--enable-vapidir=${STAGING_DATADIR}/vala/vapi"
inherit autotools
diff --git a/recipes/shr/shr-launcher_svn.bb b/recipes/shr/shr-launcher_svn.bb
index ffd6161586..481be9021b 100644
--- a/recipes/shr/shr-launcher_svn.bb
+++ b/recipes/shr/shr-launcher_svn.bb
@@ -6,16 +6,25 @@ SECTION = "e/apps"
DEPENDS = "elementary eina edbus"
PV = "0.0.1+svnr${SRCPV}"
-PR = "r0"
+PR = "r4"
-SRC_URI = "svn://shr-launcher.googlecode.com/svn/trunk;module=.;proto=http"
+SRC_URI = "svn://shr-launcher.googlecode.com/svn;module=trunk;proto=http"
-do_configure_prepend() {
- rm -f ${S}/config.log
- rm -f ${S}/config.status
-}
-
-S = "${WORKDIR}"
+S = "${WORKDIR}/trunk"
inherit autotools
+do_install_append() {
+ install -d "${D}/${datadir}/pixmaps"
+ install -m 0644 "${S}/resources/launcher.png" "${D}/${datadir}/pixmaps"
+ install -d "${D}/${datadir}/applications"
+ install -m 0644 "${S}/resources/launcher.desktop" "${D}/${datadir}/applications"
+ install -d "${D}/${datadir}/launcher"
+ for ico in "${S}/resources/"*.png; do
+ if [ "$(basename $ico)" != "launcher.png" ]; then
+ install -m 0644 $ico "${D}/${datadir}/launcher"
+ fi
+ done
+}
+
+FILES_${PN} += "/usr/share/launcher/* /usr/share/applications/* /usr/share/pixmaps/*"
diff --git a/recipes/shr/shr-wizard_git.bb b/recipes/shr/shr-wizard_git.bb
index ec63fb13fc..33bac9d234 100644
--- a/recipes/shr/shr-wizard_git.bb
+++ b/recipes/shr/shr-wizard_git.bb
@@ -3,7 +3,7 @@ HOMEPAGE = "http://shr-project.org"
LICENSE = "GPL"
RDEPENDS = "python-elementary shr-settings python-phoneutils e-wm python-dbus python-edbus"
SECTION = "x11/application"
-PV = "0.0.0+gitr${SRCREV}"
+PV = "0.0.0+gitr${SRCPV}"
PR = "r1"
inherit autotools
diff --git a/recipes/sysfsutils/sysfsutils.inc b/recipes/sysfsutils/sysfsutils.inc
new file mode 100644
index 0000000000..1dbd0226dc
--- /dev/null
+++ b/recipes/sysfsutils/sysfsutils.inc
@@ -0,0 +1,18 @@
+DESCRIPTION = "System Utilities Based on Sysfs"
+HOMEPAGE = "http://linux-diag.sourceforge.net/Sysfsutils.html"
+LICENSE = "GPLv2"
+INC_PR = "r3"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/linux-diag/sysfsutils-${PV}.tar.gz"
+
+inherit autotools autotools_stage
+
+acpaths = "-I ${S}/m4"
+
+PACKAGES = "libsysfs libsysfs-dbg libsysfs-dev \
+ ${PN} ${PN}-dbg ${PN}-doc ${PN}-locale"
+
+FILES_libsysfs = "${libdir}/*.so.*"
+FILES_libsysfs-dev = "${includedir} ${libdir}/lib*.so ${libdir}/*.la \
+ ${libdir}/*.a"
+FILES_libsysfs-dbg += "${libdir}/.debug"
diff --git a/recipes/sysfsutils/sysfsutils_1.3.0.bb b/recipes/sysfsutils/sysfsutils_1.3.0.bb
index 11e4ca7e9a..3339a089e4 100644
--- a/recipes/sysfsutils/sysfsutils_1.3.0.bb
+++ b/recipes/sysfsutils/sysfsutils_1.3.0.bb
@@ -1,22 +1,5 @@
-PR = "r2"
-SECTION = "base"
-DESCRIPTION = "System Utilities Based on Sysfs"
-HOMEPAGE = "http://linux-diag.sourceforge.net/Sysfsutils.html"
-LICENSE = "GPLv2"
-SRC_URI = "${SOURCEFORGE_MIRROR}/linux-diag/sysfsutils-${PV}.tar.gz"
+require sysfsutils.inc
-S = "${WORKDIR}/sysfsutils-${PV}"
+PR = "${INC_PR}"
-inherit autotools
-
-includedir += "/sysfs"
-
-PACKAGES_prepend = "libsysfs "
-FILES_libsysfs = "${libdir}/*.so.1.0.3"
-
-do_stage () {
- oe_libinstall -a -so -C lib libsysfs ${STAGING_LIBDIR}
- install -d ${STAGING_INCDIR}/sysfs
- install -m 0644 ${S}/include/dlist.h ${STAGING_INCDIR}/sysfs
- install -m 0644 ${S}/include/libsysfs.h ${STAGING_INCDIR}/sysfs
-}
+includedir .= "/sysfs"
diff --git a/recipes/sysfsutils/sysfsutils_2.0.0.bb b/recipes/sysfsutils/sysfsutils_2.0.0.bb
index f59dfa0feb..c2557c1e15 100644
--- a/recipes/sysfsutils/sysfsutils_2.0.0.bb
+++ b/recipes/sysfsutils/sysfsutils_2.0.0.bb
@@ -1,24 +1,3 @@
-DESCRIPTION = "System Utilities Based on Sysfs"
-HOMEPAGE = "http://linux-diag.sourceforge.net/Sysfsutils.html"
-LICENSE = "GPLv2"
-PR = "r2"
+require sysfsutils.inc
-SRC_URI = "${SOURCEFORGE_MIRROR}/linux-diag/sysfsutils-${PV}.tar.gz"
-S = "${WORKDIR}/sysfsutils-${PV}"
-
-inherit autotools
-
-includedir += "/sysfs"
-
-do_stage () {
- oe_libinstall -a -so -C lib libsysfs ${STAGING_LIBDIR}
- install -d ${STAGING_INCDIR}/sysfs
- install -m 0644 ${S}/include/dlist.h ${STAGING_INCDIR}/sysfs
- install -m 0644 ${S}/include/libsysfs.h ${STAGING_INCDIR}/sysfs
-}
-
-PACKAGES_prepend = "libsysfs libsysfs-dbg libsysfs-dev "
-FILES_libsysfs = "${libdir}/*.so.*"
-FILES_libsysfs-dev = "${libdir}/* ${includedir}"
-FILES_libsysfs-dbg += "${libdir}/.debug"
-FILES_${PN}-dbg += "${bindir}/.debug"
+PR = "${INC_PR}"
diff --git a/recipes/sysfsutils/sysfsutils_2.1.0.bb b/recipes/sysfsutils/sysfsutils_2.1.0.bb
index 4f540d5181..02d936f688 100644
--- a/recipes/sysfsutils/sysfsutils_2.1.0.bb
+++ b/recipes/sysfsutils/sysfsutils_2.1.0.bb
@@ -1,22 +1,4 @@
-DESCRIPTION = "System Utilities Based on Sysfs"
-HOMEPAGE = "http://linux-diag.sourceforge.net/Sysfsutils.html"
-LICENSE = "GPLv2"
-PR = "r1"
+require sysfsutils.inc
-SRC_URI = "${SOURCEFORGE_MIRROR}/linux-diag/sysfsutils-${PV}.tar.gz \
- file://get_mnt_path_check.patch;patch=1"
-
-inherit autotools
-
-do_stage () {
- autotools_stage_all
-}
-
-PACKAGES = "libsysfs libsysfs-dbg libsysfs-dev \
- ${PN} ${PN}-dbg ${PN}-doc ${PN}-locale"
-
-FILES_libsysfs = "${libdir}/*.so.*"
-FILES_libsysfs-dev = "${includedir} ${libdir}/lib*.so ${libdir}/*.la \
- ${libdir}/*.a"
-FILES_libsysfs-dbg += "${libdir}/.debug"
-FILES_${PN}-dbg += "${bindir}/.debug"
+PR = "${INC_PR}"
+SRC_URI += "file://get_mnt_path_check.patch;patch=1"
diff --git a/recipes/tasks/task-boot.bb b/recipes/tasks/task-boot.bb
index 89f8551aa0..bc25088d53 100644
--- a/recipes/tasks/task-boot.bb
+++ b/recipes/tasks/task-boot.bb
@@ -1,5 +1,5 @@
DESCRIPTION = "Basic task to get a device booting"
-PR = "r50"
+PR = "r51"
inherit task
diff --git a/recipes/tasks/task-shr-feed.bb b/recipes/tasks/task-shr-feed.bb
index 27bea5cce1..4b3e764d5e 100644
--- a/recipes/tasks/task-shr-feed.bb
+++ b/recipes/tasks/task-shr-feed.bb
@@ -27,6 +27,7 @@ RDEPENDS_${PN} += "\
gpe-timesheet \
gpe-contacts \
gtkmm \
+ guitartune \
mc \
mplayer \
navit \
@@ -212,7 +213,6 @@ RDEPENDS_${PN} += "\
elmdentica \
shr-installer \
eject \
- illume-keyboard-german \
illume-keyboard-arabic \
illume-keyboard-browse \
illume-keyboard-danish \
@@ -220,10 +220,11 @@ RDEPENDS_${PN} += "\
illume-keyboard-dutch \
illume-keyboard-dvorak \
illume-keyboard-french \
+ illume-keyboard-german \
illume-keyboard-hebrew \
illume-keyboard-numeric-alt \
- illume-keyboard-russian-terminal \
illume-keyboard-russian \
+ illume-keyboard-russian-terminal \
python-xlib \
xcompmgr \
man \
diff --git a/recipes/tasks/task-shr-minimal.bb b/recipes/tasks/task-shr-minimal.bb
index 72a1520772..c30539c607 100644
--- a/recipes/tasks/task-shr-minimal.bb
+++ b/recipes/tasks/task-shr-minimal.bb
@@ -1,5 +1,5 @@
DESCRIPTION = "SHR Lite Image Feed"
-PR = "r18.1"
+PR = "r19"
PV = "2.0"
LICENSE = "GPL"
@@ -115,8 +115,7 @@ RDEPENDS_${PN}-x = "\
glibc-utils \
glibc-charmap-utf-8 \
e-wm-menu-shr \
-#Not yet ready to go in
-# shr-wizard \
+ shr-wizard \
shr-theme-gry \
etk-theme-shr \
${@get_rdepends(bb, d)} \
@@ -137,7 +136,6 @@ RDEPENDS_${PN}-apps = "\
ffalarms \
shr-settings \
shr-theme \
- shr-today \
calc \
"
diff --git a/recipes/tasks/task-slugos.bb b/recipes/tasks/task-slugos.bb
index 35b0f8382e..8ed43b1983 100644
--- a/recipes/tasks/task-slugos.bb
+++ b/recipes/tasks/task-slugos.bb
@@ -6,7 +6,7 @@
DESCRIPTION = "Task packages for the SlugOS distribution"
HOMEPAGE = "http://www.nslu2-linux.org"
LICENSE = "MIT"
-PR = "r23"
+PR = "r24"
PACKAGE_ARCH = "${MACHINE_ARCH}"
COMPATIBLE_MACHINE = "(nslu2|ixp4xx|sheevaplug)"
ALLOW_EMPTY = "1"
@@ -129,7 +129,7 @@ RDEPENDS += "\
busybox initscripts-slugos slugos-init \
update-modules sysvinit udev \
module-init-tools modutils-initscripts \
- opkg-collateral opkg-nogpg-nocurl \
+ opkg-collateral ${IPKG_VARIANT} \
libgcc \
beep \
util-linux-mount \
diff --git a/recipes/tcltk/tcl_8.4.19.bb b/recipes/tcltk/tcl_8.4.19.bb
index dc71db9c72..ff63472a31 100644
--- a/recipes/tcltk/tcl_8.4.19.bb
+++ b/recipes/tcltk/tcl_8.4.19.bb
@@ -2,7 +2,7 @@ DESCRIPTION = "Tool Command Language"
LICENSE = "tcl"
SECTION = "devel/tcltk"
HOMEPAGE = "http://tcl.sourceforge.net"
-PR = "r3"
+PR = "r4"
SRC_URI = "\
${SOURCEFORGE_MIRROR}/tcl/tcl${PV}-src.tar.gz \
@@ -15,6 +15,8 @@ inherit autotools
EXTRA_OECONF = "--enable-threads"
+FILES_${PN} += "${prefix}/lib"
+
do_configure() {
gnu-configize
oe_runconf
diff --git a/recipes/ti/bitblit_svn.bb b/recipes/ti/bitblit_svn.bb
index f813b31f06..cc7dbf9a6b 100644
--- a/recipes/ti/bitblit_svn.bb
+++ b/recipes/ti/bitblit_svn.bb
@@ -18,18 +18,6 @@ PR = "r1"
S = "${WORKDIR}/trunk/bitblit"
-XDC_TARGET = gnu.targets.arm.GCArmv5T
-XDC_PLATFORM_dm6446-evm = ti.platforms.evmDM6446
-XDC_PLATFORM_da830-omapl137-evm = ti.platforms.omapl137
-PLATFORM_XDC = ${XDC_PLATFORM}
-
-export XDC_TARGET
-export XDC_PLATFORM
-export PLATFORM_XDC
-
-PLATFORM_dm6446-evm = "dm6446"
-PLATFORM_da830-omapl137-evm = "ol137"
-
export LINUXLIBS_INSTALL_DIR="${STAGING_DIR_HOST}/usr"
export EXEC_DIR = "${D}${datadir}/ti/bitblit/"
diff --git a/recipes/ti/files/Makefile-dsplink-dsp b/recipes/ti/files/Makefile-dsplink-dsp
index 0861f1ee21..0861f1ee21 100755..100644
--- a/recipes/ti/files/Makefile-dsplink-dsp
+++ b/recipes/ti/files/Makefile-dsplink-dsp
diff --git a/recipes/ti/files/Makefile-dsplink-gpp b/recipes/ti/files/Makefile-dsplink-gpp
index d9f2f6209a..d9f2f6209a 100755..100644
--- a/recipes/ti/files/Makefile-dsplink-gpp
+++ b/recipes/ti/files/Makefile-dsplink-gpp
diff --git a/recipes/ti/files/dm355mm.patch b/recipes/ti/files/dm355mm.patch
new file mode 100644
index 0000000000..6ee6064f5a
--- /dev/null
+++ b/recipes/ti/files/dm355mm.patch
@@ -0,0 +1,498 @@
+diff -uNr dm355_codecs_1_13_000/dm355mm/module/dm350mmap.c dm355_codecs_1_13_000.new/dm355mm/module/dm350mmap.c
+--- dm355_codecs_1_13_000/dm355mm/module/dm350mmap.c 2009-05-20 11:22:57.000000000 -0500
++++ dm355_codecs_1_13_000.new/dm355mm/module/dm350mmap.c 2009-06-09 10:43:25.000000000 -0500
+@@ -7,7 +7,7 @@
+ * Use of this software is controlled by the terms and conditions found in the
+ * license agreement under which this software has been supplied or provided.
+ * ============================================================================
+- */
++ */
+ #include <linux/module.h>
+ #include <linux/init.h>
+ #include <linux/moduleparam.h>
+@@ -20,274 +20,283 @@
+ #include <linux/proc_fs.h>
+ #include <linux/kernel.h>
+ #include <linux/device.h>
+-
++#include <linux/clk.h>
++
+ #include <asm/page.h>
+ #include <asm/uaccess.h>
+ #include <asm/pgtable.h>
+ #include <asm/io.h>
+-#include<asm/system.h>
+-#include<asm-arm/memory.h>
++#include <asm/system.h>
++#include <asm/memory.h>
++
+ #include <asm/irq.h>
+-
++
++#include <linux/version.h>
+ #include <linux/completion.h>
+-#include <asm/arch/edma.h>
+-
++#include <mach/edma.h>
++
+ #define ASQINT_ENABLE
+- typedef struct _edma_params
+-{
+- unsigned long src;
+- unsigned long dst;
+- unsigned int srcmode;
+- unsigned int srcfifowidth;
+- int srcbidx;
+- int srccidx;
+- unsigned int dstmode;
+- unsigned int dstfifowidth;
+- int dstbidx;
+- int dstcidx;
+- int acnt;
+- int bcnt;
+- int ccnt;
+- int bcntrld;
+- int syncmode;
+- } edma_params;
++typedef struct _edma_params {
++ unsigned long src;
++ unsigned long dst;
++ unsigned int srcmode;
++ unsigned int srcfifowidth;
++ int srcbidx;
++ int srccidx;
++ unsigned int dstmode;
++ unsigned int dstfifowidth;
++ int dstbidx;
++ int dstcidx;
++ int acnt;
++ int bcnt;
++ int ccnt;
++ int bcntrld;
++ int syncmode;
++} edma_params;
+
+ #define DM350MMAP_IOCMEMCPY 0x7
+ #define DM350MMAP_IOCWAIT 0x8
+ #define DM350MMAP_IOCCLEAR_PENDING 0x9
+-
++
+ #ifdef __DEBUG
+-#define __D(fmt, args...) printk(KERN_DEBUG "DM350MMAP Debug: " fmt, ## args)
++# define __D(fmt, args...) printk(KERN_DEBUG "DM350MMAP Debug: " fmt, ## args)
+ #else /* */
+-#define __D(fmt, args...)
++# define __D(fmt, args...)
+ #endif /* */
+-
++
+ #define __E(fmt, args...) printk(KERN_ERR "DM350MMAP Error: " fmt, ## args)
+-
++
+ #define MAXTYPE(T) ((T) (((T)1 << ((sizeof(T) * 8) - 1) ^ ((T) -1))))
+-
++
+ static int major = 0;
+
+ #if (USE_UDEV==1)
+ static struct class *dm350mmap_class;
+-
+ #endif // USE_UDEV
+-static DECLARE_MUTEX_LOCKED (dm350mmap_reply_mutex);
+-int master_ch;
+-struct completion edmacompletion;
+-
+-/* Forward declaration of system calls */
+-static int ioctl (struct inode *inode, struct file *filp, unsigned int cmd,
+- unsigned long args);
+-static int mmap (struct file *filp, struct vm_area_struct *vma);
+-static int open (struct inode *inode, struct file *filp);
+-static int release (struct inode *inode, struct file *filp);
++
++static DECLARE_MUTEX(dm350mmap_reply_mutex);
++static struct completion edmacompletion;
++
++/* Forward declaration of system calls */
++static int ioctl(struct inode *inode, struct file *filp, unsigned int cmd,
++ unsigned long args);
++static int mmap(struct file *filp, struct vm_area_struct *vma);
++static int open(struct inode *inode, struct file *filp);
++static int release(struct inode *inode, struct file *filp);
+ static struct file_operations dm350mmap_fxns = { ioctl: ioctl, mmap: mmap, open: open, release:release
+-
+ };
+
+-static irqreturn_t irq_handler (int irq, void *dev_id, struct pt_regs *regs)
++/* Structure to hold mjcp clock info */
++static struct clk *mjcp = NULL;
++
++//static irqreturn_t irq_handler (int irq, void *dev_id, struct pt_regs *regs)
++static irqreturn_t irq_handler(int irq, void *dev_id)
+ {
+-
+- /* Release the mutex, suggesting sequencer processing complete */
+- up (&dm350mmap_reply_mutex);
+- return IRQ_HANDLED;
++ /* Release the mutex, suggesting sequencer processing complete */
++ up(&dm350mmap_reply_mutex);
++ return IRQ_HANDLED;
+ }
+
+-static void memcpy_dma_irq_handler (int lch, u16 ch_status, void *data)
++static void memcpy_dma_irq_handler(unsigned lch, u16 ch_status, void *data)
+ {
+- complete_all (&edmacompletion);
+-}
++ complete_all(&edmacompletion);
++}
+
+-static int mmap (struct file *filp, struct vm_area_struct *vma)
++static int mmap(struct file *filp, struct vm_area_struct *vma)
+ {
+- __D ("mmap: vma->vm_start = %#lx\n", vma->vm_start);
+- __D ("mmap: vma->vm_pgoff = %#lx\n", vma->vm_pgoff);
+- __D ("mmap: vma->vm_end = %#lx\n", vma->vm_end);
+- __D ("mmap: size = %#lx\n", vma->vm_end - vma->vm_start);
+- vma->vm_page_prot = pgprot_noncached (vma->vm_page_prot);
+- if (remap_pfn_range (vma, vma->vm_start,
+-
+-#ifdef LINUX_2_6_18
+- (vma->vm_pgoff >> PAGE_SHIFT),
++ __D("mmap: vma->vm_start = %#lx\n", vma->vm_start);
++ __D("mmap: vma->vm_pgoff = %#lx\n", vma->vm_pgoff);
++ __D("mmap: vma->vm_end = %#lx\n", vma->vm_end);
++ __D("mmap: size = %#lx\n", vma->vm_end - vma->vm_start);
++ vma->vm_page_prot = pgprot_noncached(vma->vm_page_prot);
++ if (remap_pfn_range(vma, vma->vm_start,
++#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,18)
++ (vma->vm_pgoff >> PAGE_SHIFT),
+ #else /* */
+- vma->vm_pgoff,
++ vma->vm_pgoff,
+ #endif /* */
+-
+- vma->vm_end - vma->vm_start, vma->vm_page_prot))
+- {
+- __E ("mmap: failed remap_pfn_range\n");
+- return -EAGAIN;
++ vma->vm_end - vma->vm_start, vma->vm_page_prot)) {
++ __E("mmap: failed remap_pfn_range\n");
++ return -EAGAIN;
+ }
+- return 0;
++ return 0;
+ }
+
+
+-static int ioctl (struct inode *inode, struct file *filp, unsigned int cmd,
+- unsigned long args)
++static int ioctl(struct inode *inode, struct file *filp, unsigned int cmd,
++ unsigned long args)
+ {
+- unsigned int __user *argp = (unsigned int __user *) args;
+- edma_params edmaparams;
+- int err = 0, tcc = EDMA_TCC_ANY;
+- struct paramentry_descriptor paramentry;
+- switch (cmd)
+- {
+-
+- /*
+- * Tries to clear any previously unaccounted interrupt.
+- */
+- case DM350MMAP_IOCCLEAR_PENDING:
+-
+- {
+- int retval;
+- __D ("Clear Pending Call received.\n");
+- init_MUTEX_LOCKED(&dm350mmap_reply_mutex);
+- return 0;
+- }
+- break;
+-
+- /*
+- * Blocks till the sequencer completion interrupt arrives.
+- */
+- case DM350MMAP_IOCWAIT:
+-
+- {
+- int retval;
+- __D ("WAIT Call received.\n");
+- retval = down_interruptible (&dm350mmap_reply_mutex);
+- return retval;
+- }
+- break;
+- case DM350MMAP_IOCMEMCPY:
+- __D ("MEMCPY ioctl received.\n");
+- if (copy_from_user (&edmaparams, argp, sizeof (edmaparams)))
+- {
+- return -EFAULT;
+- }
+- err =
+- davinci_request_dma (EDMA_DMA_CHANNEL_ANY, "EDMA memcpy",
+- memcpy_dma_irq_handler, NULL, &master_ch, &tcc,
+- EVENTQ_1);
+-
+- /* Handle Failure condition here */
+- if (err < 0)
+- {
+- __E ("Error in requesting Master channel %d = 0x%x\n", master_ch,
+- err);
+- return err;
+- }
+- davinci_stop_dma (master_ch);
+- init_completion (&edmacompletion);
+- davinci_set_dma_src_params (master_ch,
+- (unsigned long) edmaparams.src,
+- edmaparams.srcmode,
+- edmaparams.srcfifowidth);
+- davinci_set_dma_dest_params (master_ch,
+- (unsigned long) edmaparams.dst,
+- edmaparams.dstmode,
+- edmaparams.dstfifowidth);
+- davinci_set_dma_src_index (master_ch, edmaparams.srcbidx,
+- edmaparams.srccidx);
+- davinci_set_dma_dest_index (master_ch, edmaparams.dstbidx,
+- edmaparams.dstcidx);
+- davinci_set_dma_transfer_params (master_ch, edmaparams.acnt,
+- edmaparams.bcnt, edmaparams.ccnt,
+- edmaparams.bcntrld,
+- edmaparams.syncmode);
+- davinci_get_dma_params (master_ch, &paramentry);
+-
+- /*printk("%x : %x : %x : %x : %x : %x : %x\n", paramentry.opt,
+- paramentry.a_b_cnt, paramentry.src_dst_bidx,
+- paramentry.src_dst_cidx, paramentry.ccnt, paramentry.src,
+- paramentry.dst); */
+- davinci_set_dma_params (master_ch, &paramentry);
+- davinci_start_dma (master_ch);
+- wait_for_completion (&edmacompletion);
+-
+- //printk("Dma completed... \n");
+- davinci_stop_dma (master_ch);
+- davinci_free_dma (master_ch);
+- break;
+- default:
+- __E ("Unknown ioctl received = %d.\n", cmd);
+- return -EINVAL;
++ unsigned int __user *argp = (unsigned int __user *) args;
++ edma_params edmaparams;
++ int edma_channel;
++ int retval = 0;
++ struct edmacc_param p_ram;
++
++ switch (cmd) {
++
++ /*
++ * Tries to clear any previously unaccounted interrupt.
++ */
++ case DM350MMAP_IOCCLEAR_PENDING:
++ __D("Clear Pending Call received.\n");
++ init_MUTEX_LOCKED(&dm350mmap_reply_mutex);
++ break;
++
++ /*
++ * Blocks till the sequencer completion interrupt arrives.
++ */
++ case DM350MMAP_IOCWAIT:
++ __D("WAIT Call received.\n");
++ retval = down_interruptible(&dm350mmap_reply_mutex);
++ break;
++
++ case DM350MMAP_IOCMEMCPY:
++ __D("MEMCPY ioctl received.\n");
++ if (copy_from_user(&edmaparams, argp, sizeof(edmaparams))) {
++ retval = -EFAULT;
++ break;
++ }
++
++ edma_channel =
++ edma_alloc_channel(EDMA_CHANNEL_ANY, &memcpy_dma_irq_handler,
++ NULL, EVENTQ_1);
++
++ /* Handle Failure condition here */
++ if (edma_channel < 0) {
++ __E("Error in requesting Master channel = 0x%x\n",
++ edma_channel);
++ retval = edma_channel;
++ break;
++ }
++
++ edma_stop(edma_channel);
++
++ init_completion(&edmacompletion);
++
++ edma_set_src(edma_channel,
++ (dma_addr_t) edmaparams.src,
++ edmaparams.srcmode, edmaparams.srcfifowidth);
++
++ edma_set_dest(edma_channel,
++ (dma_addr_t) edmaparams.dst,
++ edmaparams.dstmode, edmaparams.dstfifowidth);
++
++ edma_set_src_index(edma_channel, edmaparams.srcbidx,
++ edmaparams.srccidx);
++ edma_set_dest_index(edma_channel, edmaparams.dstbidx,
++ edmaparams.dstcidx);
++
++ edma_set_transfer_params(edma_channel,
++ edmaparams.acnt,
++ edmaparams.bcnt,
++ edmaparams.ccnt,
++ edmaparams.bcntrld, edmaparams.syncmode);
++
++ edma_read_slot(edma_channel, &p_ram);
++ p_ram.opt |= TCINTEN | EDMA_TCC(edma_channel);
++ edma_write_slot(edma_channel, &p_ram);
++
++ edma_start(edma_channel);
++ wait_for_completion(&edmacompletion);
++ edma_stop(edma_channel);
++ edma_free_channel(edma_channel);
++ break;
++
++ default:
++ __E("Unknown ioctl received = %d.\n", cmd);
++ retval = -EINVAL;
++ break;
+ }
+- return 0;
++
++ return retval;
+ }
+
+
+-static int open (struct inode *inode, struct file *filp)
++static int open(struct inode *inode, struct file *filp)
+ {
+- __D ("open: called.\n");
+- return 0;
++ __D("open: called.\n");
++ return 0;
+ }
+
+
+-static int release (struct inode *inode, struct file *filp)
++static int release(struct inode *inode, struct file *filp)
+ {
+- __D ("close: called.");
+- return 0;
++ __D("close: called.");
++ return 0;
+ }
+
+
+-int __init dm350mmap_init (void)
++int __init dm350mmap_init(void)
+ {
+- __D ("** DM350MMAP kernel module built: " __DATE__ " " __TIME__ "\n");
+- major = register_chrdev (0, "dm350mmap", &dm350mmap_fxns);
+- if (major < 0)
+- {
+- __E ("Failed to allocate major number.\n");
+- return -ENODEV;
++ /* In the GIT kernel unused clocks are disabled. To run codec we need to
++ * enable mjcp clock.
++ */
++ mjcp = clk_get(NULL, "mjcp");
++ if (IS_ERR(mjcp))
++ printk(KERN_WARNING "unable to get MJCP clock\n");
++ else
++ clk_enable(mjcp);
++
++ __D("** DM350MMAP kernel module built: " __DATE__ " " __TIME__ "\n");
++ major = register_chrdev(0, "dm350mmap", &dm350mmap_fxns);
++ if (major < 0) {
++ __E("Failed to allocate major number.\n");
++ return -ENODEV;
+ }
+- __D ("Allocated major number: %d\n", major);
+-
++ __D("Allocated major number: %d\n", major);
++
+ #if (USE_UDEV==1)
+- dm350mmap_class = class_create (THIS_MODULE, "dm350mmap");
+- if (IS_ERR (dm350mmap_class))
+- {
+- __E ("Error creating dm350mmap device class.\n");
+- return -EIO;
++ dm350mmap_class = class_create(THIS_MODULE, "dm350mmap");
++ if (IS_ERR(dm350mmap_class)) {
++ __E("Error creating dm350mmap device class.\n");
++ return -EIO;
+ }
+- class_device_create (dm350mmap_class, NULL, MKDEV (major, 0), NULL,
+- "dm350mmap");
+-
++ class_device_create(dm350mmap_class, NULL, MKDEV(major, 0), NULL,
++ "dm350mmap");
++
+ #endif // USE_UDEV
+- __D ("Successfully initialized module\n");
+-
++ __D("Successfully initialized module\n");
++
+ #ifdef ASQINT_ENABLE
+- if (request_irq (IRQ_ASQINT, irq_handler, 0, "seq_arm_interrupt", NULL))
+- {
+- __D ("Could not install ISR\n");
++ if (request_irq(IRQ_ASQINT, irq_handler, 0, "seq_arm_interrupt", NULL)) {
++ __D("Could not install ISR\n");
+ }
+-
++
+ #endif /* */
++ init_MUTEX_LOCKED(&dm350mmap_reply_mutex);
+ return 0;
+ }
+
+
+-void __exit dm350mmap_exit (void)
++void __exit dm350mmap_exit(void)
+ {
+- __D ("In dm350mmap_exit()\n");
+-
++ /* if mjcp clock is enabled then free it */
++ if (mjcp) {
++ clk_disable(mjcp);
++ clk_put(mjcp);
++ }
++
++ __D("In dm350mmap_exit()\n");
++
+ #if (USE_UDEV==1)
+- class_device_destroy (dm350mmap_class, MKDEV (major, 0));
+- class_destroy (dm350mmap_class);
+-
++ class_device_destroy(dm350mmap_class, MKDEV(major, 0));
++ class_destroy(dm350mmap_class);
++
+ #endif // USE_UDEV
+- __D ("Unregistering character device dm350mmap\n");
+- unregister_chrdev (major, "dm350mmap");
+-
++ __D("Unregistering character device dm350mmap\n");
++ unregister_chrdev(major, "dm350mmap");
++
+ #ifdef ASQINT_ENABLE
+- free_irq (IRQ_ASQINT, NULL);
+-
++ free_irq(IRQ_ASQINT, NULL);
++
+ #endif /* */
+- __D ("dm350mmap unregistered\n");
+-}
++ __D("dm350mmap unregistered\n");
++}
+
+-module_init (dm350mmap_init);
++module_init(dm350mmap_init);
+
+-module_exit (dm350mmap_exit);
+-MODULE_LICENSE ("GPL");
+-MODULE_AUTHOR ("Texas Instruments");
+-MODULE_DESCRIPTION ("DM350 mmap export to userland");
++module_exit(dm350mmap_exit);
++MODULE_LICENSE("GPL");
++MODULE_AUTHOR("Texas Instruments");
++MODULE_DESCRIPTION("DM350 mmap export to userland");
+
diff --git a/recipes/ti/files/loadmodules-ti-dmai-dm365_al.sh b/recipes/ti/files/loadmodules-ti-dmai-dm365_al.sh
new file mode 100644
index 0000000000..921c924b9a
--- /dev/null
+++ b/recipes/ti/files/loadmodules-ti-dmai-dm365_al.sh
@@ -0,0 +1,14 @@
+#!/bin/sh
+rmmod cmemk 2>/dev/null
+rmmod irqk 2>/dev/null
+rmmod edmak 2>/dev/null
+rmmod dm365mmap 2>/dev/null
+
+# Pools configuration
+insmod cmemk.ko phys_start=0x85000000 phys_end=0x88000000 pools=6x4096,2x8192,1x11908,2x13184,1x2697152,6x4096,1x30720,3x81920,1x3185664,64x56,1x320,1x640,1x81920,1x6650880,2x608,1x296,1x28,2x24,23x1548288,1x154288 allowOverlap=1 phys_start_1=0x00001000 phys_end_1=0x00008000 pools_1=1x28672
+
+insmod irqk.ko
+insmod edmak.ko
+insmod dm365mmap.ko
+rm -f /dev/dm365mmap
+mknod /dev/dm365mmap c `awk "\\$2==\"dm365mmap\" {print \\$1}" /proc/devices` 0
diff --git a/recipes/ti/files/mapdmaq b/recipes/ti/files/mapdmaq
index 5c11bc3141..5c11bc3141 100755..100644
--- a/recipes/ti/files/mapdmaq
+++ b/recipes/ti/files/mapdmaq
Binary files differ
diff --git a/recipes/ti/files/mp3dec_cs1omap3530.patch b/recipes/ti/files/mp3dec_cs1omap3530.patch
new file mode 100644
index 0000000000..4ed9267e40
--- /dev/null
+++ b/recipes/ti/files/mp3dec_cs1omap3530.patch
@@ -0,0 +1,41 @@
+diff -uNr -x .xdcenv.mak -x mp3dec cs1omap3530_1_00_01/packages/ti/sdo/server/cs/codec.cfg cs1omap3530_1_00_01_patches/packages/ti/sdo/server/cs/codec.cfg
+--- cs1omap3530_1_00_01/packages/ti/sdo/server/cs/codec.cfg 2009-10-26 14:19:21.000000000 -0500
++++ cs1omap3530_1_00_01_patches/packages/ti/sdo/server/cs/codec.cfg 2009-10-26 14:36:03.000000000 -0500
+@@ -92,6 +92,14 @@
+ MPEG4ENC.alg.udataSection = "DDR2";
+ MPEG4ENC.alg.dataSection = "DDR2";
+
++ var MP3DEC = xdc.useModule('ti.sdo.codecs.mp3dec.ce.MP3DEC');
++
++ // Module Config
++ MP3DEC.alg.watermark = false;
++ MP3DEC.alg.codeSection = "DDR2";
++ MP3DEC.alg.udataSection = "DDR2";
++ MP3DEC.alg.dataSection = "DDR2";
++
+ /*
+ * The array of algorithms this server can serve up. This array also
+ * configures details about the threads which will be created to run the
+@@ -103,6 +111,11 @@
+ groupId : 1,
+ },
+
++ {name: "mp3dec", mod: MP3DEC , threadAttrs: {
++ stackMemId: 0, priority: Server.MINPRI + 3},
++ groupId : 1,
++ },
++
+ {name: "g711dec", mod: G711DEC , threadAttrs: {
+ stackMemId: 0, priority: Server.MINPRI + 3},
+ groupId : 1,
+diff -uNr -x .xdcenv.mak -x mp3dec cs1omap3530_1_00_01/packages/ti/sdo/server/cs/package.xs cs1omap3530_1_00_01_patches/packages/ti/sdo/server/cs/package.xs
+--- cs1omap3530_1_00_01/packages/ti/sdo/server/cs/package.xs 2009-10-26 14:19:20.000000000 -0500
++++ cs1omap3530_1_00_01_patches/packages/ti/sdo/server/cs/package.xs 2009-10-26 14:53:40.000000000 -0500
+@@ -17,6 +17,7 @@
+ validate_one_codec( "ti.sdo.codecs.mpeg2dec", "MPEG2DEC" );
+ validate_one_codec( "ti.sdo.codecs.mpeg4dec", "MPEG4DEC" );
+ validate_one_codec( "ti.sdo.codecs.mpeg4enc", "MPEG4ENC" );
++ validate_one_codec( "ti.sdo.codecs.mp3dec", "MP3DEC" );
+ }
+
+ function validate_one_codec( packageName, moduleName ) {
diff --git a/recipes/ti/files/unloadmodules-ti-dmai-apps.sh b/recipes/ti/files/unloadmodules-ti-dmai-apps.sh
index 793d727f39..793d727f39 100755..100644
--- a/recipes/ti/files/unloadmodules-ti-dmai-apps.sh
+++ b/recipes/ti/files/unloadmodules-ti-dmai-apps.sh
diff --git a/recipes/ti/gstreamer-ti/gstreamer-ti-dm355-rc.sh b/recipes/ti/gstreamer-ti/gstreamer-ti-dm355-rc.sh
new file mode 100644
index 0000000000..d95658e44b
--- /dev/null
+++ b/recipes/ti/gstreamer-ti/gstreamer-ti-dm355-rc.sh
@@ -0,0 +1,61 @@
+#!/bin/sh
+#
+# configure kernel modules for TI DSP based gstreamer plugin
+#
+
+# Disable XDM 0.9 elements
+export GST_TI_TIViddec_DISABLE=1
+export GST_TI_TIAuddec_DISABLE=1
+export GST_TI_TIVidenc_DISABLE=1
+export GST_TI_TIImgdec_DISABLE=1
+export GST_TI_TIImgenc_DISABLE=1
+
+load_module() {
+ # CMEM Allocation
+ # 1x3628800 Circular buffer
+ # 4x829440 Video buffers (max D1 PAL)
+ # 1x829440 Underlying software components (codecs, etc.)
+ # 1x518400 Underlying software components (codecs, etc.)
+ # 1x4948 Underlying software components (codecs, etc.)
+ # 1x1505280 Underlying software components (codecs, etc.)
+ # 1x5760 Underlying software components (codecs, etc.)
+ # 1x8192 Underlying software components (codecs, etc.)
+ # 1x1 Dummy buffer used during final flush
+ modprobe cmemk phys_start=0x87400000 phys_end=0x88000000 \
+ pools=1x3628800,5x829440,1x518400,1x4948,1x1505280,1x5760,1x8192,1x1
+
+ modprobe dm350mmap
+ rm -f /dev/dm350mmap
+ mknod /dev/dm350mmap c `awk "\\$2==\"dm350mmap\" {print \\$1}" /proc/devices` 0
+
+}
+
+unload_module() {
+ rmmod cmemk
+ rmmod dm350mmap
+}
+
+case "$1" in
+ start)
+ echo -n "Loading kernel modules for gstreamer-ti... "
+ load_module
+ echo " done"
+ ;;
+ stop)
+ echo -n "Unloading kernel module ..."
+ unload_module
+ echo " done"
+ ;;
+ restart)
+ echo -n "Unloading kernel module ..."
+ unload_module
+ echo " done"
+ echo -n "Loading kernel modules for gstreamer-ti... "
+ load_module
+ echo " done"
+ ;;
+ *)
+ echo "$0 <start/stop/restart>"
+ ;;
+esac
+
diff --git a/recipes/ti/gstreamer-ti/gstreamer-ti-dm6446-rc.sh b/recipes/ti/gstreamer-ti/gstreamer-ti-dm6446-rc.sh
new file mode 100644
index 0000000000..69468977bd
--- /dev/null
+++ b/recipes/ti/gstreamer-ti/gstreamer-ti-dm6446-rc.sh
@@ -0,0 +1,71 @@
+#!/bin/sh
+#
+# configure kernel modules for TI DSP based gstreamer plugin
+#
+
+# Disable XDM 0.9 elements
+export GST_TI_TIViddec_DISABLE=1
+export GST_TI_TIAuddec_DISABLE=1
+export GST_TI_TIVidenc_DISABLE=1
+export GST_TI_TIImgdec_DISABLE=1
+export GST_TI_TIImgenc_DISABLE=1
+
+load_module() {
+ # insert cmemk, tell it to occupy physical 118MB-128MB.
+ #
+ # CMEM Allocation
+ # 1x5250000 Circular buffer
+ # 2x829440 Video buffers (max D1 PAL)
+ # 3x1036800 Video buffers (larger size needed for MPEG4 encoder)
+ # 1x8192 Underlying software components (codecs, etc.)
+ # 1x1 Dummy buffer used during final flush
+ modprobe cmemk phys_start=0x87600000 phys_end=0x88000000 \
+ pools=1x5250000,2x829440,3x1036800,1x8192,1x1
+
+ # Notes on using the "playbin" element:
+ # -------------------------------------
+ # Playbin requires one 6 video buffers, and we have only allocated five.
+ # If you replace the "2x829440,3x1036800" with "6x829440" it should work, but
+ # you will not be able to use the MPEG4 encoder.
+ #
+ #insmod cmemk.ko phys_start=0x87600000 phys_end=0x88000000 \
+ # pools=1x5250000,6x829440,1x8192,1x1
+
+ # insert dsplinkk
+ modprobe dsplinkk
+
+ # make /dev/dsplink
+ rm -f /dev/dsplink
+ mknod /dev/dsplink c `awk "\\$2==\"dsplink\" {print \\$1}" /proc/devices` 0
+}
+
+unload_module() {
+ rmmod cmemk
+ rmmod dsplinkk
+ rm -f /dev/dsplink
+}
+
+case "$1" in
+ start)
+ echo -n "Loading kernel modules for gstreamer-ti... "
+ load_module
+ echo " done"
+ ;;
+ stop)
+ echo -n "Unloading kernel module ..."
+ unload_module
+ echo " done"
+ ;;
+ restart)
+ echo -n "Unloading kernel module ..."
+ unload_module
+ echo " done"
+ echo -n "Loading kernel modules for gstreamer-ti... "
+ load_module
+ echo " done"
+ ;;
+ *)
+ echo "$0 <start/stop/restart>"
+ ;;
+esac
+
diff --git a/recipes/ti/gstreamer-ti/gstreamer-ti-omap3530-rc.sh b/recipes/ti/gstreamer-ti/gstreamer-ti-omap3530-rc.sh
index 9a19cf926b..b61b40c176 100644
--- a/recipes/ti/gstreamer-ti/gstreamer-ti-omap3530-rc.sh
+++ b/recipes/ti/gstreamer-ti/gstreamer-ti-omap3530-rc.sh
@@ -12,11 +12,11 @@
#
# Disable XDM 0.9 elements
-export GST_TI_TIViddec_DISABLED=1
-export GST_TI_TIAuddec_DISABLED=1
-export GST_TI_TIVidenc_DISABLED=1
-export GST_TI_TIImgdec_DISABLED=1
-export GST_TI_TIImgenc_DISABLED=1
+export GST_TI_TIViddec_DISABLE=1
+export GST_TI_TIAuddec_DISABLE=1
+export GST_TI_TIVidenc_DISABLE=1
+export GST_TI_TIImgdec_DISABLE=1
+export GST_TI_TIImgenc_DISABLE=1
load_module() {
#
diff --git a/recipes/ti/gstreamer-ti_svn.bb b/recipes/ti/gstreamer-ti_svn.bb
index bea25d6d15..57e1b409e9 100644
--- a/recipes/ti/gstreamer-ti_svn.bb
+++ b/recipes/ti/gstreamer-ti_svn.bb
@@ -1,91 +1,86 @@
DESCRIPTION = "Gstreamer plugin for TI Davinci and OMAP processors"
-
-require ti-paths.inc
-
-inherit update-rc.d
-inherit autotools
-
DEPENDS = "ti-dmai gstreamer gst-plugins-base gst-plugins-good gst-plugins-ugly"
-GST_TI_RC_SCRIPT_armv7a="gstreamer-ti-omap3530-rc.sh"
-
-# Fetch source from svn repo
SRCREV = "459"
+# Again, no '.' in PWD allowed :(
+PE = "1"
+PV = "svnr${SRCPV}"
+PR = "r37"
+
+GST_TI_RC_SCRIPT_omap3 = "gstreamer-ti-omap3530-rc.sh"
+GST_TI_RC_SCRIPT_dm6446="gstreamer-ti-dm6446-rc.sh"
+GST_TI_RC_SCRIPT_dm355="gstreamer-ti-dm355-rc.sh"
+
SRC_URI = "svn://gforge.ti.com/svn/gstreamer_ti/trunk;module=gstreamer_ti;proto=https;user=anonymous;pswd='' \
file://gstreamer-ti-tracker-462.patch;patch=1 \
file://gstreamer-ti-remove-mp3-decode-support-from-auddec1.patch;patch=1 \
- file://${GST_TI_RC_SCRIPT} \
+ file://${GST_TI_RC_SCRIPT} \
"
-SRC_URI_append_armv7a = " \
+SRC_URI_append_omap3 = " \
file://gstreamer-ti-add-omapfb.patch;patch=1 \
"
-# Again, no '.' in PWD allowed :(
-PR = "r37"
-PV = "1.0.0+svnr${SRCPV}"
-PE = "1"
-
S = "${WORKDIR}/gstreamer_ti/ti_build/ticodecplugin"
-INITSCRIPT_NAME = "gstti-init"
-INITSCRIPT_PARAMS = "start 30 5 2 . stop 40 0 1 6 ."
-
-XDC_TARGET = gnu.targets.arm.GCArmv5T
-XDC_PLATFORM_dm6446-evm = ti.platforms.evmDM6446
-XDC_PLATFORM_da830-omapl137-evm = ti.platforms.omapl137
-PLATFORM_XDC = ${XDC_PLATFORM}
-export XDC_TARGET
-export XDC_PLATFORM
-export PLATFORM_XDC
+inherit autotools update-rc.d
-PLATFORM_dm6446-evm = "dm6446"
-PLATFORM_da830-omapl137-evm = "ol137"
-
-CPPFLAGS_append = " -DPlatform_${PLATFORM}"
+require ti-paths.inc
-PACKAGE_ARCH = "${MACHINE_ARCH}"
+XDC_TARGET = "gnu.targets.arm.GCArmv5T"
+XDC_PLATFORM_dm6446 = "ti.platforms.evmDM6446"
+XDC_PLATFORM_omapl137 = "ti.platforms.omapl137"
+PLATFORM_XDC = "${XDC_PLATFORM}"
+PLATFORM_dm6446 = "dm6446"
+PLATFORM_omapl137 = "ol137"
+export XDC_TARGET
+export XDC_PLATFORM
+export PLATFORM_XDC
# export codec combo (or server) locations
export HMJCP_COMBO = "${installdir}/codec-combo/hmjcp.accel"
export CODEC_SERVER = "${installdir}/codec-combo/cs.x64P"
-export ENCODE_COMBO = "${installdir}/codec-combo/encodeCombo.x64P"
+export ENCODE_COMBO = "${installdir}/codec-combo/encodeCombo.x64P"
export DECODE_COMBO = "${installdir}/codec-combo/decodeCombo.x64P"
-do_install_prepend () {
- # install gstreamer demo scripts
- install -d ${D}/${installdir}/gst
- cp -r ${WORKDIR}/gstreamer_ti/gstreamer_demo/shared ${D}/${installdir}/gst
- cp -r ${WORKDIR}/gstreamer_ti/gstreamer_demo/${PLATFORM} ${D}/${installdir}/gst
-
- # default loadmodule script is hard-coded for insmod, change to modprobe
- sed -i 's/insmod/modprobe/g' ${D}/${installdir}/gst/${PLATFORM}/loadmodules.sh
- sed -i 's/.ko//g' ${D}/${installdir}/gst/${PLATFORM}/loadmodules.sh
- if [ "${PLATFORM}" = "omap3530" ]; then
- echo "modprobe sdmak" >> ${D}/${installdir}/gst/${PLATFORM}/loadmodules.sh
- fi
- chmod 0755 ${D}/${installdir}/gst -R
-
- install -d ${D}${sysconfdir}/init.d/
- install -m 0755 ${WORKDIR}/${GST_TI_RC_SCRIPT} ${D}${sysconfdir}/init.d/gstti-init
-}
+CPPFLAGS_append = " -DPlatform_${PLATFORM}"
-pkg_postinst_gstreamer-ti-demo-script () {
- ln -sf ${installdir}/codec-combo/* ${installdir}/gst/${PLATFORM}/
+do_install_prepend () {
+ # install gstreamer demo scripts
+ install -d ${D}/${installdir}/gst
+ cp -r ${WORKDIR}/gstreamer_ti/gstreamer_demo/shared ${D}/${installdir}/gst
+ cp -r ${WORKDIR}/gstreamer_ti/gstreamer_demo/${PLATFORM} ${D}/${installdir}/gst
+ # default loadmodule script is hard-coded for insmod, change to modprobe
+ sed -i 's/insmod/modprobe/g' ${D}/${installdir}/gst/${PLATFORM}/loadmodules.sh
+ sed -i 's/.ko//g' ${D}/${installdir}/gst/${PLATFORM}/loadmodules.sh
+ if [ "${PLATFORM}" = "omap3530" ]; then
+ echo "modprobe sdmak" >> ${D}/${installdir}/gst/${PLATFORM}/loadmodules.sh
+ fi
+ chmod 0755 ${D}/${installdir}/gst -R
+ install -d ${D}${sysconfdir}/init.d/
+ install -m 0755 ${WORKDIR}/${GST_TI_RC_SCRIPT} ${D}${sysconfdir}/init.d/gstti-init
}
+PACKAGE_ARCH = "${MACHINE_ARCH}"
PACKAGES += "gstreamer-ti-demo-script"
-FILES_gstreamer-ti-demo-script = "${installdir}/gst/*"
-RDEPENDS_gstreamer-ti-demo-script = "gstreamer-ti"
-RDEPENDS_${PN} = " \
+RDEPENDS_gstreamer-ti-demo-script = "${PN}"
+RRECOMMENDS_${PN} = " \
gst-plugins-base-meta \
gst-plugins-good-meta \
gst-plugins-bad-meta \
gst-plugins-ugly-meta \
ti-dmai-apps"
+FILES_gstreamer-ti-demo-script = "${installdir}/gst/*"
FILES_${PN} += "${libdir}/gstreamer-0.10/*.so ${sysconfdir}"
FILES_${PN}-dev += "${libdir}/gstreamer-0.10/*.a ${libdir}/gstreamer-0.10/*.la"
FILES_${PN}-dbg += "${libdir}/gstreamer-0.10/.debug"
+pkg_postinst_gstreamer-ti-demo-script () {
+ ln -sf ${installdir}/codec-combo/* ${installdir}/gst/${PLATFORM}/
+}
+
+INITSCRIPT_NAME = "gstti-init"
+INITSCRIPT_PARAMS = "start 30 5 2 . stop 40 0 1 6 ."
+
diff --git a/recipes/ti/ti-cgt6x-native_6.1.9.bb b/recipes/ti/ti-cgt6x-native_6.1.9.bb
index f8d9d98c1b..9674e7699c 100644
--- a/recipes/ti/ti-cgt6x-native_6.1.9.bb
+++ b/recipes/ti/ti-cgt6x-native_6.1.9.bb
@@ -1,9 +1,9 @@
require ti-cgt6x.inc
inherit native
-# download ti_cgt_c6000_6.1.9_setup_linux_x86.bin from https://www-a.ti.com/downloads/sds_support/TICodegenerationTools/download.htm and copy in Arago (or OE) download directory.
+# download ti_cgt_c6000_6.1.9_setup_linux_x86.bin from https://www-a.ti.com/downloads/sds_support/TICodegenerationTools/download.htm and copy in Arago/OE download directory.
-SRC_URI = "http://install.source.dir.local/ti_cgt_c6000_6.1.9_setup_linux_x86.bin"
+SRC_URI = "http://install.source.dir.local/ti_cgt_c6000_6.1.9_setup_linux_x86.bin"
BINFILE = "ti_cgt_c6000_6.1.9_setup_linux_x86.bin"
diff --git a/recipes/ti/ti-cgt6x.inc b/recipes/ti/ti-cgt6x.inc
index 35a9252cfe..fa46d12aeb 100644
--- a/recipes/ti/ti-cgt6x.inc
+++ b/recipes/ti/ti-cgt6x.inc
@@ -2,41 +2,8 @@ DESCRIPTION = "Code Generation Tools for TI DaVinci and OMAP"
# This file defines function used for extracting .bin file
-python do_unpack () {
- bb.build.exec_func('base_do_unpack', d)
- bb.build.exec_func('ti_bin_do_unpack', d)
-}
+TI_BIN_UNPK_CMDS="Y:qY:workdir: : "
+TI_BIN_UNPK_WDEXT="/cgt"
-python ti_bin_do_unpack() {
-
- import os
-
- localdata = bb.data.createCopy(d)
- bb.data.update_data(localdata)
-
- binfile = bb.data.getVar('BINFILE', localdata)
-
- # Change to the working directory
- save_cwd = os.getcwd()
- workdir = bb.data.getVar('WORKDIR', localdata)
- workdir = bb.data.expand(workdir, localdata)
- os.chdir(workdir)
-
- # Make the InstallJammer binary executable so we can run it
- os.chmod(binfile, 0755)
-
- # Run the InstallJammer binary and accept the EULA
- filename = "HOME=%s ./%s" % (workdir, binfile)
- f = os.popen(filename,'w')
- print >>f, "Y\n"
- print >>f, "qY\n"
- print >>f, "%s/cgt\n" % workdir
- print >>f, " \n"
- print >>f, " \n"
-
- f.close()
-
- # Return to the previous directory
- os.chdir(save_cwd)
-}
+require ti-eula-unpack.inc
diff --git a/recipes/ti/ti-cmem-module_2.23.1.bb b/recipes/ti/ti-cmem-module_2.23.1.bb
deleted file mode 100644
index 7af1216cd3..0000000000
--- a/recipes/ti/ti-cmem-module_2.23.1.bb
+++ /dev/null
@@ -1,68 +0,0 @@
-DESCRIPTION = "CMEM module for TI ARM/DSP processors"
-inherit module
-
-# compile and run time dependencies
-DEPENDS = "virtual/kernel perl-native"
-RDEPENDS = "update-modules"
-
-# Download codec_engine_2_23_01.tar.gz from https://www-a.ti.com/downloads/sds_support/targetcontent/CE/ce_2_23/index.html and copy in Arago (or OE) download directory.
-
-SRC_URI = "http://install.source.dir.local/codec_engine_2_23_01.tar.gz \
- file://cmem-remove-show-pte-function.patch;patch=1 "
-
-# Set the source directory
-S = "${WORKDIR}/codec_engine_2_23_01"
-
-#This is a kernel module, don't set PR directly
-MACHINE_KERNEL_PR_append = "a"
-
-PV = "2231"
-
-do_compile() {
- # TODO :: KERNEL_CC, etc need replacing with user CC
- # TODO :: Need to understand why OBJDUMP is required for kernel module
- # Unset these since LDFLAGS gets picked up and used incorrectly.... need
- # investigation
-
- unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS
-
- cd ${S}/cetools/packages/ti/sdo/linuxutils/cmem
- make \
- LINUXKERNEL_INSTALL_DIR="${STAGING_KERNEL_DIR}" \
- MVTOOL_PREFIX="${TARGET_PREFIX}" \
- UCTOOL_PREFIX="${TARGET_PREFIX}" \
- clean debug release
-}
-
-do_install () {
- install -d ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp
- install -m 0755 ${S}/cetools/packages/ti/sdo/linuxutils/cmem/src/module/cmemk.ko ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp
-
- cd ${S}/cetools/packages/ti/sdo/linuxutils/cmem/apps
- make \
- LINUXKERNEL_INSTALL_DIR="${STAGING_KERNEL_DIR}" \
- MVTOOL_PREFIX="${TARGET_PREFIX}" \
- UCTOOL_PREFIX="${TARGET_PREFIX}" \
- EXEC_DIR="${D}${datadir}/ti/ti-cmem-apps" \
- install
-}
-
-pkg_postinst () {
- if [ -n "$D" ]; then
- exit 1
- fi
- depmod -a
- update-modules || true
-}
-
-pkg_postrm () {
- update-modules || true
-}
-
-INHIBIT_PACKAGE_STRIP = "1"
-FILES_${PN} = "/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp/cmemk.ko"
-PACKAGES += " ti-cmem-apps"
-FILES_ti-cmem-apps = "${datadir}/ti/ti-cmem-apps/*"
-INSANE_SKIP_ti-cmem-apps = True
-
-
diff --git a/recipes/ti/ti-cmem-module_2.23.bb b/recipes/ti/ti-cmem-module_2.23.bb
deleted file mode 100644
index 0200369501..0000000000
--- a/recipes/ti/ti-cmem-module_2.23.bb
+++ /dev/null
@@ -1,51 +0,0 @@
-DESCRIPTION = "CMEM module for TI ARM/DSP processors"
-inherit module
-
-# compile and run time dependencies
-DEPENDS = "virtual/kernel perl-native"
-RDEPENDS = "update-modules"
-
-SRC_URI = "http://install.source.dir.local/codec_engine_2_23.tar.gz"
-
-# Set the source directory
-S = "${WORKDIR}/codec_engine_2_23"
-
-#This is a kernel module, don't set PR directly
-MACHINE_KERNEL_PR_append = "a"
-PV = "223"
-
-do_compile() {
- # TODO :: KERNEL_CC, etc need replacing with user CC
- # TODO :: Need to understand why OBJDUMP is required for kernel module
- # Unset these since LDFLAGS gets picked up and used incorrectly.... need
- # investigation
-
- unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS
- cd ${S}/cetools/packages/ti/sdo/linuxutils/cmem
- make \
- LINUXKERNEL_INSTALL_DIR="${STAGING_KERNEL_DIR}" \
- MVTOOL_PREFIX="${TARGET_PREFIX}" \
- UCTOOL_PREFIX="${TARGET_PREFIX}" \
- clean debug release
-}
-
-do_install () {
- install -d ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp
- install -m 0755 ${S}/cetools/packages/ti/sdo/linuxutils/cmem/src/module/cmemk.ko ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp
-}
-
-pkg_postinst () {
- if [ -n "$D" ]; then
- exit 1
- fi
- depmod -a
- update-modules || true
-}
-
-pkg_postrm () {
- update-modules || true
-}
-
-INHIBIT_PACKAGE_STRIP = "1"
-FILES_${PN} = "/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp/cmemk.ko"
-
diff --git a/recipes/ti/ti-cmem-module_2.24.01.bb b/recipes/ti/ti-cmem-module_2.24.01.bb
deleted file mode 100644
index 625d292a55..0000000000
--- a/recipes/ti/ti-cmem-module_2.24.01.bb
+++ /dev/null
@@ -1,66 +0,0 @@
-DESCRIPTION = "CMEM module for TI ARM/DSP processors"
-inherit module
-
-# compile and run time dependencies
-DEPENDS = "virtual/kernel perl-native"
-RDEPENDS = "update-modules"
-
-SRC_URI = "http://install.source.dir.local/codec_engine_2_24_01.tar.gz \
- file://cmem-remove-show-pte-function.patch;patch=1 "
-
-# Set the source directory
-S = "${WORKDIR}/codec_engine_2_24_01"
-
-#This is a kernel module, don't set PR directly
-MACHINE_KERNEL_PR_append = "a"
-
-PV = "2241"
-
-do_compile() {
- # TODO :: KERNEL_CC, etc need replacing with user CC
- # TODO :: Need to understand why OBJDUMP is required for kernel module
- # Unset these since LDFLAGS gets picked up and used incorrectly.... need
- # investigation
-
- unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS
-
- cd ${S}/cetools/packages/ti/sdo/linuxutils/cmem
- make \
- LINUXKERNEL_INSTALL_DIR="${STAGING_KERNEL_DIR}" \
- MVTOOL_PREFIX="${TARGET_PREFIX}" \
- UCTOOL_PREFIX="${TARGET_PREFIX}" \
- clean debug release
-}
-
-do_install () {
- install -d ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp
- install -m 0755 ${S}/cetools/packages/ti/sdo/linuxutils/cmem/src/module/cmemk.ko ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp
-
- cd ${S}/cetools/packages/ti/sdo/linuxutils/cmem/apps
- make \
- LINUXKERNEL_INSTALL_DIR="${STAGING_KERNEL_DIR}" \
- MVTOOL_PREFIX="${TARGET_PREFIX}" \
- UCTOOL_PREFIX="${TARGET_PREFIX}" \
- EXEC_DIR="${D}${prefix}/ti/ti-cmem-apps" \
- install
-}
-
-pkg_postinst () {
- if [ -n "$D" ]; then
- exit 1
- fi
- depmod -a
- update-modules || true
-}
-
-pkg_postrm () {
- update-modules || true
-}
-
-INHIBIT_PACKAGE_STRIP = "1"
-FILES_${PN} = "/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp/cmemk.ko"
-PACKAGES += " ti-cmem-apps"
-FILES_ti-cmem-apps = "${prefix}/ti/ti-cmem-apps/*"
-INSANE_SKIP_ti-cmem-apps = True
-
-
diff --git a/recipes/ti/ti-codec-combo-dm355.inc b/recipes/ti/ti-codec-combo-dm355.inc
deleted file mode 100644
index e975793082..0000000000
--- a/recipes/ti/ti-codec-combo-dm355.inc
+++ /dev/null
@@ -1,38 +0,0 @@
-# This file defines function used for extracting .bin file
-
-python do_unpack () {
- bb.build.exec_func('base_do_unpack', d)
- bb.build.exec_func('ti_bin_do_unpack', d)
-}
-
-python ti_bin_do_unpack() {
-
- import os
-
- localdata = bb.data.createCopy(d)
- bb.data.update_data(localdata)
-
- binfile = bb.data.getVar('BINFILE', localdata)
-
- # Change to the working directory
- save_cwd = os.getcwd()
- workdir = bb.data.getVar('WORKDIR', localdata)
- workdir = bb.data.expand(workdir, localdata)
- os.chdir(workdir)
-
- # Make the InstallJammer binary executable so we can run it
- os.chmod(binfile, 0755)
-
- # Run the InstallJammer binary and accept the EULA
- filename = "HOME=%s ./%s" % (workdir, binfile)
- f = os.popen(filename,'w')
- print >>f, "Y\n"
- print >>f, "Y\n"
- print >>f, " qY\n"
- print >>f, "%s\n" % workdir
- f.close()
-
- # Return to the previous directory
- os.chdir(save_cwd)
-}
-
diff --git a/recipes/ti/ti-codec-combo-dm355_1.13.bb b/recipes/ti/ti-codec-combo-dm355_1.13.bb
deleted file mode 100644
index 2db0720c6a..0000000000
--- a/recipes/ti/ti-codec-combo-dm355_1.13.bb
+++ /dev/null
@@ -1,28 +0,0 @@
-require ti-codec.inc
-require ti-codec-combo-dm355.inc
-
-SRC_URI = "http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/dvsdk/codecs/dm355_codecs_setuplinux_1_13_000.bin \
- file://mapdmaq \
- "
-
-BINFILE = "dm355_codecs_setuplinux_1_13_000.bin"
-
-S = "${WORKDIR}/dm355_codecs_1_13_000"
-
-# Yes, the xdc stuff still breaks with a '.' in PWD
-PV = "113"
-PR = "r15"
-
-do_compile() {
- echo "Do nothing"
-}
-
-do_install () {
- # install mapdmaq on target
- install -d ${D}/${installdir}/codec-combo
- install -m 0755 ${WORKDIR}/mapdmaq ${D}/${installdir}/codec-combo
-}
-
-INHIBIT_PACKAGE_STRIP = "1"
-INSANE_SKIP_${PN} = True
-
diff --git a/recipes/ti/ti-codec-combo-dm6446.inc b/recipes/ti/ti-codec-combo-dm6446.inc
deleted file mode 100644
index 44508bf49e..0000000000
--- a/recipes/ti/ti-codec-combo-dm6446.inc
+++ /dev/null
@@ -1,39 +0,0 @@
-# This file defines function used for extracting .bin file
-
-python do_unpack () {
- bb.build.exec_func('base_do_unpack', d)
- bb.build.exec_func('ti_bin_do_unpack', d)
-}
-
-python ti_bin_do_unpack() {
-
- import os
-
- localdata = bb.data.createCopy(d)
- bb.data.update_data(localdata)
-
- binfile = bb.data.getVar('BINFILE', localdata)
-
- # Change to the working directory
- save_cwd = os.getcwd()
- workdir = bb.data.getVar('WORKDIR', localdata)
- workdir = bb.data.expand(workdir, localdata)
- os.chdir(workdir)
-
- # Make the InstallJammer binary executable so we can run it
- os.chmod(binfile, 0755)
-
- # Run the InstallJammer binary and accept the EULA
- filename = "HOME=%s ./%s" % (workdir, binfile)
- f = os.popen(filename,'w')
- print >>f, "Y\n"
- print >>f, "Y\n"
- print >>f, " \n"
- print >>f, " qY\n"
- print >>f, "%s\n" % workdir
- f.close()
-
- # Return to the previous directory
- os.chdir(save_cwd)
-}
-
diff --git a/recipes/ti/ti-codec-combo-omap3530.inc b/recipes/ti/ti-codec-combo-omap3530.inc
deleted file mode 100644
index a884549622..0000000000
--- a/recipes/ti/ti-codec-combo-omap3530.inc
+++ /dev/null
@@ -1,46 +0,0 @@
-# This file defines function used for unpacking the .bin file downloaded over
-# the http and display EULA.
-# BINFILE - name of the install jammer .bin file
-# TARFILE - name of the tar file inside the install jammer
-
-python do_unpack () {
- bb.build.exec_func('base_do_unpack', d)
- bb.build.exec_func('ti_bin_do_unpack', d)
-}
-
-python ti_bin_do_unpack() {
-
- import os
-
- localdata = bb.data.createCopy(d)
- bb.data.update_data(localdata)
-
- binfile = bb.data.getVar('BINFILE', localdata)
- tarfile = bb.data.getVar('TARFILE', localdata)
-
- # Change to the working directory
- save_cwd = os.getcwd()
- workdir = bb.data.getVar('WORKDIR', localdata)
- workdir = bb.data.expand(workdir, localdata)
- os.chdir(workdir)
-
- # Make the InstallJammer binary executable so we can run it
- os.chmod(binfile, 0755)
-
- # Run the InstallJammer binary and accept the EULA
- filename = "HOME=%s ./%s" % (workdir, binfile)
- f = os.popen(filename,'w')
- print >>f, "Y\n"
- print >>f, " qY\n"
- print >>f, "%s\n" % workdir
- f.close()
-
- # Expand the tarball that was created
- cmd = 'tar xz --no-same-owner -f %s -C %s' % (tarfile, workdir)
- ret = os.system(cmd)
-
- # Return to the previous directory
- os.chdir(save_cwd)
- return ret == 0
-}
-
diff --git a/recipes/ti/ti-codec-combo-omap3530_3.16.1.bb b/recipes/ti/ti-codec-combo-omap3530_3.16.1.bb
deleted file mode 100644
index 3a9efdd60d..0000000000
--- a/recipes/ti/ti-codec-combo-omap3530_3.16.1.bb
+++ /dev/null
@@ -1,51 +0,0 @@
-require ti-codec.inc
-require ti-codec-combo-omap3530.inc
-
-SRC_URI = "http://software-dl.ti.com/sdo/sdo_apps_public_sw/omap3530_dvsdk_combos_tspa/omap3530_dvsdk_combos_tspa-3_16_01-Linux-x86.bin"
-
-# Specify names of the InstallJammer binary file and the tarball it extracts
-BINFILE = "omap3530_dvsdk_combos_tspa-3_16_01-Linux-x86.bin"
-TARFILE = "omap3530_dvsdk_combos_tspa/omap3530_dvsdk_combos_tspa_3_16_01.tar.gz"
-
-S = "${WORKDIR}/omap3530_dvsdk_combos_tspa_3_16_01"
-
-DEPENDS="ti-codec-engine ti-dsplink-module"
-
-CODEC_INSTALL_DIR = "${S}"
-
-export CODEGEN_INSTALL_DIR
-
-# Yes, the xdc stuff still breaks with a '.' in PWD
-PV = "3161"
-PR = "r17"
-do_compile() {
- make CE_INSTALL_DIR=${CE_INSTALL_DIR} \
- FC_INSTALL_DIR=${FC_INSTALL_DIR} \
- LINK_INSTALL_DIR=${LINK_INSTALL_DIR} \
- CMEM_INSTALL_DIR=${CMEM_INSTALL_DIR} \
- LPM_INSTALL_DIR=${LPM_INSTALL_DIR} \
- BIOS_INSTALL_DIR=${BIOS_INSTALL_DIR} \
- CODEGEN_INSTALL_DIR=${CODEGEN_INSTALL_DIR} \
- CODEC_INSTALL_DIR=${CODEC_INSTALL_DIR} \
- XDC_INSTALL_DIR=${XDC_INSTALL_DIR} clean
-
- make CE_INSTALL_DIR=${CE_INSTALL_DIR} \
- FC_INSTALL_DIR=${FC_INSTALL_DIR} \
- LINK_INSTALL_DIR=${LINK_INSTALL_DIR} \
- CMEM_INSTALL_DIR=${CMEM_INSTALL_DIR} \
- LPM_INSTALL_DIR=${LPM_INSTALL_DIR} \
- BIOS_INSTALL_DIR=${BIOS_INSTALL_DIR} \
- CODEGEN_INSTALL_DIR=${CODEGEN_INSTALL_DIR} \
- CODEC_INSTALL_DIR=${CODEC_INSTALL_DIR} \
- XDC_INSTALL_DIR=${XDC_INSTALL_DIR}
-}
-
-do_install () {
- install -d ${D}/${installdir}/codec-combo
- cd ${S}
- for file in `find . -name *.x64P`; do
- cp ${file} ${D}/${installdir}/codec-combo
- done
-}
-
-
diff --git a/recipes/ti/ti-codec-combos_3.16.bb b/recipes/ti/ti-codec-combos_3.16.bb
deleted file mode 100644
index 5d8faca30f..0000000000
--- a/recipes/ti/ti-codec-combos_3.16.bb
+++ /dev/null
@@ -1,90 +0,0 @@
-DESCRIPTION = "Codec combos for omap3530"
-DEPENDS = "ti-codec-engine"
-LICENCE = "unknown"
-
-require ti-paths.inc
-
-# Tar-Up Codec Combos from the OMAP DVSDK (http://www.ti.com/dvevmupdates) and drop in files/
-SRC_URI = "file://omap3530_dvsdk_combos_3_16.tar.gz \
- "
-
-S = "${WORKDIR}/omap3530_dvsdk_combos_3_16"
-
-# Yes, the xdc stuff still breaks with a '.' in PWD
-PV = "316"
-PR = "r15"
-
-TARGET = "all"
-
-export CE_INSTALL_DIR="${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/ti-codec-engine/packages;${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/ti-codec-engine/cetools"
-
-# Needed for now since makefile in latest package assumes this is set
-export CODEC_INSTALL_DIR="${S}"
-
-do_compile() {
-
- # For now, remove the reference to Rules.make and swap prod for eval, since this only has eval libs included
- sed -i \
- -e '/Rules.make/d' \
- -e 's:$(FC_INSTALL_DIR)/packages;::g' \
- -e 's:$(XDAIS_INSTALL_DIR)/packages;::g' \
- -e 's:$(FC_INSTALL_DIR)/fctools/packages;::g' \
- -e 's:$(BIOSUTILS_INSTALL_DIR)/packages;::g' \
- -e 's:$(CMEM_INSTALL_DIR)/packages;::g' \
- -e 's:$(LINK_INSTALL_DIR)/packages;::g' \
- -e 's:$(LPM_INSTALL_DIR)/packages;::g' \
- -e s:prod:eval:g \
- ${S}/Makefile
-
- # Fix-up config.bld to swap out hardcoded references to tools paths
- sed -i -e s:/opt/dmsw/cg6x_6_0_16:${TITOOLSDIR}/${TICGTOOLSDIR}:g \
- ${S}/config.bld
-
- # Add make target to allow package to be prepared for building (normally this package is a binary release)
- echo "makebuildable:
- \$(XDC) .make -PR .
-" >> ${S}/Makefile
-
- oe_runmake makebuildable
- oe_runmake clean
- oe_runmake
-}
-
-do_install () {
- echo oe_runmake install
-
- install -d ${D}/${datadir}/ti-codec-combos
-
- cd ${S}
-
- # grab the server executables
- for i in $(find . -name "*.x64P") ; do
- install ${i} ${D}/${datadir}/ti-codec-combos
- done
-
- # copy the generated data sheets as well for reference
- #for i in $(find . -name "*.DataSheet.*") ; do
-
- # infact, just copy all the html files (including the server datasheets) from the distro
- # - this includes top level html (with codec versions) + some qualiTI codec test reports
- for i in $(find . -name "*.html") ; do
- install ${i} ${D}/${datadir}/ti-codec-combos
- done
-
-}
-
-do_stage () {
- install -d ${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/ti-codec-combos
- cp -pPrf ${S}/* ${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/ti-codec-combos
- for codec in encode decode ; do
- mkdir -p ${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/ti-codec-combos/packages/ti/sdo/servers/$codec/package/info/${datadir}/ti-codec-combos
- ln -sf ${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/ti-codec-combos/packages/ti/sdo/servers/$codec/package/info/$codec* ${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/ti-codec-combos/packages/ti/sdo/servers/$codec/package/info/${datadir}/ti-codec-combos
- done
-}
-
-FILES_ti-codec-combos = "${datadir}/ti-codec-combos/*"
-
-INHIBIT_PACKAGE_STRIP = "1"
-
-PACKAGE_ARCH = "${MACHINE_ARCH}"
-
diff --git a/recipes/ti/ti-codec-engine.inc b/recipes/ti/ti-codec-engine.inc
new file mode 100644
index 0000000000..81dae36bda
--- /dev/null
+++ b/recipes/ti/ti-codec-engine.inc
@@ -0,0 +1,27 @@
+DESCRIPTION = "Codec Engine for TI ARM/DSP processors"
+
+# compile time dependencies
+DEPENDS = "ti-xdctools-native ti-xdais-native ti-linuxutils ti-framework-components"
+DEPENDS_append_dm6446 = " ti-cgt6x-native ti-dspbios-native"
+DEPENDS_append_omap3 = " ti-cgt6x-native ti-dspbios-native"
+
+BASE_SRC_URI = "http://install.source.dir.local"
+SRC_URI = "${BASE_SRC_URI}/codec_engine_${PV},lite.tar.gz "
+
+# Set the source directory
+S = "${WORKDIR}/codec_engine_${PV}"
+
+do_compile () {
+ echo "! Do not rebuild for now !"
+}
+
+# stage tree - other packages may need this
+do_stage() {
+ install -d ${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/${PN}
+ cp -pPrf ${S}/* ${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/${PN}/
+}
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
+
+INHIBIT_PACKAGE_STRIP = "1"
diff --git a/recipes/ti/ti-codec-engine_2.21.bb b/recipes/ti/ti-codec-engine_2.21.bb
deleted file mode 100644
index d0cd18e8e9..0000000000
--- a/recipes/ti/ti-codec-engine_2.21.bb
+++ /dev/null
@@ -1,278 +0,0 @@
-require dsplink.inc
-
-INSANE_SKIP_ti-codec-engine-apps = True
-INSANE_SKIP_ti-dsplink-apps = True
-INSANE_SKIP_${PN} = True
-
-DESCRIPTION = "Codec Engine for TI ARM/DSP processors"
-
-DEPENDS = "virtual/kernel perl-native"
-RDEPENDS = "update-modules"
-
-inherit module
-
-# tconf from xdctools dislikes '.' in pwd :/
-PV = "221"
-
-# Get CE tarball from TI website, place in sources and calculate
-# md5sum
-# Look for tarball at https://www-a.ti.com/downloads/sds_support/targetcontent/CE/index.html
-
-SRC_URI = "http://install.tarball.in.source.dir/codec_engine_2_21.tar.gz \
- file://cmem-class-device-27-and-sched-include-fix.patch;patch=1 \
- file://sdma-class-device-and-includes-fix.patch;patch=1 \
- file://dsplink-semaphore-27.patch;patch=1 \
- file://dsplink-add-class-device-create-support.patch;patch=1 \
- file://lpm-device-create-and-semaphore-include-fix.patch;patch=1 \
- file://lpm-make-symbol-warnings-fix.patch;patch=1 \
- file://Makefile-dsplink-gpp \
- file://Makefile-dsplink-dsp \
- file://loadmodules-ti-dsplink-apps.sh \
- file://unloadmodules-ti-dsplink-apps.sh \
- file://loadmodules-ti-codec-engine-apps.sh \
- file://unloadmodules-ti-codec-engine-apps.sh \
-"
-
-S = "${WORKDIR}/codec_engine_2_21"
-
-require ti-paths.inc
-
-export DSPLINK="${S}/cetools/packages/dsplink"
-
-PARALLEL_MAKE = ""
-
-# the include files on top define do_compile for the submodules
-do_compile_append() {
-
-#dsplink already done from inclusion of require dsplink.inc
-
-#lpm bits
- if [ -e ${S}/cetools/packages/ti/bios/power/ ] ; then
-
- # Build the DSP power manager kernel module
- cd ${S}/cetools/packages/ti/bios/power/modules/${DSPPOWERSOC}/lpm
-
- # Still need to move this into the patch file
- if [ $(echo ${KERNEL_VERSION} | cut -c5,6) -gt 26 ] ; then
- sed -i -e s:asm/semaphore:linux/semaphore: lpm_driver.c
- fi
-
- #what is this for?
- rm -f *o
-
- # lpm also needs KERNEL_INSTALL_DIR and MVTOOL_PREFIX which come from ti-paths.inc
- export DSPLINK_REPO=${DSPLINK}/..
- # should move the clean step into the clean stage..
- #oe_runmake clean
- oe_runmake
- fi
-
-#cmemk bits
- if [ -e ${S}/cetools/packages/ti/sdo/linuxutils/cmem ] ; then
- echo "MVTOOL_PREFIX=${TARGET_PREFIX}" > ${S}/Rules.make
- echo "UCTOOL_PREFIX=${TARGET_PREFIX}" >> ${S}/Rules.make
- echo "LINUXKERNEL_INSTALL_DIR=${STAGING_KERNEL_DIR}" >> ${S}/Rules.make
- #export DSPLINK=${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/dsplink
-
- # Build the cmem kernel module and associated test apps
- # We unset CFLAGS because kernel modules need different ones, this is basically a verbatim copy of kernel.bbclass and module-base.bbclass
- unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS
-
- cd ${S}/cetools/packages/ti/sdo/linuxutils/cmem
- oe_runmake clean
- oe_runmake KERNEL_PATH=${STAGING_KERNEL_DIR} \
- KERNEL_SRC=${STAGING_KERNEL_DIR} \
- KERNEL_VERSION=${KERNEL_VERSION} \
- CC="${KERNEL_CC}" LD="${KERNEL_LD}" \
- AR="${KERNEL_AR}"
- fi
-
-#sdma bits
- if [ -e ${S}/cetools/packages/ti/sdo/linuxutils/sdma ] ; then
- echo "MVTOOL_PREFIX=${TARGET_PREFIX}" > ${S}/Rules.make
- echo "UCTOOL_PREFIX=${TARGET_PREFIX}" >> ${S}/Rules.make
- echo "LINUXKERNEL_INSTALL_DIR=${STAGING_KERNEL_DIR}" >> ${S}/Rules.make
-
- # Build the sdma kernel module and associated test apps
- # We unset CFLAGS because kernel modules need different ones, this is basically a verbatim copy of kernel.bbclass and module-base.bbclass
- unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS
-
- cd ${S}/cetools/packages/ti/sdo/linuxutils/sdma
- oe_runmake clean
- oe_runmake KERNEL_PATH=${STAGING_KERNEL_DIR} \
- KERNEL_SRC=${STAGING_KERNEL_DIR} \
- KERNEL_VERSION=${KERNEL_VERSION} \
- CC="${KERNEL_CC}" LD="${KERNEL_LD}" \
- AR="${KERNEL_AR}"
- fi
-
-
-#need to add other modules here, like IRQ, etc
-
-
-#now build the CE examples
- cd ${S}/examples
-
- # Fix paths to arm crosstools, c6x codegen and x86 gcc
- # Also disable uclibc and x86 builds
- sed -i -e s:/db/toolsrc/library/tools/vendors/cs/arm/arm-2007q3:${CROSS_DIR}:g \
- -e s:/db/toolsrc/library/tools/vendors/ti/c6x/6.0.16/Linux:${TITOOLSDIR}/${TICGTOOLSDIR}:g \
- -e s:/db/toolsrc/library/tools/vendors/opensource/gcc/4.1.0/Linux/gcc-4.1.0-glibc-2.3.6/i686-unknown-linux-gnu:/usr:g \
- -e s:arm-none-linux-gnueabi-:${TARGET_PREFIX}:g \
- -e 's:true, // build for uC Linux:false,:g' \
- -e 's:true, // build for PC Linux:false,:g' \
- ${S}/examples/user.bld
-
- # For now, remove all targets, except dm6446 and omap3530
- sed -i \
- -e '/evmDM357/d' \
- -e '/evmDM6446/d' \
- -e '/evmDM6467/d' \
- -e '/evmDM355/d' \
- -e '/evmDM6437/d' \
- -e '/evmDM648/d' \
- -e '/sdp3430/d' \
- -e '/evm2530/d' \
- ${S}/examples/user.bld
-
- # Fix path to c6x codegen
- sed -i -e s:/db/toolsrc/library/tools/vendors/ti/c6x/6.0.16/Linux:${TITOOLSDIR}/${TICGTOOLSDIR}:g \
- xdcpaths.mak
-
- # Start building the CE examples: codecs, extensions, servers (codec bundles) and ARM side apps
- # the DSP side uses CC to point to the c6x codegen, but would get the gcc tool
- unset CC
-
- # Make clean doesn't do what you'd expect, it only cleans stuff you've enabled, so some cruft remains
-
- # First clean
- for i in codecs extensions servers apps ; do
- make -e -C ${S}/examples/ti/sdo/ce/examples/$i clean
- done
-
- # Then build the examples
- for i in codecs extensions servers apps ; do
- make -e -C ${S}/examples/ti/sdo/ce/examples/$i
- done
-}
-
-do_install_append () {
- #driver - kernel module
- install -d ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp
- cp ${S}/cetools/packages/ti/bios/power/modules/${DSPPOWERSOC}/lpm/*.ko ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp || true
- cp ${S}/cetools/packages/ti/sdo/linuxutils/cmem/src/module/cmemk.ko ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp || true
- cp ${S}/cetools/packages/ti/sdo/linuxutils/sdma/src/module/sdmak.ko ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp || true
-
- #library
- #install -d ${D}/${libdir}
- #install -m 0755 ${DSPLINK}/gpp/BUILD/EXPORT/RELEASE/dsplink.lib ${D}/${libdir}
-
- #sample apps - this is very 64x / v5T specific at the moment - we really need CE to give us this list...
- install -d ${D}/${datadir}/ti-codec-engine
- # we change pwd so that find gives us relative path to the files, which we use to create the same structure on the target
- cd ${S}/examples/ti/sdo/ce
-
- #test app module un/load scripts
- install ${WORKDIR}/loadmodules-ti-dsplink-apps.sh ${D}/${datadir}/ti-dsplink
- install ${WORKDIR}/unloadmodules-ti-dsplink-apps.sh ${D}/${datadir}/ti-dsplink
-
- #ce samples
- # first find all the app files named '.out'
- for i in $(find . -name "*.out") ; do
- # first create the directory
- install -d ${D}/${datadir}/ti-codec-engine/`dirname ${i}`
- # now copy the file
- install ${i} ${D}/${datadir}/ti-codec-engine/`dirname ${i}`
- done
-
- # next find all the app files named '.xv5T'
- for i in $(find . -name "*.xv5T") ; do
- # first create the directory
- install -d ${D}/${datadir}/ti-codec-engine/`dirname ${i}`
- # now copy the file
- install ${i} ${D}/${datadir}/ti-codec-engine/`dirname ${i}`
- done
-
- # then find all the app/server files named '.x64P'
- for i in $(find . -name "*.x64P") ; do
- # first create the directory
- install -d ${D}/${datadir}/ti-codec-engine/`dirname ${i}`
- # now copy the file
- install ${i} ${D}/${datadir}/ti-codec-engine/`dirname ${i}`
- done
-
- # finally find all the app files named '.dat'
- for i in $(find . -name "*.dat") ; do
- # first create the directory
- install -d ${D}/${datadir}/ti-codec-engine/`dirname ${i}`
- # now copy the file
- install ${i} ${D}/${datadir}/ti-codec-engine/`dirname ${i}`
- done
-
- #test app module un/load scripts
- install ${WORKDIR}/loadmodules-ti-codec-engine-apps.sh ${D}/${datadir}/ti-codec-engine
- install ${WORKDIR}/unloadmodules-ti-codec-engine-apps.sh ${D}/${datadir}/ti-codec-engine
-
- # we should install the CMEM apps as well here
-
- # finally, strip targets that we're not supporting here
- # - TODO...
-}
-
-PACKAGES =+ "ti-lpm-module ti-cmem-module ti-sdma-module ti-codec-engine-apps"
-
-FILES_ti-lpm-module = "/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp/*lpm*ko"
-FILES_ti-cmem-module = "/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp/cmemk.ko"
-FILES_ti-sdma-module = "/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp/sdmak.ko"
-FILES_ti-codec-engine-apps = "${datadir}/ti-codec-engine/*"
-
-pkg_postinst_ti-lpm-module () {
- if [ -n "$D" ]; then
- exit 1
- fi
- depmod -a
- update-modules || true
-}
-
-pkg_postrm_ti-lpm-module () {
- update-modules || true
-}
-
-pkg_postinst_ti-cmem-module () {
- if [ -n "$D" ]; then
- exit 1
- fi
- depmod -a
- update-modules || true
-}
-
-pkg_postrm_ti-cmem-module () {
- update-modules || true
-}
-
-pkg_postinst_ti-sdma-module () {
- if [ -n "$D" ]; then
- exit 1
- fi
- depmod -a
- update-modules || true
-}
-
-pkg_postrm_ti-sdma-module () {
- update-modules || true
-}
-
-INHIBIT_PACKAGE_STRIP = "1"
-
-PACKAGE_ARCH = "${MACHINE_ARCH}"
-
-#legacy upgrade helpers
-RPROVIDES_ti-cmem-module += "ti-cmemk-module"
-RREPLACES_ti-cmem-module += "ti-cmemk-module"
-
-# ti-dsplink-module can be built by either codec-engine or standalone dsplink - tell it to use this one, else unwanted dependence
-PREFERRED_PROVIDER_ti-dsplink-module = "ti-codec-engine"
-
-#add run-time dependencies - note for kernel module we can only use RRECOMMENDS, since modules might be built into the kernel
-RRECOMMENDS_ti-codec-engine-apps += "ti-dsplink-module ti-lpm-module ti-cmem-module ti-sdma-module"
-
diff --git a/recipes/ti/ti-codec-engine_2.23.1.bb b/recipes/ti/ti-codec-engine_2.23.1.bb
deleted file mode 100644
index e002850a9e..0000000000
--- a/recipes/ti/ti-codec-engine_2.23.1.bb
+++ /dev/null
@@ -1,32 +0,0 @@
-DESCRIPTION = "Codec Engine 2.23.01 for TI ARM/DSP processors"
-
-# compile time dependencies
-DEPENDS_dm6446-evm += "ti-xdctools-native ti-cgt6x-native ti-dspbios-native"
-DEPENDS_omap3evm += "ti-cgt6x-native ti-dspbios-native ti-xdctools-native"
-DEPENDS_armv7a += "ti-cgt6x-native ti-dspbios-native ti-xdctools-native"
-DEPENDS_dm355-evm += "ti-xdctools-native"
-
-# tconf from xdctools dislikes '.' in pwd :/
-PR = "r16"
-PV = "2231"
-
-# Download codec_engine_2_23_01.tar.gz from https://www-a.ti.com/downloads/sds_support/targetcontent/CE/ce_2_23/index.html and copy in Arago (or OE) download directory.
-
-SRC_URI = "http://install.source.dir.local/codec_engine_2_23_01.tar.gz "
-
-# Set the source directory
-S = "${WORKDIR}/codec_engine_2_23_01"
-
-do_compile () {
- echo "! Do not rebuild for now !"
-}
-
-# stage tree - other packages may need this
-do_stage() {
- install -d ${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/${PN}
- cp -pPrf ${S}/* ${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/${PN}/
-}
-
-PACKAGE_ARCH = "${MACHINE_ARCH}"
-INHIBIT_PACKAGE_STRIP = "1"
-
diff --git a/recipes/ti/ti-codec-engine_2.24.01.bb b/recipes/ti/ti-codec-engine_2.24.01.bb
index 9be02046a4..ae0197e3d2 100644
--- a/recipes/ti/ti-codec-engine_2.24.01.bb
+++ b/recipes/ti/ti-codec-engine_2.24.01.bb
@@ -3,14 +3,14 @@ DESCRIPTION = "Codec Engine 2.24.01 for TI ARM/DSP processors"
require ti-paths.inc
# compile time dependencies
-DEPENDS = "ti-xdctools-native"
+DEPENDS = "ti-framework-components ti-xdais-native ti-xdctools-native ti-cgt6x-native"
-DEPENDS_append_dm6446-evm = " ti-cgt6x-native ti-dspbios-native ti-dsplink-module"
-DEPENDS_append_armv7a = " ti-cgt6x-native ti-dspbios-native ti-dsplink-module"
+DEPENDS_append_dm6446 = " ti-dspbios-native ti-linuxutils ti-dsplink-module"
+DEPENDS_append_omap3 = " ti-dspbios-native ti-linuxutils ti-dsplink-module"
# tconf from xdctools dislikes '.' in pwd :/
PR = "r7"
-PV = "2241"
+PV = "2_24_01"
SRC_URI = "http://install.source.dir.local/codec_engine_2_24_01.tar.gz "
@@ -18,19 +18,18 @@ SRC_URI = "http://install.source.dir.local/codec_engine_2_24_01.tar.gz "
S = "${WORKDIR}/codec_engine_2_24_01"
# Define Device variable
-DEVICES_dm6446-evm ?= "DM6446"
-
-# define gppos variable
-GPPOS_dm6446-evm ?= "LINUX_GCC"
+DEVICES_dm6446 ?= "DM6446"
+DEVICES_omap3 ?= "OMAP3530"
+DEVICES_dm355 ?= "DM355"
#define PROGRAM variables
-PROGRAMS = "APP_CLIENT DSP_SERVER"
+PROGRAMS ?= "APP_CLIENT DSP_SERVER"
+PROGRAMS_dm355 = "APP_LOCAL"
LINK_INSTALL_DIR="${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/ti-dsplink-module/packages"
-DSPBIOS_DIR="${STAGING_DIR_NATIVE}/ti-dspbios-native"
-CGT6x_DIR="${STAGING_DIR_NATIVE}/ti-cgt6x-native"
-XDCTOOLS_DIR="${STAGING_DIR_NATIVE}/ti-xdctools-native"
-CE_INSTALL_DIR="${S}"
+CGT6x_DIR = "${STAGING_DIR_NATIVE}/ti-cgt6x-native"
+XDCTOOLS_DIR = "${STAGING_DIR_NATIVE}/ti-xdctools-native"
+CE_INSTALL_DIR = "${S}"
do_compile () {
@@ -38,35 +37,34 @@ do_compile () {
-e s:arm-none-linux-gnueabi-:${TARGET_PREFIX}:g \
${S}/examples/xdcpaths.mak
- for i in codecs extensions servers apps ; do
- cd ${S}/examples/ti/sdo/ce/examples/$i
- make DEVICES="${DEVICES}" \
- GPPOS="${GPPOS}" \
- PROGRAMS="${PROGRAMS}" \
- CE_INSTALL_DIR="${CE_INSTALL_DIR}" \
- XDC_INSTALL_DIR="${XDCTOOLS_DIR}" \
- BIOS_INSTALL_DIR="${DSPBIOS_DIR}"\
- DSPLINK_INSTALL_DIR="${LINK_INSTALL_DIR}" \
- XDAIS_INSTALL_DIR="${CE_INSTALL_DIR}/cetools" \
- FC_INSTALL_DIR="${FC_INSTALL_DIR}" \
- CMEM_INSTALL_DIR="${CE_INSTALL_DIR}/cetools" \
- LPM_INSTALL_DIR="${CE_INSTALL_DIR}/cetools" \
- EDMA3_INSTALL_DIR="${CE_INSTALL_DIR}/cetools" \
- FC_INSTALL_DIR="${CE_INSTALL_DIR}/cetools" \
- CGTOOLS_V5T="${CROSS_DIR}"\
- CGTOOLS_C64P="${CGT6x_DIR}" \
- clean all
- done
+ for i in codecs extensions servers apps ; do
+ cd ${S}/examples/ti/sdo/ce/examples/$i
+ make DEVICES="${DEVICES}" \
+ GPPOS="${GPPOS}" \
+ PROGRAMS="${PROGRAMS}" \
+ CE_INSTALL_DIR="${CE_INSTALL_DIR}" \
+ XDC_INSTALL_DIR="${XDCTOOLS_DIR}" \
+ BIOS_INSTALL_DIR="${BIOS_INSTALL_DIR}"\
+ DSPLINK_INSTALL_DIR="${LINK_INSTALL_DIR}" \
+ XDAIS_INSTALL_DIR="${CE_INSTALL_DIR}/cetools" \
+ FC_INSTALL_DIR="${FC_INSTALL_DIR}" \
+ CMEM_INSTALL_DIR="${CMEM_INSTALL_DIR}" \
+ LPM_INSTALL_DIR="${CE_INSTALL_DIR}/cetools" \
+ EDMA3_INSTALL_DIR="${CE_INSTALL_DIR}/cetools" \
+ CGTOOLS_V5T="${CROSS_DIR}"\
+ CGTOOLS_C64P="${CGT6x_DIR}" \
+ clean all
+ done
}
do_install() {
install -d ${D}/${installdir}/codec-engine-apps
- cp ${S}/examples/apps/system_files/${DEVICES}/loadmodules.sh ${D}/${installdir}/codec-engine-apps
+ cp ${S}/examples/apps/system_files/${DEVICES}/loadmodules.sh ${D}/${installdir}/codec-engine-apps
sed -i 's/insmod/modprobe/g' ${D}/${installdir}/codec-engine-apps/loadmodules.sh
cd ${S}/examples/ti/sdo/ce/examples
- for i in $(find . -name "*.xv5T"); do
+ for i in $(find . -name "*.xv5T"); do
install -d ${D}/${installdir}/codec-engine-apps/`dirname ${i} | cut -f3 -d /`
install ${i} ${D}/${installdir}/codec-engine-apps/`dirname ${i} | cut -f3 -d /`
diff --git a/recipes/ti/ti-codec-engine_2.25.01.bb b/recipes/ti/ti-codec-engine_2.25.01.bb
new file mode 100644
index 0000000000..5a5c7d3d44
--- /dev/null
+++ b/recipes/ti/ti-codec-engine_2.25.01.bb
@@ -0,0 +1,7 @@
+require ti-codec-engine.inc
+
+DEFAULT_PREFERENCE = "-1"
+
+PV = "2_25_00_01"
+PR = "r20"
+
diff --git a/recipes/ti/ti-codecs-dm355.inc b/recipes/ti/ti-codecs-dm355.inc
new file mode 100644
index 0000000000..8a95dc3751
--- /dev/null
+++ b/recipes/ti/ti-codecs-dm355.inc
@@ -0,0 +1,37 @@
+DESCRIPTION = "DM355 Codecs"
+
+BASE_SRC_URI = "http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/dvsdk/codecs"
+SRC_URI = "${BASE_SRC_URI}/dm355_codecs_setuplinux_${PV}.bin \
+ file://mapdmaq \
+ "
+
+S = "${WORKDIR}/dm355_codecs_${PV}"
+
+require ti-paths.inc
+
+BINFILE = "dm355_codecs_setuplinux_${PV}.bin"
+TI_BIN_UNPK_CMDS = "Y:Y: qY:workdir"
+
+require ti-eula-unpack.inc
+
+do_compile() {
+ echo "Do nothing"
+}
+
+do_install () {
+ # install mapdmaq on target
+ install -d ${D}/${installdir}/codecs
+ install -m 0755 ${WORKDIR}/mapdmaq ${D}/${installdir}/codecs
+}
+
+do_stage() {
+ install -d ${CODEC_INSTALL_DIR}
+ cp -pPrf ${S}/* ${CODEC_INSTALL_DIR}
+}
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
+FILES_${PN} = "${installdir}/codecs/mapdmaq"
+
+INHIBIT_PACKAGE_STRIP = "1"
+INSANE_SKIP_${PN} = "True"
diff --git a/recipes/ti/ti-codecs-dm355_1.13.bb b/recipes/ti/ti-codecs-dm355_1.13.bb
new file mode 100644
index 0000000000..bb7adbdb8e
--- /dev/null
+++ b/recipes/ti/ti-codecs-dm355_1.13.bb
@@ -0,0 +1,6 @@
+PV = "1_13_000"
+PR = "r16"
+
+require ti-codecs-dm355.inc
+
+
diff --git a/recipes/ti/ti-codecs-dm365.inc b/recipes/ti/ti-codecs-dm365.inc
new file mode 100644
index 0000000000..b3166bef67
--- /dev/null
+++ b/recipes/ti/ti-codecs-dm365.inc
@@ -0,0 +1,26 @@
+DESCRIPTION = "DM365 Codecs"
+
+BASE_SRC_URI = "http://install.source.dir.local"
+SRC_URI = "${BASE_SRC_URI}/dm365_codecs_${PV}.tar.gz"
+
+S = "${WORKDIR}/dm365_codecs_${PV}"
+
+do_compile() {
+ echo "Do nothing"
+}
+
+do_install () {
+ # install mapdmaq on target
+ install -d ${D}/${installdir}/codecs
+}
+
+do_stage() {
+ install -d ${CODEC_INSTALL_DIR}
+ cp -pPrf ${S}/* ${CODEC_INSTALL_DIR}
+}
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+FILES_${PN} = "${installdir}/codecs"
+INHIBIT_PACKAGE_STRIP = "1"
+INSANE_SKIP_${PN} = True
+
diff --git a/recipes/ti/ti-codecs-dm365_1.0.6.bb b/recipes/ti/ti-codecs-dm365_1.0.6.bb
new file mode 100644
index 0000000000..59f57223a9
--- /dev/null
+++ b/recipes/ti/ti-codecs-dm365_1.0.6.bb
@@ -0,0 +1,6 @@
+
+PV = "01_00_06"
+
+require ti-codecs-dm365.inc
+
+
diff --git a/recipes/ti/ti-codec-combo-dm6446_2.05.bb b/recipes/ti/ti-codecs-dm6446_2.05.bb
index 07d9dffe6b..63a57fef8f 100644
--- a/recipes/ti/ti-codec-combo-dm6446_2.05.bb
+++ b/recipes/ti/ti-codecs-dm6446_2.05.bb
@@ -1,12 +1,14 @@
-DEPENDS="ti-codec-engine ti-dsplink-module"
+DEPENDS="ti-codec-engine ti-linuxutils"
require ti-codec.inc
-require ti-codec-combo-dm6446.inc
SRC_URI = "http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/S1SDKLNX/DVSDK_2_00/exports/dm6446_codecs_setuplinux_2_00_00_22.bin"
S = "${WORKDIR}/dvsdk_2_00_00_22/dm6446_dvsdk_combos_2_05"
BINFILE = "dm6446_codecs_setuplinux_2_00_00_22.bin"
+TI_BIN_UNPK_CMDS="Y: qY:workdir:Y"
+
+require ti-eula-unpack.inc
export ${CODEGEN_INSTALL_DIR}
diff --git a/recipes/ti/ti-cs1-omap3530_1.0.1.bb b/recipes/ti/ti-codecs-omap3530_1.01.bb
index 9779c33b71..104b128282 100644
--- a/recipes/ti/ti-cs1-omap3530_1.0.1.bb
+++ b/recipes/ti/ti-codecs-omap3530_1.01.bb
@@ -1,19 +1,21 @@
require ti-codec.inc
-require ti-cs1-omap3530.inc
SRC_URI = "http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/dvsdk/DVSDK_3_00/latest//exports/cs1omap3530_setuplinux_1_00_01-42.bin"
# Specify names of the InstallJammer binary file and the tarball it extracts
BINFILE = "cs1omap3530_setuplinux_1_00_01-42.bin"
+TI_BIN_UNPK_CMDS = "Y:Y: qY:workdir"
+
+require ti-eula-unpack.inc
S = "${WORKDIR}/dvsdk_3_00_01_42/cs1omap3530_1_00_01"
-DEPENDS="ti-codec-engine ti-dsplink-module"
+DEPENDS="ti-codec-engine ti-linuxutils"
export CODEGEN_INSTALL_DIR
# Yes, the xdc stuff still breaks with a '.' in PWD
-PV = "101"
+PV = "1_00_1"
PR = "r5"
do_compile() {
diff --git a/recipes/ti/ti-codec-combo-omapl137_1.0.bb b/recipes/ti/ti-codecs-omapl137_1.0.bb
index 25baa694f5..269f9a3e00 100644
--- a/recipes/ti/ti-codec-combo-omapl137_1.0.bb
+++ b/recipes/ti/ti-codecs-omapl137_1.0.bb
@@ -6,7 +6,7 @@ SRC_URI = "http://install.source.dir.local/omapl137_dvsdk_combos_1_0.tar.gz"
S = "${WORKDIR}/omapl137_dvsdk_combos_1_0"
# Yes, the xdc stuff still breaks with a '.' in PWD
-PV = "100"
+PV = "1_0"
PR = "r1"
do_compile() {
diff --git a/recipes/ti/ti-cs1-omap3530.inc b/recipes/ti/ti-cs1-omap3530.inc
deleted file mode 100644
index cb9696d61d..0000000000
--- a/recipes/ti/ti-cs1-omap3530.inc
+++ /dev/null
@@ -1,41 +0,0 @@
-
-# This file defines function used for extracting .bin file
-
-python do_unpack () {
- bb.build.exec_func('base_do_unpack', d)
- bb.build.exec_func('ti_bin_do_unpack', d)
-}
-
-python ti_bin_do_unpack() {
-
- import os
-
- localdata = bb.data.createCopy(d)
- bb.data.update_data(localdata)
-
- binfile = bb.data.getVar('BINFILE', localdata)
-
- # Change to the working directory
- save_cwd = os.getcwd()
- workdir = bb.data.getVar('WORKDIR', localdata)
- workdir = bb.data.expand(workdir, localdata)
- os.chdir(workdir)
-
- # Make the InstallJammer binary executable so we can run it
- os.chmod(binfile, 0755)
-
- # Run the InstallJammer binary and accept the EULA
- filename = "HOME=%s ./%s" % (workdir, binfile)
- f = os.popen(filename,'w')
- print >>f, "Y\n"
- print >>f, "Y\n"
- print >>f, " \n"
- print >>f, "qY\n"
- print >>f, "%s\n" % workdir
-
- f.close()
-
- # Return to the previous directory
- os.chdir(save_cwd)
-}
-
diff --git a/recipes/ti/ti-dm355mm-module_1.13.bb b/recipes/ti/ti-dm355mm-module_1.13.bb
index 59cbd69e10..6941d0c741 100644
--- a/recipes/ti/ti-dm355mm-module_1.13.bb
+++ b/recipes/ti/ti-dm355mm-module_1.13.bb
@@ -1,25 +1,19 @@
DESCRIPTION = "User space DMA module for DM355"
-require ti-codec-combo-dm355.inc
+require ti-codecs-dm355.inc
inherit module
-# compile and run time dependencies
-DEPENDS = "virtual/kernel perl-native"
-RDEPENDS = "update-modules"
+PV = "1_13_000"
-SRC_URI = "http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/dvsdk/codecs/dm355_codecs_setuplinux_1_13_000.bin \
- file://dm355mm_1_30.patch;patch=1 \
+SRC_URI = "http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/dvsdk/codecs/dm355_codecs_setuplinux_${PV}.bin \
+ file://dm355mm.patch;patch=1 \
"
+S = "${WORKDIR}/dm355_codecs_${PV}"
+BINFILE="dm355_codecs_setuplinux_${PV}.bin"
-S = "${WORKDIR}/dm355_codecs_1_13_000"
-BINFILE = "dm355_codecs_setuplinux_1_13_000.bin"
-
-# Yes, the xdc stuff still breaks with a '.' in PWD
-PV = "113"
#This is a kernel module, don't set PR directly
MACHINE_KERNEL_PR_append = "a"
-
do_configure() {
find ${S} -name "*.ko" -exec rm {} \; || true
sed -i -e s:include:#include:g ${S}/dm355mm/Rules.make
@@ -39,19 +33,4 @@ do_install () {
install -m 0755 ${S}/dm355mm/module/dm350mmap.ko ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp
}
-pkg_postinst () {
- if [ -n "$D" ]; then
- exit 1
- fi
- depmod -a
- update-modules || true
-}
-
-pkg_postrm () {
- update-modules || true
-}
-
INHIBIT_PACKAGE_STRIP = "1"
-FILES_${PN} = "/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp/dm350mmap.ko"
-
-
diff --git a/recipes/ti/ti-dm365mm-module.inc b/recipes/ti/ti-dm365mm-module.inc
new file mode 100644
index 0000000000..55f48f137e
--- /dev/null
+++ b/recipes/ti/ti-dm365mm-module.inc
@@ -0,0 +1,28 @@
+DESCRIPTION = "User space DMA module for DM365"
+
+BASE_SRC_URI = "http://install.source.dir.local"
+
+SRC_URI = "${BASE_SRC_URI}/dm365mm_${PV}.tar.gz "
+
+S = "${WORKDIR}/dm365mm_${PV}"
+
+inherit module
+
+do_compile() {
+ unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS
+
+ find ${S} -name "*.ko" -exec rm {} \; || true
+ cd ${S}/module
+ make \
+ LINUXKERNEL_INSTALL_DIR="${STAGING_KERNEL_DIR}" \
+ MVTOOL_PREFIX="${TARGET_PREFIX}";
+}
+
+do_install () {
+ install -d ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp
+ install -m 0755 ${S}/module/dm365mmap.ko ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp
+}
+
+INHIBIT_PACKAGE_STRIP = "1"
+INSANE_SKIP_${PN} = True
+
diff --git a/recipes/ti/ti-dm365mm-module_1.0.1.bb b/recipes/ti/ti-dm365mm-module_1.0.1.bb
new file mode 100644
index 0000000000..d929350204
--- /dev/null
+++ b/recipes/ti/ti-dm365mm-module_1.0.1.bb
@@ -0,0 +1,9 @@
+
+require ti-dm365mm-module.inc
+
+PV = "01_00_01"
+
+#This is a kernel module, don't set PR directly
+MACHINE_KERNEL_PR_append = "a"
+
+
diff --git a/recipes/ti/ti-dmai.inc b/recipes/ti/ti-dmai.inc
index e723856cc7..d2fb3cadf3 100644
--- a/recipes/ti/ti-dmai.inc
+++ b/recipes/ti/ti-dmai.inc
@@ -1,15 +1,21 @@
DESCRIPTION = "DMAI for TI ARM/DSP processors"
-# NOTE: Use Brijesh' DMAI development branch. The URL *must* be updated once
-# we have stable DMAI 2.x on gforge.
-SRCREV = "342"
-SRC_URI = "svn://gforge.ti.com/svn/dmai/branches;module=BRANCH_BRIJESH_DMAI_DEV_2_xx;proto=https;user=anonymous;pswd='' \
+BRANCH = "BRANCH_BRIJESH_DMAI_DEV_2_xx"
+BRANCH_6467 = "GITPSP_INT_101009"
+
+SRCREV = "364"
+
+SRC_URI = "svn://gforge.ti.com/svn/dmai/branches;module=${BRANCH};proto=https;user=anonymous;pswd='' \
file://loadmodules-ti-dmai-dm355_al.sh \
+ file://loadmodules-ti-dmai-dm365_al.sh \
file://loadmodules-ti-dmai-dm6446_al.sh \
file://loadmodules-ti-dmai-o3530_al.sh \
"
-S = "${WORKDIR}/BRANCH_BRIJESH_DMAI_DEV_2_xx/davinci_multimedia_application_interface"
+S = "${WORKDIR}/${BRANCH}/davinci_multimedia_application_interface"
+
# Yes, the xdc stuff still breaks with a '.' in PWD
-PV = "2.0+svnr${SRCPV}"
PE = "1"
+PV = "svnr${SRCPV}"
+
+INHIBIT_PACKAGE_STRIP = "1"
diff --git a/recipes/ti/ti-dmai_svn.bb b/recipes/ti/ti-dmai_svn.bb
index a204120fc2..1fa03e22fa 100644
--- a/recipes/ti/ti-dmai_svn.bb
+++ b/recipes/ti/ti-dmai_svn.bb
@@ -7,19 +7,24 @@ inherit module-base
MACHINE_KERNEL_PR_append = "c"
# compile time dependencies
-DEPENDS_omap3evm += "alsa-lib ti-codec-engine ti-xdctools-native ti-dspbios-native ti-cgt6x-native ti-cs1-omap3530 virtual/kernel ti-dsplink-module"
-DEPENDS_armv7a += "alsa-lib ti-codec-engine ti-xdctools-native ti-dspbios-native ti-cgt6x-native ti-cs1-omap3530 virtual/kernel ti-dsplink-module "
-DEPENDS_dm6446-evm += "alsa-lib ti-codec-engine ti-xdctools-native ti-dspbios-native ti-cgt6x-native ti-codec-combo-dm6446 virtual/kernel ti-dsplink-module "
-DEPENDS_dm355-evm += "alsa-lib ti-codec-engine ti-xdctools-native ti-codec-combo-dm355 virtual/kernel"
-DEPENDS_da830-omapl137-evm += "alsa-lib ti-codec-engine ti-xdctools-native ti-dspbios-native ti-cgt6x-native ti-codec-combo-omapl137 virtual/kernel ti-dsplink-module "
+DEPENDS = "alsa-lib ti-framework-components ti-codec-engine ti-xdctools-native"
+
+DEPENDS_append_omap3 = " ti-dspbios-native ti-cgt6x-native ti-codecs-omap3530 virtual/kernel ti-linuxutils"
+DEPENDS_append_dm6446 = " ti-dspbios-native ti-cgt6x-native ti-codecs-dm6446 virtual/kernel ti-linuxutils"
+DEPENDS_append_dm355 = " ti-codecs-dm355 virtual/kernel"
+DEPENDS_append_dm365 = " ti-codecs-dm365 virtual/kernel"
+DEPENDS_append_omapl137 = " ti-dspbios-native ti-cgt6x-native ti-codecs-omapl137 virtual/kernel ti-linuxutils"
+DEPENDS_append_omapl138 = " ti-dspbios-native ti-cgt6x-native ti-codecs-omapl138 virtual/kernel ti-linuxutils"
# Define DMAI build time variables
-TARGET ?= "all"
-TARGET_armv7a ?= "o3530_al"
-TARGET_dm6446-evm ?= "dm6446_al"
-TARGET_da830-omapl137-evm ?= "ol137_al"
+TARGET_omap3 = "o3530_al"
+TARGET_dm6446 = "dm6446_al"
+TARGET_omapl137 = "ol137_al"
+TARGET_omapl138 = "ol138_al"
+TARGET_dm355 = "dm355_al"
+TARGET_dm365 = "dm365_al"
+TARGET ?= "all"
-DSPBIOS_DIR = "${STAGING_DIR_NATIVE}/ti-dspbios-native"
CGT6x_DIR = "${STAGING_DIR_NATIVE}/ti-cgt6x-native"
XDCTOOLS_DIR = "${STAGING_DIR_NATIVE}/ti-xdctools-native"
USER_XDC_PATH = "${CE_INSTALL_DIR}/examples"
@@ -31,7 +36,7 @@ do_configure () {
# PSP kernel is based on older DSS. we need to replace linux/omapfb.h with
# mach/omapfb.h
- if [ ${MACHINE} == "omap3evm" ] ; then
+ if ![ -e ${STAGING_KERNEL_DIR}/include/linux/omapfb.h ] ; then
sed -i -e s:linux/omapfb:mach/omapfb:g ${S}/dmai/packages/ti/sdo/dmai/linux/Display_fbdev.c
sed -i -e s:linux/omapfb:mach/omapfb:g ${S}/dmai/packages/ti/sdo/dmai/linux/priv/_Display.h
fi
@@ -42,9 +47,9 @@ do_compile () {
unset DMAI_INSTALL_DIR
cd ${S}
- make XDC_INSTALL_DIR="${XDCTOOLS_DIR}" clean
+ make XDC_INSTALL_DIR="${XDCTOOLS_DIR}" PLATFORM="${TARGET}" clean
- # TODO: Figure out how to pass the alsa include location, currently
+ # TODO: Figure out how to pass the alsa require location, currently
# LINUXLIBS_INSTALL_DIR is hard-coded for armv5te
make CE_INSTALL_DIR="${CE_INSTALL_DIR}" \
CODEC_INSTALL_DIR="${CODEC}" \
@@ -52,14 +57,14 @@ do_compile () {
LINUXKERNEL_INSTALL_DIR="${STAGING_KERNEL_DIR}" \
XDC_INSTALL_DIR="${XDCTOOLS_DIR}" \
CODEGEN_INSTALL_DIR="${CGT6x_DIR}" \
- BIOS_INSTALL_DIR="${DSPBIOS_DIR}"\
+ BIOS_INSTALL_DIR="${BIOS_INSTALL_DIR}"\
LINUXLIBS_INSTALL_DIR="${STAGING_DIR_HOST}/usr" \
USER_XDC_PATH="${USER_XDC_PATH}" \
CROSS_COMPILE="${CROSS_DIR}/bin/${TARGET_PREFIX}" \
VERBOSE="true" \
- XDAIS_INSTALL_DIR="${CE_INSTALL_DIR}/cetools" \
+ XDAIS_INSTALL_DIR="${XDAIS_INSTALL_DIR}" \
LINK_INSTALL_DIR="${LINK_INSTALL_DIR}" \
- CMEM_INSTALL_DIR="${CE_INSTALL_DIR}/cetools" \
+ CMEM_INSTALL_DIR="${CMEM_INSTALL_DIR}" \
LPM_INSTALL_DIR="${CE_INSTALL_DIR}/cetools" \
PLATFORM="${TARGET}"
}
@@ -97,9 +102,9 @@ FILES_ti-dmai-apps = "${installdir}/dmai-apps/*"
FILES_ti-dmai-tests = "${installdir}/dmai-tests/*"
# run time dependencies
-RDEPENDS_ti-dmai-apps_dm355-evm += "ti-dm355mm-module ti-cmem-module ti-codec-combo-dm355"
-RDEPENDS_ti-dmai-apps_dm6446-evm += "ti-cmem-module ti-dsplink-module ti-codec-combo-dm6446"
-RDEPENDS_ti-dmai-apps_omap3evm += "ti-cmem-module ti-dsplink-module ti-cs1-omap3530 ti-lpm-module ti-sdma-module"
-RDEPENDS_ti-dmai-apps_armv7a += "ti-cmem-module ti-dsplink-module ti-cs1-omap3530 ti-lpm-module ti-sdma-module"
-RDEPENDS_ti-dmai-apps_da830-omapl137-evm += "ti-cmem-module ti-dsplink-module ti-codec-combo-ol137"
+RDEPENDS_ti-dmai-apps_dm355 += "ti-dm355mm-module ti-cmem-module ti-codecs-dm355"
+RDEPENDS_ti-dmai-apps_dm6446 += "ti-cmem-module ti-dsplink-module ti-codecs-dm6446"
+RDEPENDS_ti-dmai-apps_omap3 += "ti-cmem-module ti-dsplink-module ti-codecs-omap3530 ti-lpm-module ti-sdma-module"
+RDEPENDS_ti-dmai-apps_omapl137 += "ti-cmem-module ti-dsplink-module ti-codecs-omapl137"
+RDEPENDS_ti-dmai-apps_omapl138 += "ti-cmem-module ti-dsplink-module ti-codecs-omapl138"
diff --git a/recipes/ti/ti-dspbios-native_5.33.02.bb b/recipes/ti/ti-dspbios-native_5.33.02.bb
index 02c2d5690f..e1cf5fbee6 100644
--- a/recipes/ti/ti-dspbios-native_5.33.02.bb
+++ b/recipes/ti/ti-dspbios-native_5.33.02.bb
@@ -1,7 +1,7 @@
require ti-dspbios.inc
inherit native
-# download bios_setuplinux_5_33_02.bin from https://www-a.ti.com/downloads/sds_support/targetcontent/bios/bios_5_33/bios_5_33_02/index_external.html and copy in Arago (or OE) installation directory
+# download bios_setuplinux_5_33_02.bin from https://www-a.ti.com/downloads/sds_support/targetcontent/bios/bios_5_33/bios_5_33_02/index_external.html and copy in Arago/OE installation directory
SRC_URI = "http://install.source.dir.local/bios_setuplinux_5_33_02.bin"
BINFILE="bios_setuplinux_5_33_02.bin"
diff --git a/recipes/ti/ti-dspbios.inc b/recipes/ti/ti-dspbios.inc
index 9e79216554..08d797a6e3 100644
--- a/recipes/ti/ti-dspbios.inc
+++ b/recipes/ti/ti-dspbios.inc
@@ -1,40 +1,6 @@
DESCRIPTION = "TI DSP/BIOS for Davinci and OMAP processor"
-# This file defines function used for extracting .bin file
+TI_BIN_UNPK_CMDS="Y: qY:workdir:Y"
-python do_unpack () {
- bb.build.exec_func('base_do_unpack', d)
- bb.build.exec_func('ti_bin_do_unpack', d)
-}
-
-python ti_bin_do_unpack() {
-
- import os
-
- localdata = bb.data.createCopy(d)
- bb.data.update_data(localdata)
-
- binfile = bb.data.getVar('BINFILE', localdata)
-
- # Change to the working directory
- save_cwd = os.getcwd()
- workdir = bb.data.getVar('WORKDIR', localdata)
- workdir = bb.data.expand(workdir, localdata)
- os.chdir(workdir)
-
- # Make the InstallJammer binary executable so we can run it
- os.chmod(binfile, 0755)
-
- # Run the InstallJammer binary and accept the EULA
- filename = "HOME=%s ./%s" % (workdir, binfile)
- f = os.popen(filename,'w')
- print >>f, "Y\n"
- print >>f, " qY\n"
- print >>f, "%s\n" % workdir
- print >>f, "Y\n"
- f.close()
-
- # Return to the previous directory
- os.chdir(save_cwd)
-}
+require ti-eula-unpack.inc
diff --git a/recipes/ti/ti-dsplink-module_1.61.3.bb b/recipes/ti/ti-dsplink-module_1.61.3.bb
index 2cdf1a8e28..41fd212a0d 100644
--- a/recipes/ti/ti-dsplink-module_1.61.3.bb
+++ b/recipes/ti/ti-dsplink-module_1.61.3.bb
@@ -6,10 +6,11 @@ inherit module
# compile and run time dependencies
DEPENDS += "virtual/kernel perl-native ti-dspbios-native ti-cgt6x-native update-modules ti-xdctools-native"
-# tconf from xdctools dislikes '.' in pwd :/
#This is a kernel module, don't set PR directly
MACHINE_KERNEL_PR_append = "b"
-PV = "1613"
+
+# tconf from xdctools dislikes '.' in pwd :/
+PV = "1_61_03"
SRC_URI = "http://install.source.dir.local/dsplink_1_61_03.tar.gz \
file://loadmodules-ti-dsplink-apps.sh \
@@ -20,16 +21,16 @@ S = "${WORKDIR}/dsplink_1_61_03"
# DSPLINK - Config Variable for different platform
DSPLINKPLATFORM ?= "DAVINCI"
-DSPLINKPLATFORM_dm6446-evm ?= "DAVINCI"
-DSPLINKPLATFORM_da830-omapl137-evm ?= "OMAPL1XX"
+DSPLINKPLATFORM_dm6446 ?= "DAVINCI"
+DSPLINKPLATFORM_omapl137 ?= "OMAPL1XX"
DSPLINKDSPCFG ?= "DM6446GEMSHMEM"
-DSPLINKDSPCFG_dm6446-evm ?= "DM6446GEMSHMEM"
-DSPLINKDSPCFG_da830-omapl137-evm ?= "OMAPL1XXGEMSHMEM"
+DSPLINKDSPCFG_dm6446 ?= "DM6446GEMSHMEM"
+DSPLINKDSPCFG_omapl137 ?= "OMAPL1XXGEMSHMEM"
DSPLINKGPPOS ?= "MVL5G"
-DSPLINKGPPOS_dm6446-evm ?= "MVL5G"
-DSPLINKGPPOS_da830-omapl137-evm ?= "MVL5G"
+DSPLINKGPPOS_dm6446 ?= "MVL5G"
+DSPLINKGPPOS_omapl137 ?= "MVL5G"
DSPLINK = "${S}/dsplink"
export DSPLINK
@@ -65,7 +66,7 @@ do_compile() {
# Build the gpp user space library
cd ${DSPLINK}/gpp/src/api
- ${STAGING_TI_XDCTOOL_INSTALL_DIR}/gmake \
+ make \
CROSS_COMPILE="${TARGET_PREFIX}" \
CC="${KERNEL_CC}" \
AR="${KERNEL_AR}" \
@@ -77,7 +78,7 @@ do_compile() {
# Build the gpp kernel space (debug and release)
cd ${DSPLINK}/gpp/src
- ${STAGING_TI_XDCTOOL_INSTALL_DIR}/gmake \
+ make \
OBJDUMP="${TARGET_PREFIX}objdump" \
CROSS_COMPILE="${TARGET_PREFIX}" \
CC="${KERNEL_CC}" \
@@ -90,7 +91,7 @@ do_compile() {
# Build the gpp samples
cd ${DSPLINK}/gpp/src/samples
- ${STAGING_TI_XDCTOOL_INSTALL_DIR}/gmake \
+ make \
BASE_TOOLCHAIN="${CROSS_DIR}" \
BASE_CGTOOLS="${BASE_TOOLCHAIN}/bin" \
OSINC_PLATFORM="${CROSS_DIR}/lib/gcc/${TARGET_SYS}/$(${TARGET_PREFIX}gcc -dumpversion)/include" \
@@ -107,14 +108,14 @@ do_compile() {
# Build the dsp library (debug and release)
cd ${DSPLINK}/dsp/src
- ${STAGING_TI_XDCTOOL_INSTALL_DIR}/gmake \
+ make \
BASE_CGTOOLS="${STAGING_TI_CGT6x_DIR}" \
BASE_SABIOS="${STAGING_TI_DSPBIOS_DIR}" \
clean all
# Build the dsp samples (debug and release)
cd ${DSPLINK}/dsp/src/samples
- ${STAGING_TI_XDCTOOL_INSTALL_DIR}/gmake \
+ make \
BASE_CGTOOLS="${STAGING_TI_CGT6x_DIR}" \
BASE_SABIOS="${STAGING_TI_DSPBIOS_DIR}" \
clean all
@@ -148,22 +149,9 @@ do_stage () {
cp -pPrf ${S}/* ${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/${PN}/packages
}
-pkg_postrm () {
- update-modules || true
-}
-
-pkg_postinst () {
- if [ -n "$D" ]; then
- exit 1
- fi
- depmod -a
- update-modules || true
-}
-
INHIBIT_PACKAGE_STRIP = "1"
PACKAGES += " ti-dsplink-apps"
-FILES_${PN} = "/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp/*"
FILES_ti-dsplink-apps = "${installdir}/dsplink/*"
# Disable QA check untils we figure out how to pass LDFLAGS in build
diff --git a/recipes/ti/ti-dvsdk-demos.inc b/recipes/ti/ti-dvsdk-demos.inc
new file mode 100644
index 0000000000..44770c5207
--- /dev/null
+++ b/recipes/ti/ti-dvsdk-demos.inc
@@ -0,0 +1,41 @@
+DESCRIPTION = "DVSDK Demo applications for TI ARM/DSP processors"
+
+DEPENDS += "ti-dmai"
+DEPENDS += "alsa-lib libpng freetype jpeg"
+
+SRC_URI = "${BASE_SRC_URI}/dvsdk_demos_${PV}.tar.gz "
+
+S = "${WORKDIR}/dvsdk_demos_${PV}"
+
+inherit module-base
+require ti-multimedia-common.inc
+
+# Should go into machine config
+TARGET ?= "all"
+TARGET_dm355 ?= "dm355"
+TARGET_dm365-evm ?= "dm365"
+
+VERBOSE = "true"
+
+do_compile () {
+ cd ${S}
+ make -e clean
+ make -e ${PLATFORM}
+}
+do_install () {
+ cd ${S}
+ make -e ${TARGET} EXEC_DIR=${D}/${installdir}/dvsdk-demos install
+}
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+
+RDEPENDS_ti-dvsdk-demos_dm355 += "ti-dm355mm-module ti-linuxutils alsa-lib libpng freetype jpeg"
+RDEPENDS_ti-dvsdk-demos_dm365-evm += "ti-dm365mm-module ti-linuxutils alsa-lib libpng freetype jpeg"
+
+FILES_${PN} = "${installdir}/dvsdk-demos/*"
+
+
+BASE_SRC_URI ?= "http://install.source.dir.local"
+
+INHIBIT_PACKAGE_STRIP = "1"
+INSANE_SKIP_${PN} = "True"
diff --git a/recipes/ti/ti-dvsdk-demos_3.10.00.00.bb b/recipes/ti/ti-dvsdk-demos_3.10.00.00.bb
new file mode 100644
index 0000000000..d724993130
--- /dev/null
+++ b/recipes/ti/ti-dvsdk-demos_3.10.00.00.bb
@@ -0,0 +1,5 @@
+require ti-dvsdk-demos.inc
+
+PV ?= "3_10_00_00"
+
+
diff --git a/recipes/ti/ti-eula-unpack.inc b/recipes/ti/ti-eula-unpack.inc
new file mode 100644
index 0000000000..1c5a776e0b
--- /dev/null
+++ b/recipes/ti/ti-eula-unpack.inc
@@ -0,0 +1,62 @@
+# This file defines function used for unpacking the .bin file downloaded over
+# the http and display EULA.
+# BINFILE - name of the install jammer .bin file
+# TARFILE - name of the tar file inside the install jammer
+# TI_BIN_UNPK_CMDS - contains list of commands separated with colon to be
+# passed while unpacking the bin file. The keyword
+# workdir expands to WORKDIR and commands are appendded
+# with '\n'. Eg. TI_BIN_UNPK_CMDS="Y:Y: qY:workdir"
+# TI_BIN_UNPK_WDEXT - This variable extends workdir path, if user wants to put
+# the output in some internal directory
+
+python do_unpack () {
+ bb.build.exec_func('base_do_unpack', d)
+ bb.build.exec_func('ti_bin_do_unpack', d)
+}
+
+TI_BIN_UNPK_WDEXT += ""
+python ti_bin_do_unpack() {
+
+ import os
+
+ localdata = bb.data.createCopy(d)
+ bb.data.update_data(localdata)
+
+ binfile = bb.data.getVar('BINFILE', localdata)
+ binfile = bb.data.expand(binfile, localdata)
+
+ # Change to the working directory
+ save_cwd = os.getcwd()
+ workdir = bb.data.getVar('WORKDIR', localdata)
+ workdir = bb.data.expand(workdir, localdata)
+ os.chdir(workdir)
+
+ # Get unpack commands
+ cmd_string = bb.data.getVar('TI_BIN_UNPK_CMDS', localdata)
+ cmd_list = cmd_string.split( ":" )
+
+ # Make the InstallJammer binary executable so we can run it
+ os.chmod(binfile, 0755)
+
+ # Run the InstallJammer binary and accept the EULA
+ filename = "HOME=%s ./%s" % (workdir, binfile)
+ f = os.popen(filename,'w')
+ for cmd in cmd_list:
+ if cmd == "workdir":
+ wdext = bb.data.getVar('TI_BIN_UNPK_WDEXT', localdata)
+ wdext = bb.data.expand(wdext, localdata)
+ cmd = workdir+wdext
+ print >>f, "%s\n" % cmd
+ f.close()
+
+ # Expand the tarball that was created if required
+ tarfile = bb.data.getVar('TARFILE', localdata)
+ if bool(tarfile) == True:
+ tarfile = bb.data.expand(tarfile, localdata)
+ tcmd = 'tar xz --no-same-owner -f %s -C %s' % (tarfile, workdir)
+ os.system(tcmd)
+
+ # Return to the previous directory
+ os.chdir(save_cwd)
+}
+
diff --git a/recipes/ti/ti-framework-components.inc b/recipes/ti/ti-framework-components.inc
new file mode 100644
index 0000000000..cd8a56193e
--- /dev/null
+++ b/recipes/ti/ti-framework-components.inc
@@ -0,0 +1,23 @@
+DESCRIPTION = "Framework Components for TI ARM/DSP processors"
+
+SRC_URI = "http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/fc/${PV}/exports/framework_components_${PV}.tar.gz"
+
+require ti-paths.inc
+
+S = "${WORKDIR}/framework_components_${PV}"
+
+# compile time dependencies
+DEPENDS += "ti-xdctools-native ti-xdais-native ti-linuxutils"
+
+do_compile () {
+ echo "! Do not rebuild for now !"
+}
+
+# stage tree - other packages may need this
+do_stage() {
+ install -d ${FC_INSTALL_DIR}
+ cp -pPrf ${S}/* ${FC_INSTALL_DIR}
+}
+
+PACKAGE_ARCH = "${MACHINE_ARCH}"
+INHIBIT_PACKAGE_STRIP = "1"
diff --git a/recipes/ti/ti-framework-components_2.25.00.04.bb b/recipes/ti/ti-framework-components_2.25.00.04.bb
new file mode 100644
index 0000000000..5ca4704364
--- /dev/null
+++ b/recipes/ti/ti-framework-components_2.25.00.04.bb
@@ -0,0 +1,5 @@
+require ti-framework-components.inc
+
+PV = "2_25_00_04"
+
+
diff --git a/recipes/ti/ti-linuxutils.inc b/recipes/ti/ti-linuxutils.inc
new file mode 100644
index 0000000000..b1f876d0d3
--- /dev/null
+++ b/recipes/ti/ti-linuxutils.inc
@@ -0,0 +1,82 @@
+DESCRIPTION = "MFP Linux utils for TI ARM/DSP processors"
+
+BASE_SRC_URI = "http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/linuxutils/${PV}/exports"
+SRC_URI = "${BASE_SRC_URI}/linuxutils_${PV}.tar.gz "
+
+S = "${WORKDIR}/linuxutils_${PV}"
+
+require ti-multimedia-common.inc
+
+#This is a kernel module, don't set PR directly
+MACHINE_KERNEL_PR_append = "a"
+
+inherit module
+
+do_compile() {
+ unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS
+
+ case ${SOC_FAMILY} in
+ dm365)
+ modules="cmem edma";;
+ omap3)
+ modules="cmem sdma";;
+ *)
+ modules="cmem"
+ esac
+
+ for module in $modules ; do
+ cd ${S}/packages/ti/sdo/linuxutils/$module
+ make \
+ LINUXKERNEL_INSTALL_DIR="${STAGING_KERNEL_DIR}" \
+ MVTOOL_PREFIX="${TARGET_PREFIX}" \
+ UCTOOL_PREFIX="${TARGET_PREFIX}" \
+ clean debug release
+ done
+}
+
+do_install () {
+ install -d ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp
+ # Install CMEM
+ for module in $(find ${S}/packages/ti/sdo/linuxutils/ -name "*.ko") ; do
+ install -m 0755 $module ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp
+ done
+ cd ${S}/packages/ti/sdo/linuxutils/cmem/apps
+ make \
+ LINUXKERNEL_INSTALL_DIR="${STAGING_KERNEL_DIR}" \
+ MVTOOL_PREFIX="${TARGET_PREFIX}" \
+ UCTOOL_PREFIX="${TARGET_PREFIX}" \
+ EXEC_DIR="${D}${installdir}/ti-linuxutils-app/cmem-app" \
+ install
+ # Install EDMA
+ if [ ${SOC_FAMILY} == "dm365" ] ; then
+ cd ${S}/packages/ti/sdo/linuxutils/edma/apps
+ make \
+ LINUXKERNEL_INSTALL_DIR="${STAGING_KERNEL_DIR}" \
+ MVTOOL_PREFIX="${TARGET_PREFIX}" \
+ UCTOOL_PREFIX="${TARGET_PREFIX}" \
+ EXEC_DIR="${D}${installdir}/ti-linuxutils-app/edma-app" \
+ install
+ fi
+}
+
+# stage tree - other packages may need this
+do_stage() {
+ install -d ${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/${PN}
+ cp -pPrf ${S}/* ${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/${PN}/
+}
+
+PACKAGES =+ " ti-cmem-module \
+ ti-sdma-module \
+ ti-edma-module \
+ ti-irq-module \
+ ti-linuxutils-app"
+
+FILES_ti-cmem-module = "/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp/cmem*.ko"
+FILES_ti-sdma-module = "/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp/sdma*.ko"
+FILES_ti-edma-module = "/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp/edma*.ko"
+FILES_ti-irq-module = "/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp/irq*.ko"
+
+FILES_ti-linuxutils-app = "${installdir}/ti-linuxutils-app/*/*"
+
+INSANE_SKIP_ti-linuxutils-app = "True"
+INHIBIT_PACKAGE_STRIP = "1"
diff --git a/recipes/ti/ti-linuxutils_2.25.01.06.bb b/recipes/ti/ti-linuxutils_2.25.01.06.bb
new file mode 100644
index 0000000000..a75fdba30d
--- /dev/null
+++ b/recipes/ti/ti-linuxutils_2.25.01.06.bb
@@ -0,0 +1,3 @@
+require ti-linuxutils.inc
+
+PV = "2_25_01_06"
diff --git a/recipes/ti/ti-lpm-module_2.23.1.bb b/recipes/ti/ti-lpm-module_2.23.1.bb
deleted file mode 100644
index b478f64a98..0000000000
--- a/recipes/ti/ti-lpm-module_2.23.1.bb
+++ /dev/null
@@ -1,65 +0,0 @@
-DESCRIPTION = "LPM module for TI OMAP3 processors"
-
-require ti-paths.inc
-inherit module
-# compile and run time dependencies
-DEPENDS = " virtual/kernel perl-native ti-dsplink-module"
-
-#This is a kernel module, don't set PR directly
-MACHINE_KERNEL_PR_append = "a"
-
-PV = "2231"
-
-# Download codec_engine_2_23_01.tar.gz from https://www-a.ti.com/downloads/sds_support/targetcontent/CE/ce_2_23/index.html and copy in Arago (or OE) download directory.
-
-SRC_URI = "http://install.source.dir.local/codec_engine_2_23_01.tar.gz "
-
-# Set the source directory
-S = "${WORKDIR}/codec_engine_2_23_01"
-
-export DSPLINK="${S}/cetools/packages/dsplink"
-
-LPMDSPPOWERSOC ?= "omap3530"
-LPMDSPPOWERSOC_omap3evm ?= "omap3530"
-
-do_compile () {
- # TODO :: KERNEL_CC, etc need replacing with user CC
- # TODO :: Need to understand why OBJDUMP is required for kernel module
- # Unset these since LDFLAGS gets picked up and used incorrectly.... need
- # investigation
-
- unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS
-
- cd ${S}/cetools/packages/ti/bios/power/modules/${LPMDSPPOWERSOC}/lpm
- make \
- DSPLINK_REPO="${DSPLINK}/.." \
- LINUXKERNEL_INSTALL_DIR="${STAGING_KERNEL_DIR}" \
- MVTOOL_PREFIX="${TARGET_PREFIX}" \
- clean default
-}
-
-do_install () {
-
- # LPM/CMEM/SDMA drivers - kernel modules
- install -d ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp
- install -m 0755 ${S}/cetools/packages/ti/bios/power/modules/${LPMDSPPOWERSOC}/lpm/*.ko ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp
-}
-
-
-pkg_postinst () {
- if [ -n "$D" ]; then
- exit 1
- fi
- depmod -a
- update-modules || true
-}
-
-pkg_postrm () {
- update-modules || true
-}
-
-INHIBIT_PACKAGE_STRIP = "1"
-
-FILES_${PN} = "/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp/*lpm*ko"
-RDEPENDS += " ti-dsplink-module"
-
diff --git a/recipes/ti/ti-lpm-module_2.24.01.bb b/recipes/ti/ti-lpm-module_2.24.01.bb
index 8c41dbf8c2..32bc02b1e5 100644
--- a/recipes/ti/ti-lpm-module_2.24.01.bb
+++ b/recipes/ti/ti-lpm-module_2.24.01.bb
@@ -1,29 +1,24 @@
DESCRIPTION = "LPM module for TI OMAP3 processors"
-require ti-paths.inc
-
-inherit module
-# compile and run time dependencies
-DEPENDS = " virtual/kernel perl-native ti-dsplink-module"
-
-#This is a kernel module, don't set PR directly
-MACHINE_KERNEL_PR_append = "a"
+DEPENDS = "ti-linuxutils"
-PV = "2241"
+# tconf breaks with '.' in PWD
+PV = "2_24_01"
SRC_URI = "http://install.source.dir.local/local_power_manager_1_24.tar.gz"
# Set the source directory
S = "${WORKDIR}/local_power_manager_1_24"
-do_compile () {
- # TODO :: KERNEL_CC, etc need replacing with user CC
- # TODO :: Need to understand why OBJDUMP is required for kernel module
- # Unset these since LDFLAGS gets picked up and used incorrectly.... need
- # investigation
+require ti-paths.inc
- unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS
+#This is a kernel module, don't set PR directly
+MACHINE_KERNEL_PR_append = "a"
+inherit module
+
+do_compile () {
+ unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS
cd ${S}/packages/ti/bios/power/modules/${LPMDSPPOWERSOC}/lpm
make \
DSPLINK_REPO="${DSPLINK}/.." \
@@ -33,27 +28,13 @@ do_compile () {
}
do_install () {
-
# LPM/CMEM/SDMA drivers - kernel modules
install -d ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp
- install -m 0755 ${S}/packages/ti/bios/power/modules/${LPMDSPPOWERSOC}/lpm/*.ko ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp
+ install -m 0755 ${S}/packages/ti/bios/power/modules/${LPMDSPPOWERSOC}/lpm/*.ko ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp
}
-
-pkg_postinst () {
- if [ -n "$D" ]; then
- exit 1
- fi
- depmod -a
- update-modules || true
-}
-
-pkg_postrm () {
- update-modules || true
-}
-
-INHIBIT_PACKAGE_STRIP = "1"
+RDEPENDS_${PN} += " ti-dsplink-module"
FILES_${PN} = "/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp/*lpm*ko"
-RDEPENDS += " ti-dsplink-module"
+INHIBIT_PACKAGE_STRIP = "1"
diff --git a/recipes/ti/ti-multimedia-common.inc b/recipes/ti/ti-multimedia-common.inc
new file mode 100644
index 0000000000..170e77bfec
--- /dev/null
+++ b/recipes/ti/ti-multimedia-common.inc
@@ -0,0 +1,55 @@
+installdir = "${datadir}/ti"
+
+# needed for configuro:
+export CGTOOLS_V5T="${CROSS_DIR}"
+export CC_V5T="bin/${TARGET_PREFIX}gcc"
+export CROSS_COMPILE = "${CROSS_DIR}/bin/${TARGET_PREFIX}"
+export MVTOOL_PREFIX="${TARGET_PREFIX}"
+export MVTOOL_DIR="${CROSS_DIR}"
+export CSTOOL_PREFIX="${TARGET_PREFIX}"
+export CSTOOL_DIR="${CROSS_DIR}"
+export LINUXKERNEL_INSTALL_DIR=${STAGING_KERNEL_DIR}
+
+export CODEC_INSTALL_DIR = "${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/ti-codecs"
+
+export LINUXLIBS_INSTALL_DIR = "${STAGING_DIR_HOST}/usr"
+export CODEGEN_INSTALL_DIR = "${STAGING_DIR_NATIVE}/ti-cgt6x-native"
+export XDC_INSTALL_DIR = "${STAGING_DIR_NATIVE}/ti-xdctools-native"
+export XDAIS_INSTALL_DIR = "${STAGING_DIR_NATIVE}/ti-xdais"
+export BIOS_INSTALL_DIR = "${STAGING_DIR_NATIVE}/ti-dspbios-native"
+
+export CE_INSTALL_DIR = "${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/ti-codec-engine"
+export FC_INSTALL_DIR = "${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/ti-framework-components"
+export LINUXKERNEL_INSTALL_DIR = "${STAGING_KERNEL_DIR}"
+export LINUXUTILS_INSTALL_DIR = "${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/ti-linuxutils"
+export CMEM_INSTALL_DIR = "${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/ti-linuxutils"
+#export LINK_INSTALL_DIR = "${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/ti-codec-engine/cetools"
+export LINK_INSTALL_DIR = "${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/ti-dsplink-module"
+export LPM_INSTALL_DIR = "${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/ti-codec-engine/cetools"
+export DMAI_INSTALL_DIR = "${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/ti-dmai"
+
+export USER_XDC_PATH = "${CE_INSTALL_DIR}/examples"
+export XDC_TARGET = gnu.targets.arm.GCArmv5T
+
+XDC_PLATFORM_dm355 = ti.platforms.evmDM355
+XDC_PLATFORM_dm365 = ti.platforms.evmDM365
+XDC_PLATFORM_dm6446 = ti.platforms.evmDM6446
+XDC_PLATFORM_omap3 = ti.platforms.evm3530
+XDC_PLATFORM_omapl137 = ti.platforms.omapl137
+XDC_PLATFORM_omapl138 = ti.platforms.omapl138
+export XDC_PLATFORM
+
+export PLATFORM_XDC = ${XDC_PLATFORM}
+
+LPMDSPPOWERSOC_omap3 = "omap3530"
+
+export LPMDSPPOWERSOC
+
+PLATFORM_dm355 = "dm355"
+PLATFORM_dm365 = "dm365"
+PLATFORM_dm6446 = "dm6446"
+PLATFORM_omap3 = "omap3530"
+PLATFORM_omapl137 = "ol137"
+PLATFORM_omapl138 = "ol138"
+export PLATFORM
+
diff --git a/recipes/ti/ti-paths.inc b/recipes/ti/ti-paths.inc
index 9ac7ac69e1..3a9eb3dbbc 100644
--- a/recipes/ti/ti-paths.inc
+++ b/recipes/ti/ti-paths.inc
@@ -7,14 +7,8 @@
# export some more variable to point to external TI tools
# information is duplicated between the js and make based tools
-# needed for configuro:
-export CGTOOLS_V5T="${CROSS_DIR}"
-export CC_V5T="bin/${TARGET_PREFIX}gcc"
-export MVTOOL_PREFIX="${TARGET_PREFIX}"
-export MVTOOL_DIR="${CROSS_DIR}"
-export CSTOOL_PREFIX="${TARGET_PREFIX}"
-export CSTOOL_DIR="${CROSS_DIR}"
-export LINUXKERNEL_INSTALL_DIR=${STAGING_KERNEL_DIR}
+
+require ti-multimedia-common.inc
export PLATFORM
@@ -22,25 +16,14 @@ export CROSS_COMPILE = "${CROSS_DIR}/bin/${TARGET_PREFIX}"
# This tells codec engine which targets to build
DEVICES ?= "DM6446"
-DEVICES_omap5912osk = "fixme-ti-paths.inc"
-
-# Set a default for armv7a now, change this when omap4 and friends become available
-DEVICES_armv7a = "OMAP3530"
-
-DEVICES_davinci-sffsdr = "DM6446"
-DEVICES_davinci-dvevm = "DM6446"
+DEVICES_omap3 = "OMAP3530"
+DEVICES_dm6446 = "DM6446"
DSPLINKPLATFORM ?= "DAVINCI"
-DSPLINKPLATFORM_omap5912osk = "OMAP"
-
-DSPLINKPLATFORM_davinci-sffsdr = "DAVINCI"
-DSPLINKPLATFORM_davinci-dvevm = "DAVINCI"
+DSPLINKPLATFORM_dm6446 = "DAVINCI"
PLATFORM ?= "dm6446"
-PLATFORM_omap5912osk = "OMAP"
-
-PLATFORM_davinci-sffsdr = "dm6446"
-PLATFORM_davinci-dvevm = "dm6446"
+PLATFORM_dm6446 = "dm6446"
DSPLINKDSP ?= "C64XX"
@@ -48,7 +31,7 @@ DSPLINKSOC ?= "DM6446"
DSPCFG ?= "DM6446GEMSHMEM"
-GPPOS ?= "MVL5G"
+GPPOS ?= "LINUX_GCC"
export DEVICES
export DSPLINKPLATFORM
@@ -61,20 +44,6 @@ export LPMDSPPOWERSOC
DSPPOWERSOC ?= "dm6446"
-export BIOS_INSTALL_DIR = "${STAGING_DIR_NATIVE}/ti-dspbios-native"
-export CE_INSTALL_DIR = "${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/ti-codec-engine"
-export CMEM_INSTALL_DIR = "${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/ti-codec-engine/cetools"
-export CODEGEN_INSTALL_DIR = "${STAGING_DIR_NATIVE}/ti-cgt6x-native"
-export CROSS_COMPILE = "${CROSS_DIR}/bin/${TARGET_PREFIX}"
-export DMAI_INSTALL_DIR = "${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/ti-dmai"
-export FC_INSTALL_DIR = "${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/ti-codec-engine/cetools"
-export LINK_INSTALL_DIR = "${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/ti-dsplink-module"
-export LINUXKERNEL_INSTALL_DIR = "${STAGING_KERNEL_DIR}"
-export LPM_INSTALL_DIR = "${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/ti-codec-engine/cetools"
-export XDC_INSTALL_DIR = "${STAGING_DIR_NATIVE}/ti-xdctools-native"
-export XDAIS_INSTALL_DIR = "${CE_INSTALL_DIR}/cetools"
-
-export CODEC_INSTALL_DIR = "${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/ti-codec-combo"
export CODEC ?= "${CODEC_INSTALL_DIR}"
export DSPLINK = "${STAGING_DIR}/${MULTIMACH_TARGET_SYS}/ti-dsplink-module/packages/dsplink/"
diff --git a/recipes/ti/ti-sdma-module_2.23.1.bb b/recipes/ti/ti-sdma-module_2.23.1.bb
deleted file mode 100644
index b64cd9b2bc..0000000000
--- a/recipes/ti/ti-sdma-module_2.23.1.bb
+++ /dev/null
@@ -1,56 +0,0 @@
-DESCRIPTION = "SDMA module for TI OMAP3 processors"
-
-inherit module
-# compile and run time dependencies
-DEPENDS = "virtual/kernel perl-native"
-
-#This is a kernel module, don't set PR directly
-MACHINE_KERNEL_PR_append = "a"
-
-PV = "2231"
-
-# Download codec_engine_2_23_01.tar.gz from https://www-a.ti.com/downloads/sds_support/targetcontent/CE/ce_2_23/index.html and copy in Arago (or OE) download directory.
-
-SRC_URI = "http://install.source.dir.local/codec_engine_2_23_01.tar.gz "
-
-# Set the source directory
-S = "${WORKDIR}/codec_engine_2_23_01"
-
-do_compile() {
- # SDMA - Build the sdma module
- # TODO :: KERNEL_CC, etc need replacing with user CC
- # TODO :: Need to understand why OBJDUMP is required for kernel module
- # Unset these since LDFLAGS gets picked up and used incorrectly.... need
- # investigation
-
- unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS
-
- cd ${S}/cetools/packages/ti/sdo/linuxutils/sdma
- make \
- LINUXKERNEL_INSTALL_DIR="${STAGING_KERNEL_DIR}" \
- MVTOOL_PREFIX="${TARGET_PREFIX}" \
- UCTOOL_PREFIX="${TARGET_PREFIX}" \
- clean debug release
-}
-
-do_install () {
- install -d ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp
- install -m 0755 ${S}/cetools/packages/ti/sdo/linuxutils/sdma/src/module/sdmak.ko ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp
-}
-
-pkg_postinst () {
- if [ -n "$D" ]; then
- exit 1
- fi
- depmod -a
- update-modules || true
-}
-
-pkg_postrm () {
- update-modules || true
-}
-
-INHIBIT_PACKAGE_STRIP = "1"
-
-FILES_${PN} = "/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp/sdmak.ko"
-
diff --git a/recipes/ti/ti-sdma-module_2.24.01.bb b/recipes/ti/ti-sdma-module_2.24.01.bb
deleted file mode 100644
index b5e3bc313e..0000000000
--- a/recipes/ti/ti-sdma-module_2.24.01.bb
+++ /dev/null
@@ -1,54 +0,0 @@
-DESCRIPTION = "SDMA module for TI OMAP3 processors"
-
-inherit module
-# compile and run time dependencies
-DEPENDS = "virtual/kernel perl-native"
-
-#This is a kernel module, don't set PR directly
-MACHINE_KERNEL_PR_append = "a"
-
-PV = "2241"
-
-SRC_URI = "http://install.source.dir.local/codec_engine_2_24_01.tar.gz "
-
-# Set the source directory
-S = "${WORKDIR}/codec_engine_2_24_01"
-
-do_compile() {
- # SDMA - Build the sdma module
- # TODO :: KERNEL_CC, etc need replacing with user CC
- # TODO :: Need to understand why OBJDUMP is required for kernel module
- # Unset these since LDFLAGS gets picked up and used incorrectly.... need
- # investigation
-
- unset CFLAGS CPPFLAGS CXXFLAGS LDFLAGS
-
- cd ${S}/cetools/packages/ti/sdo/linuxutils/sdma
- make \
- LINUXKERNEL_INSTALL_DIR="${STAGING_KERNEL_DIR}" \
- MVTOOL_PREFIX="${TARGET_PREFIX}" \
- UCTOOL_PREFIX="${TARGET_PREFIX}" \
- clean debug release
-}
-
-do_install () {
- install -d ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp
- install -m 0755 ${S}/cetools/packages/ti/sdo/linuxutils/sdma/src/module/sdmak.ko ${D}/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp
-}
-
-pkg_postinst () {
- if [ -n "$D" ]; then
- exit 1
- fi
- depmod -a
- update-modules || true
-}
-
-pkg_postrm () {
- update-modules || true
-}
-
-INHIBIT_PACKAGE_STRIP = "1"
-
-FILES_${PN} = "/lib/modules/${KERNEL_VERSION}/kernel/drivers/dsp/sdmak.ko"
-
diff --git a/recipes/ti/ti-xdais-native_6.23.bb b/recipes/ti/ti-xdais-native_6.23.bb
new file mode 100644
index 0000000000..9cf839c139
--- /dev/null
+++ b/recipes/ti/ti-xdais-native_6.23.bb
@@ -0,0 +1,13 @@
+require ti-xdais.inc
+
+PV = "6_23"
+
+inherit native
+
+do_stage() {
+ install -d ${STAGING_DIR_NATIVE}/ti-xdais
+ cp -pPrf ${S}/* ${STAGING_DIR_NATIVE}/ti-xdais
+}
+
+AUTOTOOLS_NATIVE_STAGE_INSTALL="1"
+
diff --git a/recipes/ti/ti-xdais.inc b/recipes/ti/ti-xdais.inc
new file mode 100644
index 0000000000..4816ee288a
--- /dev/null
+++ b/recipes/ti/ti-xdais.inc
@@ -0,0 +1,10 @@
+DESCRIPTION = "TI DSP Algorithm Interface Standard specification"
+
+PVEXTENSION ?= ""
+BASE_SRC_URI = "http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/xdais/${PV}/exports"
+
+SRC_URI = "${BASE_SRC_URI}/xdais_${PV}${PVEXTENSION}.tar.gz"
+
+S = "${WORKDIR}/xdais_${PV}${PVEXTENSION}"
+
+
diff --git a/recipes/ti/ti-xdctools-native_3.10.03.bb b/recipes/ti/ti-xdctools-native_3.10.03.bb
deleted file mode 100644
index ca1b7f5f0f..0000000000
--- a/recipes/ti/ti-xdctools-native_3.10.03.bb
+++ /dev/null
@@ -1,21 +0,0 @@
-inherit native
-require ti-xdctools.inc
-
-# download xdctools_setuplinux_3_10_03.bin from https://www-a.ti.com/downloads/sds_support/targetcontent/rtsc/xdctools_3_10/xdctools_3_10_03/index_external.html and copy in Arago (or OE) download directory
-
-SRC_URI = "http://install.source.dir.local/xdctools_setuplinux_3_10_03.bin"
-BINFILE="xdctools_setuplinux_3_10_03.bin"
-
-S = "${WORKDIR}/xdctools_3_10_03"
-
-# Yes, the xdc stuff still breaks with a '.' in PWD
-PV = "310"
-PR = "r16"
-
-do_stage() {
- install -d ${STAGING_DIR_NATIVE}/${PN}
- cp -pPrf ${S}/* ${STAGING_DIR_NATIVE}/${PN}
-}
-
-AUTOTOOLS_NATIVE_STAGE_INSTALL="1"
-
diff --git a/recipes/ti/ti-xdctools-native_3.15.01.59.bb b/recipes/ti/ti-xdctools-native_3.15.01.59.bb
index d06cb8f615..ee34a5eec2 100644
--- a/recipes/ti/ti-xdctools-native_3.15.01.59.bb
+++ b/recipes/ti/ti-xdctools-native_3.15.01.59.bb
@@ -1,22 +1,16 @@
inherit native
-require ti-xdctools.inc
-
-SRC_URI = "http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/rtsc/xdctools_3_15//exports/xdctools_setuplinux_3_15_01_59.bin"
-BINFILE = "xdctools_setuplinux_3_15_01_59.bin"
-S = "${WORKDIR}/xdctools_3_15_01_59"
+BASE_PV = "3_15"
+PV = "3_15_01_59"
-# Yes, the xdc stuff still breaks with a '.' in PWD
-PV = "315"
-PR = "r4"
+require ti-xdctools.inc
do_stage() {
- install -d -m 0755 ${STAGING_DIR_NATIVE}/${PN}
+ install -d ${STAGING_DIR_NATIVE}/${PN}
cp -pPrf ${S}/* ${STAGING_DIR_NATIVE}/${PN}
- chmod 755 -R ${STAGING_DIR_NATIVE}/${PN}
- # rm_work fails if you don't chmod S:
- chmod 755 -R ${S}
+ chmod 755 -R ${STAGING_DIR_NATIVE}/${PN}
+ chmod 755 -R ${S}
}
-AUTOTOOLS_NATIVE_STAGE_INSTALL = "1"
+AUTOTOOLS_NATIVE_STAGE_INSTALL="1"
diff --git a/recipes/ti/ti-xdctools.inc b/recipes/ti/ti-xdctools.inc
index 9dbd35f24c..5d29436042 100644
--- a/recipes/ti/ti-xdctools.inc
+++ b/recipes/ti/ti-xdctools.inc
@@ -1,40 +1,12 @@
DESCRIPTION = "TI XDC tool"
-# This file defines function used for extracting .bin file
+SRC_URI = "http://software-dl.ti.com/dsps/dsps_public_sw/sdo_sb/targetcontent/rtsc/xdctools_${BASE_PV}/exports/xdctools_setuplinux_${PV}.bin"
+BINFILE="xdctools_setuplinux_${PV}.bin"
-python do_unpack () {
- bb.build.exec_func('base_do_unpack', d)
- bb.build.exec_func('ti_bin_do_unpack', d)
-}
+S = "${WORKDIR}/xdctools_${PV}"
-python ti_bin_do_unpack() {
+TI_BIN_UNPK_CMDS="Y: qY:workdir:Y"
- import os
+require ti-eula-unpack.inc
- localdata = bb.data.createCopy(d)
- bb.data.update_data(localdata)
-
- binfile = bb.data.getVar('BINFILE', localdata)
-
- # Change to the working directory
- save_cwd = os.getcwd()
- workdir = bb.data.getVar('WORKDIR', localdata)
- workdir = bb.data.expand(workdir, localdata)
- os.chdir(workdir)
-
- # Make the InstallJammer binary executable so we can run it
- os.chmod(binfile, 0755)
-
- # Run the InstallJammer binary and accept the EULA
- filename = "HOME=%s ./%s" % (workdir, binfile)
- f = os.popen(filename,'w')
- print >>f, "Y\n"
- print >>f, " qY\n"
- print >>f, "%s\n" % workdir
- print >>f, "Y\n"
- f.close()
-
- # Return to the previous directory
- os.chdir(save_cwd)
-}
diff --git a/recipes/u-boot/u-boot-git/cm-t35/cm-t35.patch b/recipes/u-boot/u-boot-git/cm-t35/cm-t35.patch
new file mode 100644
index 0000000000..10e84a2881
--- /dev/null
+++ b/recipes/u-boot/u-boot-git/cm-t35/cm-t35.patch
@@ -0,0 +1,1487 @@
+diff --git a/MAINTAINERS b/MAINTAINERS
+index d70a9d2..94e45f4 100644
+--- a/MAINTAINERS
++++ b/MAINTAINERS
+@@ -677,6 +677,10 @@ Stelian Pop <stelian.pop@leadtechdesign.com>
+ at91sam9263ek ARM926EJS (AT91SAM9263 SoC)
+ at91sam9rlek ARM926EJS (AT91SAM9RL SoC)
+
++Mike Rapoport <mike@compulab.co.il>
++
++ cm_t35 ARM CORTEX-A8 (OMAP3xx SoC)
++
+ Tom Rix <Tom.Rix@windriver.com>
+
+ omap3_zoom2 ARM CORTEX-A8 (OMAP3xx SoC)
+diff --git a/MAKEALL b/MAKEALL
+index d63c5c2..e131c62 100755
+--- a/MAKEALL
++++ b/MAKEALL
+@@ -612,6 +612,7 @@ LIST_ARM11=" \
+ ## ARM Cortex-A8 Systems
+ #########################################################################
+ LIST_ARM_CORTEX_A8=" \
++ cm_t35 \
+ devkit8000 \
+ omap3_beagle \
+ omap3_overo \
+diff --git a/Makefile b/Makefile
+index bcb3fe9..9d6150a 100644
+--- a/Makefile
++++ b/Makefile
+@@ -3143,6 +3143,8 @@ SMN42_config : unconfig
+ #########################################################################
+ ## ARM CORTEX Systems
+ #########################################################################
++cm_t35_config : unconfig
++ @$(MKCONFIG) $(@:_config=) arm arm_cortexa8 cm_t35 NULL omap3
+
+ devkit8000_config : unconfig
+ @$(MKCONFIG) $(@:_config=) arm arm_cortexa8 devkit8000 timll omap3
+diff --git a/board/cm_t35/Makefile b/board/cm_t35/Makefile
+new file mode 100644
+index 0000000..320a817
+--- /dev/null
++++ b/board/cm_t35/Makefile
+@@ -0,0 +1,47 @@
++#
++# (C) Copyright 2000, 2001, 2002
++# Wolfgang Denk, DENX Software Engineering, wd@denx.de.
++#
++# See file CREDITS for list of people who contributed to this
++# project.
++#
++# This program is free software; you can redistribute it and/or
++# modify it under the terms of the GNU General Public License as
++# published by the Free Software Foundation; either version 2 of
++# the License, or (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++# MA 02111-1307 USA
++#
++
++include $(TOPDIR)/config.mk
++
++LIB = $(obj)lib$(BOARD).a
++
++COBJS := cm_t35.o
++
++SRCS := $(COBJS:.o=.c)
++OBJS := $(addprefix $(obj),$(COBJS))
++
++$(LIB): $(obj).depend $(OBJS)
++ $(AR) $(ARFLAGS) $@ $(OBJS)
++
++clean:
++ rm -f $(OBJS)
++
++distclean: clean
++ rm -f $(LIB) core *.bak $(obj).depend
++
++#########################################################################
++
++# defines $(obj).depend target
++include $(SRCTREE)/rules.mk
++
++sinclude $(obj).depend
+diff --git a/board/cm_t35/cm_t35.c b/board/cm_t35/cm_t35.c
+new file mode 100644
+index 0000000..a9bb86f
+--- /dev/null
++++ b/board/cm_t35/cm_t35.c
+@@ -0,0 +1,257 @@
++/*
++ * (C) Copyright 2009
++ * CompuLab, Ltd. <www.compulab.co.il>
++ *
++ * Authors :
++ * Igor Vaisbein <igor@compulab.co.il>
++ * Mike Rapoport <mike@compulab.co.il>
++ *
++ * Derived from omap3evm and Beagle Board by
++ * Manikandan Pillai <mani.pillai@ti.com>
++ * Richard Woodruff <r-woodruff2@ti.com>
++ * Syed Mohammed Khasim <x0khasim@ti.com>
++ *
++ * See file CREDITS for list of people who contributed to this
++ * project.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++#include <common.h>
++#include <netdev.h>
++#include <net.h>
++#include <i2c.h>
++#include <twl4030.h>
++
++#include <asm/io.h>
++#include <asm/setup.h>
++#include <asm/arch/mem.h>
++#include <asm/arch/mux.h>
++#include <asm/arch/sys_proto.h>
++#include <asm/mach-types.h>
++
++#include "cm_t35.h"
++
++static u32 gpmc_net_config[GPMC_MAX_REG] = {
++ NET_GPMC_CONFIG1,
++ NET_GPMC_CONFIG2,
++ NET_GPMC_CONFIG3,
++ NET_GPMC_CONFIG4,
++ NET_GPMC_CONFIG5,
++ NET_GPMC_CONFIG6,
++ 0
++};
++
++static u32 gpmc_nand_config[GPMC_MAX_REG] = {
++ SMNAND_GPMC_CONFIG1,
++ SMNAND_GPMC_CONFIG2,
++ SMNAND_GPMC_CONFIG3,
++ SMNAND_GPMC_CONFIG4,
++ SMNAND_GPMC_CONFIG5,
++ SMNAND_GPMC_CONFIG6,
++ 0,
++};
++
++DECLARE_GLOBAL_DATA_PTR;
++
++/*
++ * Routine: board_init
++ * Description: Early hardware init.
++ */
++int board_init(void)
++{
++ gpmc_init(); /* in SRAM or SDRAM, finish GPMC */
++
++ enable_gpmc_cs_config(gpmc_nand_config, &gpmc_cfg->cs[0],
++ CONFIG_SYS_NAND_BASE, GPMC_SIZE_16M);
++
++ /* board id for Linux */
++ gd->bd->bi_arch_number = MACH_TYPE_CM_T35;
++ /* boot param addr */
++ gd->bd->bi_boot_params = (OMAP34XX_SDRC_CS0 + 0x100);
++
++ return 0;
++}
++
++/*
++ * Routine: misc_init_r
++ * Description: init i2c and dieid
++ */
++int misc_init_r(void)
++{
++#ifdef CONFIG_DRIVER_OMAP34XX_I2C
++ i2c_init(CONFIG_SYS_I2C_SPEED, CONFIG_SYS_I2C_SLAVE);
++#endif
++
++ dieid_num_r();
++
++ return 0;
++}
++
++/*
++ * Routine: set_muxconf_regs
++ * Description: Setting up the configuration Mux registers specific to the
++ * hardware. Many pins need to be moved from protect to primary
++ * mode.
++ */
++void set_muxconf_regs(void)
++{
++ MUX_CM_T35();
++}
++
++/*
++ * Routine: get_board_serial
++ * Description: read system serial number
++ */
++void get_board_serial(struct tag_serialnr *serialnr)
++{
++ u32 low, high;
++ int rc;
++
++ memset(serialnr, 0, sizeof(*serialnr));
++
++ rc = i2c_read(0x50, 0x8, 1, &low, sizeof(low));
++ if (rc)
++ return;
++
++ rc = i2c_read(0x50, 0xc, 1, &high, sizeof(high));
++ if (rc)
++ return;
++
++ if (low != 0xffffffff && high != 0xffffffff) {
++ serialnr->low = low;
++ serialnr->high = high;
++ }
++};
++
++/*
++ * Routine: get_board_rev
++ * Description: read system revision
++ */
++u32 get_board_rev(void)
++{
++ u16 rev;
++ int rc;
++
++ rc = i2c_read(0x50, 0x6, 1, &rev, sizeof(rev));
++ if (rc)
++ return 0;
++
++ return rev;
++};
++
++/*
++ * Routine: setup_net_chip_gmpc
++ * Description: Setting up the configuration GPMC registers specific to the
++ * Ethernet hardware.
++ */
++static void setup_net_chip_gmpc(void)
++{
++ struct ctrl *ctrl_base = (struct ctrl *)OMAP34XX_CTRL_BASE;
++
++ enable_gpmc_cs_config(gpmc_net_config, &gpmc_cfg->cs[5],
++ CM_T35_SMC911X_BASE, GPMC_SIZE_16M);
++ enable_gpmc_cs_config(gpmc_net_config, &gpmc_cfg->cs[4],
++ SB_T35_SMC911X_BASE, GPMC_SIZE_16M);
++
++ /* Enable off mode for NWE in PADCONF_GPMC_NWE register */
++ writew(readw(&ctrl_base->gpmc_nwe) | 0x0E00, &ctrl_base->gpmc_nwe);
++
++ /* Enable off mode for NOE in PADCONF_GPMC_NADV_ALE register */
++ writew(readw(&ctrl_base->gpmc_noe) | 0x0E00, &ctrl_base->gpmc_noe);
++
++ /* Enable off mode for ALE in PADCONF_GPMC_NADV_ALE register */
++ writew(readw(&ctrl_base->gpmc_nadv_ale) | 0x0E00,
++ &ctrl_base->gpmc_nadv_ale);
++}
++
++#ifdef CONFIG_DRIVER_OMAP34XX_I2C
++/*
++ * Routine: reset_net_chip
++ * Description: reset the Ethernet controller via TPS65930 GPIO
++ */
++static void reset_net_chip(void)
++{
++ /* Set GPIO1 of TPS65930 as output */
++ twl4030_i2c_write_u8(TWL4030_CHIP_GPIO, 0x02,
++ TWL4030_BASEADD_GPIO+0x03);
++ /* Send a pulse on the GPIO pin */
++ twl4030_i2c_write_u8(TWL4030_CHIP_GPIO, 0x02,
++ TWL4030_BASEADD_GPIO+0x0C);
++ udelay(1);
++ twl4030_i2c_write_u8(TWL4030_CHIP_GPIO, 0x02,
++ TWL4030_BASEADD_GPIO+0x09);
++ udelay(1);
++ twl4030_i2c_write_u8(TWL4030_CHIP_GPIO, 0x02,
++ TWL4030_BASEADD_GPIO+0x0C);
++}
++#else
++static inline void reset_net_chip(void) {}
++#endif
++
++/*
++ * Routine: handle_mac_address
++ * Description: prepare MAC address for on-board Ethernet.
++ */
++static int handle_mac_address(void)
++{
++ unsigned char enetaddr[6];
++ int rc;
++
++ memset(enetaddr, 0, 6);
++ rc = eth_getenv_enetaddr("ethaddr", enetaddr);
++ if (rc)
++ return 0;
++
++#ifdef CONFIG_DRIVER_OMAP34XX_I2C
++ rc = i2c_read(0x50, 0, 1, enetaddr, 6);
++ if (rc)
++ return rc;
++#endif
++
++ if (!is_valid_ether_addr(enetaddr))
++ return -1;
++
++ return eth_setenv_enetaddr("ethaddr", enetaddr);
++}
++
++/*
++ * Routine: board_eth_init
++ * Description: initialize module and base-board Ethernet chips
++ */
++int board_eth_init(bd_t *bis)
++{
++ int rc = 0, rc1 = 0;
++
++#ifdef CONFIG_SMC911X
++ setup_net_chip_gmpc();
++ reset_net_chip();
++
++ rc1 = handle_mac_address();
++ if (rc1)
++ printf("CM-T35: No MAC address found\n");
++
++ rc1 = smc911x_initialize(0, CM_T35_SMC911X_BASE);
++ if (rc1 > 0)
++ rc++;
++
++ rc1 = smc911x_initialize(1, SB_T35_SMC911X_BASE);
++ if (rc1 > 0)
++ rc++;
++#endif
++
++ return rc;
++}
+diff --git a/board/cm_t35/cm_t35.h b/board/cm_t35/cm_t35.h
+new file mode 100644
+index 0000000..549422c
+--- /dev/null
++++ b/board/cm_t35/cm_t35.h
+@@ -0,0 +1,180 @@
++/*
++ * (C) Copyright 2009 CompuLab, Ltd
++ * Authors:
++ * Igor Vaisbein <igor@compulab.co.il>
++ * Mike Rapoport <mike@compulab.co.il>
++ *
++ * See file CREDITS for list of people who contributed to this
++ * project.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++#ifndef _CM_T35_H_
++#define _CM_T35_H_
++
++const omap3_sysinfo sysinfo = {
++ DDR_DISCRETE,
++ "CM-T35 board",
++ "NAND",
++};
++
++/* static void setup_net_chip(void); */
++
++/*
++ * IEN - Input Enable
++ * IDIS - Input Disable
++ * PTD - Pull type Down
++ * PTU - Pull type Up
++ * DIS - Pull type selection is inactive
++ * EN - Pull type selection is active
++ * M0 - Mode 0
++ * The commented string gives the final mux configuration for that pin
++ */
++#define MUX_CM_T35() \
++ /*SDRC*/\
++ MUX_VAL(CP(SDRC_D0), (IEN | PTD | DIS | M0)) /*SDRC_D0*/\
++ MUX_VAL(CP(SDRC_D1), (IEN | PTD | DIS | M0)) /*SDRC_D1*/\
++ MUX_VAL(CP(SDRC_D2), (IEN | PTD | DIS | M0)) /*SDRC_D2*/\
++ MUX_VAL(CP(SDRC_D3), (IEN | PTD | DIS | M0)) /*SDRC_D3*/\
++ MUX_VAL(CP(SDRC_D4), (IEN | PTD | DIS | M0)) /*SDRC_D4*/\
++ MUX_VAL(CP(SDRC_D5), (IEN | PTD | DIS | M0)) /*SDRC_D5*/\
++ MUX_VAL(CP(SDRC_D6), (IEN | PTD | DIS | M0)) /*SDRC_D6*/\
++ MUX_VAL(CP(SDRC_D7), (IEN | PTD | DIS | M0)) /*SDRC_D7*/\
++ MUX_VAL(CP(SDRC_D8), (IEN | PTD | DIS | M0)) /*SDRC_D8*/\
++ MUX_VAL(CP(SDRC_D9), (IEN | PTD | DIS | M0)) /*SDRC_D9*/\
++ MUX_VAL(CP(SDRC_D10), (IEN | PTD | DIS | M0)) /*SDRC_D10*/\
++ MUX_VAL(CP(SDRC_D11), (IEN | PTD | DIS | M0)) /*SDRC_D11*/\
++ MUX_VAL(CP(SDRC_D12), (IEN | PTD | DIS | M0)) /*SDRC_D12*/\
++ MUX_VAL(CP(SDRC_D13), (IEN | PTD | DIS | M0)) /*SDRC_D13*/\
++ MUX_VAL(CP(SDRC_D14), (IEN | PTD | DIS | M0)) /*SDRC_D14*/\
++ MUX_VAL(CP(SDRC_D15), (IEN | PTD | DIS | M0)) /*SDRC_D15*/\
++ MUX_VAL(CP(SDRC_D16), (IEN | PTD | DIS | M0)) /*SDRC_D16*/\
++ MUX_VAL(CP(SDRC_D17), (IEN | PTD | DIS | M0)) /*SDRC_D17*/\
++ MUX_VAL(CP(SDRC_D18), (IEN | PTD | DIS | M0)) /*SDRC_D18*/\
++ MUX_VAL(CP(SDRC_D19), (IEN | PTD | DIS | M0)) /*SDRC_D19*/\
++ MUX_VAL(CP(SDRC_D20), (IEN | PTD | DIS | M0)) /*SDRC_D20*/\
++ MUX_VAL(CP(SDRC_D21), (IEN | PTD | DIS | M0)) /*SDRC_D21*/\
++ MUX_VAL(CP(SDRC_D22), (IEN | PTD | DIS | M0)) /*SDRC_D22*/\
++ MUX_VAL(CP(SDRC_D23), (IEN | PTD | DIS | M0)) /*SDRC_D23*/\
++ MUX_VAL(CP(SDRC_D24), (IEN | PTD | DIS | M0)) /*SDRC_D24*/\
++ MUX_VAL(CP(SDRC_D25), (IEN | PTD | DIS | M0)) /*SDRC_D25*/\
++ MUX_VAL(CP(SDRC_D26), (IEN | PTD | DIS | M0)) /*SDRC_D26*/\
++ MUX_VAL(CP(SDRC_D27), (IEN | PTD | DIS | M0)) /*SDRC_D27*/\
++ MUX_VAL(CP(SDRC_D28), (IEN | PTD | DIS | M0)) /*SDRC_D28*/\
++ MUX_VAL(CP(SDRC_D29), (IEN | PTD | DIS | M0)) /*SDRC_D29*/\
++ MUX_VAL(CP(SDRC_D30), (IEN | PTD | DIS | M0)) /*SDRC_D30*/\
++ MUX_VAL(CP(SDRC_D31), (IEN | PTD | DIS | M0)) /*SDRC_D31*/\
++ MUX_VAL(CP(SDRC_CLK), (IEN | PTD | DIS | M0)) /*SDRC_CLK*/\
++ MUX_VAL(CP(SDRC_DQS0), (IEN | PTD | DIS | M0)) /*SDRC_DQS0*/\
++ MUX_VAL(CP(SDRC_DQS1), (IEN | PTD | DIS | M0)) /*SDRC_DQS1*/\
++ MUX_VAL(CP(SDRC_DQS2), (IEN | PTD | DIS | M0)) /*SDRC_DQS2*/\
++ MUX_VAL(CP(SDRC_DQS3), (IEN | PTD | DIS | M0)) /*SDRC_DQS3*/\
++ /*GPMC*/\
++ MUX_VAL(CP(GPMC_A1), (IDIS | PTU | EN | M0)) /*GPMC_A1*/\
++ MUX_VAL(CP(GPMC_A2), (IDIS | PTU | EN | M0)) /*GPMC_A2*/\
++ MUX_VAL(CP(GPMC_A3), (IDIS | PTU | EN | M0)) /*GPMC_A3*/\
++ MUX_VAL(CP(GPMC_A4), (IDIS | PTU | EN | M0)) /*GPMC_A4*/\
++ MUX_VAL(CP(GPMC_A5), (IDIS | PTU | EN | M0)) /*GPMC_A5*/\
++ MUX_VAL(CP(GPMC_A6), (IDIS | PTU | EN | M0)) /*GPMC_A6*/\
++ MUX_VAL(CP(GPMC_A7), (IDIS | PTU | EN | M0)) /*GPMC_A7*/\
++ MUX_VAL(CP(GPMC_A8), (IDIS | PTU | EN | M0)) /*GPMC_A8*/\
++ MUX_VAL(CP(GPMC_A9), (IDIS | PTU | EN | M0)) /*GPMC_A9*/\
++ MUX_VAL(CP(GPMC_A10), (IDIS | PTU | EN | M0)) /*GPMC_A10*/\
++ MUX_VAL(CP(GPMC_D0), (IEN | PTU | EN | M0)) /*GPMC_D0*/\
++ MUX_VAL(CP(GPMC_D1), (IEN | PTU | EN | M0)) /*GPMC_D1*/\
++ MUX_VAL(CP(GPMC_D2), (IEN | PTU | EN | M0)) /*GPMC_D2*/\
++ MUX_VAL(CP(GPMC_D3), (IEN | PTU | EN | M0)) /*GPMC_D3*/\
++ MUX_VAL(CP(GPMC_D4), (IEN | PTU | EN | M0)) /*GPMC_D4*/\
++ MUX_VAL(CP(GPMC_D5), (IEN | PTU | EN | M0)) /*GPMC_D5*/\
++ MUX_VAL(CP(GPMC_D6), (IEN | PTU | EN | M0)) /*GPMC_D6*/\
++ MUX_VAL(CP(GPMC_D7), (IEN | PTU | EN | M0)) /*GPMC_D7*/\
++ MUX_VAL(CP(GPMC_D8), (IEN | PTU | EN | M0)) /*GPMC_D8*/\
++ MUX_VAL(CP(GPMC_D9), (IEN | PTU | EN | M0)) /*GPMC_D9*/\
++ MUX_VAL(CP(GPMC_D10), (IEN | PTU | EN | M0)) /*GPMC_D10*/\
++ MUX_VAL(CP(GPMC_D11), (IEN | PTU | EN | M0)) /*GPMC_D11*/\
++ MUX_VAL(CP(GPMC_D12), (IEN | PTU | EN | M0)) /*GPMC_D12*/\
++ MUX_VAL(CP(GPMC_D13), (IEN | PTU | EN | M0)) /*GPMC_D13*/\
++ MUX_VAL(CP(GPMC_D14), (IEN | PTU | EN | M0)) /*GPMC_D14*/\
++ MUX_VAL(CP(GPMC_D15), (IEN | PTU | EN | M0)) /*GPMC_D15*/\
++ MUX_VAL(CP(GPMC_NCS0), (IDIS | PTU | EN | M0)) /*GPMC_nCS0*/\
++ /*Expansion card */\
++ MUX_VAL(CP(MMC1_CLK), (IDIS | PTU | EN | M0)) /*MMC1_CLK*/ \
++ MUX_VAL(CP(MMC1_CMD), (IEN | PTU | EN | M0)) /*MMC1_CMD*/ \
++ MUX_VAL(CP(MMC1_DAT0), (IEN | PTU | EN | M0)) /*MMC1_DAT0*/ \
++ MUX_VAL(CP(MMC1_DAT1), (IEN | PTU | EN | M0)) /*MMC1_DAT1*/ \
++ MUX_VAL(CP(MMC1_DAT2), (IEN | PTU | EN | M0)) /*MMC1_DAT2*/ \
++ MUX_VAL(CP(MMC1_DAT3), (IEN | PTU | EN | M0)) /*MMC1_DAT3*/ \
++ /* SB-T35 Ethernet */\
++ MUX_VAL(CP(GPMC_NCS4), (IEN | PTU | EN | M0)) /*GPMC_nCS4*/\
++ /* CM-T35 Ethernet */\
++ MUX_VAL(CP(GPMC_NCS5), (IDIS | PTU | DIS | M0)) /*GPMC_nCS5*/\
++ MUX_VAL(CP(GPMC_CLK), (IEN | PTD | DIS | M4)) /*GPIO_59*/\
++ MUX_VAL(CP(GPMC_NADV_ALE), (IDIS | PTD | DIS | M0)) /*nADV_ALE*/\
++ MUX_VAL(CP(GPMC_NOE), (IDIS | PTD | DIS | M0)) /*nOE*/\
++ MUX_VAL(CP(GPMC_NWE), (IDIS | PTD | DIS | M0)) /*nWE*/\
++ MUX_VAL(CP(GPMC_NBE0_CLE), (IDIS | PTU | EN | M0)) /*nBE0_CLE*/\
++ MUX_VAL(CP(GPMC_NBE1), (IDIS | PTD | DIS | M4)) /*GPIO_61*/\
++ MUX_VAL(CP(GPMC_NWP), (IEN | PTD | DIS | M0)) /*nWP*/\
++ MUX_VAL(CP(GPMC_WAIT0), (IEN | PTU | EN | M0)) /*WAIT0*/\
++ /*DSS*/\
++ MUX_VAL(CP(DSS_PCLK), (IDIS | PTD | DIS | M0)) /*DSS_PCLK*/\
++ MUX_VAL(CP(DSS_HSYNC), (IDIS | PTD | DIS | M0)) /*DSS_HSYNC*/\
++ MUX_VAL(CP(DSS_VSYNC), (IDIS | PTD | DIS | M0)) /*DSS_VSYNC*/\
++ MUX_VAL(CP(DSS_ACBIAS), (IDIS | PTD | DIS | M0)) /*DSS_ACBIAS*/\
++ MUX_VAL(CP(DSS_DATA0), (IDIS | PTD | DIS | M0)) /*DSS_DATA0*/\
++ MUX_VAL(CP(DSS_DATA1), (IDIS | PTD | DIS | M0)) /*DSS_DATA1*/\
++ MUX_VAL(CP(DSS_DATA2), (IDIS | PTD | DIS | M0)) /*DSS_DATA2*/\
++ MUX_VAL(CP(DSS_DATA3), (IDIS | PTD | DIS | M0)) /*DSS_DATA3*/\
++ MUX_VAL(CP(DSS_DATA4), (IDIS | PTD | DIS | M0)) /*DSS_DATA4*/\
++ MUX_VAL(CP(DSS_DATA5), (IDIS | PTD | DIS | M0)) /*DSS_DATA5*/\
++ MUX_VAL(CP(DSS_DATA6), (IDIS | PTD | DIS | M0)) /*DSS_DATA6*/\
++ MUX_VAL(CP(DSS_DATA7), (IDIS | PTD | DIS | M0)) /*DSS_DATA7*/\
++ MUX_VAL(CP(DSS_DATA8), (IDIS | PTD | DIS | M0)) /*DSS_DATA8*/\
++ MUX_VAL(CP(DSS_DATA9), (IDIS | PTD | DIS | M0)) /*DSS_DATA9*/\
++ MUX_VAL(CP(DSS_DATA10), (IDIS | PTD | DIS | M0)) /*DSS_DATA10*/\
++ MUX_VAL(CP(DSS_DATA11), (IDIS | PTD | DIS | M0)) /*DSS_DATA11*/\
++ MUX_VAL(CP(DSS_DATA12), (IDIS | PTD | DIS | M0)) /*DSS_DATA12*/\
++ MUX_VAL(CP(DSS_DATA13), (IDIS | PTD | DIS | M0)) /*DSS_DATA13*/\
++ MUX_VAL(CP(DSS_DATA14), (IDIS | PTD | DIS | M0)) /*DSS_DATA14*/\
++ MUX_VAL(CP(DSS_DATA15), (IDIS | PTD | DIS | M0)) /*DSS_DATA15*/\
++ MUX_VAL(CP(DSS_DATA16), (IDIS | PTD | DIS | M0)) /*DSS_DATA16*/\
++ MUX_VAL(CP(DSS_DATA17), (IDIS | PTD | DIS | M0)) /*DSS_DATA17*/\
++ MUX_VAL(CP(DSS_DATA18), (IDIS | PTD | DIS | M0)) /*DSS_DATA18*/\
++ MUX_VAL(CP(DSS_DATA19), (IDIS | PTD | DIS | M0)) /*DSS_DATA19*/\
++ MUX_VAL(CP(DSS_DATA20), (IDIS | PTD | DIS | M0)) /*DSS_DATA20*/\
++ MUX_VAL(CP(DSS_DATA21), (IDIS | PTD | DIS | M0)) /*DSS_DATA21*/\
++ MUX_VAL(CP(DSS_DATA22), (IDIS | PTD | DIS | M0)) /*DSS_DATA22*/\
++ MUX_VAL(CP(DSS_DATA23), (IDIS | PTD | DIS | M0)) /*DSS_DATA23*/\
++ /*Serial Interface*/\
++ MUX_VAL(CP(UART3_RX_IRRX), (IEN | PTD | DIS | M0)) /*UART3_RX*/\
++ MUX_VAL(CP(UART3_TX_IRTX), (IDIS | PTD | DIS | M0)) /*UART3_TX*/\
++ MUX_VAL(CP(I2C1_SCL), (IEN | PTU | EN | M0)) /*I2C1_SCL*/\
++ MUX_VAL(CP(I2C1_SDA), (IEN | PTU | EN | M0)) /*I2C1_SDA*/\
++ /*Control and debug */\
++ MUX_VAL(CP(SYS_32K), (IEN | PTD | DIS | M0)) /*SYS_32K*/\
++ MUX_VAL(CP(SYS_CLKREQ), (IEN | PTD | DIS | M0)) /*SYS_CLKREQ*/\
++ MUX_VAL(CP(SYS_NIRQ), (IEN | PTU | EN | M0)) /*SYS_nIRQ*/\
++ MUX_VAL(CP(SYS_OFF_MODE), (IEN | PTD | DIS | M0)) /*OFF_MODE*/\
++ MUX_VAL(CP(SYS_CLKOUT1), (IEN | PTD | DIS | M0)) /*CLKOUT1*/\
++ MUX_VAL(CP(SYS_CLKOUT2), (IDIS | PTD | DIS | M4)) /*green LED*/\
++ MUX_VAL(CP(JTAG_nTRST), (IEN | PTD | DIS | M0)) /*JTAG_nTRST*/\
++ MUX_VAL(CP(JTAG_TCK), (IEN | PTD | DIS | M0)) /*JTAG_TCK*/\
++ MUX_VAL(CP(JTAG_TMS), (IEN | PTD | DIS | M0)) /*JTAG_TMS*/\
++ MUX_VAL(CP(JTAG_TDI), (IEN | PTD | DIS | M0)) /*JTAG_TDI*/\
++ MUX_VAL(CP(SDRC_CKE0), (IDIS | PTU | EN | M0)) /*sdrc_cke0*/\
++ MUX_VAL(CP(SDRC_CKE1), (IDIS | PTD | DIS | M7)) /*sdrc_cke1*/\
++
++#endif
+diff --git a/board/cm_t35/config.mk b/board/cm_t35/config.mk
+new file mode 100644
+index 0000000..a90c86a
+--- /dev/null
++++ b/board/cm_t35/config.mk
+@@ -0,0 +1,30 @@
++#
++# (C) Copyright 2009
++# CompuLab, Ltd., <www.compulab.co.il>
++#
++# See file CREDITS for list of people who contributed to this
++# project.
++#
++# This program is free software; you can redistribute it and/or
++# modify it under the terms of the GNU General Public License as
++# published by the Free Software Foundation; either version 2 of
++# the License, or (at your option) any later version.
++#
++# This program is distributed in the hope that it will be useful,
++# but WITHOUT ANY WARRANTY; without even the implied warranty of
++# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++# GNU General Public License for more details.
++#
++# You should have received a copy of the GNU General Public License
++# along with this program; if not, write to the Free Software
++# Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++# MA 02111-1307 USA
++#
++# Physical Address:
++# 8000'0000 (bank0)
++#
++# Linux-Kernel is expected to be at 8000'8000, entry 8000'8000
++# (mem base + reserved)
++
++# For use with external or internal boots.
++TEXT_BASE = 0x80e80000
+diff --git a/cpu/arm_cortexa8/omap3/board.c b/cpu/arm_cortexa8/omap3/board.c
+index dd2c940..0b3805a 100644
+--- a/cpu/arm_cortexa8/omap3/board.c
++++ b/cpu/arm_cortexa8/omap3/board.c
+@@ -291,8 +291,11 @@ int dram_init(void)
+
+ gd->bd->bi_dram[0].start = PHYS_SDRAM_1;
+ gd->bd->bi_dram[0].size = size0;
++
++#if (CONFIG_NR_DRAM_BANKS > 1)
+ gd->bd->bi_dram[1].start = PHYS_SDRAM_1 + get_sdr_cs_offset(CS1);
+ gd->bd->bi_dram[1].size = size1;
++#endif
+
+ return 0;
+ }
+diff --git a/cpu/arm_cortexa8/omap3/mem.c b/cpu/arm_cortexa8/omap3/mem.c
+index 8b8cd6d..be254b5 100644
+--- a/cpu/arm_cortexa8/omap3/mem.c
++++ b/cpu/arm_cortexa8/omap3/mem.c
+@@ -35,11 +35,6 @@
+ * Only One NAND allowed on board at a time.
+ * The GPMC CS Base for the same
+ */
+-unsigned int boot_flash_base;
+-unsigned int boot_flash_off;
+-unsigned int boot_flash_sec;
+-unsigned int boot_flash_type;
+-volatile unsigned int boot_flash_env_addr;
+
+ struct gpmc *gpmc_cfg;
+
+@@ -223,10 +218,6 @@ void gpmc_init(void)
+ const u32 *gpmc_config = NULL;
+ u32 base = 0;
+ u32 size = 0;
+-#if defined(CONFIG_ENV_IS_IN_NAND) || defined(CONFIG_ENV_IS_IN_ONENAND)
+- u32 f_off = CONFIG_SYS_MONITOR_LEN;
+- u32 f_sec = 0;
+-#endif
+ #endif
+ u32 config = 0;
+
+@@ -251,15 +242,6 @@ void gpmc_init(void)
+ base = PISMO1_NAND_BASE;
+ size = PISMO1_NAND_SIZE;
+ enable_gpmc_cs_config(gpmc_config, &gpmc_cfg->cs[0], base, size);
+-#if defined(CONFIG_ENV_IS_IN_NAND)
+- f_off = SMNAND_ENV_OFFSET;
+- f_sec = (128 << 10); /* 128 KiB */
+- /* env setup */
+- boot_flash_base = base;
+- boot_flash_off = f_off;
+- boot_flash_sec = f_sec;
+- boot_flash_env_addr = f_off;
+-#endif
+ #endif
+
+ #if defined(CONFIG_CMD_ONENAND)
+@@ -267,14 +249,5 @@ void gpmc_init(void)
+ base = PISMO1_ONEN_BASE;
+ size = PISMO1_ONEN_SIZE;
+ enable_gpmc_cs_config(gpmc_config, &gpmc_cfg->cs[0], base, size);
+-#if defined(CONFIG_ENV_IS_IN_ONENAND)
+- f_off = ONENAND_ENV_OFFSET;
+- f_sec = (128 << 10); /* 128 KiB */
+- /* env setup */
+- boot_flash_base = base;
+- boot_flash_off = f_off;
+- boot_flash_sec = f_sec;
+- boot_flash_env_addr = f_off;
+-#endif
+ #endif
+ }
+diff --git a/cpu/arm_cortexa8/omap3/sys_info.c b/cpu/arm_cortexa8/omap3/sys_info.c
+index 31b2003..3f66a6a 100644
+--- a/cpu/arm_cortexa8/omap3/sys_info.c
++++ b/cpu/arm_cortexa8/omap3/sys_info.c
+@@ -173,15 +173,6 @@ u32 get_gpmc0_width(void)
+ return WIDTH_16BIT;
+ }
+
+-/*************************************************************************
+- * get_board_rev() - setup to pass kernel board revision information
+- * returns:(bit[0-3] sub version, higher bit[7-4] is higher version)
+- *************************************************************************/
+-u32 get_board_rev(void)
+-{
+- return 0x20;
+-}
+-
+ /********************************************************
+ * get_base(); get upper addr of current execution
+ *******************************************************/
+diff --git a/doc/README.omap3 b/doc/README.omap3
+index 6227151..1c1c16f 100644
+--- a/doc/README.omap3
++++ b/doc/README.omap3
+@@ -21,6 +21,8 @@ Currently the following boards are supported:
+
+ * TI/Logic PD Zoom 2 [7]
+
++* CompuLab Ltd. CM-T35 [8]
++
+ Toolchain
+ =========
+
+@@ -61,6 +63,11 @@ make
+ make omap3_zoom2_config
+ make
+
++* CM-T35:
++
++make cm_t35_config
++make
++
+ Custom commands
+ ===============
+
+@@ -119,7 +126,7 @@ To read a bit :
+ Acknowledgements
+ ================
+
+-OMAP3 U-Boot is based on U-Boot tar ball [8] for BeagleBoard and EVM done by
++OMAP3 U-Boot is based on U-Boot tar ball [9] for BeagleBoard and EVM done by
+ several TI employees.
+
+ Links
+@@ -153,6 +160,11 @@ http://www.logicpd.com/products/devkit/ti/zoom_mobile_development_kit
+ [7] TI/Logic PD Zoom 2
+
+ http://www.logicpd.com/sites/default/files/1012659A_Zoom_OMAP34x-II_MDP_Brief.pdf
+-[8] TI OMAP3 U-Boot:
++
++[8] CompuLab Ltd. CM-T35:
++
++http://www.compulab.co.il/t35/html/t35-cm-datasheet.htm
++
++[9] TI OMAP3 U-Boot:
+
+ http://beagleboard.googlecode.com/files/u-boot_beagle_revb.tar.gz
+diff --git a/drivers/net/smc911x.c b/drivers/net/smc911x.c
+index c027abe..8509b6a 100644
+--- a/drivers/net/smc911x.c
++++ b/drivers/net/smc911x.c
+@@ -37,7 +37,7 @@ void pkt_data_push(struct eth_device *dev, u32 addr, u32 val) \
+
+ #define mdelay(n) udelay((n)*1000)
+
+-static void smx911x_handle_mac_address(struct eth_device *dev)
++static void smc911x_handle_mac_address(struct eth_device *dev)
+ {
+ unsigned long addrh, addrl;
+ uchar *m = dev->enetaddr;
+@@ -47,7 +47,7 @@ static void smx911x_handle_mac_address(struct eth_device *dev)
+ smc911x_set_mac_csr(dev, ADDRL, addrl);
+ smc911x_set_mac_csr(dev, ADDRH, addrh);
+
+- printf(DRIVERNAME ": MAC %pM\n", m);
++ printf("%s: MAC %pM\n", dev->name, m);
+ }
+
+ static int smc911x_miiphy_read(struct eth_device *dev,
+@@ -119,12 +119,12 @@ static void smc911x_phy_configure(struct eth_device *dev)
+ goto err_out;
+ } while (!(status & PHY_BMSR_LS));
+
+- printf(DRIVERNAME ": phy initialized\n");
++ printf("%s: phy initialized\n", dev->name);
+
+ return;
+
+ err_out:
+- printf(DRIVERNAME ": autonegotiation timed out\n");
++ printf("%s: autonegotiation timed out\n", dev->name);
+ }
+
+ static void smc911x_enable(struct eth_device *dev)
+@@ -148,14 +148,14 @@ static int smc911x_init(struct eth_device *dev, bd_t * bd)
+ {
+ struct chip_id *id = dev->priv;
+
+- printf(DRIVERNAME ": detected %s controller\n", id->name);
++ printf("%s: detected %s controller\n", dev->name, id->name);
+
+ smc911x_reset(dev);
+
+ /* Configure the PHY, initialize the link state */
+ smc911x_phy_configure(dev);
+
+- smx911x_handle_mac_address(dev);
++ smc911x_handle_mac_address(dev);
+
+ /* Turn on Tx + Rx */
+ smc911x_enable(dev);
+@@ -193,7 +193,7 @@ static int smc911x_send(struct eth_device *dev,
+ if (!status)
+ return 0;
+
+- printf(DRIVERNAME ": failed to send packet: %s%s%s%s%s\n",
++ printf("%s: failed to send packet: %s%s%s%s%s\n", dev->name,
+ status & TX_STS_LOC ? "TX_STS_LOC " : "",
+ status & TX_STS_LATE_COLL ? "TX_STS_LATE_COLL " : "",
+ status & TX_STS_MANY_COLL ? "TX_STS_MANY_COLL " : "",
+@@ -206,6 +206,10 @@ static int smc911x_send(struct eth_device *dev,
+ static void smc911x_halt(struct eth_device *dev)
+ {
+ smc911x_reset(dev);
++
++#ifdef CONFIG_SMC911X_KEEP_MAC
++ smc911x_handle_mac_address(dev);
++#endif
+ }
+
+ static int smc911x_rx(struct eth_device *dev)
+@@ -225,9 +229,8 @@ static int smc911x_rx(struct eth_device *dev)
+ *data++ = pkt_data_pull(dev, RX_DATA_FIFO);
+
+ if (status & RX_STS_ES)
+- printf(DRIVERNAME
+- ": dropped bad packet. Status: 0x%08x\n",
+- status);
++ printf("%s: dropped bad packet. Status: 0x%08x\n",
++ dev->name, status);
+ else
+ NetReceive(NetRxPackets[0], pktlen);
+ }
+@@ -238,6 +241,7 @@ static int smc911x_rx(struct eth_device *dev)
+ int smc911x_initialize(u8 dev_num, int base_addr)
+ {
+ unsigned long addrl, addrh;
++ unsigned char enetaddr[6];
+ struct eth_device *dev;
+
+ dev = malloc(sizeof(*dev));
+@@ -248,6 +252,7 @@ int smc911x_initialize(u8 dev_num, int base_addr)
+ memset(dev, 0, sizeof(*dev));
+
+ dev->iobase = base_addr;
++ sprintf(dev->name, "%s-%hu", DRIVERNAME, dev_num);
+
+ /* Try to detect chip. Will fail if not present. */
+ if (smc911x_detect_chip(dev)) {
+@@ -257,18 +262,20 @@ int smc911x_initialize(u8 dev_num, int base_addr)
+
+ addrh = smc911x_get_mac_csr(dev, ADDRH);
+ addrl = smc911x_get_mac_csr(dev, ADDRL);
+- dev->enetaddr[0] = addrl;
+- dev->enetaddr[1] = addrl >> 8;
+- dev->enetaddr[2] = addrl >> 16;
+- dev->enetaddr[3] = addrl >> 24;
+- dev->enetaddr[4] = addrh;
+- dev->enetaddr[5] = addrh >> 8;
++ enetaddr[0] = addrl;
++ enetaddr[1] = addrl >> 8;
++ enetaddr[2] = addrl >> 16;
++ enetaddr[3] = addrl >> 24;
++ enetaddr[4] = addrh;
++ enetaddr[5] = addrh >> 8;
++
++ if (is_valid_ether_addr(enetaddr))
++ memcpy(dev->enetaddr, enetaddr, 6);
+
+ dev->init = smc911x_init;
+ dev->halt = smc911x_halt;
+ dev->send = smc911x_send;
+ dev->recv = smc911x_rx;
+- sprintf(dev->name, "%s-%hu", DRIVERNAME, dev_num);
+
+ eth_register(dev);
+ return 1;
+diff --git a/drivers/net/smc911x.h b/drivers/net/smc911x.h
+index 05e007c..0ea6ac1 100644
+--- a/drivers/net/smc911x.h
++++ b/drivers/net/smc911x.h
+@@ -447,7 +447,7 @@ static int smc911x_detect_chip(struct eth_device *dev)
+ /* Special case -- no chip present */
+ return -1;
+ } else if (val != 0x87654321) {
+- printf(DRIVERNAME ": Invalid chip endian 0x%08lx\n", val);
++ printf("%s: Invalid chip endian 0x%08lx\n", __func__, val);
+ return -1;
+ }
+
+@@ -456,7 +456,7 @@ static int smc911x_detect_chip(struct eth_device *dev)
+ if (chip_ids[i].id == val) break;
+ }
+ if (!chip_ids[i].id) {
+- printf(DRIVERNAME ": Unknown chip ID %04lx\n", val);
++ printf("%s: Unknown chip ID %04lx\n", __func__, val);
+ return -1;
+ }
+
+@@ -480,8 +480,8 @@ static void smc911x_reset(struct eth_device *dev)
+ !(smc911x_reg_read(dev, PMT_CTRL) & PMT_CTRL_READY))
+ udelay(10);
+ if (!timeout) {
+- printf(DRIVERNAME
+- ": timeout waiting for PM restore\n");
++ printf("%s: timeout waiting for PM restore\n",
++ dev->name);
+ return;
+ }
+ }
+@@ -496,7 +496,7 @@ static void smc911x_reset(struct eth_device *dev)
+ udelay(10);
+
+ if (!timeout) {
+- printf(DRIVERNAME ": reset timeout\n");
++ printf("%s: reset timeout\n", dev->name);
+ return;
+ }
+
+diff --git a/examples/api/Makefile b/examples/api/Makefile
+index 04a270b..057e85a 100644
+--- a/examples/api/Makefile
++++ b/examples/api/Makefile
+@@ -49,6 +49,12 @@ ifeq ($(ARCH),ppc)
+ EXT_SOBJ_FILES-$(CONFIG_API) += lib_ppc/ppcstring.o
+ endif
+
++ifeq ($(ARCH),arm)
++ifneq (,$(findstring -mabi=aapcs-linux,$(PLATFORM_CPPFLAGS)))
++EXT_COBJ_FILES-$(CONFIG_API) += lib_arm/eabi_compat.o
++endif
++endif
++
+ # Create a list of source files so their dependencies can be auto-generated
+ SRCS += $(addprefix $(SRCTREE)/,$(EXT_COBJ_FILES-y:.o=.c))
+ SRCS += $(addprefix $(SRCTREE)/,$(EXT_SOBJ_FILES-y:.o=.S))
+@@ -81,6 +87,10 @@ $(obj)%.o: $(SRCTREE)/lib_generic/%.c
+ $(obj)%.o: $(SRCTREE)/lib_$(ARCH)/%.S
+ $(CC) -g $(CFLAGS) -c -o $@ $<
+
++# Rule to build architecture-specific library C files
++$(obj)%.o: $(SRCTREE)/lib_$(ARCH)/%.c
++ $(CC) -g $(CFLAGS) -c -o $@ $<
++
+ #########################################################################
+
+ # defines $(obj).depend target
+diff --git a/include/asm-arm/arch-omap3/cpu.h b/include/asm-arm/arch-omap3/cpu.h
+index 8ab2e39..7fdf00f 100644
+--- a/include/asm-arm/arch-omap3/cpu.h
++++ b/include/asm-arm/arch-omap3/cpu.h
+@@ -136,6 +136,10 @@ struct gpmc {
+ u32 ecc8_result; /* 0x21C */
+ u32 ecc9_result; /* 0x220 */
+ };
++
++/* Used for board specific gpmc initialization */
++extern struct gpmc *gpmc_cfg;
++
+ #else /* __ASSEMBLY__ */
+ #define GPMC_CONFIG1 0x00
+ #define GPMC_CONFIG2 0x04
+diff --git a/include/configs/cm_t35.h b/include/configs/cm_t35.h
+new file mode 100644
+index 0000000..37edbb5
+--- /dev/null
++++ b/include/configs/cm_t35.h
+@@ -0,0 +1,281 @@
++/*
++ * (C) Copyright 2009 CompuLab, Ltd.
++ *
++ * Authors :
++ * Igor Vaisbein <igor@compulab.co.il>
++ * Mike Rapoport <mike@compulab.co.il>
++ *
++ * Derived from omap3evm and Beagle Board by
++ * Manikandan Pillai <mani.pillai@ti.com>
++ * Richard Woodruff <r-woodruff2@ti.com>
++ * Syed Mohammed Khasim <x0khasim@ti.com>
++ *
++ * Configuration settings for the CompuLab CM-T35 board.
++ *
++ * See file CREDITS for list of people who contributed to this
++ * project.
++ *
++ * This program is free software; you can redistribute it and/or
++ * modify it under the terms of the GNU General Public License as
++ * published by the Free Software Foundation; either version 2 of
++ * the License, or (at your option) any later version.
++ *
++ * This program is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with this program; if not, write to the Free Software
++ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
++ * MA 02111-1307 USA
++ */
++
++#ifndef __CONFIG_H
++#define __CONFIG_H
++
++/* High Level Configuration Options */
++#define CONFIG_ARMCORTEXA8 1 /* This is an ARM V7 CPU core */
++#define CONFIG_OMAP 1 /* in a TI OMAP core */
++#define CONFIG_OMAP34XX 1 /* which is a 34XX */
++#define CONFIG_OMAP3430 1 /* which is in a 3430 */
++#define CONFIG_CM_T35 1 /* working with CM_T35 */
++
++#include <asm/arch/cpu.h> /* get chip and board defs */
++#include <asm/arch/omap3.h>
++
++#define CONFIG_DISPLAY_CPUINFO 1
++#define CONFIG_DISPLAY_BOARDINFO 1
++
++/* Clock Defines */
++#define V_OSCK 26000000 /* Clock output from T2 */
++#define V_SCLK (V_OSCK >> 1)
++
++/* DDR type - Micron */
++#define CONFIG_OMAP3_MICRON_DDR 1
++
++#undef CONFIG_USE_IRQ /* no support for IRQs */
++#define CONFIG_MISC_INIT_R
++
++#define CONFIG_CMDLINE_TAG 1 /* enable passing of ATAGs */
++#define CONFIG_SETUP_MEMORY_TAGS 1
++#define CONFIG_INITRD_TAG 1
++#define CONFIG_REVISION_TAG 1
++#define CONFIG_SERIAL_TAG 1
++
++/* Size of malloc() pool */
++#define CONFIG_ENV_SIZE (128 << 10) /* Total Size Environment */
++ /* Sector */
++#define CONFIG_SYS_MALLOC_LEN (CONFIG_ENV_SIZE + (512 << 10))
++#define CONFIG_SYS_GBL_DATA_SIZE 128 /* bytes reserved for */
++ /* initial data */
++/* NS16550 Configuration */
++#define V_NS16550_CLK 48000000 /* 48MHz (APLL96/2) */
++
++#define CONFIG_SYS_NS16550
++#define CONFIG_SYS_NS16550_SERIAL
++#define CONFIG_SYS_NS16550_REG_SIZE (-4)
++#define CONFIG_SYS_NS16550_CLK V_NS16550_CLK
++
++/* serial console configuration */
++#define CONFIG_CONS_INDEX 3
++#define CONFIG_SYS_NS16550_COM3 OMAP34XX_UART3
++#define CONFIG_SERIAL3 3 /* UART3 */
++
++/* allow to overwrite serial and ethaddr */
++#define CONFIG_ENV_OVERWRITE
++#define CONFIG_BAUDRATE 115200
++#define CONFIG_SYS_BAUDRATE_TABLE {4800, 9600, 19200, 38400, 57600,\
++ 115200}
++#define CONFIG_MMC 1
++#define CONFIG_OMAP3_MMC 1
++#define CONFIG_SYS_MMC_MAX_DEVICE 1
++#define CONFIG_DOS_PARTITION 1
++
++/* commands to include */
++#include <config_cmd_default.h>
++
++#define CONFIG_CMD_EXT2 /* EXT2 Support */
++#define CONFIG_CMD_FAT /* FAT support */
++#define CONFIG_CMD_JFFS2 /* JFFS2 Support */
++#define CONFIG_CMD_YAFFS2 /* YAFFS2 Support */
++#define CONFIG_CMD_UBI /* UBI Support */
++#define CONFIG_CMD_MTDPARTS
++
++#define CONFIG_CMD_I2C /* I2C serial bus support */
++#define CONFIG_CMD_MMC /* MMC support */
++#define CONFIG_CMD_NAND /* NAND support */
++#define CONFIG_CMD_DHCP
++#define CONFIG_CMD_PING
++
++#undef CONFIG_CMD_FLASH /* flinfo, erase, protect */
++#undef CONFIG_CMD_FPGA /* FPGA configuration Support */
++#undef CONFIG_CMD_IMLS /* List all found images */
++
++#define CONFIG_SYS_NO_FLASH
++
++/* I2C */
++#define CONFIG_SYS_I2C_SPEED 100000
++#define CONFIG_SYS_I2C_SLAVE 1
++#define CONFIG_SYS_I2C_BUS 0
++#define CONFIG_SYS_I2C_BUS_SELECT 1
++#define CONFIG_DRIVER_OMAP34XX_I2C 1
++
++/* TWL4030 */
++#define CONFIG_TWL4030_POWER 1
++
++/* Board NAND Info. */
++#define CONFIG_NAND_OMAP_GPMC 1
++#define GPMC_NAND_ECC_LP_x8_LAYOUT 1
++#define OMAP34XX_GPMC_NAND_SMNAND 1
++
++#define CONFIG_SYS_NAND_ADDR NAND_BASE /* physical address */
++ /* to access nand */
++#define CONFIG_SYS_NAND_BASE NAND_BASE /* physical address */
++ /* to access */
++ /* nand at CS0 */
++
++#define CONFIG_SYS_MAX_NAND_DEVICE 1 /* Max number of */
++ /* NAND devices */
++#define CONFIG_SYS_64BIT_VSPRINTF /* needed for nand_util.c */
++
++/* JFFS2 */
++#define CONFIG_JFFS2_NAND
++#define CONFIG_JFFS2_DEV "nand0"
++#define CONFIG_SYS_MAX_MTD_BANKS (CONFIG_SYS_MAX_FLASH_BANKS + \
++ CONFIG_SYS_MAX_NAND_DEVICE)
++#define CONFIG_SYS_JFFS2_MEM_NAND
++#define CONFIG_SYS_JFFS2_FIRST_BANK CONFIG_SYS_MAX_FLASH_BANKS
++#define CONFIG_SYS_JFFS2_NUM_BANKS 1
++
++/* ubi/ubifs related definitions */
++#define CONFIG_RBTREE
++#define CONFIG_MTD_DEVICE /* needed for mtdparts commands */
++#define CONFIG_MTD_PARTITIONS
++
++/* Environment information */
++#define CONFIG_BOOTDELAY 3
++
++#define CONFIG_BOOTFILE uImage
++
++#define CONFIG_EXTRA_ENV_SETTINGS \
++ "loadaddr=0x82000000\0" \
++ "baudrate=115200\0"\
++ "console=ttyS2,115200n8\0" \
++ "autoload=no\0" \
++ "mmcargs=setenv bootargs console=${console} " \
++ "root=/dev/mmcblk0p2 rw " \
++ "rootfstype=ext3 rootwait\0" \
++ "nandargs=setenv bootargs console=${console} " \
++ "root=/dev/mtdblock4 rw " \
++ "rootfstype=jffs2\0" \
++ "loadbootscript=fatload mmc 0 ${loadaddr} boot.scr\0" \
++ "bootscript=echo Running bootscript from mmc ...; " \
++ "source ${loadaddr}\0" \
++ "loaduimage=fatload mmc 0 ${loadaddr} uImage\0" \
++ "mmcboot=echo Booting from mmc ...; " \
++ "run mmcargs; " \
++ "bootm ${loadaddr}\0" \
++ "nandboot=echo Booting from nand ...; " \
++ "run nandargs; " \
++ "onenand read ${loadaddr} 280000 400000; " \
++ "bootm ${loadaddr}\0" \
++
++#define CONFIG_BOOTCOMMAND \
++ "if mmc init; then " \
++ "if run loadbootscript; then " \
++ "run bootscript; " \
++ "else " \
++ "if run loaduimage; then " \
++ "run mmcboot; " \
++ "else run nandboot; " \
++ "fi; " \
++ "fi; " \
++ "else run nandboot; fi"
++
++#define MTDIDS_DEFAULT "nand0=nand"
++#define MTDPARTS_DEFAULT "mtdparts=nand:512k(xloader)," \
++ "1920k(u-boot)," \
++ "256k(env)," \
++ "4m(kernel)," \
++ "-(fs),"
++
++#define CONFIG_AUTO_COMPLETE 1
++/*
++ * Miscellaneous configurable options
++ */
++#define CONFIG_API 1
++#define V_PROMPT "CM-T35 # "
++
++#define CONFIG_SYS_LONGHELP /* undef to save memory */
++#define CONFIG_SYS_HUSH_PARSER /* use "hush" command parser */
++#define CONFIG_SYS_PROMPT_HUSH_PS2 "> "
++#define CONFIG_SYS_PROMPT V_PROMPT
++#define CONFIG_SYS_CBSIZE 256 /* Console I/O Buffer Size */
++
++/* Print Buffer Size */
++#define CONFIG_SYS_PBSIZE (CONFIG_SYS_CBSIZE + \
++ sizeof(CONFIG_SYS_PROMPT) + 16)
++#define CONFIG_SYS_MAXARGS 16 /* max number of command */
++ /* args */
++/* Boot Argument Buffer Size */
++#define CONFIG_SYS_BARGSIZE (CONFIG_SYS_CBSIZE)
++
++/* memtest works on */
++#define CONFIG_SYS_MEMTEST_START (OMAP34XX_SDRC_CS0 + 0x01000000)
++#define CONFIG_SYS_MEMTEST_END (OMAP34XX_SDRC_CS0 + 0x08000000)
++
++#define CONFIG_SYS_LOAD_ADDR (OMAP34XX_SDRC_CS0) /* default load */
++ /* address */
++
++/*
++ * OMAP3 has 12 GP timers, they can be driven by the system clock
++ * (12/13/16.8/19.2/38.4MHz) or by 32KHz clock. We use 13MHz (V_SCLK).
++ * This rate is divided by a local divisor.
++ */
++#define CONFIG_SYS_TIMERBASE OMAP34XX_GPT2
++#define CONFIG_SYS_PTV 2 /* Divisor: 2^(PTV+1) => 8 */
++#define CONFIG_SYS_HZ 1000
++
++/*
++ * Stack sizes
++ *
++ * The stack sizes are set up in start.S using the settings below
++ */
++#define CONFIG_STACKSIZE (128 << 10) /* regular stack */
++#ifdef CONFIG_USE_IRQ
++#define CONFIG_STACKSIZE_IRQ (4 << 10) /* IRQ stack */
++#define CONFIG_STACKSIZE_FIQ (4 << 10) /* FIQ stack */
++#endif
++
++/* Physical Memory Map */
++#define CONFIG_NR_DRAM_BANKS 1 /* CS1 may not be populated on CM-T35 */
++#define PHYS_SDRAM_1 OMAP34XX_SDRC_CS0
++#define PHYS_SDRAM_1_SIZE (32 << 20) /* at least 32 meg */
++
++/* SDRAM Bank Allocation method */
++#define SDRC_R_B_C 1
++
++/* PISMO support */
++#define PISMO1_NAND_SIZE GPMC_SIZE_128M
++
++/* environment */
++#define CONFIG_ENV_IS_IN_NAND 1
++#define SMNAND_ENV_OFFSET 0x260000 /* environment starts here */
++#define CONFIG_SYS_ENV_SECT_SIZE (1 << 128)
++#define CONFIG_ENV_OFFSET SMNAND_ENV_OFFSET
++
++/* SMSC9220 Ethernet */
++#if defined(CONFIG_CMD_NET)
++#define CONFIG_NET_MULTI
++#define CONFIG_SMC911X
++#define CONFIG_SMC911X_32_BIT
++#define CONFIG_SMC911X_KEEP_MAC
++#define CM_T35_SMC911X_BASE 0x2C000000
++#define SB_T35_SMC911X_BASE (CM_T35_SMC911X_BASE + (16 << 20))
++#define CONFIG_SMC911X_BASE CM_T35_SMC911X_BASE /* for smc911x_eeprom */
++#endif /* (CONFIG_CMD_NET) */
++
++#define CONFIG_OMAP3_GPIO_6 1
++
++#endif /* __CONFIG_H */
+diff --git a/include/configs/devkit8000.h b/include/configs/devkit8000.h
+index bd5037e..bac5127 100644
+--- a/include/configs/devkit8000.h
++++ b/include/configs/devkit8000.h
+@@ -293,15 +293,6 @@
+ #define CONFIG_ENV_IS_IN_NAND 1
+ #define SMNAND_ENV_OFFSET 0x260000 /* environment starts here */
+
+-#define CONFIG_ENV_OFFSET boot_flash_off
+-
+-#ifndef __ASSEMBLY__
+-extern struct gpmc *gpmc_cfg;
+-extern unsigned int boot_flash_base;
+-extern volatile unsigned int boot_flash_env_addr;
+-extern unsigned int boot_flash_off;
+-extern unsigned int boot_flash_sec;
+-extern unsigned int boot_flash_type;
+-#endif
++#define CONFIG_ENV_OFFSET SMNAND_ENV_OFFSET
+
+ #endif /* __CONFIG_H */
+diff --git a/include/configs/omap3_beagle.h b/include/configs/omap3_beagle.h
+index 19a5ec9..73ead6c 100644
+--- a/include/configs/omap3_beagle.h
++++ b/include/configs/omap3_beagle.h
+@@ -291,8 +291,8 @@
+ #define ONENAND_ENV_OFFSET 0x260000 /* environment starts here */
+ #define SMNAND_ENV_OFFSET 0x260000 /* environment starts here */
+
+-#define CONFIG_SYS_ENV_SECT_SIZE boot_flash_sec
+-#define CONFIG_ENV_OFFSET boot_flash_off
++#define CONFIG_SYS_ENV_SECT_SIZE (1 << 128)
++#define CONFIG_ENV_OFFSET SMNAND_ENV_OFFSET
+ #define CONFIG_ENV_ADDR SMNAND_ENV_OFFSET
+
+ /*-----------------------------------------------------------------------
+@@ -310,13 +310,4 @@
+ #define CONFIG_SYS_JFFS2_FIRST_BANK CONFIG_SYS_MAX_FLASH_BANKS
+ #define CONFIG_SYS_JFFS2_NUM_BANKS 1
+
+-#ifndef __ASSEMBLY__
+-extern struct gpmc *gpmc_cfg;
+-extern unsigned int boot_flash_base;
+-extern volatile unsigned int boot_flash_env_addr;
+-extern unsigned int boot_flash_off;
+-extern unsigned int boot_flash_sec;
+-extern unsigned int boot_flash_type;
+-#endif
+-
+ #endif /* __CONFIG_H */
+diff --git a/include/configs/omap3_evm.h b/include/configs/omap3_evm.h
+index a5514ae..70eb86b 100644
+--- a/include/configs/omap3_evm.h
++++ b/include/configs/omap3_evm.h
+@@ -262,7 +262,7 @@
+ #define CONFIG_SYS_MAX_FLASH_BANKS 2 /* max number of flash banks */
+ #define CONFIG_SYS_MONITOR_LEN (256 << 10) /* Reserve 2 sectors */
+
+-#define CONFIG_SYS_FLASH_BASE boot_flash_base
++#define CONFIG_SYS_FLASH_BASE ONENAND_MAP
+
+ /* Monitor at start of flash */
+ #define CONFIG_SYS_MONITOR_BASE CONFIG_SYS_FLASH_BASE
+@@ -272,9 +272,9 @@
+ #define ONENAND_ENV_OFFSET 0x260000 /* environment starts here */
+ #define SMNAND_ENV_OFFSET 0x260000 /* environment starts here */
+
+-#define CONFIG_SYS_ENV_SECT_SIZE boot_flash_sec
+-#define CONFIG_ENV_OFFSET boot_flash_off
+-#define CONFIG_ENV_ADDR boot_flash_env_addr
++#define CONFIG_SYS_ENV_SECT_SIZE (1 << 128)
++#define CONFIG_ENV_OFFSET ONENAND_ENV_OFFSET
++#define CONFIG_ENV_ADDR ONENAND_ENV_OFFSET
+
+ /*-----------------------------------------------------------------------
+ * CFI FLASH driver setup
+@@ -291,15 +291,6 @@
+ #define CONFIG_SYS_JFFS2_FIRST_BANK CONFIG_SYS_MAX_FLASH_BANKS
+ #define CONFIG_SYS_JFFS2_NUM_BANKS 1
+
+-#ifndef __ASSEMBLY__
+-extern struct gpmc *gpmc_cfg;
+-extern unsigned int boot_flash_base;
+-extern volatile unsigned int boot_flash_env_addr;
+-extern unsigned int boot_flash_off;
+-extern unsigned int boot_flash_sec;
+-extern unsigned int boot_flash_type;
+-#endif
+-
+ /*----------------------------------------------------------------------------
+ * SMSC9115 Ethernet from SMSC9118 family
+ *----------------------------------------------------------------------------
+diff --git a/include/configs/omap3_overo.h b/include/configs/omap3_overo.h
+index ffb515d..6ffae60 100644
+--- a/include/configs/omap3_overo.h
++++ b/include/configs/omap3_overo.h
+@@ -266,7 +266,7 @@
+ #define CONFIG_SYS_MAX_FLASH_BANKS 2 /* max number of flash banks */
+ #define CONFIG_SYS_MONITOR_LEN (256 << 10) /* Reserve 2 sectors */
+
+-#define CONFIG_SYS_FLASH_BASE boot_flash_base
++#define CONFIG_SYS_FLASH_BASE NAND_BASE
+
+ /* Monitor at start of flash */
+ #define CONFIG_SYS_MONITOR_BASE CONFIG_SYS_FLASH_BASE
+@@ -276,8 +276,8 @@
+ #define ONENAND_ENV_OFFSET 0x240000 /* environment starts here */
+ #define SMNAND_ENV_OFFSET 0x240000 /* environment starts here */
+
+-#define CONFIG_SYS_ENV_SECT_SIZE boot_flash_sec
+-#define CONFIG_ENV_OFFSET boot_flash_off
++#define CONFIG_SYS_ENV_SECT_SIZE (1 << 128)
++#define CONFIG_ENV_OFFSET SMNAND_ENV_OFFSET
+ #define CONFIG_ENV_ADDR SMNAND_ENV_OFFSET
+
+ /*-----------------------------------------------------------------------
+@@ -295,15 +295,6 @@
+ #define CONFIG_SYS_JFFS2_FIRST_BANK CONFIG_SYS_MAX_FLASH_BANKS
+ #define CONFIG_SYS_JFFS2_NUM_BANKS 1
+
+-#ifndef __ASSEMBLY__
+-extern struct gpmc *gpmc_cfg;
+-extern unsigned int boot_flash_base;
+-extern volatile unsigned int boot_flash_env_addr;
+-extern unsigned int boot_flash_off;
+-extern unsigned int boot_flash_sec;
+-extern unsigned int boot_flash_type;
+-#endif
+-
+ #if defined(CONFIG_CMD_NET)
+ /*----------------------------------------------------------------------------
+ * SMSC9211 Ethernet from SMSC9118 family
+diff --git a/include/configs/omap3_pandora.h b/include/configs/omap3_pandora.h
+index 6f21af3..041412e 100644
+--- a/include/configs/omap3_pandora.h
++++ b/include/configs/omap3_pandora.h
+@@ -259,7 +259,7 @@
+ #define CONFIG_SYS_MAX_FLASH_BANKS 2 /* max number of flash banks */
+ #define CONFIG_SYS_MONITOR_LEN (256 << 10) /* Reserve 2 sectors */
+
+-#define CONFIG_SYS_FLASH_BASE boot_flash_base
++#define CONFIG_SYS_FLASH_BASE ONENAND_MAP
+
+ /* Monitor at start of flash */
+ #define CONFIG_SYS_MONITOR_BASE CONFIG_SYS_FLASH_BASE
+@@ -269,8 +269,8 @@
+ #define ONENAND_ENV_OFFSET 0x240000 /* environment starts here */
+ #define SMNAND_ENV_OFFSET 0x240000 /* environment starts here */
+
+-#define CONFIG_SYS_ENV_SECT_SIZE boot_flash_sec
+-#define CONFIG_ENV_OFFSET boot_flash_off
++#define CONFIG_SYS_ENV_SECT_SIZE (1 << 128)
++#define CONFIG_ENV_OFFSET SMNAND_ENV_OFFSET
+ #define CONFIG_ENV_ADDR SMNAND_ENV_OFFSET
+
+ /*-----------------------------------------------------------------------
+@@ -288,13 +288,4 @@
+ #define CONFIG_SYS_JFFS2_FIRST_BANK CONFIG_SYS_MAX_FLASH_BANKS
+ #define CONFIG_SYS_JFFS2_NUM_BANKS 1
+
+-#ifndef __ASSEMBLY__
+-extern struct gpmc *gpmc_cfg;
+-extern unsigned int boot_flash_base;
+-extern volatile unsigned int boot_flash_env_addr;
+-extern unsigned int boot_flash_off;
+-extern unsigned int boot_flash_sec;
+-extern unsigned int boot_flash_type;
+-#endif
+-
+ #endif /* __CONFIG_H */
+diff --git a/include/configs/omap3_sdp3430.h b/include/configs/omap3_sdp3430.h
+index 229dc5e..3ec7ce0 100644
+--- a/include/configs/omap3_sdp3430.h
++++ b/include/configs/omap3_sdp3430.h
+@@ -355,15 +355,4 @@
+ * - rest for filesystem
+ */
+
+-/*--------------------------------------------------------------------------*/
+-
+-#ifndef __ASSEMBLY__
+-extern struct gpmc *gpmc_cfg;
+-extern unsigned int boot_flash_base;
+-extern volatile unsigned int boot_flash_env_addr;
+-extern unsigned int boot_flash_off;
+-extern unsigned int boot_flash_sec;
+-extern unsigned int boot_flash_type;
+-#endif
+-
+ #endif /* __CONFIG_H */
+diff --git a/include/configs/omap3_zoom1.h b/include/configs/omap3_zoom1.h
+index da4b677..9811f15 100644
+--- a/include/configs/omap3_zoom1.h
++++ b/include/configs/omap3_zoom1.h
+@@ -267,7 +267,7 @@
+ #define CONFIG_SYS_MAX_FLASH_BANKS 2 /* max number of flash banks */
+ #define CONFIG_SYS_MONITOR_LEN (256 << 10) /* Reserve 2 sectors */
+
+-#define CONFIG_SYS_FLASH_BASE boot_flash_base
++#define CONFIG_SYS_FLASH_BASE CONFIG_SYS_NAND_BASE
+
+ /* Monitor at start of flash */
+ #define CONFIG_SYS_MONITOR_BASE CONFIG_SYS_FLASH_BASE
+@@ -277,8 +277,8 @@
+ #define ONENAND_ENV_OFFSET 0x260000 /* environment starts here */
+ #define SMNAND_ENV_OFFSET 0x260000 /* environment starts here */
+
+-#define CONFIG_SYS_ENV_SECT_SIZE boot_flash_sec
+-#define CONFIG_ENV_OFFSET boot_flash_off
++#define CONFIG_SYS_ENV_SECT_SIZE (1 << 128)
++#define CONFIG_ENV_OFFSET SMNAND_ENV_OFFSET
+ #define CONFIG_ENV_ADDR SMNAND_ENV_OFFSET
+
+ /*-----------------------------------------------------------------------
+@@ -296,13 +296,4 @@
+ #define CONFIG_SYS_JFFS2_FIRST_BANK CONFIG_SYS_MAX_FLASH_BANKS
+ #define CONFIG_SYS_JFFS2_NUM_BANKS 1
+
+-#ifndef __ASSEMBLY__
+-extern struct gpmc *gpmc_cfg;
+-extern unsigned int boot_flash_base;
+-extern volatile unsigned int boot_flash_env_addr;
+-extern unsigned int boot_flash_off;
+-extern unsigned int boot_flash_sec;
+-extern unsigned int boot_flash_type;
+-#endif
+-
+ #endif /* __CONFIG_H */
+diff --git a/include/configs/omap3_zoom2.h b/include/configs/omap3_zoom2.h
+index 32cd6fd..1a23acd 100644
+--- a/include/configs/omap3_zoom2.h
++++ b/include/configs/omap3_zoom2.h
+@@ -232,7 +232,7 @@
+ #define CONFIG_SYS_MAX_FLASH_BANKS 2 /* max number of flash banks */
+ #define CONFIG_SYS_MONITOR_LEN (256 << 10) /* Reserve 2 sectors */
+
+-#define CONFIG_SYS_FLASH_BASE boot_flash_base
++#define CONFIG_SYS_FLASH_BASE CONFIG_SYS_NAND_BASE
+
+ /* Monitor at start of flash */
+ #define CONFIG_SYS_MONITOR_BASE CONFIG_SYS_FLASH_BASE
+@@ -240,8 +240,8 @@
+ #define CONFIG_ENV_IS_IN_NAND 1
+ #define SMNAND_ENV_OFFSET 0x0c0000 /* environment starts here */
+
+-#define CONFIG_SYS_ENV_SECT_SIZE boot_flash_sec
+-#define CONFIG_ENV_OFFSET boot_flash_off
++#define CONFIG_SYS_ENV_SECT_SIZE (1 << 128)
++#define CONFIG_ENV_OFFSET SMNAND_ENV_OFFSET
+ #define CONFIG_ENV_ADDR SMNAND_ENV_OFFSET
+
+ /*-----------------------------------------------------------------------
+@@ -251,13 +251,4 @@
+ #define CONFIG_SYS_FLASH_ERASE_TOUT (100 * CONFIG_SYS_HZ)
+ #define CONFIG_SYS_FLASH_WRITE_TOUT (100 * CONFIG_SYS_HZ)
+
+-#ifndef __ASSEMBLY__
+-extern struct gpmc *gpmc_cfg;
+-extern unsigned int boot_flash_base;
+-extern volatile unsigned int boot_flash_env_addr;
+-extern unsigned int boot_flash_off;
+-extern unsigned int boot_flash_sec;
+-extern unsigned int boot_flash_type;
+-#endif
+-
+ #endif /* __CONFIG_H */
diff --git a/recipes/u-boot/u-boot-mkimage-native_1.3.2.bb b/recipes/u-boot/u-boot-mkimage-native_1.3.2.bb
index 38dd700d08..3c210a099b 100644
--- a/recipes/u-boot/u-boot-mkimage-native_1.3.2.bb
+++ b/recipes/u-boot/u-boot-mkimage-native_1.3.2.bb
@@ -13,7 +13,7 @@ EXTRA_OEMAKE = "CROSS_COMPILE=${TARGET_PREFIX}"
do_compile () {
oe_runmake smdk2410_config
- oe_runmake tools
+ oe_runmake tools STRIP='/bin/true'
}
do_stage () {
diff --git a/recipes/u-boot/u-boot_git.bb b/recipes/u-boot/u-boot_git.bb
index e914d78064..5fcf7c586a 100644
--- a/recipes/u-boot/u-boot_git.bb
+++ b/recipes/u-boot/u-boot_git.bb
@@ -11,8 +11,10 @@ SRCREV_c7x0 = "9bf86baaa3b35b25baa2d664e2f7f6cafad689ee"
SRCREV_afeb9260 = "6b8edfde22acc574b5532e9f086e6a7287a9bc78"
SRCREV_afeb9260-180 = "6b8edfde22acc574b5532e9f086e6a7287a9bc78"
SRCREV_palmpre = "6b8edfde22acc574b5532e9f086e6a7287a9bc78"
+SRCREV_cm-t35 = "3c014f1586d5bfe30dca7549396915c83f31cd30"
SRC_URI_append_afeb9260 = " file://AFEB9260-network-fix.patch;patch=1"
SRC_URI_append_afeb9260-180 = " file://AFEB9260-network-fix.patch;patch=1"
+SRC_URI_append_cm-t35 = "file://cm-t35/cm-t35.patch;patch=1"
SRC_URI_beagleboard = "git://git.denx.de/u-boot-ti.git;protocol=git \
file://fw_env.config \
diff --git a/recipes/uclibc/uclibc-nptl/installfix.patch b/recipes/uclibc/uclibc-nptl/installfix.patch
new file mode 100644
index 0000000000..61908df179
--- /dev/null
+++ b/recipes/uclibc/uclibc-nptl/installfix.patch
@@ -0,0 +1,13 @@
+Index: git/Makefile.in
+===================================================================
+--- git.orig/Makefile.in 2009-12-04 12:53:00.000000000 -0800
++++ git/Makefile.in 2009-12-04 16:25:28.000000000 -0800
+@@ -300,7 +300,7 @@ else
+ endif
+
+ # Installs development library links.
+-install_dev: install_headers all
++install_dev: install_headers install_runtime
+ $(INSTALL) -d $(PREFIX)$(DEVEL_PREFIX)lib
+ -$(INSTALL) -m 644 lib/*.[ao] $(PREFIX)$(DEVEL_PREFIX)lib/
+ ifeq ($(HAVE_SHARED),y)
diff --git a/recipes/uclibc/uclibc-nptl/uClibc.distro b/recipes/uclibc/uclibc-nptl/uClibc.distro
index ebd16563f0..e5ac05273a 100644
--- a/recipes/uclibc/uclibc-nptl/uClibc.distro
+++ b/recipes/uclibc/uclibc-nptl/uClibc.distro
@@ -35,6 +35,7 @@ UCLIBC_HAS_PROGRAM_INVOCATION_NAME=y
UCLIBC_HAS___PROGNAME=y
UNIX98PTY_ONLY=y
ASSUME_DEVPTS=y
+UCLIBC_HAS_LIBUTIL=y
UCLIBC_HAS_TM_EXTENSIONS=y
UCLIBC_HAS_TZ_CACHING=y
UCLIBC_HAS_TZ_FILE=y
diff --git a/recipes/uclibc/uclibc.inc b/recipes/uclibc/uclibc.inc
index bb1e7da6bf..23810ea2a4 100644
--- a/recipes/uclibc/uclibc.inc
+++ b/recipes/uclibc/uclibc.inc
@@ -182,3 +182,6 @@ do_install() {
chmod +x ${D}/${base_libdir}/*
}
+get_monotonic_srcrev () {
+ (cd ${S}; eval `git rev-list HEAD|wc -l`)
+}
diff --git a/recipes/uclibc/uclibc_nptl.bb b/recipes/uclibc/uclibc_nptl.bb
index be54ba817d..a978025a1e 100644
--- a/recipes/uclibc/uclibc_nptl.bb
+++ b/recipes/uclibc/uclibc_nptl.bb
@@ -7,7 +7,7 @@
# on whether the base patches apply to the selected (SRCDATE) svn release.
#
UCLIBC_BASE ?= "0.9.30"
-SRCREV="8a6a88f5032ccbc3bfb8836c783a55316b156481"
+SRCREV="b3d31460fbf188997c7337296a61409529f7c974"
PV = "${UCLIBC_BASE}+gitr${SRCPV}"
DEFAULT_PREFERENCE = "-1"
#DEFAULT_PREFERENCE is 0 (empty), releases have a preference of 1 so take
@@ -34,6 +34,7 @@ SRC_URI = "git://uclibc.org/uClibc.git;protocol=git;branch=nptl \
file://uclibc-arm-ftruncate64.patch;patch=1 \
file://ldso_use_arm_dl_linux_resolve_in_thumb_mode.patch;patch=1 \
file://uclibc_arm_remove_duplicate_sysdep_defs.patch;patch=1 \
+ file://installfix.patch;patch=1 \
"
S = "${WORKDIR}/git"
diff --git a/recipes/udev/udev-092/mtd-exclude-persistent.patch b/recipes/udev/udev-092/mtd-exclude-persistent.patch
new file mode 100644
index 0000000000..30032d402d
--- /dev/null
+++ b/recipes/udev/udev-092/mtd-exclude-persistent.patch
@@ -0,0 +1,17 @@
+Copyright (c) 2009 MontaVista Software, Inc. All rights reserved.
+
+---
+ etc/udev/60-persistent-storage.rules | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- udev-092.orig/etc/udev/60-persistent-storage.rules
++++ udev-092/etc/udev/60-persistent-storage.rules
+@@ -5,7 +5,7 @@ ACTION!="add", GOTO="persistent_storage_
+ SUBSYSTEM!="block", GOTO="persistent_storage_end"
+
+ # skip rules for inappropriate block devices
+-KERNEL=="ram*|loop*|fd*|nbd*", GOTO="persistent_storage_end"
++KERNEL=="ram*|loop*|fd*|mtd*|nbd*", GOTO="persistent_storage_end"
+
+ # never access removable ide devices, the drivers are causing event loops on open()
+ KERNEL=="hd*[!0-9]", SYSFS{removable}=="1", DRIVER=="ide-cs|ide-floppy", GOTO="persistent_storage_end"
diff --git a/recipes/udev/udev-100/mtd-exclude-persistent.patch b/recipes/udev/udev-100/mtd-exclude-persistent.patch
new file mode 100644
index 0000000000..2b848810d2
--- /dev/null
+++ b/recipes/udev/udev-100/mtd-exclude-persistent.patch
@@ -0,0 +1,17 @@
+Copyright (c) 2009 MontaVista Software, Inc. All rights reserved.
+
+---
+ etc/udev/rules.d/60-persistent-storage.rules | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- udev-100.orig/etc/udev/rules.d/60-persistent-storage.rules
++++ udev-100/etc/udev/rules.d/60-persistent-storage.rules
+@@ -5,7 +5,7 @@ ACTION!="add", GOTO="persistent_storage_
+ SUBSYSTEM!="block", GOTO="persistent_storage_end"
+
+ # skip rules for inappropriate block devices
+-KERNEL=="ram*|loop*|fd*|nbd*|dm-*", GOTO="persistent_storage_end"
++KERNEL=="ram*|loop*|fd*|mtd*|nbd*|dm-*", GOTO="persistent_storage_end"
+
+ # never access non-cdrom removable ide devices, the drivers are causing event loops on open()
+ KERNEL=="hd*[!0-9]", ATTRS{removable}=="1", DRIVERS=="ide-cs|ide-floppy", GOTO="persistent_storage_end"
diff --git a/recipes/udev/udev-118/mtd-exclude-persistent.patch b/recipes/udev/udev-118/mtd-exclude-persistent.patch
new file mode 100644
index 0000000000..204b7b487d
--- /dev/null
+++ b/recipes/udev/udev-118/mtd-exclude-persistent.patch
@@ -0,0 +1,13 @@
+Copyright (c) 2009 MontaVista Software, Inc. All rights reserved.
+
+--- a/etc/udev/rules.d/60-persistent-storage.rules 2008-06-12 07:24:30.000000000 +0200
++++ b/etc/udev/rules.d/60-persistent-storage.rules 2009-08-18 11:39:23.595063264 +0200
+@@ -10,7 +10,7 @@
+ SUBSYSTEM!="block", GOTO="persistent_storage_end"
+
+ # skip rules for inappropriate block devices
+-KERNEL=="ram*|loop*|fd*|nbd*|gnbd*|dm-*|md*", GOTO="persistent_storage_end"
++KERNEL=="ram*|loop*|fd*|mtd*|nbd*|gnbd*|dm-*|md*|btibm*", GOTO="persistent_storage_end"
+
+ # never access non-cdrom removable ide devices, the drivers are causing event loops on open()
+ KERNEL=="hd*[!0-9]", ATTR{removable}=="1", DRIVERS=="ide-cs|ide-floppy", GOTO="persistent_storage_end"
diff --git a/recipes/udev/udev-124/mtd-exclude-persistent.patch b/recipes/udev/udev-124/mtd-exclude-persistent.patch
new file mode 100644
index 0000000000..204b7b487d
--- /dev/null
+++ b/recipes/udev/udev-124/mtd-exclude-persistent.patch
@@ -0,0 +1,13 @@
+Copyright (c) 2009 MontaVista Software, Inc. All rights reserved.
+
+--- a/etc/udev/rules.d/60-persistent-storage.rules 2008-06-12 07:24:30.000000000 +0200
++++ b/etc/udev/rules.d/60-persistent-storage.rules 2009-08-18 11:39:23.595063264 +0200
+@@ -10,7 +10,7 @@
+ SUBSYSTEM!="block", GOTO="persistent_storage_end"
+
+ # skip rules for inappropriate block devices
+-KERNEL=="ram*|loop*|fd*|nbd*|gnbd*|dm-*|md*", GOTO="persistent_storage_end"
++KERNEL=="ram*|loop*|fd*|mtd*|nbd*|gnbd*|dm-*|md*|btibm*", GOTO="persistent_storage_end"
+
+ # never access non-cdrom removable ide devices, the drivers are causing event loops on open()
+ KERNEL=="hd*[!0-9]", ATTR{removable}=="1", DRIVERS=="ide-cs|ide-floppy", GOTO="persistent_storage_end"
diff --git a/recipes/udev/udev_092.bb b/recipes/udev/udev_092.bb
index d9f5cbaa68..50d2156bcd 100644
--- a/recipes/udev/udev_092.bb
+++ b/recipes/udev/udev_092.bb
@@ -3,7 +3,7 @@ DESCRIPTION = "udev is a daemon which dynamically creates and removes device nod
the hotplug package and requires a kernel not older than 2.6.12."
RPROVIDES_${PN} = "hotplug"
-PR = "r24"
+PR = "r25"
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/utils/kernel/hotplug/udev-${PV}.tar.gz \
file://noasmlinkage.patch;patch=1 \
@@ -11,6 +11,7 @@ SRC_URI = "${KERNELORG_MIRROR}/pub/linux/utils/kernel/hotplug/udev-${PV}.tar.gz
file://udevsynthesize.patch;patch=1 \
file://udevsynthesize.sh \
file://arm_inotify_fix.patch;patch=1 \
+ file://mtd-exclude-persistent.patch;patch=1 \
file://mount.blacklist \
"
diff --git a/recipes/udev/udev_100.bb b/recipes/udev/udev_100.bb
index ef08aa4636..550d047cf1 100644
--- a/recipes/udev/udev_100.bb
+++ b/recipes/udev/udev_100.bb
@@ -9,11 +9,12 @@ used to detect the type of a file system and read its metadata."
DESCRIPTION_libvolume-id-dev = "libvolume_id development headers, \
needed to link programs with libvolume_id."
-PR = "r15"
+PR = "r16"
SRC_URI = "${KERNELORG_MIRROR}/pub/linux/utils/kernel/hotplug/udev-${PV}.tar.gz \
file://noasmlinkage.patch;patch=1 \
file://flags.patch;patch=1 \
+ file://mtd-exclude-persistent.patch;patch=1 \
file://mount.blacklist \
file://mount.sh \
"
diff --git a/recipes/udev/udev_118.bb b/recipes/udev/udev_118.bb
index b7043496af..631b8c2df3 100644
--- a/recipes/udev/udev_118.bb
+++ b/recipes/udev/udev_118.bb
@@ -3,7 +3,7 @@ DESCRIPTION = "udev is a daemon which dynamically creates and removes device nod
the hotplug package and requires a kernel not older than 2.6.12."
RPROVIDES_${PN} = "hotplug"
-PR = "r5"
+PR = "r6"
DEFAULT_PREFERENCE = "-118"
@@ -12,6 +12,7 @@ SRC_URI = "\
file://flags.patch;patch=1 \
file://vol_id_ld.patch;patch=1 \
file://udevtrigger_add_devname_filtering.patch;patch=1 \
+ file://mtd-exclude-persistent.patch;patch=1 \
file://mount.blacklist \
"
TARGET_CC_ARCH += "${LDFLAGS}"
diff --git a/recipes/udev/udev_124.bb b/recipes/udev/udev_124.bb
index 9477c55ab9..ab391a3394 100644
--- a/recipes/udev/udev_124.bb
+++ b/recipes/udev/udev_124.bb
@@ -2,7 +2,7 @@ DESCRIPTION = "udev is a daemon which dynamically creates and removes device nod
/dev/, handles hotplug events and loads drivers at boot time. It replaces \
the hotplug package and requires a kernel not older than 2.6.12."
RPROVIDES_${PN} = "hotplug"
-PR = "r17"
+PR = "r18"
SRC_URI = "http://kernel.org/pub/linux/utils/kernel/hotplug/udev-${PV}.tar.gz \
file://noasmlinkage.patch;patch=1 \
@@ -10,6 +10,7 @@ SRC_URI = "http://kernel.org/pub/linux/utils/kernel/hotplug/udev-${PV}.tar.gz \
file://vol_id_ld.patch;patch=1 \
file://udevtrigger_add_devname_filtering.patch;patch=1 \
file://libvolume-id-soname.patch;patch=1 \
+ file://mtd-exclude-persistent.patch;patch=1 \
file://mount.blacklist \
file://run.rules \
file://default \
diff --git a/recipes/wesnoth/wesnoth_1.6.5.bb b/recipes/wesnoth/wesnoth_1.6.5.bb
new file mode 100644
index 0000000000..4b7b9b67de
--- /dev/null
+++ b/recipes/wesnoth/wesnoth_1.6.5.bb
@@ -0,0 +1,172 @@
+DESCRIPTION = "The Battle for Wesnoth is a turn-based strategy game with a fantasy theme."
+HOMEPAGE = "http://www.wesnoth.org/"
+SECTION = "games"
+LICENSE = "GPL"
+
+DEPENDS = "freetype libsdl-image libsdl-mixer libsdl-net libsdl-ttf zlib boost imagemagick-native pango libpng"
+PR = "r0"
+
+SRC_URI = "${SOURCEFORGE_MIRROR}/wesnoth/${PN}-${PV}.tar.bz2;name=tarball"
+SRC_URI[tarball.md5sum] = "493826bbd9ba355930765a7e8fe3749a"
+SRC_URI[tarball.sha256sum] = "7ef047ae364278a5bf9bdc69228f77d825f793f1c4d9adae8b47f0882e7f30d7"
+
+ARM_INSTRUCTION_SET = "arm"
+
+inherit cmake
+
+EXTRA_OECMAKE = "\
+ -DGUI=tiny \
+ -DENABLE_EDITOR=ON \
+ -DENABLE_LOW_MEM=ON \
+ -DENABLE_FRIBIDI=OFF \
+ \
+ -DCMAKE_BUILD_TYPE=Debug \
+ "
+
+PACKAGES = "wesnoth-editor wesnoth-doc wesnoth-music wesnoth-sounds \
+ wesnoth-aoi wesnoth-did wesnoth-ei wesnoth-httt wesnoth-l \
+ wesnoth-nr wesnoth-sof wesnoth-sotbe wesnoth-thot wesnoth-trow \
+ wesnoth-tsg wesnoth-tb wesnoth-utbs \
+ wesnoth-data \
+ wesnoth-all-campaigns \
+ wesnoth-all \
+ wesnoth wesnoth-dbg \
+ wesnothd \
+ "
+
+DESCRIPTION_wesnoth-editor = "Map Editor for The Battle for Wesnoth"
+DESCRIPTION_wesnoth-all = "The Battle for Wesnoth with all campaigns, music and sounds"
+DESCRIPTION_wesnoth-all-campaigns = "The Battle for Wesnoth with all campaigns."
+DESCRIPTION_wesnoth-sounds = "Optional sound package for The Battle for Wesnoth"
+DESCRIPTION_wesnoth-music = "Optional music package for The Battle for Wesnoth"
+DESCRIPTION_wesnoth-data = "Mandatory data package for The Battle for Wesnoth"
+DESCRIPTION_wesnothd = "Optional Battle for Wesnoth server"
+
+do_configure_prepend(){
+ export HOST_SYS="${HOST_SYS}"
+ export BUILD_SYS="${BUILD_SYS}"
+ export STAGING_LIBDIR="${STAGING_LIBDIR}"
+ export STAGING_INCDIR="${STAGING_INCDIR}"
+ rm -f ${S}/cmake/FindBoost.cmake
+}
+
+do_install_append() {
+ #ugly hack but otherwise it would have required to
+ #have MANDIR:STRING=share/man that would require a
+ #second python function
+ if [ -d ${D}${prefix}/man ];then
+ mv ${D}${prefix}/man ${D}${mandir}
+ fi
+}
+
+RDEPENDS_wesnoth = "wesnoth-data libpng"
+
+RDEPENDS_wesnoth-editor = "wesnoth-data"
+
+RDEPENDS_wesnoth-all-campaigns = "wesnoth \
+ wesnoth-aoi wesnoth-did wesnoth-ei wesnoth-httt wesnoth-l \
+ wesnoth-nr wesnoth-sof wesnoth-sotbe wesnoth-thot wesnoth-trow \
+ wesnoth-tsg wesnoth-tb wesnoth-utbs"
+
+# Installing wesnoth-all should pull everything in (like in Debian).
+RDEPENDS_wesnoth-all = "wesnoth wesnoth-sounds wesnoth-music"
+
+FILES_wesnoth-music = "\
+ ${datadir}/wesnoth/data/core/music \
+"
+
+FILES_wesnoth-sounds = "\
+ ${datadir}/wesnoth/data/core/sounds \
+"
+
+# Picks up remaining translations and data. Must be packaged after
+# wesnoth-music, wesnoth-sounds and all campaigns.
+FILES_wesnoth-data = "\
+ ${datadir}/wesnoth/sounds \
+ ${datadir}/wesnoth/images \
+ ${datadir}/wesnoth/data \
+ ${datadir}/wesnoth/fonts \
+ ${datadir}/wesnoth/translations \
+"
+
+FILES_${PN} = "\
+ ${bindir}/wesnoth \
+ ${datadir}/icons \
+ ${datadir}/applications/wesnoth.desktop \
+ ${datadir}/pixmaps/wesnoth-icon.png \
+"
+
+FILES_wesnothd = "\
+ ${bindir}/wesnothd \
+"
+
+FILES_wesnoth-editor = "\
+ ${bindir}/wesnoth_editor \
+ ${datadir}/applications/wesnoth_editor.desktop \
+ ${datadir}/pixmaps/wesnoth_editor-icon.png \
+"
+
+FILES_wesnoth-aoi = "\
+ ${datadir}/wesnoth/data/campaigns/An_Orcish_Incursion \
+ ${datadir}/wesnoth/translations/*/LC_MESSAGES/wesnoth-aoi.mo \
+"
+
+FILES_wesnoth-did = "\
+ ${datadir}/wesnoth/data/campaigns/Descent_Into_Darkness \
+ ${datadir}/wesnoth/translations/*/LC_MESSAGES/wesnoth-did.mo \
+"
+
+FILES_wesnoth-ei = "\
+ ${datadir}/wesnoth/data/campaigns/Eastern_Invasion \
+ ${datadir}/wesnoth/translations/*/LC_MESSAGES/wesnoth-ei.mo \
+"
+
+FILES_wesnoth-httt = "\
+ ${datadir}/wesnoth/data/campaigns/Heir_To_The_Throne \
+ ${datadir}/wesnoth/translations/*/LC_MESSAGES/wesnoth-httt.mo \
+"
+
+FILES_wesnoth-l = "\
+ ${datadir}/wesnoth/data/campaigns/Liberty \
+ ${datadir}/wesnoth/translations/*/LC_MESSAGES/wesnoth-l.mo \
+"
+
+FILES_wesnoth-nr = "\
+ ${datadir}/wesnoth/data/campaigns/Northern_Rebirth \
+ ${datadir}/wesnoth/translations/*/LC_MESSAGES/wesnoth-nr.mo \
+"
+
+FILES_wesnoth-sof = "\
+ ${datadir}/wesnoth/data/campaigns/Sceptre_Of_Fire \
+ ${datadir}/wesnoth/translations/*/LC_MESSAGES/wesnoth-sof.mo \
+"
+
+FILES_wesnoth-sotbe = "\
+ ${datadir}/wesnoth/data/campaigns/Son_Of_The_Black_Eye \
+ ${datadir}/wesnoth/translations/*/LC_MESSAGES/wesnoth-sotbe.mo \
+"
+
+FILES_wesnoth-thot = "\
+ ${datadir}/wesnoth/data/campaigns/The_Hammer_Of_Thursagan \
+ ${datadir}/wesnoth/translations/*/LC_MESSAGES/wesnoth-thot.mo \
+"
+
+FILES_wesnoth-trow = "\
+ ${datadir}/wesnoth/data/campaigns/The_Rise_Of_Wesnoth \
+ ${datadir}/wesnoth/translations/*/LC_MESSAGES/wesnoth-trow.mo \
+"
+
+FILES_wesnoth-tsg = "\
+ ${datadir}/wesnoth/data/campaigns/The_South_Guard \
+ ${datadir}/wesnoth/translations/*/LC_MESSAGES/wesnoth-tsg.mo \
+"
+
+FILES_wesnoth-tb = "\
+ ${datadir}/wesnoth/data/campaigns/Two_Brothers \
+ ${datadir}/wesnoth/translations/*/LC_MESSAGES/wesnoth-tb.mo \
+"
+
+FILES_wesnoth-utbs = "\
+ ${datadir}/wesnoth/data/campaigns/Under_the_Burning_Suns \
+ ${datadir}/wesnoth/translations/*/LC_MESSAGES/wesnoth-utbs.mo \
+"
diff --git a/recipes/xorg-app/listres_1.0.2.bb b/recipes/xorg-app/listres_1.0.2.bb
new file mode 100644
index 0000000000..97fab10f3d
--- /dev/null
+++ b/recipes/xorg-app/listres_1.0.2.bb
@@ -0,0 +1,5 @@
+require xorg-app-common.inc
+PE = "1"
+
+DEPENDS += " libxaw virtual/libx11 libxt libxmu"
+
diff --git a/recipes/xorg-app/xdriinfo_1.0.1.bb b/recipes/xorg-app/xdriinfo_1.0.1.bb
index 7198a794d8..ed7d48c6c9 100644
--- a/recipes/xorg-app/xdriinfo_1.0.1.bb
+++ b/recipes/xorg-app/xdriinfo_1.0.1.bb
@@ -1,5 +1,6 @@
require xorg-app-common.inc
PE = "1"
+PR = "r1"
DEPENDS += " virtual/libx11 glproto virtual/libgl"
diff --git a/recipes/xorg-app/xdriinfo_1.0.2.bb b/recipes/xorg-app/xdriinfo_1.0.2.bb
index b995e91753..38e57cd022 100644
--- a/recipes/xorg-app/xdriinfo_1.0.2.bb
+++ b/recipes/xorg-app/xdriinfo_1.0.2.bb
@@ -2,3 +2,4 @@ require xorg-app-common.inc
DESCRIPTION = "query configuration information of DRI drivers"
DEPENDS += " virtual/libx11 glproto virtual/libgl"
PE = "1"
+PR = "r1"
diff --git a/recipes/xorg-app/xlogo_1.0.2.bb b/recipes/xorg-app/xlogo_1.0.2.bb
new file mode 100644
index 0000000000..6090eba216
--- /dev/null
+++ b/recipes/xorg-app/xlogo_1.0.2.bb
@@ -0,0 +1,5 @@
+require xorg-app-common.inc
+PE = "1"
+
+DEPENDS += " libxaw libxprintutil libxp libxrender libxft libxext libxt"
+
diff --git a/recipes/xorg-driver/xf86-input-evdev_2.3.0.bb b/recipes/xorg-driver/xf86-input-evdev_2.3.0.bb
index 9160df5b6e..1e66108501 100644
--- a/recipes/xorg-driver/xf86-input-evdev_2.3.0.bb
+++ b/recipes/xorg-driver/xf86-input-evdev_2.3.0.bb
@@ -4,4 +4,3 @@ DESCRIPTION = "X.Org X server -- evdev input driver"
PE = "1"
DEFAULT_PREFERENCE = "-1"
-DEFAULT_PREFERENCE_shr = "1"
diff --git a/recipes/xorg-driver/xf86-input-evdev_2.3.2.bb b/recipes/xorg-driver/xf86-input-evdev_2.3.2.bb
new file mode 100644
index 0000000000..792909621a
--- /dev/null
+++ b/recipes/xorg-driver/xf86-input-evdev_2.3.2.bb
@@ -0,0 +1,4 @@
+require xorg-driver-input.inc
+
+DESCRIPTION = "X.Org X server -- evdev input driver"
+PE = "1"
diff --git a/recipes/xorg-driver/xf86-input-synaptics_1.2.1.bb b/recipes/xorg-driver/xf86-input-synaptics_1.2.1.bb
new file mode 100644
index 0000000000..e6325675f8
--- /dev/null
+++ b/recipes/xorg-driver/xf86-input-synaptics_1.2.1.bb
@@ -0,0 +1,4 @@
+require xorg-driver-input.inc
+
+DESCRIPTION = "X.Org X server -- mouse input driver"
+PE = "1"
diff --git a/recipes/xorg-driver/xf86-input-tslib/dontfloodevents006.patch b/recipes/xorg-driver/xf86-input-tslib/dontfloodevents006.patch
new file mode 100644
index 0000000000..e989717d3b
--- /dev/null
+++ b/recipes/xorg-driver/xf86-input-tslib/dontfloodevents006.patch
@@ -0,0 +1,22 @@
+Index: xf86-input-tslib-0.0.6/src/tslib.c
+===================================================================
+--- xf86-input-tslib-0.0.6.orig/src/tslib.c 2009-11-29 20:03:29.734794324 +0000
++++ xf86-input-tslib-0.0.6/src/tslib.c 2009-11-29 20:29:24.066794215 +0000
+@@ -205,7 +205,7 @@
+ */
+ switch (priv->state) {
+ case BUTTON_EMULATION_OFF :
+- if(priv->lastp != samp.pressure) {
++ if(!!priv->lastp != !!samp.pressure) {
+ priv->lastp = samp.pressure;
+ xf86PostButtonEvent(local->dev, TRUE,
+ 1, !!samp.pressure, 0, 2,
+@@ -512,7 +512,7 @@
+ s = xf86CheckStrOption(dev->commonOptions, "path", NULL);
+ if (!s)
+ s = xf86CheckStrOption(dev->commonOptions, "Device", NULL);
+-
++
+ priv->ts = ts_open(s, 1);
+ xfree(s);
+
diff --git a/recipes/xorg-driver/xf86-input-tslib_0.0.6.bb b/recipes/xorg-driver/xf86-input-tslib_0.0.6.bb
index 785e5f4e5e..e86f0c75e6 100644
--- a/recipes/xorg-driver/xf86-input-tslib_0.0.6.bb
+++ b/recipes/xorg-driver/xf86-input-tslib_0.0.6.bb
@@ -4,7 +4,10 @@ DESCRIPTION = "X.Org X server -- tslib input driver"
RRECOMMENDS += "hal tslib-calibrate"
DEPENDS += "tslib"
+PR = "r2"
+
SRC_URI = "http://www.pengutronix.de/software/xf86-input-tslib/download/xf86-input-tslib-${PV}.tar.bz2 \
+ file://dontfloodevents006.patch;patch=1 \
file://10-x11-input-tslib.fdi"
do_configure_prepend() {
@@ -17,4 +20,3 @@ do_install_append() {
}
FILES_${PN} += "${datadir}/hal"
-
diff --git a/recipes/xorg-driver/xf86-video-nv_2.1.16.bb b/recipes/xorg-driver/xf86-video-nv_2.1.16.bb
new file mode 100644
index 0000000000..0d4ee2ed19
--- /dev/null
+++ b/recipes/xorg-driver/xf86-video-nv_2.1.16.bb
@@ -0,0 +1,4 @@
+require xorg-driver-video.inc
+
+DESCRIPTION = "X.Org X server -- NV display driver"
+PE = "1"
diff --git a/recipes/xorg-lib/liblbxutil/mkg3states-1.1.patch b/recipes/xorg-lib/liblbxutil/mkg3states-1.1.patch
new file mode 100644
index 0000000000..f9f4a6382c
--- /dev/null
+++ b/recipes/xorg-lib/liblbxutil/mkg3states-1.1.patch
@@ -0,0 +1,55 @@
+diff -uNr liblbxutil-1.1.0.orig/configure.ac liblbxutil-1.1.0/configure.ac
+--- liblbxutil-1.1.0.orig/configure.ac 2009-12-04 23:52:04.000000000 +0100
++++ liblbxutil-1.1.0/configure.ac 2009-12-16 10:45:00.000000000 +0100
+@@ -50,4 +50,5 @@
+
+ AC_OUTPUT([Makefile
+ src/Makefile
++ src/image/Makefile
+ lbxutil.pc])
+diff -uNr liblbxutil-1.1.0.orig/src/image/Makefile.am liblbxutil-1.1.0/src/image/Makefile.am
+--- liblbxutil-1.1.0.orig/src/image/Makefile.am 1970-01-01 01:00:00.000000000 +0100
++++ liblbxutil-1.1.0/src/image/Makefile.am 2009-12-16 10:45:00.000000000 +0100
+@@ -0,0 +1,15 @@
++# evil hack
++CFLAGS=$(CFLAGS_FOR_BUILD)
++CPPFLAGS=$(CPPFLAGS_FOR_BUILD)
++LDFLAGS=$(LDFLAGS_FOR_BUILD)
++
++CC=$(CC_FOR_BUILD)
++LIBTOOL = @LIBTOOL@ --tag=CC
++
++noinst_PROGRAMS = mkg3states
++
++mkg3states_SOURCES = \
++ mkg3states.c
++
++mkg3states_CFLAGS=$(CFLAGS_FOR_BUILD)
++mkg3states_LDFLAGS=$(LDFLAGS_FOR_BUILD)
+diff -uNr liblbxutil-1.1.0.orig/src/Makefile.am liblbxutil-1.1.0/src/Makefile.am
+--- liblbxutil-1.1.0.orig/src/Makefile.am 2009-12-16 10:48:11.000000000 +0100
++++ liblbxutil-1.1.0/src/Makefile.am 2009-12-16 10:46:47.000000000 +0100
+@@ -3,10 +3,7 @@
+ AM_CFLAGS = $(CWARNFLAGS) $(LBXUTIL_CFLAGS)
+ INCLUDES = -I$(top_srcdir)/include
+
+-noinst_PROGRAMS = mkg3states
+-
+-mkg3states_SOURCES = \
+- $(srcdir)/image/mkg3states.c
++SUBDIRS = image
+
+ liblbxutil_la_SOURCES = \
+ $(srcdir)/lbx_zlib/reqstats.h \
+@@ -38,9 +35,8 @@
+
+ $(srcdir)/image/dfaxg42d.c: g3states.h
+
+-g3states.h: mkg3states
+- -rm -f g3states.h
+- $(AM_V_GEN) ./mkg3states -c > g3states.h_ && mv g3states.h_ g3states.h
++g3states.h: image/mkg3states
++ $(AM_V_GEN) ./image/mkg3states -c > g3states.h_ && mv g3states.h_ g3states.h
+
+ liblbxutil_la_LDFLAGS = -version-number 1:0:0 -no-undefined
+
diff --git a/recipes/xorg-lib/liblbxutil_1.1.0.bb b/recipes/xorg-lib/liblbxutil_1.1.0.bb
new file mode 100644
index 0000000000..3221520f85
--- /dev/null
+++ b/recipes/xorg-lib/liblbxutil_1.1.0.bb
@@ -0,0 +1,10 @@
+require xorg-lib-common.inc
+
+DESCRIPTION = "XFIXES Extension"
+DEPENDS += " xextproto xproto zlib"
+PROVIDES = "lbxutil"
+PE = "1"
+
+SRC_URI += "file://mkg3states-1.1.patch;patch=1"
+
+export CC_FOR_BUILD = "gcc"
diff --git a/recipes/xorg-lib/libpciaccess_0.11.0.bb b/recipes/xorg-lib/libpciaccess_0.11.0.bb
new file mode 100644
index 0000000000..26d1d95e35
--- /dev/null
+++ b/recipes/xorg-lib/libpciaccess_0.11.0.bb
@@ -0,0 +1,5 @@
+require xorg-lib-common.inc
+
+DEPENDS += "xproto virtual/libx11"
+
+PR="r1"
diff --git a/recipes/xorg-util/util-macros-1.4.1/malloc_zero_returns_null.patch b/recipes/xorg-util/util-macros-1.4.1/malloc_zero_returns_null.patch
new file mode 100644
index 0000000000..0d8a9cd9ec
--- /dev/null
+++ b/recipes/xorg-util/util-macros-1.4.1/malloc_zero_returns_null.patch
@@ -0,0 +1,27 @@
+From 48e2b3d0ee8d637d83b88bf29c6d417f61aaa0e4 Mon Sep 17 00:00:00 2001
+From: Colin Watson <cjwatson@canonical.com>
+Date: Sat, 10 Oct 2009 12:28:28 +0000
+Subject: Use conservative default for malloc(0) when cross-compiling #24460
+
+When cross-compiling, AC_RUN_IFELSE can't run test programs.
+MALLOC_ZERO_RETURNS_NULL=yes is a conservative default in this case.
+
+Signed-off-by: Colin Watson <cjwatson@canonical.com>
+Signed-off-by: Gaetan Nadon <memsize@videotron.ca>
+---
+diff --git a/xorg-macros.m4.in b/xorg-macros.m4.in
+index 6f9635f..393186f 100644
+--- a/xorg-macros.m4.in
++++ b/xorg-macros.m4.in
+@@ -339,7 +339,8 @@ main() {
+ exit(m0 == 0 || r0 == 0 || c0 == 0 ? 0 : 1);
+ }],
+ [MALLOC_ZERO_RETURNS_NULL=yes],
+- [MALLOC_ZERO_RETURNS_NULL=no])
++ [MALLOC_ZERO_RETURNS_NULL=no],
++ [MALLOC_ZERO_RETURNS_NULL=yes])
+ fi
+ AC_MSG_RESULT([$MALLOC_ZERO_RETURNS_NULL])
+
+--
+cgit v0.8.3-6-g21f6
diff --git a/recipes/xorg-util/util-macros-native_1.4.1.bb b/recipes/xorg-util/util-macros-native_1.4.1.bb
new file mode 100644
index 0000000000..618e78f116
--- /dev/null
+++ b/recipes/xorg-util/util-macros-native_1.4.1.bb
@@ -0,0 +1,7 @@
+require util-macros_${PV}.bb
+
+inherit native
+
+XORG_PN = "util-macros"
+
+S = "${WORKDIR}/util-macros-${PV}"
diff --git a/recipes/xorg-util/util-macros_1.4.1.bb b/recipes/xorg-util/util-macros_1.4.1.bb
new file mode 100644
index 0000000000..7e0b7d5cc9
--- /dev/null
+++ b/recipes/xorg-util/util-macros_1.4.1.bb
@@ -0,0 +1,8 @@
+require xorg-util-common.inc
+
+DESCRIPTION = "X autotools macros"
+PE = "1"
+
+SRC_URI += " file://malloc_zero_returns_null.patch;patch=1"
+
+ALLOW_EMPTY = "1"
diff --git a/recipes/xorg-xserver/xorg-xserver-common.inc b/recipes/xorg-xserver/xorg-xserver-common.inc
index c9b33768c6..a2a95b74cf 100644
--- a/recipes/xorg-xserver/xorg-xserver-common.inc
+++ b/recipes/xorg-xserver/xorg-xserver-common.inc
@@ -6,7 +6,7 @@ INC_PR = "r13"
PROVIDES = "virtual/xserver"
-DEPENDS = "hal fontconfig freetype flex-native kbproto \
+DEPENDS = "hal fontconfig freetype flex-native lbxutil kbproto \
xf86driproto drm glproto randrproto renderproto fixesproto damageproto \
xcmiscproto xextproto xproto xf86miscproto xf86vidmodeproto xf86bigfontproto \
scrnsaverproto bigreqsproto resourceproto fontsproto inputproto \
diff --git a/recipes/xorg-xserver/xserver-kdrive-1.4.0.90/vm86_masks.patch b/recipes/xorg-xserver/xserver-kdrive-1.4.0.90/vm86_masks.patch
new file mode 100644
index 0000000000..b0044886e5
--- /dev/null
+++ b/recipes/xorg-xserver/xserver-kdrive-1.4.0.90/vm86_masks.patch
@@ -0,0 +1,20 @@
+See https://bugs.gentoo.org/show_bug.cgi?id=235789
+2008-09-09 Martin von Gagern
+
+--- xorg-server-1.5.0.orig/hw/kdrive/vesa/vm86.h 2008-09-09 17:24:59.000000000 +0200
++++ xorg-server-1.5.0/hw/kdrive/vesa/vm86.h 2008-09-09 18:01:53.000000000 +0200
+@@ -67,6 +67,13 @@
+ #include "os.h"
+ #endif
+
++#ifndef IF_MASK
++#define IF_MASK X86_EFLAGS_IF
++#endif
++#ifndef IOPL_MASK
++#define IOPL_MASK X86_EFLAGS_IOPL
++#endif
++
+ typedef unsigned char U8;
+ typedef unsigned short U16;
+ typedef unsigned int U32;
+
diff --git a/recipes/xorg-xserver/xserver-kdrive_1.4.0.90.bb b/recipes/xorg-xserver/xserver-kdrive_1.4.0.90.bb
index 0b347aad7b..b6322769ab 100644
--- a/recipes/xorg-xserver/xserver-kdrive_1.4.0.90.bb
+++ b/recipes/xorg-xserver/xserver-kdrive_1.4.0.90.bb
@@ -4,7 +4,7 @@ DEPENDS += "hal libxkbfile libxcalibrate pixman"
RDEPENDS += "hal"
PE = "1"
-PR = "r7"
+PR = "r8"
SRC_URI = "${XORG_MIRROR}/individual/xserver/xorg-server-${PV}.tar.bz2 \
${KDRIVE_COMMON_PATCHES} \
@@ -27,6 +27,7 @@ SRC_URI = "${XORG_MIRROR}/individual/xserver/xorg-server-${PV}.tar.bz2 \
file://no_xkb.patch;patch=1;pnum=0 \
file://xorg-1.4-kdrive-rotation.patch;patch=1 \
file://split_multiple_AC_SUBST.patch;patch=1 \
+ file://vm86_masks.patch;patch=1 \
"
S = "${WORKDIR}/xorg-server-${PV}"
diff --git a/recipes/xorg-xserver/xserver-xorg-conf/cm-t35/xorg.conf b/recipes/xorg-xserver/xserver-xorg-conf/cm-t35/xorg.conf
new file mode 100644
index 0000000000..07d849d705
--- /dev/null
+++ b/recipes/xorg-xserver/xserver-xorg-conf/cm-t35/xorg.conf
@@ -0,0 +1,29 @@
+Section "Module"
+ Load "extmod"
+ Load "dbe"
+ Load "glx"
+ Load "freetype"
+ Load "type1"
+ Load "record"
+ Load "dri"
+EndSection
+
+Section "Monitor"
+ Identifier "Builtin Default Monitor"
+EndSection
+
+Section "Device"
+ Identifier "Builtin Default fbdev Device 0"
+ Driver "omapfb"
+EndSection
+
+Section "Screen"
+ Identifier "Builtin Default fbdev Screen 0"
+ Device "Builtin Default fbdev Device 0"
+ Monitor "Builtin Default Monitor"
+EndSection
+
+Section "ServerLayout"
+ Identifier "Builtin Default Layout"
+ Screen "Builtin Default fbdev Screen 0"
+EndSection
diff --git a/recipes/xorg-xserver/xserver-xorg-conf_0.1.bb b/recipes/xorg-xserver/xserver-xorg-conf_0.1.bb
index 8945e1e8f1..77e0f8df48 100644
--- a/recipes/xorg-xserver/xserver-xorg-conf_0.1.bb
+++ b/recipes/xorg-xserver/xserver-xorg-conf_0.1.bb
@@ -1,5 +1,5 @@
DESCRIPTION = "Machine specific xorg.conf files"
-PR = "r16"
+PR = "r17"
SRC_URI = "file://xorg.conf"
diff --git a/recipes/xscreensaver/xscreensaver.inc b/recipes/xscreensaver/xscreensaver.inc
index 628f1207aa..2f8711fee6 100644
--- a/recipes/xscreensaver/xscreensaver.inc
+++ b/recipes/xscreensaver/xscreensaver.inc
@@ -12,6 +12,8 @@ DEPENDS = "intltool virtual/libgl freeglut virtual/libx11 gtk+ libxml2 libglade"
LDFLAGS_append = " -Wl,--export-dynamic"
TARGET_CC_ARCH += "${LDFLAGS}"
+INC_PR = "r4"
+
inherit autotools
export INTLTOOL_PERL="/usr/bin/env perl"
diff --git a/recipes/xscreensaver/xscreensaver_4.16.bb b/recipes/xscreensaver/xscreensaver_4.16.bb
index 7696c4733c..e72ce92645 100644
--- a/recipes/xscreensaver/xscreensaver_4.16.bb
+++ b/recipes/xscreensaver/xscreensaver_4.16.bb
@@ -7,7 +7,7 @@ HOMEPAGE = "http://www.jwz.org/xscreensaver/"
SECTION = "x11-misc"
LICENSE = "BSD"
DEPENDS = "intltool virtual/libx11 gtk+ libxml2 libglade"
-PR = "r1"
+PR = "${INC_PR}.0"
BROKEN = "1"
# upstream is at 4.22 now - patches do not apply
diff --git a/recipes/xscreensaver/xscreensaver_4.22.bb b/recipes/xscreensaver/xscreensaver_4.22.bb
index cac3776724..1d184e9f2b 100644
--- a/recipes/xscreensaver/xscreensaver_4.22.bb
+++ b/recipes/xscreensaver/xscreensaver_4.22.bb
@@ -8,7 +8,7 @@ SECTION = "x11-misc"
LICENSE = "BSD"
DEPENDS = "intltool virtual/libx11 gtk+ libxml2 libglade"
-PR = "r1"
+PR = "${INC_PR}.0"
SRC_URI = "http://www.jwz.org/xscreensaver/xscreensaver-${PV}.tar.gz \
file://fixes.patch;patch=1 \
diff --git a/recipes/xscreensaver/xscreensaver_5.07.bb b/recipes/xscreensaver/xscreensaver_5.07.bb
index cfe5cccdaa..ab810a7e0e 100644
--- a/recipes/xscreensaver/xscreensaver_5.07.bb
+++ b/recipes/xscreensaver/xscreensaver_5.07.bb
@@ -1,5 +1,5 @@
require xscreensaver.inc
-PR = "r3"
+PR = "${INC_PR}.0"
SRC_URI = "http://www.jwz.org/xscreensaver/xscreensaver-${PV}.tar.gz \
file://configure.in.patch;patch=1 \
diff --git a/site/arm-common b/site/arm-common
index fd602bf3d6..20de8c5261 100644
--- a/site/arm-common
+++ b/site/arm-common
@@ -36,7 +36,7 @@ db_cv_path_sh=${db_cv_path_sh=/bin/sh}
db_cv_path_strip=${db_cv_path_strip=/usr/bin/strip}
db_cv_align_t=${db_cv_align_t='unsigned long long'}
db_cv_alignp_t=${db_cv_alignp_t='unsigned long'}
-db_cv_mutex=${db_cv_mutex=no}
+db_cv_mutex=${db_cv_mutex=ARM/gcc-assembly}
db_cv_posixmutexes=${db_cv_posixmutexes=no}
db_cv_uimutexes=${db_cv_uimutexes=no}
@@ -164,6 +164,7 @@ ac_cv_func_getaddrinfo=${ac_cv_func_getaddrinfo=yes}
ac_cv_pread=${ac_cv_pread=no}
ac_cv_pwrite=${ac_cv_pwrite=no}
php_cv_lib_cookie_io_functions_use_off64_t=${php_cv_lib_cookie_io_functions_use_off64_t=yes}
+cv_php_mbstring_stdarg=${cv_php_mbstring_stdarg=yes}
# rsync
rsync_cv_HAVE_BROKEN_LARGEFILE=${rsync_cv_HAVE_BROKEN_LARGEFILE=no}
diff --git a/site/ix86-common b/site/ix86-common
index 134890d6b2..5323c7af7c 100644
--- a/site/ix86-common
+++ b/site/ix86-common
@@ -247,3 +247,8 @@ ac_cv_libiconv_utf8=${ac_cv_libiconv_utf8=yes}
#dbus
ac_cv_have_abstract_sockets=${ac_cv_have_abstract_sockets=yes}
+
+# socat
+ac_cv_ispeed_offset=${ac_cv_ispeed_offset=13}
+sc_cv_termios_ispeed=${sc_cv_termios_ispeed=yes}
+
diff --git a/site/mips-linux b/site/mips-linux
index e00c175392..4f1297aeca 100644
--- a/site/mips-linux
+++ b/site/mips-linux
@@ -69,7 +69,7 @@ rpppoe_cv_pack_bitfields=${rpppoe_cv_pack_bitfields=rev}
# db3
db_cv_align_t=${db_cv_align_t='unsigned long long'}
db_cv_alignp_t=${db_cv_alignp_t='unsigned long'}
-db_cv_mutex=${db_cv_mutex=no}
+db_cv_mutex=${db_cv_mutex=POSIX/pthreads/library}
db_cv_posixmutexes=${db_cv_posixmutexes=no}
db_cv_uimutexes=${db_cv_uimutexes=no}
db_cv_fcntl_f_setfd=${db_cv_fcntl_f_setfd=yes}
diff --git a/site/mipsel-linux b/site/mipsel-linux
index 042e09a8f8..61932d1a99 100644
--- a/site/mipsel-linux
+++ b/site/mipsel-linux
@@ -73,7 +73,7 @@ rpppoe_cv_pack_bitfields=${rpppoe_cv_pack_bitfields=rev}
# db3
db_cv_align_t=${db_cv_align_t='unsigned long long'}
db_cv_alignp_t=${db_cv_alignp_t='unsigned long'}
-db_cv_mutex=${db_cv_mutex=no}
+db_cv_mutex=${db_cv_mutex=POSIX/pthreads/library}
db_cv_posixmutexes=${db_cv_posixmutexes=no}
db_cv_uimutexes=${db_cv_uimutexes=no}
db_cv_fcntl_f_setfd=${db_cv_fcntl_f_setfd=yes}
diff --git a/site/powerpc-common b/site/powerpc-common
index f5acef8103..dd321c04f6 100644
--- a/site/powerpc-common
+++ b/site/powerpc-common
@@ -106,7 +106,7 @@ db_cv_path_sh=${db_cv_path_sh=/bin/sh}
db_cv_path_strip=${db_cv_path_strip=/usr/bin/strip}
db_cv_align_t=${db_cv_align_t='unsigned long long'}
db_cv_alignp_t=${db_cv_alignp_t='unsigned long'}
-db_cv_mutex=${db_cv_mutex=no}
+db_cv_mutex=${db_cv_mutex=POSIX/pthreads/library}
db_cv_posixmutexes=${db_cv_posixmutexes=no}
db_cv_uimutexes=${db_cv_uimutexes=no}
diff --git a/site/x86_64-linux b/site/x86_64-linux
index 9180cd6e7c..9f70046392 100644
--- a/site/x86_64-linux
+++ b/site/x86_64-linux
@@ -3,6 +3,7 @@ ac_cv_func_getpwuid_r=${ac_cv_func_getpwuid_r=yes}
ac_cv_func_lstat_dereferences_slashed_symlink=${ac_cv_func_lstat_dereferences_slashed_symlink=yes}
ac_cv_func_lstat_empty_string_bug=${ac_cv_func_lstat_empty_string_bug=no}
ac_cv_func_malloc_0_nonnull=${ac_cv_func_malloc_0_nonnull=yes}
+ac_cv_func_posix_getgrgid_r=${ac_cv_func_posix_getgrgid_r=yes}
ac_cv_func_posix_getpwnam_r=${ac_cv_func_posix_getpwnam_r=yes}
ac_cv_func_posix_getpwuid_r=${ac_cv_func_posix_getpwuid_r=yes}
ac_cv_func_setpgrp_void=${ac_cv_func_setpgrp_void=yes}
@@ -62,9 +63,9 @@ glib_cv_uscore=${glib_cv_uscore=no}
glib_cv___va_copy=${glib_cv___va_copy=yes}
glib_cv_va_copy=${glib_cv_va_copy=yes}
glib_cv_va_val_copy=${glib_cv_va_val_copy=no}
-ac_cv_func_posix_getgrgid_r=${ac_cv_func_posix_getgrgid_r=yes}
lftp_cv_va_copy=${lftp_cv_va_copy=yes}
+lf_cv_sane_realloc=${lf_cv_sane_realloc=yes}
nano_cv_func_regexec_segv_emptystr=${nano_cv_func_regexec_segv_emptystr=no}
samba_cv_HAVE_VA_COPY=${samba_cv_HAVE_VA_COPY=yes}
screen_cv_sys_bcopy_overlap=${screen_cv_sys_bcopy_overlap=no}
@@ -95,3 +96,24 @@ ac_cv_func_realloc_0_nonnull=${ac_cv_func_realloc_0_nonnull=yes}
# bash
bash_cv_func_sigsetjmp=${bash_cv_func_sigsetjmp=present}
+
+#sudo
+sudo_cv_uid_t_len=${sudo_cv_uid_t_len=10}
+
+#libidl
+libIDL_cv_long_long_format=${libIDL_cv_long_long_format=ll}
+
+# ORBit2
+ac_cv_alignof_CORBA_boolean=1
+ac_cv_alignof_CORBA_char=1
+ac_cv_alignof_CORBA_double=4
+ac_cv_alignof_CORBA_float=4
+ac_cv_alignof_CORBA_long=4
+ac_cv_alignof_CORBA_long_double=8
+ac_cv_alignof_CORBA_long_long=8
+ac_cv_alignof_CORBA_octet=1
+ac_cv_alignof_CORBA_pointer=8
+ac_cv_alignof_CORBA_short=2
+ac_cv_alignof_CORBA_struct=1
+ac_cv_alignof_CORBA_wchar=2
+ac_cv_func_getaddrinfo=${ac_cv_func_getaddrinfo=yes}