2000-10-05 00:03:01 +00:00
|
|
|
/******************************************************************************
|
|
|
|
*
|
2001-03-21 23:22:16 +00:00
|
|
|
* Copyright (C) 2000-2001, International Business Machines
|
2000-10-05 00:03:01 +00:00
|
|
|
* Corporation and others. All Rights Reserved.
|
|
|
|
*
|
|
|
|
*******************************************************************************
|
|
|
|
* file name: filemode.c
|
|
|
|
* encoding: ANSI X3.4 (1968)
|
|
|
|
* tab size: 8 (not used)
|
|
|
|
* indentation:4
|
|
|
|
*
|
|
|
|
* created on: 2000sep28
|
|
|
|
* created by: Steven \u24C7 Loomis
|
|
|
|
*
|
|
|
|
* The mode which uses raw files (i.e. does nothing until installation).
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include <stdio.h>
|
|
|
|
#include <stdlib.h>
|
|
|
|
#include "unicode/utypes.h"
|
2001-01-03 02:24:47 +00:00
|
|
|
#include "unicode/putil.h"
|
2000-10-05 00:03:01 +00:00
|
|
|
#include "cmemory.h"
|
|
|
|
#include "cstring.h"
|
|
|
|
#include "filestrm.h"
|
|
|
|
#include "toolutil.h"
|
|
|
|
#include "unewdata.h"
|
|
|
|
#include "uoptions.h"
|
|
|
|
#include "pkgtypes.h"
|
|
|
|
#include "makefile.h"
|
|
|
|
|
|
|
|
/* The file we will make will look like this:
|
|
|
|
|
|
|
|
(where /out is the full path to the output dir)
|
|
|
|
|
|
|
|
SOURCES=/out/filea /out/fileb ./somewhere/filec ../somewhereelse/filed
|
|
|
|
|
|
|
|
TARGETS=/out/filea /out/fileb /out/filec /out/filed
|
|
|
|
|
|
|
|
all: $(TARGETS)
|
|
|
|
|
|
|
|
/out/filec /out/filed: ../somewhere/filec ../somewhereelse/filed
|
|
|
|
$(INSTALL_DATA) $? $(OUTDIR)
|
|
|
|
|
|
|
|
install: all
|
|
|
|
$(INSTALL_DATA) $(TARGETS) $(instdir)
|
|
|
|
|
|
|
|
|
2001-03-21 23:22:16 +00:00
|
|
|
==Note:==
|
2000-10-05 00:03:01 +00:00
|
|
|
The only items in the first '$(INSTALL_DATA)' are files NOT already in the out dir!
|
|
|
|
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void pkg_mode_files(UPKGOptions *o, FileStream *makefile, UErrorCode *status)
|
|
|
|
{
|
|
|
|
char tmp[1024], tmp2[1024];
|
|
|
|
CharList *tail = NULL, *infiles = NULL;
|
|
|
|
|
|
|
|
CharList *copyFilesLeft = NULL; /* left hand side of the copy rule*/
|
|
|
|
CharList *copyFilesRight = NULL; /* rhs "" "" */
|
|
|
|
|
|
|
|
CharList *copyFilesLeftTail = NULL;
|
|
|
|
CharList *copyFilesRightTail = NULL;
|
|
|
|
|
|
|
|
CharList *copyCommands = NULL;
|
|
|
|
|
|
|
|
const char *baseName;
|
|
|
|
|
2001-03-21 23:22:16 +00:00
|
|
|
|
2000-12-15 20:34:14 +00:00
|
|
|
/* Dont' copy files already in tmp */
|
2000-10-05 00:03:01 +00:00
|
|
|
for(infiles = o->filePaths;infiles;infiles = infiles->next)
|
|
|
|
{
|
|
|
|
baseName = findBasename(infiles->str);
|
|
|
|
|
2001-11-12 17:54:15 +00:00
|
|
|
uprv_strcpy(tmp, o->targetDir);
|
2000-10-05 00:03:01 +00:00
|
|
|
uprv_strcat(tmp, U_FILE_SEP_STRING);
|
|
|
|
uprv_strcat(tmp, baseName);
|
2001-03-21 23:22:16 +00:00
|
|
|
|
2000-10-05 00:03:01 +00:00
|
|
|
o->outFiles = pkg_appendToList(o->outFiles, &tail, uprv_strdup(tmp));
|
|
|
|
|
|
|
|
if(strcmp(tmp, infiles->str) == 0)
|
|
|
|
{
|
2000-12-15 20:34:14 +00:00
|
|
|
/* fprintf(stderr, "### NOT copying: %s\n", tmp); */
|
2000-10-05 00:03:01 +00:00
|
|
|
/* no copy needed.. */
|
|
|
|
continue;
|
|
|
|
}
|
|
|
|
|
2001-11-12 17:54:15 +00:00
|
|
|
uprv_strcpy(tmp2, o->targetDir);
|
2000-10-05 00:03:01 +00:00
|
|
|
uprv_strcat(tmp2, U_FILE_SEP_STRING);
|
|
|
|
uprv_strcat(tmp2, U_FILE_SEP_STRING);
|
|
|
|
uprv_strcat(tmp2, baseName);
|
2001-03-21 23:22:16 +00:00
|
|
|
|
2000-10-05 00:03:01 +00:00
|
|
|
if(strcmp(tmp2, infiles->str) == 0)
|
|
|
|
{
|
2000-12-15 20:34:14 +00:00
|
|
|
/* fprintf(stderr, "### NOT copying: %s\n", tmp2); */
|
2000-10-05 00:03:01 +00:00
|
|
|
/* no copy needed.. */
|
|
|
|
continue;
|
|
|
|
}
|
2001-03-21 23:22:16 +00:00
|
|
|
|
2000-10-05 00:03:01 +00:00
|
|
|
/* left hand side: target path, target name */
|
|
|
|
copyFilesLeft = pkg_appendToList(copyFilesLeft, ©FilesLeftTail, uprv_strdup(tmp));
|
|
|
|
|
2001-11-12 17:54:15 +00:00
|
|
|
/* fprintf(stderr, "##### COPY %s from %s\n", tmp, infiles->str); */
|
2000-10-05 00:03:01 +00:00
|
|
|
/* rhs: source path */
|
|
|
|
copyFilesRight = pkg_appendToList(copyFilesRight, ©FilesRightTail, uprv_strdup(infiles->str));
|
2001-03-21 23:22:16 +00:00
|
|
|
|
2000-10-05 00:03:01 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
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");
|
|
|
|
}
|
2001-03-21 23:22:16 +00:00
|
|
|
|
2000-10-05 00:03:01 +00:00
|
|
|
if(o->nooutput) {
|
|
|
|
*status = U_ZERO_ERROR;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
/* these are also the files to delete */
|
|
|
|
T_FileStream_writeLine(makefile, "COPIEDDEST= ");
|
2000-10-06 17:39:09 +00:00
|
|
|
pkg_writeCharListWrap(makefile, copyFilesLeft, " ", " \\\n",1);
|
2000-10-05 00:03:01 +00:00
|
|
|
T_FileStream_writeLine(makefile, "\n");
|
|
|
|
|
2001-03-21 23:22:16 +00:00
|
|
|
|
2001-11-12 17:54:15 +00:00
|
|
|
T_FileStream_writeLine(makefile, "\n.PHONY: $(NAME)\n");
|
|
|
|
T_FileStream_writeLine(makefile, "all: $(NAME)\n\n");
|
|
|
|
|
2000-10-05 00:03:01 +00:00
|
|
|
/* commands for the make rule */
|
|
|
|
tail = NULL;
|
2001-11-17 18:38:04 +00:00
|
|
|
copyCommands = pkg_appendToList(copyCommands, &tail, uprv_strdup
|
|
|
|
("@for file in $?; do \\\n"
|
|
|
|
"\t$(INSTALL_DATA) $$file $(TARGETDIR) ; \\\n"
|
|
|
|
"done;\n\n"));
|
2001-03-21 23:22:16 +00:00
|
|
|
|
2000-10-05 00:03:01 +00:00
|
|
|
if(copyFilesRight != NULL)
|
|
|
|
{
|
|
|
|
|
2001-11-12 17:54:15 +00:00
|
|
|
pkg_mak_writeStanza(makefile, o, "$(NAME)", copyFilesRight,
|
2000-10-05 00:03:01 +00:00
|
|
|
copyCommands);
|
2001-03-21 23:22:16 +00:00
|
|
|
|
2000-10-05 00:03:01 +00:00
|
|
|
T_FileStream_writeLine(makefile, "clean:\n\t-$(RMV) $(COPIEDDEST) $(MAKEFILE)");
|
|
|
|
T_FileStream_writeLine(makefile, "\n\n");
|
|
|
|
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
T_FileStream_writeLine(makefile, "clean:\n\n");
|
|
|
|
}
|
2001-03-21 23:22:16 +00:00
|
|
|
|
2001-11-17 18:38:04 +00:00
|
|
|
sprintf(tmp, "install: \n"
|
|
|
|
"\t@for file in $(DATAFILEPATHS) ; do \\\n"
|
2001-12-21 20:09:18 +00:00
|
|
|
"\t\techo $(INSTALL_DATA) $$file $$INSTALLTO; \\\n"
|
|
|
|
"\t\t$(INSTALL_DATA) $$file $$INSTALLTO; \\\n"
|
2001-11-17 18:38:04 +00:00
|
|
|
"\tdone;\n\n");
|
|
|
|
|
2000-10-05 00:03:01 +00:00
|
|
|
|
|
|
|
T_FileStream_writeLine(makefile, tmp);
|
|
|
|
}
|