--- /dev/null
+#include <bindings.dsl.h>
+#include <apr_portable.h>
+
+module Bindings.APR.Portable where
+#strict_import
+import Bindings.APR
+import Bindings.APR.DSO
+import Bindings.APR.ErrNo
+import Bindings.APR.File.Info
+import Bindings.APR.File.Types
+import Bindings.APR.Global.Mutex
+import Bindings.APR.Network.IO
+import Bindings.APR.Pools
+import Bindings.APR.Proc.Mutex
+import Bindings.APR.Shm
+import Bindings.APR.Thread.Mutex
+import Bindings.APR.Thread.Proc
+import Bindings.APR.Time
+
+#opaque_t apr_os_file_t
+#opaque_t apr_os_dir_t
+#opaque_t apr_os_sock_t
+#opaque_t apr_os_proc_mutex_t
+#opaque_t apr_os_thread_t
+#opaque_t apr_os_proc_t
+#opaque_t apr_os_threadkey_t
+#opaque_t apr_os_imp_time_t
+#opaque_t apr_os_exp_time_t
+#opaque_t apr_os_dso_handle_t
+#opaque_t apr_os_shm_t
+
+#starttype struct apr_os_sock_info_t
+# field os_sock , Ptr <apr_os_sock_t>
+-- FIXME
+-- # field local , Ptr <sockaddr>
+-- # field remote , Ptr <sockaddr>
+# field family , CInt
+# field type , CInt
+# field protocol, CInt
+#stoptype
+
+#if APR_PROC_MUTEX_IS_GLOBAL
+type C'apr_os_global_mutex_t = C'apr_os_proc_mutex_t
+
+c'apr_os_global_mutex_get :: Ptr C'apr_os_global_mutex_t -> Ptr C'apr_global_mutex_t -> IO C'apr_status_t
+c'apr_os_global_mutex_get = c'apr_os_proc_mutex_get
+#else
+# starttype struct apr_os_global_mutex_t
+# field pool , Ptr <apr_pool_t>
+# field proc_mutex, Ptr <apr_proc_mutex_t>
+# if APR_HAS_THREADS
+# field thread_mutex, Ptr <apr_thread_mutex_t>
+# endif
+# stoptype
+
+# ccall apr_os_global_mutex_get, Ptr <apr_os_global_mutex_t> -> Ptr <apr_global_mutex_t> -> IO <apr_status_t>
+#endif
+
+#ccall apr_os_file_get , Ptr <apr_os_file_t> -> Ptr <apr_file_t> -> IO <apr_status_t>
+#ccall apr_os_dir_get , Ptr (Ptr <apr_os_dir_t>) -> Ptr <apr_dir_t> -> IO <apr_status_t>
+#ccall apr_os_sock_get , Ptr <apr_os_sock_t> -> Ptr <apr_socket_t> -> IO <apr_status_t>
+#ccall apr_os_proc_mutex_get, Ptr <apr_os_proc_mutex_t> -> Ptr <apr_proc_mutex_t> -> IO <apr_status_t>
+#ccall apr_os_exp_time_get , Ptr (Ptr <apr_os_exp_time_t>) -> Ptr <apr_time_exp_t> -> Ptr <apr_status_t>
+#ccall apr_os_imp_time_get , Ptr (Ptr <apr_os_imp_time_t>) -> Ptr <apr_time_t> -> Ptr <apr_status_t>
+#ccall apr_os_shm_get , Ptr <apr_os_shm_t> -> Ptr <apr_shm_t> -> IO <apr_status_t>
+
+#if APR_HAS_THREADS
+# ccall apr_os_thread_get , Ptr (Ptr <apr_os_thread_t>) -> Ptr <apr_thread_t> -> IO <apr_status_t>
+# ccall apr_os_threadkey_get , Ptr <apr_os_threadkey_t> -> Ptr <apr_threadkey_t> -> IO <apr_status_t>
+# ccall apr_os_thread_put , Ptr (Ptr <apr_thread_t>) -> Ptr <apr_os_thread_t> -> Ptr <apr_pool_t> -> IO <apr_status_t>
+# ccall apr_os_threadkey_put , Ptr (Ptr <apr_threadkey_t>) -> Ptr <apr_os_threadkey_t> -> Ptr <apr_pool_t> -> IO <apr_status_t>
+-- FIXME: apr_os_thread_t
+-- # ccall apr_os_thread_current, IO <apr_os_thread_t>
+#endif
+
+#ccall apr_os_file_put , Ptr (Ptr <apr_file_t>) -> Ptr <apr_os_file_t> -> <apr_int32_t> -> Ptr <apr_pool_t> -> IO <apr_status_t>
+#ccall apr_os_pipe_put , Ptr (Ptr <apr_file_t>) -> Ptr <apr_os_file_t> -> Ptr <apr_pool_t> -> IO <apr_status_t>
+#ccall apr_os_pipe_put_ex , Ptr (Ptr <apr_file_t>) -> Ptr <apr_os_file_t> -> CInt -> Ptr <apr_pool_t> -> IO <apr_status_t>
+#ccall apr_os_dir_put , Ptr (Ptr <apr_dir_t>) -> Ptr <apr_os_dir_t> -> Ptr <apr_pool_t> -> IO <apr_status_t>
+#ccall apr_os_sock_put , Ptr (Ptr <apr_socket_t>) -> Ptr <apr_os_sock_t> -> Ptr <apr_pool_t> -> IO <apr_status_t>
+#ccall apr_os_sock_make , Ptr (Ptr <apr_socket_t>) -> Ptr <apr_os_sock_info_t> -> Ptr <apr_pool_t> -> IO <apr_status_t>
+#ccall apr_os_proc_mutex_put, Ptr (Ptr <apr_proc_mutex_t>) -> Ptr <apr_os_proc_mutex_t> -> Ptr <apr_pool_t> -> IO <apr_status_t>
+#ccall apr_os_imp_time_put , Ptr <apr_time_t> -> Ptr (Ptr <apr_os_imp_time_t>) -> Ptr <apr_pool_t> -> IO <apr_status_t>
+#ccall apr_os_exp_time_put , Ptr <apr_time_exp_t> -> Ptr (Ptr <apr_os_exp_time_t>) -> Ptr <apr_pool_t> -> IO <apr_status_t>
+#ccall apr_os_shm_put , Ptr (Ptr <apr_shm_t>) -> Ptr <apr_os_shm_t> -> Ptr <apr_pool_t> -> IO <apr_status_t>
+
+#if APR_HAS_DSO
+# ccall apr_os_dso_handle_put, Ptr (Ptr <apr_dso_handle_t>) -> Ptr <apr_os_dso_handle_t> -> Ptr <apr_pool_t> -> IO <apr_status_t>
+# ccall apr_os_dso_handle_get, Ptr (Ptr <apr_os_dso_handle_t>) -> Ptr <apr_dso_handle_t> -> IO <apr_status_t>
+# if APR_HAS_OS_UUID
+# ccall apr_os_uuid_get , Ptr CUChar -> IO <apr_status_t>
+# endif
+#endif
+
+#ccall apr_os_default_encoding, Ptr <apr_pool_t> -> IO (Ptr CChar)
+#ccall apr_os_locale_encoding , Ptr <apr_pool_t> -> IO (Ptr CChar)