blob: 7077bfa7eb0135150d6c25452449b6b497f460b3 [file]
// Copyright (c) 2022, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'package:jnigen/jnigen.dart';
import 'package:logging/logging.dart';
import 'package:path/path.dart' hide equals;
const jacksonPreamble = '// Generated from jackson-core which is licensed under'
' the Apache License 2.0.\n'
'// The following copyright from the original authors applies.\n'
'// See https://github.com/FasterXML/jackson-core/blob/2.14/LICENSE\n'
'//\n'
'// Copyright (c) 2007 - The Jackson Project Authors\n'
'// Licensed under the Apache License, Version 2.0 (the "License")\n'
'// you may not use this file except in compliance with the License.\n'
'// You may obtain a copy of the License at\n'
'//\n'
'// http://www.apache.org/licenses/LICENSE-2.0\n'
'//\n'
'// Unless required by applicable law or agreed to in writing, software\n'
'// distributed under the License is distributed on an "AS IS" BASIS,\n'
'// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n'
'// See the License for the specific language governing permissions and\n'
'// limitations under the License.\n';
const testName = 'jackson_core_test';
final thirdPartyDir = join('test', testName, 'third_party');
const deps = ['com.fasterxml.jackson.core:jackson-core:2.13.4'];
Config getConfig({
String? root,
bool generateFullVersion = false,
bool useAsm = false,
BindingsType bindingsType = BindingsType.dartOnly,
}) {
final rootDir = root ?? thirdPartyDir;
final bindingTypeDir = bindingsType.getConfigString();
final config = Config(
mavenDownloads: MavenDownloads(
sourceDeps: deps,
sourceDir: join(thirdPartyDir, 'java'),
jarDir: join(thirdPartyDir, 'jar'),
),
summarizerOptions: SummarizerOptions(
backend: useAsm ? 'asm' : null,
),
preamble: jacksonPreamble,
outputConfig: OutputConfig(
bindingsType: bindingsType,
// Have to be judicious here, and ensure null when bindings type is
// dart-only, because config-test is also using this.
cConfig: bindingsType == BindingsType.cBased
? CCodeOutputConfig(
libraryName: 'jackson_core',
path: Uri.directory(join(rootDir, bindingTypeDir, 'c_bindings')),
)
: null,
dartConfig: DartCodeOutputConfig(
path: Uri.directory(join(rootDir, bindingTypeDir, 'dart_bindings')),
),
),
classes: (generateFullVersion)
? ['com.fasterxml.jackson.core']
: [
'com.fasterxml.jackson.core.JsonFactory',
'com.fasterxml.jackson.core.JsonParser',
'com.fasterxml.jackson.core.JsonToken',
],
logLevel: Level.INFO,
exclude: BindingExclusions(
// TODO(#31): Remove field exclusions.
fields: excludeAll<Field>([
['com.fasterxml.jackson.core.JsonFactory', 'DEFAULT_QUOTE_CHAR'],
['com.fasterxml.jackson.core.Base64Variant', 'PADDING_CHAR_NONE'],
['com.fasterxml.jackson.core.base.ParserMinimalBase', 'CHAR_NULL'],
['com.fasterxml.jackson.core.io.UTF32Reader', 'NC'],
]),
// TODO(#159): Remove class exclusions.
classes: ClassNameFilter.exclude(
'com.fasterxml.jackson.core.JsonFactoryBuilder',
)),
);
return config;
}
void main() async {
await generateJniBindings(getConfig(bindingsType: BindingsType.cBased));
await generateJniBindings(getConfig(bindingsType: BindingsType.dartOnly));
}