def write_wcsconfig_h(): """ Writes out the wcsconfig.h header with local configuration. """ h_file = io.StringIO() h_file.write( """ /* The bundled version has WCSLIB_VERSION */ #define HAVE_WCSLIB_VERSION 1 /* WCSLIB library version number. */ #define WCSLIB_VERSION {0} /* 64-bit integer data type. */ #define WCSLIB_INT64 {1} /* Windows needs some other defines to prevent inclusion of wcsset() which conflicts with wcslib's wcsset(). These need to be set on code that *uses* astropy.wcs, in addition to astropy.wcs itself. */ #if defined(_WIN32) || defined(_MSC_VER) || defined(__MINGW32__) || defined (__MINGW64__) #ifndef YY_NO_UNISTD_H #define YY_NO_UNISTD_H #endif #ifndef _CRT_SECURE_NO_WARNINGS #define _CRT_SECURE_NO_WARNINGS #endif #ifndef _NO_OLDNAMES #define _NO_OLDNAMES #endif #ifndef NO_OLDNAMES #define NO_OLDNAMES #endif #ifndef __STDC__ #define __STDC__ 1 #endif #endif """.format( WCSVERSION, determine_64_bit_int() ) ) setup_helpers.write_if_different( join(WCSROOT, "include", "astropy_wcs", "wcsconfig.h"), h_file.getvalue().encode("ascii") ) setup_helpers.write_if_different(join(WCSROOT, "include", "wcsconfig.h"), h_file.getvalue().encode("ascii"))
def write_wcsconfig_h(paths): """ Writes out the wcsconfig.h header with local configuration. """ h_file = io.StringIO() h_file.write(""" /* The bundled version has WCSLIB_VERSION */ #define HAVE_WCSLIB_VERSION 1 /* WCSLIB library version number. */ #define WCSLIB_VERSION {0} /* 64-bit integer data type. */ #define WCSLIB_INT64 {1} /* Windows needs some other defines to prevent inclusion of wcsset() which conflicts with wcslib's wcsset(). These need to be set on code that *uses* astropy.wcs, in addition to astropy.wcs itself. */ #if defined(_WIN32) || defined(_MSC_VER) || defined(__MINGW32__) || defined (__MINGW64__) #ifndef YY_NO_UNISTD_H #define YY_NO_UNISTD_H #endif #ifndef _CRT_SECURE_NO_WARNINGS #define _CRT_SECURE_NO_WARNINGS #endif #ifndef _NO_OLDNAMES #define _NO_OLDNAMES #endif #ifndef NO_OLDNAMES #define NO_OLDNAMES #endif #ifndef __STDC__ #define __STDC__ 1 #endif #endif """.format(WCSVERSION, determine_64_bit_int())) content = h_file.getvalue().encode('ascii') for path in paths: setup_helpers.write_if_different(path, content)
def generate_c_docstrings(): from astropy.wcs import docstrings docstrings = docstrings.__dict__ keys = [ key for key, val in docstrings.items() if not key.startswith('__') and isinstance(val, str)] keys.sort() docs = {} for key in keys: docs[key] = docstrings[key].encode('utf8').lstrip() + b'\0' h_file = io.StringIO() h_file.write("""/* DO NOT EDIT! This file is autogenerated by astropy/wcs/setup_package.py. To edit its contents, edit astropy/wcs/docstrings.py */ #ifndef __DOCSTRINGS_H__ #define __DOCSTRINGS_H__ """) for key in keys: val = docs[key] h_file.write('extern char doc_{0}[{1}];\n'.format(key, len(val))) h_file.write("\n#endif\n\n") setup_helpers.write_if_different( join(WCSROOT, 'include', 'astropy_wcs', 'docstrings.h'), h_file.getvalue().encode('utf-8')) c_file = io.StringIO() c_file.write("""/* DO NOT EDIT! This file is autogenerated by astropy/wcs/setup_package.py. To edit its contents, edit astropy/wcs/docstrings.py The weirdness here with strncpy is because some C compilers, notably MSVC, do not support string literals greater than 256 characters. */ #include <string.h> #include "astropy_wcs/docstrings.h" """) for key in keys: val = docs[key] c_file.write('char doc_{0}[{1}] = {{\n'.format(key, len(val))) for i in range(0, len(val), 12): section = val[i:i+12] c_file.write(' ') c_file.write(''.join('0x{0:02x}, '.format(x) for x in section)) c_file.write('\n') c_file.write(" };\n\n") setup_helpers.write_if_different( join(WCSROOT, 'src', 'docstrings.c'), c_file.getvalue().encode('utf-8'))
def generate_c_docstrings(): from astropy.wcs import docstrings docstrings = docstrings.__dict__ keys = [ key for key, val in docstrings.items() if not key.startswith('__') and isinstance(val, six.string_types)] keys.sort() docs = {} for key in keys: docs[key] = docstrings[key].encode('utf8').lstrip() + b'\0' h_file = io.StringIO() h_file.write("""/* DO NOT EDIT! This file is autogenerated by astropy/wcs/setup_package.py. To edit its contents, edit astropy/wcs/docstrings.py */ #ifndef __DOCSTRINGS_H__ #define __DOCSTRINGS_H__ """) for key in keys: val = docs[key] h_file.write('extern char doc_{0}[{1}];\n'.format(key, len(val))) h_file.write("\n#endif\n\n") setup_helpers.write_if_different( join(WCSROOT, 'include', 'astropy_wcs', 'docstrings.h'), h_file.getvalue().encode('utf-8')) c_file = io.StringIO() c_file.write("""/* DO NOT EDIT! This file is autogenerated by astropy/wcs/setup_package.py. To edit its contents, edit astropy/wcs/docstrings.py The weirdness here with strncpy is because some C compilers, notably MSVC, do not support string literals greater than 256 characters. */ #include <string.h> #include "astropy_wcs/docstrings.h" """) for key in keys: val = docs[key] c_file.write('char doc_{0}[{1}] = {{\n'.format(key, len(val))) for i in range(0, len(val), 12): section = val[i:i+12] if six.PY2: section = [ord(x) for x in section] c_file.write(' '); c_file.write(''.join('0x{0:02x}, '.format(x) for x in section)) c_file.write('\n') c_file.write(" };\n\n") setup_helpers.write_if_different( join(WCSROOT, 'src', 'docstrings.c'), c_file.getvalue().encode('utf-8'))
def generate_c_docstrings(): from synphot import docstrings docstrings = docstrings.__dict__ keys = [ key for key, val in docstrings.items() if not key.startswith('__') and isinstance(val, str)] keys.sort() docs = {} for key in keys: docs[key] = docstrings[key].encode('utf8').lstrip() + b'\0' h_file = io.StringIO() h_file.write("""/* DO NOT EDIT! This file is autogenerated by synphot/setup_package.py. To edit its contents, edit synphot/docstrings.py */ #ifndef __DOCSTRINGS_H__ #define __DOCSTRINGS_H__ #if defined(_MSC_VER) void fill_docstrings(void); #endif """) for key in keys: val = docs[key] h_file.write('extern char doc_{0}[{1}];\n'.format(key, len(val))) h_file.write("\n#endif\n\n") setup_helpers.write_if_different( os.path.join(LOCALROOT, 'include', 'docstrings.h'), h_file.getvalue().encode('utf-8')) c_file = io.StringIO() c_file.write("""/* DO NOT EDIT! This file is autogenerated by synphot/setup_package.py. To edit its contents, edit synphot/docstrings.py The weirdness here with strncpy is because some C compilers, notably MSVC, do not support string literals greater than 256 characters. */ #include <string.h> #include "docstrings.h" #if defined(_MSC_VER) """) for key in keys: val = docs[key] c_file.write('char doc_{0}[{1}];\n'.format(key, len(val))) c_file.write("\nvoid fill_docstrings(void)\n{\n") for key in keys: val = docs[key] # For portability across various compilers, we need to fill the # docstrings in 256-character chunks for i in range(0, len(val), 256): chunk = string_escape(val[i:i + 256]).replace('"', '\\"') c_file.write(' strncpy(doc_{0} + {1}, "{2}", {3});\n'.format( key, i, chunk, min(len(val) - i, 256))) c_file.write("\n") c_file.write("\n}\n\n") c_file.write("#else /* UNIX */\n") for key in keys: val = docs[key] c_file.write('char doc_{0}[{1}] = "{2}";\n\n'.format( key, len(val), string_escape(val).replace('"', '\\"'))) c_file.write("#endif\n") setup_helpers.write_if_different( os.path.join(LOCALROOT, 'src', 'docstrings.c'), c_file.getvalue().encode('utf-8'))
def generate_c_docstrings(): from synphot import docstrings docstrings = docstrings.__dict__ keys = [ key for key, val in docstrings.items() if not key.startswith('__') and isinstance(val, six.string_types) ] keys.sort() docs = {} for key in keys: docs[key] = docstrings[key].encode('utf8').lstrip() + b'\0' h_file = io.StringIO() h_file.write("""/* DO NOT EDIT! This file is autogenerated by synphot/setup_package.py. To edit its contents, edit synphot/docstrings.py */ #ifndef __DOCSTRINGS_H__ #define __DOCSTRINGS_H__ #if defined(_MSC_VER) void fill_docstrings(void); #endif """) for key in keys: val = docs[key] h_file.write('extern char doc_{0}[{1}];\n'.format(key, len(val))) h_file.write("\n#endif\n\n") setup_helpers.write_if_different( os.path.join(LOCALROOT, 'include', 'docstrings.h'), h_file.getvalue().encode('utf-8')) c_file = io.StringIO() c_file.write("""/* DO NOT EDIT! This file is autogenerated by synphot/setup_package.py. To edit its contents, edit synphot/docstrings.py The weirdness here with strncpy is because some C compilers, notably MSVC, do not support string literals greater than 256 characters. */ #include <string.h> #include "docstrings.h" #if defined(_MSC_VER) """) for key in keys: val = docs[key] c_file.write('char doc_{0}[{1}];\n'.format(key, len(val))) c_file.write("\nvoid fill_docstrings(void)\n{\n") for key in keys: val = docs[key] # For portability across various compilers, we need to fill the # docstrings in 256-character chunks for i in six.moves.range(0, len(val), 256): chunk = string_escape(val[i:i + 256]).replace('"', '\\"') c_file.write(' strncpy(doc_{0} + {1}, "{2}", {3});\n'.format( key, i, chunk, min(len(val) - i, 256))) c_file.write("\n") c_file.write("\n}\n\n") c_file.write("#else /* UNIX */\n") for key in keys: val = docs[key] c_file.write('char doc_{0}[{1}] = "{2}";\n\n'.format( key, len(val), string_escape(val).replace('"', '\\"'))) c_file.write("#endif\n") setup_helpers.write_if_different( os.path.join(LOCALROOT, 'src', 'docstrings.c'), c_file.getvalue().encode('utf-8'))