blob: aa40bb2bf92023a911e87c5bd1abf832bb5213b5 [file] [log] [blame]
/* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/** Clownfish::CFC::Binding::Core - Generate core C code for a
* Clownfish::CFC::Model::Hierarchy.
*
* A Clownfish::CFC::Model::Hierarchy describes an abstract specifiction for a
* class hierarchy; Clownfish::CFC::Binding::Core is responsible for
* auto-generating C code which implements that specification.
*/
#ifndef H_CFCBINDCORE
#define H_CFCBINDCORE
#ifdef __cplusplus
extern "C" {
#endif
typedef struct CFCBindCore CFCBindCore;
struct CFCHierarchy;
/**
* @param hierarchy A L<Clownfish::CFC::Model::Hierarchy>.
* @param header Text which will be prepended to each generated C file --
* typically, an "autogenerated file" warning.
* @param footer Text to be appended to the end of each generated C file --
* typically copyright information.
*/
CFCBindCore*
CFCBindCore_new(struct CFCHierarchy *hierarchy, const char *header,
const char *footer);
CFCBindCore*
CFCBindCore_init(CFCBindCore *self, struct CFCHierarchy *hierarchy,
const char *header, const char *footer);
void
CFCBindCore_destroy(CFCBindCore *self);
/** Call `CFCHierarchy_propagate_modified`to establish which
* classes do not have up-to-date generated .c and .h files, then traverse the
* hierarchy writing all necessary files.
*/
int
CFCBindCore_write_all_modified(CFCBindCore *self, int modified);
/** Copy .cfh and .cfp files for installed source parcels to the autogen
* directory.
*
* @param dest_dir Destination directory. Defaults to
* `autogen/share/clownfish/include` if NULL.
*/
void
CFCBindCore_copy_headers(CFCBindCore *self, const char *dest_dir);
/* Write host-specific data to a JSON file for each source parcel.
*/
void
CFCBindCore_write_host_data_json(CFCBindCore *self, const char *dest_dir,
const char *host_lang);
#ifdef __cplusplus
}
#endif
#endif /* H_CFCBINDCORE */