uvmac/setup/USFILDEF.c
InvisibleUp a8e9bc990e Started a rewrite of the makefile generator.
Probably not worth it, let's be honest...
2019-07-27 14:58:45 -04:00

497 lines
9.5 KiB
C

/*
USFILDEF.i
Copyright (C) 2007 Paul C. Pratt
You can redistribute this file and/or modify it under the terms
of version 2 of the GNU General Public License as published by
the Free Software Foundation. You should have received a copy
of the license along with this file; see the file COPYING.
This file is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
license for more details.
*/
/*
USe program SPecific FILe DEFinitions
*/
#include "COREDEFS.h"
LOCALPROC NullProc(void)
{
}
LOCALVAR unsigned int FileCounter;
struct DoSrcFile_r
{
MyPtr SavepDt;
char *s;
long Flgm;
int DepDir;
tDoDependsForC depends;
MyProc p;
};
typedef struct DoSrcFile_r DoSrcFile_r;
#define DoSrcFile_gd() ((DoSrcFile_r *)(pDt))
LOCALPROC DoASrcFileWithSetupProc0(
char *s, int DepDir, long Flgm, tDoDependsForC depends)
{
DoSrcFile_gd()->s = s;
DoSrcFile_gd()->Flgm = Flgm;
DoSrcFile_gd()->DepDir = DepDir;
DoSrcFile_gd()->depends = depends;
DoSrcFile_gd()->p();
++FileCounter;
}
LOCALPROC DoASrcFileWithSetupProc(
char *s, int DepDir, long Flgm, tDoDependsForC depends)
{
if (0 == (Flgm & kCSrcFlgmNoSource))
if (0 == (Flgm & kCSrcFlgmSkip))
{
DoASrcFileWithSetupProc0(s, DepDir, Flgm, depends);
}
}
LOCALPROC DoAllSrcFilesWithSetup(MyProc p)
{
DoSrcFile_r r;
r.SavepDt = pDt;
r.p = p;
pDt = (MyPtr)&r;
FileCounter = 0;
DoAllSrcFiles(DoASrcFileWithSetupProc);
pDt = r.SavepDt;
}
LOCALPROC DoAllSrcFilesSortWithSetup1(
char *s, int DepDir, long Flgm, tDoDependsForC depends)
{
if (0 == (Flgm & kCSrcFlgmNoSource))
if (0 == (Flgm & kCSrcFlgmSkip))
{
if (0 != (Flgm & kCSrcFlgmSortFirst)) {
DoASrcFileWithSetupProc0(s, DepDir, Flgm, depends);
} else {
++FileCounter;
}
}
}
LOCALPROC DoAllSrcFilesSortWithSetup2(
char *s, int DepDir, long Flgm, tDoDependsForC depends)
{
if (0 == (Flgm & kCSrcFlgmNoSource))
if (0 == (Flgm & kCSrcFlgmSkip))
{
if (0 == (Flgm & kCSrcFlgmSortFirst)) {
DoASrcFileWithSetupProc0(s, DepDir, Flgm, depends);
} else {
++FileCounter;
}
}
}
LOCALPROC DoAllSrcFilesSortWithSetup(MyProc p)
{
DoSrcFile_r r;
r.SavepDt = pDt;
r.p = p;
pDt = (MyPtr)&r;
FileCounter = 0;
DoAllSrcFiles(DoAllSrcFilesSortWithSetup1);
FileCounter = 0;
DoAllSrcFiles(DoAllSrcFilesSortWithSetup2);
pDt = r.SavepDt;
}
LOCALFUNC char * GetSrcFileFileXtns(void)
{
char *s;
blnr UseObjc = ((DoSrcFile_gd()->Flgm & kCSrcFlgmOjbc) != 0);
if (UseObjc) {
s = ".m";
} else {
s = ".c";
}
return s;
}
LOCALPROC WriteSrcFileFileName(void)
{
WriteCStrToDestFile(DoSrcFile_gd()->s);
WriteCStrToDestFile(GetSrcFileFileXtns());
}
LOCALPROC WriteSrcFileFilePath(void)
{
WriteFileInDirToDestFile0(Write_src_d_ToDestFile,
WriteSrcFileFileName);
}
LOCALPROC WriteSrcFileHeaderName(void)
{
WriteCStrToDestFile(DoSrcFile_gd()->s);
WriteCStrToDestFile(".h");
}
LOCALPROC WriteSrcFileHeaderPath(void)
{
WriteFileInDirToDestFile0(Write_src_d_ToDestFile,
WriteSrcFileHeaderName);
}
LOCALPROC WriteSrcFileObjName(void)
{
WriteCStrToDestFile(DoSrcFile_gd()->s);
switch (cur_ide) {
case gbk_ide_msv:
case gbk_ide_dmc:
case gbk_ide_plc:
WriteCStrToDestFile(".obj");
break;
default:
WriteCStrToDestFile(".o");
break;
}
}
LOCALPROC WriteSrcFileObjPath(void)
{
WriteFileInDirToDestFile0(Write_obj_d_ToDestFile,
WriteSrcFileObjName);
}
LOCALPROC DoAllExtraHeaders2WithSetupProc(
char *s, int DepDir, long Flgm, tDoDependsForC depends)
{
if (0 == (Flgm & kCSrcFlgmNoHeader))
if (0 != (Flgm & kCSrcFlgmNoSource))
if (0 == (Flgm & kCSrcFlgmSkip))
{
DoASrcFileWithSetupProc0(s, DepDir, Flgm, depends);
}
}
LOCALPROC DoAllExtraHeaders2WithSetup(MyProc p)
{
DoSrcFile_r r;
r.SavepDt = pDt;
r.p = p;
pDt = (MyPtr)&r;
FileCounter = 0;
DoAllSrcFiles(DoAllExtraHeaders2WithSetupProc);
pDt = r.SavepDt;
}
LOCALPROC WriteExtraHeaderFileName(void)
{
WriteCStrToDestFile(DoSrcFile_gd()->s);
WriteCStrToDestFile(".h");
}
LOCALPROC WriteExtraHeaderFilePath(void)
{
WriteFileInDirToDestFile0(
((kDepDirCnfg == DoSrcFile_gd()->DepDir)
? Write_cfg_d_ToDestFile
: Write_src_d_ToDestFile),
WriteExtraHeaderFileName);
}
LOCALVAR unsigned int DocTypeCounter;
struct DoDocType_r
{
MyPtr SavepDt;
char *ShortName;
char *MacType;
char *LongName;
tWriteExtensionList WriteExtensionList;
MyProc p;
};
typedef struct DoDocType_r DoDocType_r;
#define DoDocType_gd() ((DoDocType_r *)(pDt))
LOCALPROC DoAllDocTypesWithSetupProc(char *ShortName,
char *MacType,
char *LongName,
tWriteExtensionList WriteExtensionList)
{
DoDocType_gd()->ShortName = ShortName;
DoDocType_gd()->MacType = MacType;
DoDocType_gd()->LongName = LongName;
DoDocType_gd()->WriteExtensionList = WriteExtensionList;
DoDocType_gd()->p();
++DocTypeCounter;
}
LOCALPROC DoAppAndAllDocTypes0(tWriteOneDocType p)
{
p("APP", "APPL", "Application", NULL);
DoAllDocTypes(p);
}
LOCALPROC DoAppAndAllDocTypes(tWriteOneDocType p)
{
p("APP", "APPL", "Application", NULL);
if (WantIconMaster) {
DoAllDocTypes(p);
}
}
LOCALPROC DoAllDocTypesWithSetup(MyProc p)
{
DoDocType_r r;
r.SavepDt = pDt;
r.p = p;
pDt = (MyPtr)&r;
DocTypeCounter = 0;
DoAppAndAllDocTypes(DoAllDocTypesWithSetupProc);
pDt = r.SavepDt;
}
LOCALPROC WriteDocTypeIconShortName(void)
{
WriteCStrToDestFile(DoDocType_gd()->ShortName);
}
LOCALPROC WriteDocTypeIconFileName(void)
{
WriteCStrToDestFile("ICON");
WriteDocTypeIconShortName();
switch (gbo_targfam) {
case gbk_targfam_cmac:
WriteCStrToDestFile("M.r");
break;
case gbk_targfam_mach:
case gbk_targfam_carb:
WriteCStrToDestFile("O.icns");
break;
case gbk_targfam_mswn:
case gbk_targfam_wnce:
WriteCStrToDestFile("W.ico");
break;
}
}
LOCALPROC WriteDocTypeIconFilePath(void)
{
WriteFileInDirToDestFile0(Write_src_d_ToDestFile,
WriteDocTypeIconFileName);
}
LOCALPROC WriteDocTypeIconMacType(void)
{
WriteCStrToDestFile(DoDocType_gd()->MacType);
}
LOCALPROC WriteDocTypeCopyMachoFile(void)
{
WriteCopyFile(WriteDocTypeIconFilePath,
Write_tmachores_d_ToDestFile);
}
typedef void (*tWriteOneFrameWorkType)(char *s);
static void DoAllFrameWorks(tWriteOneFrameWorkType p)
{
if (gbk_apifam_cco == gbo_apifam) {
p("AppKit");
p("AudioUnit");
#if UseOpenGLinOSX
p("OpenGL");
#endif
} else {
p("Carbon");
#if UseOpenGLinOSX
p("OpenGL");
p("AGL");
#endif
}
}
struct DoFrameWork_r
{
MyPtr SavepDt;
char *s;
MyProc p;
};
typedef struct DoFrameWork_r DoFrameWork_r;
#define DoFrameWork_gd() ((DoFrameWork_r *)(pDt))
LOCALPROC DoAllFrameWorksWithSetupProc(char *s)
{
DoFrameWork_gd()->s = s;
DoFrameWork_gd()->p();
++FileCounter;
}
LOCALPROC DoAllFrameWorksWithSetup(MyProc p)
{
DoFrameWork_r r;
r.SavepDt = pDt;
r.p = p;
pDt = (MyPtr)&r;
FileCounter = 0;
DoAllFrameWorks(DoAllFrameWorksWithSetupProc);
pDt = r.SavepDt;
}
LOCALPROC WriteFileToCFilesList(MyProc p)
{
WriteBgnDestFileLn();
p();
WriteEndDestFileLn();
}
LOCALPROC DoSrcExtraHeaderFile(void)
{
WriteFileToCFilesList(WriteExtraHeaderFilePath);
}
LOCALPROC DoSrcFileAddToList(void)
{
WriteFileToCFilesList(WriteSrcFileHeaderPath);
WriteFileToCFilesList(WriteSrcFileFilePath);
}
LOCALPROC WriteCFilesListContents(void)
{
DoAllExtraHeaders2WithSetup(DoSrcExtraHeaderFile);
DoAllSrcFilesWithSetup(DoSrcFileAddToList);
}
LOCALPROC WriteCFilesList(void)
{
/* list of c files */
WriteADstFile1("my_project_d",
"c_files", "", "list of c files",
WriteCFilesListContents);
}
LOCALPROC Write_tmachoShell(void)
{
WriteRmDir(WriteAppNamePath);
WriteRmDir(Write_tmachobun_d_ToDestFile);
WriteMkDir(Write_tmachobun_d_ToDestFile);
WriteMkDir(Write_tmachocontents_d_ToDestFile);
WriteMkDir(Write_tmachomac_d_ToDestFile);
WriteMkDir(Write_tmachores_d_ToDestFile);
WriteMkDir(Write_tmacholang_d_ToDestFile);
DoAllDocTypesWithSetup(WriteDocTypeCopyMachoFile);
WriteCopyFile(WriteInfoPlistFilePath,
Write_tmachocontents_d_ToDestFile);
WriteEchoToNewFile(Write_tmachoLangDummyContents,
Write_tmachoLangDummyPath, trueblnr);
WriteEchoToNewFile(Write_tmachoPkgInfoContents,
Write_tmachoPkgInfoPath, falseblnr);
WriteMoveDir(Write_tmachobun_d_ToDestFile, WriteAppNamePath);
}
LOCALPROC Write_tmachoShellDeps(void)
{
WriteMakeDependFile(Write_srcAppIconPath);
}
LOCALPROC WritepDtSrcPath(void)
{
WriteFileInDirToDestFile0(Write_src_d_ToDestFile, WritepDtString);
}
LOCALPROC WritepDtCfgPath(void)
{
WriteFileInDirToDestFile0(Write_cfg_d_ToDestFile, WritepDtString);
}
LOCALPROC DoSrcDependsMakeCompile(int DepDir, char *s)
{
MyPtr SavepDt = pDt;
pDt = (MyPtr)s;
WriteMakeDependFile((kDepDirCnfg == DepDir)
? WritepDtCfgPath
: WritepDtSrcPath);
pDt = SavepDt;
}
LOCALPROC DoSrcFileMakeCompileDeps(void)
{
WriteMakeDependFile(WriteSrcFileFilePath);
if (DoSrcFile_gd()->depends != nullpr) {
DoSrcFile_gd()->depends(DoSrcDependsMakeCompile);
}
WriteMakeDependFile(WriteCNFGGLOBPath);
}
LOCALPROC DoSrcFileMakeCompileBody(void)
{
WriteCompileC(WriteSrcFileFilePath, WriteSrcFileObjPath,
(DoSrcFile_gd()->Flgm & kCSrcFlgmUseAPI) != 0);
}
LOCALPROC DoSrcFileMakeCompile(void)
{
WriteMakeRule(WriteSrcFileObjPath,
DoSrcFileMakeCompileDeps,
DoSrcFileMakeCompileBody);
}
LOCALPROC DoSrcFileStandardMakeObjects(void)
{
WriteBgnDestFileLn();
WriteSrcFileObjPath();
WriteSpaceToDestFile();
WriteBackSlashToDestFile();
WriteEndDestFileLn();
}
LOCALPROC DoAllSrcFilesStandardMakeObjects(void)
{
DoAllSrcFilesSortWithSetup(DoSrcFileStandardMakeObjects);
}
LOCALPROC DoSrcFileStandardEraseFile(void)
{
WriteRmFile(WriteSrcFileObjPath);
}
LOCALPROC DoAllSrcFilesStandardErase(void)
{
DoAllSrcFilesWithSetup(DoSrcFileStandardEraseFile);
}