forked from open-source-parsers/jsoncpp
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Switched CRLF to LF in repo, and added svn:eol-style native. I might …
…have missed a few files though. Just committing what I have so far.
- Loading branch information
Showing
8 changed files
with
575 additions
and
575 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,147 +1,147 @@ | ||
"""Amalgate json-cpp library sources into a single source and header file. | ||
Requires Python 2.6 | ||
Example of invocation (must be invoked from json-cpp top directory): | ||
python amalgate.py | ||
""" | ||
import os | ||
import os.path | ||
import sys | ||
|
||
class AmalgamationFile: | ||
def __init__( self, top_dir ): | ||
self.top_dir = top_dir | ||
self.blocks = [] | ||
|
||
def add_text( self, text ): | ||
if not text.endswith( '\n' ): | ||
text += '\n' | ||
self.blocks.append( text ) | ||
|
||
def add_file( self, relative_input_path, wrap_in_comment=False ): | ||
def add_marker( prefix ): | ||
self.add_text( '' ) | ||
self.add_text( '// ' + '/'*70 ) | ||
self.add_text( '// %s of content of file: %s' % (prefix, relative_input_path.replace('\\','/')) ) | ||
self.add_text( '// ' + '/'*70 ) | ||
self.add_text( '' ) | ||
add_marker( 'Beginning' ) | ||
f = open( os.path.join( self.top_dir, relative_input_path ), 'rt' ) | ||
content = f.read() | ||
if wrap_in_comment: | ||
content = '/*\n' + content + '\n*/' | ||
self.add_text( content ) | ||
f.close() | ||
add_marker( 'End' ) | ||
self.add_text( '\n\n\n\n' ) | ||
|
||
def get_value( self ): | ||
return ''.join( self.blocks ).replace('\r\n','\n') | ||
|
||
def write_to( self, output_path ): | ||
output_dir = os.path.dirname( output_path ) | ||
if output_dir and not os.path.isdir( output_dir ): | ||
os.makedirs( output_dir ) | ||
f = open( output_path, 'wb' ) | ||
f.write( self.get_value() ) | ||
f.close() | ||
|
||
def amalgamate_source( source_top_dir=None, | ||
target_source_path=None, | ||
header_include_path=None ): | ||
"""Produces amalgated source. | ||
Parameters: | ||
source_top_dir: top-directory | ||
target_source_path: output .cpp path | ||
header_include_path: generated header path relative to target_source_path. | ||
""" | ||
print 'Amalgating header...' | ||
header = AmalgamationFile( source_top_dir ) | ||
header.add_text( '/// Json-cpp amalgated header (http://jsoncpp.sourceforge.net/).' ) | ||
header.add_text( '/// It is intented to be used with #include <%s>' % header_include_path ) | ||
header.add_file( 'LICENSE', wrap_in_comment=True ) | ||
header.add_text( '#ifndef JSON_AMALGATED_H_INCLUDED' ) | ||
header.add_text( '# define JSON_AMALGATED_H_INCLUDED' ) | ||
header.add_text( '/// If defined, indicates that the source file is amalgated' ) | ||
header.add_text( '/// to prevent private header inclusion.' ) | ||
header.add_text( '#define JSON_IS_AMALGATED' ) | ||
header.add_file( 'include/json/config.h' ) | ||
header.add_file( 'include/json/forwards.h' ) | ||
header.add_file( 'include/json/features.h' ) | ||
header.add_file( 'include/json/value.h' ) | ||
header.add_file( 'include/json/reader.h' ) | ||
header.add_file( 'include/json/writer.h' ) | ||
header.add_text( '#endif //ifndef JSON_AMALGATED_H_INCLUDED' ) | ||
|
||
target_header_path = os.path.join( os.path.dirname(target_source_path), header_include_path ) | ||
print 'Writing amalgated header to %r' % target_header_path | ||
header.write_to( target_header_path ) | ||
|
||
base, ext = os.path.splitext( header_include_path ) | ||
forward_header_include_path = base + '-forwards' + ext | ||
print 'Amalgating forward header...' | ||
header = AmalgamationFile( source_top_dir ) | ||
header.add_text( '/// Json-cpp amalgated forward header (http://jsoncpp.sourceforge.net/).' ) | ||
header.add_text( '/// It is intented to be used with #include <%s>' % forward_header_include_path ) | ||
header.add_text( '/// This header provides forward declaration for all JsonCpp types.' ) | ||
header.add_file( 'LICENSE', wrap_in_comment=True ) | ||
header.add_text( '#ifndef JSON_FORWARD_AMALGATED_H_INCLUDED' ) | ||
header.add_text( '# define JSON_FORWARD_AMALGATED_H_INCLUDED' ) | ||
header.add_text( '/// If defined, indicates that the source file is amalgated' ) | ||
header.add_text( '/// to prevent private header inclusion.' ) | ||
header.add_text( '#define JSON_IS_AMALGATED' ) | ||
header.add_file( 'include/json/config.h' ) | ||
header.add_file( 'include/json/forwards.h' ) | ||
header.add_text( '#endif //ifndef JSON_FORWARD_AMALGATED_H_INCLUDED' ) | ||
|
||
target_forward_header_path = os.path.join( os.path.dirname(target_source_path), | ||
forward_header_include_path ) | ||
print 'Writing amalgated forward header to %r' % target_forward_header_path | ||
header.write_to( target_forward_header_path ) | ||
|
||
print 'Amalgating source...' | ||
source = AmalgamationFile( source_top_dir ) | ||
source.add_text( '/// Json-cpp amalgated source (http://jsoncpp.sourceforge.net/).' ) | ||
source.add_text( '/// It is intented to be used with #include <%s>' % header_include_path ) | ||
source.add_file( 'LICENSE', wrap_in_comment=True ) | ||
source.add_text( '' ) | ||
source.add_text( '#include <%s>' % header_include_path ) | ||
source.add_text( '' ) | ||
source.add_file( 'src/lib_json\json_tool.h' ) | ||
source.add_file( 'src/lib_json\json_reader.cpp' ) | ||
source.add_file( 'src/lib_json\json_batchallocator.h' ) | ||
source.add_file( 'src/lib_json\json_valueiterator.inl' ) | ||
source.add_file( 'src/lib_json\json_value.cpp' ) | ||
source.add_file( 'src/lib_json\json_writer.cpp' ) | ||
|
||
print 'Writing amalgated source to %r' % target_source_path | ||
source.write_to( target_source_path ) | ||
|
||
def main(): | ||
usage = """%prog [options] | ||
Generate a single amalgated source and header file from the sources. | ||
""" | ||
from optparse import OptionParser | ||
parser = OptionParser(usage=usage) | ||
parser.allow_interspersed_args = False | ||
parser.add_option('-s', '--source', dest="target_source_path", action='store', default='dist/jsoncpp.cpp', | ||
help="""Output .cpp source path. [Default: %default]""") | ||
parser.add_option('-i', '--include', dest="header_include_path", action='store', default='json/json.h', | ||
help="""Header include path. Used to include the header from the amalgated source file. [Default: %default]""") | ||
parser.add_option('-t', '--top-dir', dest="top_dir", action='store', default=os.getcwd(), | ||
help="""Source top-directory. [Default: %default]""") | ||
parser.enable_interspersed_args() | ||
options, args = parser.parse_args() | ||
|
||
msg = amalgamate_source( source_top_dir=options.top_dir, | ||
target_source_path=options.target_source_path, | ||
header_include_path=options.header_include_path ) | ||
if msg: | ||
sys.stderr.write( msg + '\n' ) | ||
sys.exit( 1 ) | ||
else: | ||
print 'Source succesfully amalagated' | ||
|
||
if __name__ == '__main__': | ||
main() | ||
"""Amalgate json-cpp library sources into a single source and header file. | ||
Requires Python 2.6 | ||
Example of invocation (must be invoked from json-cpp top directory): | ||
python amalgate.py | ||
""" | ||
import os | ||
import os.path | ||
import sys | ||
|
||
class AmalgamationFile: | ||
def __init__( self, top_dir ): | ||
self.top_dir = top_dir | ||
self.blocks = [] | ||
|
||
def add_text( self, text ): | ||
if not text.endswith( '\n' ): | ||
text += '\n' | ||
self.blocks.append( text ) | ||
|
||
def add_file( self, relative_input_path, wrap_in_comment=False ): | ||
def add_marker( prefix ): | ||
self.add_text( '' ) | ||
self.add_text( '// ' + '/'*70 ) | ||
self.add_text( '// %s of content of file: %s' % (prefix, relative_input_path.replace('\\','/')) ) | ||
self.add_text( '// ' + '/'*70 ) | ||
self.add_text( '' ) | ||
add_marker( 'Beginning' ) | ||
f = open( os.path.join( self.top_dir, relative_input_path ), 'rt' ) | ||
content = f.read() | ||
if wrap_in_comment: | ||
content = '/*\n' + content + '\n*/' | ||
self.add_text( content ) | ||
f.close() | ||
add_marker( 'End' ) | ||
self.add_text( '\n\n\n\n' ) | ||
|
||
def get_value( self ): | ||
return ''.join( self.blocks ).replace('\r\n','\n') | ||
|
||
def write_to( self, output_path ): | ||
output_dir = os.path.dirname( output_path ) | ||
if output_dir and not os.path.isdir( output_dir ): | ||
os.makedirs( output_dir ) | ||
f = open( output_path, 'wb' ) | ||
f.write( self.get_value() ) | ||
f.close() | ||
|
||
def amalgamate_source( source_top_dir=None, | ||
target_source_path=None, | ||
header_include_path=None ): | ||
"""Produces amalgated source. | ||
Parameters: | ||
source_top_dir: top-directory | ||
target_source_path: output .cpp path | ||
header_include_path: generated header path relative to target_source_path. | ||
""" | ||
print 'Amalgating header...' | ||
header = AmalgamationFile( source_top_dir ) | ||
header.add_text( '/// Json-cpp amalgated header (http://jsoncpp.sourceforge.net/).' ) | ||
header.add_text( '/// It is intented to be used with #include <%s>' % header_include_path ) | ||
header.add_file( 'LICENSE', wrap_in_comment=True ) | ||
header.add_text( '#ifndef JSON_AMALGATED_H_INCLUDED' ) | ||
header.add_text( '# define JSON_AMALGATED_H_INCLUDED' ) | ||
header.add_text( '/// If defined, indicates that the source file is amalgated' ) | ||
header.add_text( '/// to prevent private header inclusion.' ) | ||
header.add_text( '#define JSON_IS_AMALGATED' ) | ||
header.add_file( 'include/json/config.h' ) | ||
header.add_file( 'include/json/forwards.h' ) | ||
header.add_file( 'include/json/features.h' ) | ||
header.add_file( 'include/json/value.h' ) | ||
header.add_file( 'include/json/reader.h' ) | ||
header.add_file( 'include/json/writer.h' ) | ||
header.add_text( '#endif //ifndef JSON_AMALGATED_H_INCLUDED' ) | ||
|
||
target_header_path = os.path.join( os.path.dirname(target_source_path), header_include_path ) | ||
print 'Writing amalgated header to %r' % target_header_path | ||
header.write_to( target_header_path ) | ||
|
||
base, ext = os.path.splitext( header_include_path ) | ||
forward_header_include_path = base + '-forwards' + ext | ||
print 'Amalgating forward header...' | ||
header = AmalgamationFile( source_top_dir ) | ||
header.add_text( '/// Json-cpp amalgated forward header (http://jsoncpp.sourceforge.net/).' ) | ||
header.add_text( '/// It is intented to be used with #include <%s>' % forward_header_include_path ) | ||
header.add_text( '/// This header provides forward declaration for all JsonCpp types.' ) | ||
header.add_file( 'LICENSE', wrap_in_comment=True ) | ||
header.add_text( '#ifndef JSON_FORWARD_AMALGATED_H_INCLUDED' ) | ||
header.add_text( '# define JSON_FORWARD_AMALGATED_H_INCLUDED' ) | ||
header.add_text( '/// If defined, indicates that the source file is amalgated' ) | ||
header.add_text( '/// to prevent private header inclusion.' ) | ||
header.add_text( '#define JSON_IS_AMALGATED' ) | ||
header.add_file( 'include/json/config.h' ) | ||
header.add_file( 'include/json/forwards.h' ) | ||
header.add_text( '#endif //ifndef JSON_FORWARD_AMALGATED_H_INCLUDED' ) | ||
|
||
target_forward_header_path = os.path.join( os.path.dirname(target_source_path), | ||
forward_header_include_path ) | ||
print 'Writing amalgated forward header to %r' % target_forward_header_path | ||
header.write_to( target_forward_header_path ) | ||
|
||
print 'Amalgating source...' | ||
source = AmalgamationFile( source_top_dir ) | ||
source.add_text( '/// Json-cpp amalgated source (http://jsoncpp.sourceforge.net/).' ) | ||
source.add_text( '/// It is intented to be used with #include <%s>' % header_include_path ) | ||
source.add_file( 'LICENSE', wrap_in_comment=True ) | ||
source.add_text( '' ) | ||
source.add_text( '#include <%s>' % header_include_path ) | ||
source.add_text( '' ) | ||
source.add_file( 'src/lib_json\json_tool.h' ) | ||
source.add_file( 'src/lib_json\json_reader.cpp' ) | ||
source.add_file( 'src/lib_json\json_batchallocator.h' ) | ||
source.add_file( 'src/lib_json\json_valueiterator.inl' ) | ||
source.add_file( 'src/lib_json\json_value.cpp' ) | ||
source.add_file( 'src/lib_json\json_writer.cpp' ) | ||
|
||
print 'Writing amalgated source to %r' % target_source_path | ||
source.write_to( target_source_path ) | ||
|
||
def main(): | ||
usage = """%prog [options] | ||
Generate a single amalgated source and header file from the sources. | ||
""" | ||
from optparse import OptionParser | ||
parser = OptionParser(usage=usage) | ||
parser.allow_interspersed_args = False | ||
parser.add_option('-s', '--source', dest="target_source_path", action='store', default='dist/jsoncpp.cpp', | ||
help="""Output .cpp source path. [Default: %default]""") | ||
parser.add_option('-i', '--include', dest="header_include_path", action='store', default='json/json.h', | ||
help="""Header include path. Used to include the header from the amalgated source file. [Default: %default]""") | ||
parser.add_option('-t', '--top-dir', dest="top_dir", action='store', default=os.getcwd(), | ||
help="""Source top-directory. [Default: %default]""") | ||
parser.enable_interspersed_args() | ||
options, args = parser.parse_args() | ||
|
||
msg = amalgamate_source( source_top_dir=options.top_dir, | ||
target_source_path=options.target_source_path, | ||
header_include_path=options.header_include_path ) | ||
if msg: | ||
sys.stderr.write( msg + '\n' ) | ||
sys.exit( 1 ) | ||
else: | ||
print 'Source succesfully amalagated' | ||
|
||
if __name__ == '__main__': | ||
main() |
Oops, something went wrong.