Description: Sort inputs
--- a/Makefile
+++ b/Makefile
@@ -115,7 +115,7 @@
 EXAMPLES_SRC:=src/example.c
 EXAMPLES_DEP:=$(EXAMPLES_SRC:%.c=obj/%.d)
 
-TOOLS_SRC:=$(wildcard src/tools/*.c)
+TOOLS_SRC:=$(sort $(wildcard src/tools/*.c))
 TOOLS_OBJ:=$(TOOLS_SRC:%.c=obj/%.o)
 TOOLS_DEP:=$(TOOLS_SRC:%.c=obj/%.d)
 
@@ -449,7 +449,7 @@
 endif
 
 # the GenomeTools library
-LIBGENOMETOOLS_PRESRC:=$(foreach DIR,$(LIBGENOMETOOLS_DIRS),$(wildcard $(DIR)/*.c))
+LIBGENOMETOOLS_PRESRC:=$(foreach DIR,$(LIBGENOMETOOLS_DIRS),$(sort $(wildcard $(DIR)/*.c)))
 # remove AnnotationSketch-only bindings
 LIBGENOMETOOLS_PRESRC:=$(filter-out $(CAIRO_FILTER_OUT),\
                          $(LIBGENOMETOOLS_PRESRC))
@@ -664,7 +664,7 @@
 	@test -d $(@D) || mkdir -p $(@D)
 	@$(CC) $(EXP_LDFLAGS) $(GT_LDFLAGS) $^ -lm $(LUA_LDLIB) -o $@
 
-API_HEADERS=$(foreach DIR,$(LIBGENOMETOOLS_DIRS),$(wildcard $(DIR)/*_api.h))
+API_HEADERS=$(foreach DIR,$(LIBGENOMETOOLS_DIRS),$(sort $(wildcard $(DIR)/*_api.h)))
 
 obj/public_symbols.lst: $(API_HEADERS) $(LIBGENOMETOOLS_SRC)
 	@echo '[gathering public API symbols to $@]'
@@ -999,8 +999,8 @@
 ABTOOLS=${shell grep -l Blaufelder src/tools/*.c}
 
 ALLSPLINT=${addprefix obj/,${notdir ${subst .c,.splint,\
-             ${filter-out ${EISFILES},${wildcard ${CURDIR}/src/match/*.c}}\
-             ${wildcard ${CURDIR}/src/ltr/*.c}\
+             ${filter-out ${EISFILES},${sort ${wildcard ${CURDIR}/src/match/*.c}}}\
+             ${sort ${wildcard ${CURDIR}/src/ltr/*.c}}\
              ${SKTOOLS} ${SKCORE} ${SKEXT} \
 						 ${DWTOOLS} ${DWCORE} ${DWEXT} \
              ${GGTOOLS} ${GGCORE} ${GGEXT} \
--- a/gtscripts/gtdoc.lua
+++ b/gtscripts/gtdoc.lua
@@ -104,6 +104,25 @@
   end
 end
 
+local function iter (a, i) -- taken from PiL, page 59
+  i = i + 1
+  local v = a[i]
+  if v then
+    return i, v
+  end
+end
+
+function sorted_dir(dir)
+  local entries = {}
+  local i = 0
+  for name in lfs.dir(dir) do
+    i = i + 1
+    entries[i] = name
+  end
+  table.sort(entries)
+  return iter, entries, 0
+end
+
 local export = nil
 local is_lua = nil
 
@@ -127,7 +146,7 @@
   for _, v in ipairs(export) do
     local filename = gt_home .. "/" .. v
     if is_dir(filename) then
-      for f in lfs.dir(filename) do
+      for _, f in sorted_dir(filename) do
         local filename = filename .. "/" .. f
         process_file(filename, be_verbose, is_lua)
       end
