diff --git a/tools/stub-gen-c-func.py b/tools/stub-gen-c-func.py new file mode 100644 index 000000000..e5a11be05 --- /dev/null +++ b/tools/stub-gen-c-func.py @@ -0,0 +1,76 @@ +# This file is part of Darling. +# +# Copyright (C) 2017 Lubos Dolezel +# +# Darling 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. +# +# Darling 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 Darling. If not, see . + +import sys, subprocess + +def usage(): + print "Usage: %s " % sys.argv[0] + +if len(sys.argv) != 3: + usage() + +macho = sys.argv[1] +dest = sys.argv[2] + +out = subprocess.check_output(["nm", "-Ug", macho]) + +functions = [] +for line in out.split("\n"): + if line == "": + continue + components = line.split(" ") + id = components[1] + name = components[2] + # Remove the underscore + name = name[1 : len(name)] + + if id == "T": + functions.append(name) + +header = open(dest + "/functions.h", "w") +source = open(dest + "/functions.c", "w") + +copyright ="""/* +This file is part of Darling. + +Copyright (C) 2017 Lubos Dolezel + +Darling 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. + +Darling 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 Darling. If not, see . +*/ + +""" + +header.write(copyright) +source.write(copyright) + +for funcname in functions: + header.write("void %s(void);\n" % funcname) + source.write("void %s(void) { }\n" % funcname) + +header.close() +source.close()