make-export-file-generator 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. #!/usr/bin/env ruby
  2. # Copyright (C) 2010 Apple Inc. All rights reserved.
  3. #
  4. # Redistribution and use in source and binary forms, with or without
  5. # modification, are permitted provided that the following conditions
  6. # are met:
  7. # 1. Redistributions of source code must retain the above copyright
  8. # notice, this list of conditions and the following disclaimer.
  9. # 2. Redistributions in binary form must reproduce the above copyright
  10. # notice, this list of conditions and the following disclaimer in the
  11. # documentation and/or other materials provided with the distribution.
  12. #
  13. # THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
  14. # AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
  15. # THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
  16. # PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
  17. # BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
  18. # CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  19. # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
  20. # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
  21. # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  22. # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
  23. # THE POSSIBILITY OF SUCH DAMAGE.
  24. input_file = ARGV[0]
  25. output_file = ARGV[1]
  26. require 'erb'
  27. def line_for_output line
  28. return line.chomp if line =~ /#/
  29. " validateAndPrint(\"#{line.chomp}\");"
  30. end
  31. TEMPLATE = <<-EOF
  32. #include "config.h"
  33. #include <stdio.h>
  34. #include <wtf/Assertions.h>
  35. #if !OS(WINDOWS)
  36. #include <cxxabi.h>
  37. #endif
  38. static void validateAndPrint(const char* symbol)
  39. {
  40. #if !OS(WINDOWS)
  41. if (!strncmp(symbol, "__Z", strlen("__Z"))) {
  42. char* demangledName = abi::__cxa_demangle(symbol + 1, nullptr, nullptr, nullptr);
  43. if (!demangledName) {
  44. fprintf(stderr, "ERROR: \\"%s\\" is not a valid C++ mangled name.\\n", symbol);
  45. exit(EXIT_FAILURE);
  46. }
  47. free(demangledName);
  48. }
  49. #endif
  50. printf("%s\\n", symbol);
  51. }
  52. int main(int, char**)
  53. {
  54. <%- input.each_line do |line| -%>
  55. <%= line_for_output line %>
  56. <%- end -%>
  57. return 0;
  58. }
  59. EOF
  60. File.open(output_file, "w") do |output|
  61. File.open(input_file) do |input|
  62. renderer = ERB.new(TEMPLATE, 0, "-")
  63. output << renderer.result(binding)
  64. end
  65. end
  66. STDERR.puts "Wrote output to #{output_file}"