def create_target(category, target_name, target_index, targets): def name(name): return "%s-%s-%d" % (target_name, name, target_index) # TODO(John Sirois): JavaLibrary and ScalaLibrary can float here between src/ and tests/ - add # ant build support to allow the same treatment for JavaThriftLibrary and JavaProtobufLibrary # so that tests can house test IDL in tests/ target_type, base = category if target_type == JavaProtobufLibrary: return JavaProtobufLibrary._aggregate(name('protobuf'), provides, buildflags, targets) elif target_type == JavaThriftLibrary: return JavaThriftLibrary._aggregate(name('thrift'), provides, buildflags, targets) elif target_type == AnnotationProcessor: return AnnotationProcessor._aggregate(name('apt'), provides, targets) elif target_type == JavaLibrary: return JavaLibrary._aggregate(name('java'), provides, deployjar, buildflags, targets, base) elif target_type == ScalaLibrary: return ScalaLibrary._aggregate(name('scala'), provides, deployjar, buildflags, targets, base) elif target_type == JavaTests: return JavaTests._aggregate(name('java-tests'), buildflags, targets) elif target_type == ScalaTests: return ScalaTests._aggregate(name('scala-tests'), buildflags, targets) else: raise Exception("Cannot aggregate targets of type: %s" % target_type)
def compiled_idl(cls, idl_dep, generated_deps=None, compiler=None, language=None, namespace_map=None): """Marks a jar as containing IDL files that should be fetched and processed locally. idl_dep: A dependency resolvable to a single jar library. generated_deps: Dependencies for the code that will be generated from "idl_dep" compiler: The thrift compiler to apply to the fetched thrift IDL files. language: The language to generate code for - supported by some compilers namespace_map: A mapping from IDL declared namespaces to custom namespaces - supported by some compilers. """ deps = list(filter(is_concrete, idl_dep.resolve())) if not len(deps) == 1: raise TaskError( 'Can only arrange for compiled idl for a single dependency at a time, ' 'given:\n\t%s' % '\n\t'.join(map(str, deps))) jar = deps.pop() if not isinstance(jar, JarDependency): raise TaskError( 'Can only arrange for compiled idl from a jar dependency, given: %s' % jar) request = (jar, compiler, language) namespace_signature = None if namespace_map: sha = hashlib.sha1() for ns_from, ns_to in sorted(namespace_map.items()): sha.update(ns_from) sha.update(ns_to) namespace_signature = sha.hexdigest() request += (namespace_signature, ) if request not in cls._PLACEHOLDER_BY_REQUEST: if not cls._EXTRACT_BASE: config = Config.load() cls._EXTRACT_BASE = config.get('idl-extract', 'workdir') safe_mkdir(cls._EXTRACT_BASE) SourceRoot.register(cls._EXTRACT_BASE, JavaThriftLibrary) with ParseContext.temp(cls._EXTRACT_BASE): # TODO(John Sirois): abstract ivy specific configurations notion away jar._configurations.append('idl') jar.with_artifact(configuration='idl', classifier='idl') target_name = '-'.join( filter(None, (jar.id, compiler, language, namespace_signature))) placeholder = JavaThriftLibrary(target_name, sources=None, dependencies=[jar] + (generated_deps or []), compiler=compiler, language=language, namespace_map=namespace_map) cls._PLACEHOLDER_BY_REQUEST[request] = placeholder cls._PLACEHOLDERS_BY_JAR[jar].append(placeholder) return cls._PLACEHOLDER_BY_REQUEST[request]
def create_target(target_type, target_name, target_index, targets): def name(name): return "%s-%s-%d" % (target_name, name, target_index) if target_type == JavaProtobufLibrary: return JavaProtobufLibrary._aggregate(name('protobuf'), provides, buildflags, targets) elif target_type == JavaThriftLibrary: return JavaThriftLibrary._aggregate(name('thrift'), provides, buildflags, targets) elif target_type == JavaLibrary: return JavaLibrary._aggregate(name('java'), provides, deployjar, buildflags, targets) elif target_type == ScalaLibrary: return ScalaLibrary._aggregate(name('scala'), provides, deployjar, buildflags, targets) elif target_type == JavaTests: return JavaTests._aggregate(name('java-tests'), buildflags, targets) elif target_type == ScalaTests: return ScalaTests._aggregate(name('scala-tests'), buildflags, targets) else: raise Exception("Cannot aggregate targets of type: %s" % target_type)