make_qbk.py 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  1. #! /usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. # ===========================================================================
  4. # Copyright (c) 2007-2012 Barend Gehrels, Amsterdam, the Netherlands.
  5. # Copyright (c) 2008-2012 Bruno Lalande, Paris, France.
  6. # Copyright (c) 2009-2012 Mateusz Loskot (mateusz@loskot.net), London, UK
  7. # Copyright (c) 2017 Adam Wulkiewicz, Lodz, Poland
  8. #
  9. # Copyright (c) 2018, Oracle and/or its affiliates.
  10. # Contributed and/or modified by Vissarion Fysikopoulos, on behalf of Oracle
  11. # Contributed and/or modified by Adam Wulkiewicz, on behalf of Oracle
  12. # Use, modification and distribution is subject to the Boost Software License,
  13. # Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
  14. # http://www.boost.org/LICENSE_1_0.txt)
  15. # ============================================================================
  16. import os, sys, shutil
  17. script_dir = os.path.dirname(__file__)
  18. os.chdir(os.path.abspath(script_dir))
  19. print("Boost.Geometry is making .qbk files in %s" % os.getcwd())
  20. if 'DOXYGEN' in os.environ:
  21. doxygen_cmd = os.environ['DOXYGEN']
  22. else:
  23. doxygen_cmd = 'doxygen'
  24. if 'DOXYGEN_XML2QBK' in os.environ:
  25. doxygen_xml2qbk_cmd = os.environ['DOXYGEN_XML2QBK']
  26. elif '--doxygen-xml2qbk' in sys.argv:
  27. doxygen_xml2qbk_cmd = sys.argv[sys.argv.index('--doxygen-xml2qbk')+1]
  28. else:
  29. doxygen_xml2qbk_cmd = 'doxygen_xml2qbk'
  30. os.environ['PATH'] = os.environ['PATH']+os.pathsep+os.path.dirname(doxygen_xml2qbk_cmd)
  31. doxygen_xml2qbk_cmd = os.path.basename(doxygen_xml2qbk_cmd)
  32. cmd = doxygen_xml2qbk_cmd
  33. cmd = cmd + " --xml doxy/doxygen_output/xml/%s.xml"
  34. cmd = cmd + " --start_include boost/geometry/"
  35. cmd = cmd + " --convenience_header_path ../../../boost/geometry/"
  36. cmd = cmd + " --convenience_headers geometry.hpp,geometries/geometries.hpp"
  37. cmd = cmd + " --skip_namespace boost::geometry::"
  38. cmd = cmd + " --copyright src/copyright_block.qbk"
  39. cmd = cmd + " --output_member_variables false"
  40. cmd = cmd + " > generated/%s.qbk"
  41. def run_command(command):
  42. if os.system(command) != 0:
  43. raise Exception("Error running %s" % command)
  44. def remove_all_files(dir_relpath):
  45. if os.path.exists(dir_relpath):
  46. dir_abspath = os.path.join(os.getcwd(), dir_relpath)
  47. print("Boost.Geometry is cleaning Doxygen files in %s" % dir_abspath)
  48. shutil.rmtree(dir_abspath, ignore_errors=True)
  49. def call_doxygen():
  50. os.chdir("doxy")
  51. remove_all_files("doxygen_output/xml/")
  52. run_command(doxygen_cmd)
  53. os.chdir("..")
  54. def group_to_quickbook(section):
  55. run_command(cmd % ("group__" + section.replace("_", "__"), section))
  56. def model_to_quickbook(section):
  57. run_command(cmd % ("classboost_1_1geometry_1_1model_1_1" + section.replace("_", "__"), section))
  58. def model_to_quickbook2(classname, section):
  59. run_command(cmd % ("classboost_1_1geometry_1_1model_1_1" + classname, section))
  60. def struct_to_quickbook(section):
  61. run_command(cmd % ("structboost_1_1geometry_1_1" + section.replace("_", "__"), section))
  62. def class_to_quickbook(section):
  63. run_command(cmd % ("classboost_1_1geometry_1_1" + section.replace("_", "__"), section))
  64. def class_to_quickbook2(classname, section):
  65. run_command(cmd % ("classboost_1_1geometry_1_1" + classname, section))
  66. def srs_class_to_quickbook(section):
  67. run_command(cmd % ("classboost_1_1geometry_1_1srs_1_1" + section.replace("_", "__"), "srs_" + section))
  68. def strategy_to_quickbook(section):
  69. p = section.find("::")
  70. ns = section[:p]
  71. strategy = section[p+2:]
  72. run_command(cmd % ("classboost_1_1geometry_1_1strategy_1_1"
  73. + ns.replace("_", "__") + "_1_1" + strategy.replace("_", "__"),
  74. ns + "_" + strategy))
  75. def cs_to_quickbook(section):
  76. run_command(cmd % ("structboost_1_1geometry_1_1cs_1_1" + section.replace("_", "__"), section))
  77. call_doxygen()
  78. algorithms = ["append", "assign", "make", "clear"
  79. , "area", "buffer", "centroid", "convert", "correct", "covered_by"
  80. , "convex_hull", "crosses", "densify", "difference"
  81. , "discrete_frechet_distance", "discrete_hausdorff_distance", "disjoint"
  82. , "distance", "envelope", "equals", "expand", "for_each", "is_empty"
  83. , "is_simple", "is_valid", "intersection", "intersects", "length"
  84. , "line_interpolate", "num_geometries", "num_interior_rings"
  85. , "num_points", "num_segments", "overlaps", "perimeter", "relate"
  86. , "relation", "reverse","simplify", "sym_difference", "touches"
  87. , "transform", "union", "unique", "within"]
  88. access_functions = ["get", "set", "exterior_ring", "interior_rings"
  89. , "num_points", "num_interior_rings", "num_geometries"]
  90. coordinate_systems = ["cartesian", "geographic", "polar", "spherical", "spherical_equatorial"]
  91. core = ["closure", "coordinate_system", "coordinate_type", "cs_tag"
  92. , "dimension", "exception", "interior_type"
  93. , "degree", "radian", "point_order"
  94. , "point_type", "ring_type", "tag", "tag_cast" ]
  95. exceptions = ["exception", "centroid_exception"];
  96. iterators = ["circular_iterator", "closing_iterator"
  97. , "ever_circling_iterator"]
  98. models = ["point", "linestring", "box"
  99. , "polygon", "segment", "ring"
  100. , "multi_linestring", "multi_point", "multi_polygon", "referring_segment"]
  101. srs = ["spheroid"]
  102. strategies = ["area::cartesian", "area::spherical", "area::geographic"
  103. , "buffer::point_circle", "buffer::point_square"
  104. , "buffer::join_round", "buffer::join_miter"
  105. , "buffer::end_round", "buffer::end_flat"
  106. , "buffer::distance_symmetric", "buffer::distance_asymmetric"
  107. , "buffer::side_straight"
  108. , "buffer::geographic_point_circle"
  109. , "centroid::bashein_detmer", "centroid::average"
  110. , "convex_hull::graham_andrew"
  111. , "densify::cartesian", "densify::geographic", "densify::spherical"
  112. , "distance::pythagoras", "distance::pythagoras_box_box"
  113. , "distance::pythagoras_point_box", "distance::haversine"
  114. , "distance::cross_track", "distance::cross_track_point_box"
  115. , "distance::projected_point"
  116. , "line_interpolate::cartesian"
  117. , "line_interpolate::spherical"
  118. , "line_interpolate::geographic"
  119. , "simplify::douglas_peucker"
  120. , "side::side_by_triangle", "side::side_by_cross_track"
  121. , "side::spherical_side_formula", "side::geographic"
  122. , "transform::inverse_transformer", "transform::map_transformer"
  123. , "transform::rotate_transformer", "transform::scale_transformer"
  124. , "transform::translate_transformer", "transform::matrix_transformer"
  125. , "within::winding", "within::franklin", "within::crossings_multiply"
  126. ]
  127. views = ["box_view", "segment_view"
  128. , "closeable_view", "reversible_view", "identity_view"]
  129. for i in algorithms:
  130. group_to_quickbook(i)
  131. for i in access_functions:
  132. group_to_quickbook(i)
  133. for i in coordinate_systems:
  134. cs_to_quickbook(i)
  135. for i in core:
  136. struct_to_quickbook(i)
  137. for i in exceptions:
  138. class_to_quickbook(i)
  139. for i in iterators:
  140. struct_to_quickbook(i)
  141. for i in models:
  142. model_to_quickbook(i)
  143. for i in srs:
  144. srs_class_to_quickbook(i)
  145. for i in strategies:
  146. strategy_to_quickbook(i)
  147. for i in views:
  148. struct_to_quickbook(i)
  149. model_to_quickbook2("d2_1_1point__xy", "point_xy")
  150. group_to_quickbook("arithmetic")
  151. group_to_quickbook("dsv")
  152. group_to_quickbook("enum")
  153. group_to_quickbook("register")
  154. group_to_quickbook("svg")
  155. class_to_quickbook("svg_mapper")
  156. group_to_quickbook("wkt")
  157. class_to_quickbook2("de9im_1_1matrix", "de9im_matrix")
  158. class_to_quickbook2("de9im_1_1mask", "de9im_mask")
  159. class_to_quickbook2("de9im_1_1static__mask", "de9im_static_mask")
  160. os.chdir("index")
  161. exec(compile(open("make_qbk.py", "rb").read(), "make_qbk.py", 'exec'))
  162. os.chdir("..")
  163. # Clean up generated intermediate files
  164. if "--release-build" in sys.argv:
  165. remove_all_files("doxy/doxygen_output/xml/")
  166. remove_all_files("doxy/doxygen_output/html_by_doxygen/")
  167. remove_all_files("index/xml/")
  168. remove_all_files("index/html_by_doxygen/")
  169. # Use either bjam or b2 or ../../../b2 (the last should be done on Release branch)
  170. if "--release-build" not in sys.argv:
  171. run_command("b2")