.
diff --git a/tools/ports/__init__.py b/tools/ports/__init__.py
index 44d65f6..c61daf9 100644
--- a/tools/ports/__init__.py
+++ b/tools/ports/__init__.py
@@ -13,26 +13,42 @@
 ports_dir = os.path.dirname(os.path.abspath(__file__))
 
 
-def read_ports():
+def load_port(port):
   expected_attrs = ['get', 'clear', 'process_args', 'show', 'needed']
+  ports.append(port)
+  ports_by_name[port.name] = port
+  for a in expected_attrs:
+    assert hasattr(port, a), 'port %s is missing %s' % (port, a)
+  if not hasattr(port, 'process_dependencies'):
+    port.process_dependencies = lambda x: 0
+  if not hasattr(port, 'deps'):
+    port.deps = []
+
+def read_ports():
   for filename in os.listdir(ports_dir):
     if not filename.endswith('.py') or filename == '__init__.py':
       continue
     filename = os.path.splitext(filename)[0]
     port = __import__(filename, globals(), level=1)
-    ports.append(port)
     port.name = filename
-    ports_by_name[port.name] = port
-    for a in expected_attrs:
-      assert hasattr(port, a), 'port %s is missing %s' % (port, a)
-    if not hasattr(port, 'process_dependencies'):
-      port.process_dependencies = lambda x: 0
-    if not hasattr(port, 'deps'):
-      port.deps = []
+    load_port(port)
 
-  for dep in port.deps:
-    if dep not in ports_by_name:
-      exit_with_error('unknown dependency in port: %s' % dep)
+  contrib_dir = os.path.join(ports_dir, 'contrib')
+  for filename in os.listdir(contrib_dir):
+    if not filename.endswith('.py') or filename == '__init__.py':
+      continue
+    filename = os.path.splitext(filename)[0]
+    print(filename)
+    port = __import__('contrib.' + filename, globals(), level=1, fromlist=[None])
+    print(port)
+    port.name = filename
+    load_port(port)
+
+  for port in ports:
+    for dep in port.deps:
+      if dep not in ports_by_name:
+        exit_with_error('unknown dependency in port: %s' % dep)
+
 
 
 read_ports()
diff --git a/tools/ports/contib/README.md b/tools/ports/contrib/README.md
similarity index 100%
rename from tools/ports/contib/README.md
rename to tools/ports/contrib/README.md
diff --git a/tools/ports/contrib/__init__.py b/tools/ports/contrib/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/tools/ports/contrib/__init__.py
diff --git a/tools/ports/contib/libarchive.py b/tools/ports/contrib/libarchive.py
similarity index 94%
rename from tools/ports/contib/libarchive.py
rename to tools/ports/contrib/libarchive.py
index 569da29..5e53745 100644
--- a/tools/ports/contib/libarchive.py
+++ b/tools/ports/contrib/libarchive.py
@@ -29,8 +29,8 @@
     ports.install_headers(dest_path)
 
     # build
-    srcs = 'adler32.c compress.c crc32.c deflate.c gzclose.c gzlib.c gzread.c gzwrite.c infback.c
-    inffast.c inflate.c inftrees.c trees.c uncompr.c zutil.c'.split()
+    srcs = 'adler32.c compress.c crc32.c deflate.c gzclose.c gzlib.c gzread.c gzwrite.c infback.c'
+    'inffast.c inflate.c inftrees.c trees.c uncompr.c zutil.c'.split()
     commands = []
     o_s = []
     for src in srcs: