#include <stdio.h>
#include <stdlib.h>
#include "unicode/utypes.h"
#include "unicode/putil.h"
#include "cmemory.h"
#include "cstring.h"
#include "filestrm.h"
#include "toolutil.h"
#include "unewdata.h"
#include "uoptions.h"
#include "pkgtypes.h"
#include "makefile.h"
void pkg_mode_files(UPKGOptions *o, FileStream *makefile, UErrorCode *status)
{
char tmp[1024], tmp2[1024], srcPath[1024];
char stanza[3072];
CharList *tail = NULL, *infiles = NULL;
CharList *copyFilesLeft = NULL;
CharList *copyFilesRight = NULL;
CharList *copyFilesInstall = NULL;
CharList *copyFilesLeftTail = NULL;
CharList *copyFilesRightTail = NULL;
CharList *copyFilesInstallTail = NULL;
CharList *copyDirs = NULL;
CharList *installDirs = NULL;
const char *baseName;
T_FileStream_writeLine(makefile, "\n.PHONY: $(NAME) all install clean\n\nall: $(NAME)\n\n");
if(o->embed) {
infiles = o->filePaths;
} else {
infiles = o->files;
}
for(;infiles;infiles = infiles->next)
{
uprv_strcpy(tmp, o->targetDir);
uprv_strcat(tmp, U_FILE_SEP_STRING);
if(o->embed) {
baseName = findBasename(infiles->str);
uprv_strcpy(srcPath, baseName);
} else {
baseName = infiles->str;
uprv_strcat(tmp, o->shortName);
uprv_strcat(tmp, U_FILE_SEP_STRING);
uprv_strcpy(srcPath, "$(SRCDIR)/");
uprv_strcat(srcPath, infiles->str);
}
uprv_strcat(tmp, baseName);
copyDirs = pkg_appendUniqueDirToList(copyDirs, NULL, tmp);
o->outFiles = pkg_appendToList(o->outFiles, &tail, uprv_strdup(tmp));
if(strcmp(tmp, infiles->str) == 0)
{
} else {
sprintf(stanza, "%s: %s\n\t$(INSTALL_DATA) $< $@\n", tmp, srcPath);
T_FileStream_writeLine(makefile, stanza);
}
uprv_strcpy(tmp2, "$(INSTALLTO)" U_FILE_SEP_STRING);
if(!o->embed) {
uprv_strcat(tmp2, o->shortName);
uprv_strcat(tmp2, U_FILE_SEP_STRING);
}
uprv_strcat(tmp2, baseName);
installDirs = pkg_appendUniqueDirToList(installDirs, NULL, tmp2);
if(strcmp(tmp2, infiles->str) == 0) {
} else {
sprintf(stanza, "%s: %s\n\t$(INSTALL_DATA) $< $@\n", tmp2, tmp);
T_FileStream_writeLine(makefile, stanza);
copyFilesLeft = pkg_appendToList(copyFilesLeft, ©FilesLeftTail, uprv_strdup(tmp));
copyFilesRight = pkg_appendToList(copyFilesRight, ©FilesRightTail, uprv_strdup(infiles->str));
copyFilesInstall = pkg_appendToList(copyFilesInstall, ©FilesInstallTail, uprv_strdup(tmp2));
}
}
if(o->nooutput || o->verbose) {
CharList *i;
fprintf(stdout, "# Output files: ");
for(i = o->outFiles; i; i=i->next) {
printf("%s ", i->str);
}
printf("\n");
}
if(o->nooutput) {
*status = U_ZERO_ERROR;
return;
}
T_FileStream_writeLine(makefile, "COPIEDDEST= ");
pkg_writeCharListWrap(makefile, copyFilesLeft, " ", " \\\n", 0);
T_FileStream_writeLine(makefile, "\n\n");
T_FileStream_writeLine(makefile, "INSTALLEDDEST= ");
pkg_writeCharListWrap(makefile, copyFilesInstall, " ", " \\\n", 0);
T_FileStream_writeLine(makefile, "\n\n");
T_FileStream_writeLine(makefile, "COPYDIRS= ");
pkg_writeCharListWrap(makefile, copyDirs, " ", " \\\n", 0);
T_FileStream_writeLine(makefile, "\n\n");
T_FileStream_writeLine(makefile, "INSTALLDIRS= ");
pkg_writeCharListWrap(makefile, installDirs, " ", " \\\n", 0);
T_FileStream_writeLine(makefile, "\n\n");
if(copyFilesRight != NULL)
{
T_FileStream_writeLine(makefile, "$(NAME): copy-dirs $(COPIEDDEST)\n\n");
T_FileStream_writeLine(makefile, "clean:\n\t-$(RMV) $(COPIEDDEST) $(MAKEFILE)");
T_FileStream_writeLine(makefile, "\n\n");
}
else
{
T_FileStream_writeLine(makefile, "clean:\n\n");
}
T_FileStream_writeLine(makefile, "install: install-dirs $(INSTALLEDDEST)\n\n");
T_FileStream_writeLine(makefile, "install-dirs:\n\t$(MKINSTALLDIRS) $(INSTALLDIRS)\n\n");
T_FileStream_writeLine(makefile, "copy-dirs:\n\t$(MKINSTALLDIRS) $(COPYDIRS)\n\n");
}