/**************************************************************************
*
*   Copyright (C) 2000, International Business Machines
*   Corporation and others.  All Rights Reserved.
*
***************************************************************************
*   file name:  makefile.h
*   encoding:   ANSI X3.4 (1968)
*   tab size:   8 (not used)
*   indentation:4
*
*   created on: 2000may17
*   created by: Steven \u24C7 Loomis
*
*  definition for code to create a makefile.
*  implementation is OS dependent (i.e. gmake.c, nmake.c, .. )
*/

#ifndef _MAKEFILE
#define _MAKEFILE

/* headers */
#include "unicode/utypes.h"
#include "pkgtypes.h"


/* Write any setup/initialization stuff */
void
pkg_mak_writeHeader(FileStream *f, const UPKGOptions *o);

/* Write a stanza in the makefile, with specified   "target: parents...  \n\n\tcommands" [etc] */
void
pkg_mak_writeStanza(FileStream *f, const UPKGOptions *o, 
                    const char *target,
                    CharList* parents,
                    CharList* commands);

/* write any cleanup/post stuff */
void
pkg_mak_writeFooter(FileStream *f, const UPKGOptions *o);



#ifdef WIN32
extern void pkg_mode_windows(UPKGOptions *o, FileStream *makefile, UErrorCode *status);
#else /*#ifdef WIN32*/
/**
 * Write stanzas for generating .o (and .c) files for each data file in 'o->filePaths'.
 * @param o Package options struct
 * @param makefile Current makefile being written
 * @param objects On output, list of object files
 * @param objSuffix Suffix of object files including dot, typically OBJ_SUFFIX or ".o" or ".obj"
 */
extern void
pkg_mak_writeObjRules(UPKGOptions *o,  FileStream *makefile, CharList **objects, const char* objSuffix);
#ifdef UDATA_SO_SUFFIX
extern void pkg_mode_dll(UPKGOptions* o, FileStream *stream, UErrorCode *status);
extern void pkg_mode_static(UPKGOptions* o, FileStream *stream, UErrorCode *status);
#endif /*#ifdef UDATA_SO_SUFFIX*/
extern void pkg_mode_common(UPKGOptions* o, FileStream *stream, UErrorCode *status);
#endif /*#ifdef WIN32*/

extern void pkg_mode_files(UPKGOptions* o, FileStream *stream, UErrorCode *status);


#endif
