--- /dev/null
+module Bindings.Uname
+ ( Utsname
+ , uname
+
+ , sysname
+ , nodename
+ , release
+ , version
+ , machine
+ )
+ where
+
+#include <sys/utsname.h>
+
+import Foreign
+import Foreign.C
+
+foreign import ccall unsafe "sys/utsname.h uname"
+ uname :: Ptr Utsname -> IO CInt
+
+data Utsname
+
+instance Storable Utsname where
+ sizeOf = const #size struct utsname
+ alignment = sizeOf
+ poke = error "Storable Utsname: peek: unsupported operation"
+ peek = error "Storable Utsname: poke: unsupported operation"
+
+sysname :: Ptr Utsname -> IO CString
+sysname = (#peek struct utsname, sysname)
+
+nodename :: Ptr Utsname -> IO CString
+nodename = (#peek struct utsname, nodename)
+
+release :: Ptr Utsname -> IO CString
+release = (#peek struct utsname, release)
+
+version :: Ptr Utsname -> IO CString
+version = (#peek struct utsname, version)
+
+machine :: Ptr Utsname -> IO CString
+machine = (#peek struct utsname, machine)
--- /dev/null
+Name: bindings-uname
+Version: 0.1
+Synopsis: Low-level binding to POSIX uname(3)
+Description:
+ This is a low-level binding to POSIX uname(3)
+ function. Perhaps it shoule be part of unix package.
+Category: FFI, System
+License: PublicDomain
+Author: PHO <pho at cielonegro.org>
+Maintainer: PHO <pho at cielonegro.org>
+Stability: Experimental
+Cabal-Version: >= 1.2
+Build-Type: Simple
+
+Library
+ Build-Depends:
+ base
+
+ Exposed-Modules:
+ Bindings.Uname
+
+ Extensions:
+ EmptyDataDecls, ForeignFunctionInterface
+
+ GHC-Options:
+ -Wall
\ No newline at end of file
--- /dev/null
+# -*- makefile-gmake -*-
+#
+# Variables:
+#
+# CONFIGURE_ARGS :: arguments to be passed to ./Setup configure
+# default: --disable-optimization
+#
+# RUN_COMMAND :: command to be run for "make run"
+#
+
+GHC ?= ghc
+FIND ?= find
+RM_RF ?= rm -rf
+SUDO ?= sudo
+AUTOCONF ?= autoconf
+
+CONFIGURE_ARGS ?= --disable-optimization
+
+SETUP_FILE := $(wildcard Setup.*hs)
+CABAL_FILE := $(wildcard *.cabal)
+
+ifeq ($(shell ls configure.ac 2>/dev/null),configure.ac)
+ AUTOCONF_AC_FILE := configure.ac
+ AUTOCONF_FILE := configure
+else
+ ifeq ($(shell ls configure.in 2>/dev/null),configure.in)
+ AUTOCONF_AC_FILE := configure.in
+ AUTOCONF_FILE := configure
+ else
+ AUTOCONF_AC_FILE :=
+ AUTOCONF_FILE :=
+ endif
+endif
+
+BUILDINFO_IN_FILE := $(wildcard *.buildinfo.in)
+BUILDINFO_FILE := $(BUILDINFO_IN_FILE:.in=)
+
+all: build
+
+build: setup-config build-hook
+ ./Setup build
+
+build-hook:
+
+ifeq ($(RUN_COMMAND),)
+run:
+ @echo "cabal-package.mk: No command to run."
+ @echo "cabal-package.mk: If you want to run something, define RUN_COMMAND variable."
+else
+run: build
+ @echo ".:.:. Let's go .:.:."
+ $(RUN_COMMAND)
+endif
+
+setup-config: dist/setup-config setup-config-hook $(BUILDINFO_FILE)
+
+setup-config-hook:
+
+dist/setup-config: $(CABAL_FILE) Setup $(AUTOCONF_FILE)
+ ./Setup configure $(CONFIGURE_ARGS)
+
+$(AUTOCONF_FILE): $(AUTOCONF_AC_FILE)
+ $(AUTOCONF)
+
+$(BUILDINFO_FILE): $(BUILDINFO_IN_FILE) configure
+ ./Setup configure $(CONFIGURE_ARGS)
+
+Setup: $(SETUP_FILE)
+ $(GHC) --make Setup
+
+clean: clean-hook
+ $(RM_RF) dist Setup *.o *.hi .setup-config *.buildinfo
+ $(FIND) . -name '*~' -exec rm -f {} \;
+
+clean-hook:
+
+doc: setup-config
+ ./Setup haddock
+
+install: build
+ $(SUDO) ./Setup install
+
+sdist: setup-config
+ ./Setup sdist
+
+test: build
+ ./Setup test
+
+.PHONY: build build-hook setup-config setup-config-hook run clean clean-hook install doc sdist test