* NormalLintTarget (srclist)
* LintTarget ()
* LinkSourceFile (src,dir)
+ * CopySourceFile (src,dir)
* LinkFile (tofile,fromfile)
* MakeSubincludesForBuild (step,dir,srclist)
* LangNamedTargetSubdirs (lang,name,dirs,verb,flags,subname)
* MakeLintSubdirs (dirs,target,subtarget)
* LintSubdirs (dirs)
* MakeLintLibSubdirs (dirs)
+ * MakeMakeOneSubdirs ()
* MakeMakeSubdirs (dirs,target)
* MakefileSubdirs (dirs)
* CppScriptTarget (dst,src,defs,deplist)
* CppSourceFile (dst,src,defs,deplist)
* MakeDirectories (step,dirs)
* AllTarget (depends)
+ * MakeImakeDir ()
+ * DoUDB_SCRIPT3 (target, file, script, build)
+ * DoUDB_SCRIPT4 (target, file, script, build)
*
*
* The following are in specific <os>Lib.rules:
#define NullParameter
+/* stringify macro */
+#ifndef STR
+# if defined(__llvm__)
+# define STR2(x) #x
+# else
+# define STR2(x) "x"
+# endif
+#define STR(x) STR2(x)
+#endif
+
/* if [ -d ] or [ ! -d ] causes make to fail, define this as - */
#ifndef DirFailPrefix
#define DirFailPrefix
* Concat - concatenates two strings.
*/
#ifndef Concat
-#if (__STDC__ && !defined(UnixCpp)) || defined(AnsiCpp)
+#if (__STDC__ && !defined(UnixCpp)) || defined(AnsiCpp) || defined(__llvm__)
#define Concat(a,b)a##b
#else
#define Concat(a,b)a/**/b
* Concat3 - concatenates three strings.
*/
#ifndef Concat3
-#if (__STDC__ && !defined(UnixCpp)) || defined(AnsiCpp)
+#if (__STDC__ && !defined(UnixCpp)) || defined(AnsiCpp) || defined(__llvm__)
#define Concat3(a,b,c)a##b##c
#else
#define Concat3(a,b,c)a/**/b/**/c
* Concat4 - concatenates four strings.
*/
#ifndef Concat4
-#if (__STDC__ && !defined(UnixCpp)) || defined(AnsiCpp)
+#if (__STDC__ && !defined(UnixCpp)) || defined(AnsiCpp) || defined(__llvm__)
#define Concat4(a,b,c,d)a##b##c##d
#else
#define Concat4(a,b,c,d)a/**/b/**/c/**/d
* exists to avoid problems with some preprocessors
*/
#ifndef _XUseCat
-# if (__STDC__ && !defined(UnixCpp)) || defined(AnsiCpp)
+# if (__STDC__ && !defined(UnixCpp)) || defined(AnsiCpp) || defined(__llvm__)
# if defined(UseInstalled) || UseInstalledX11
# define _XUseCat(a,b,c) a##c
# else
else \ @@\
echo "mkdir dir"; mkdir dir; \ @@\
for i in $(SUBDIRS); do \ @@\
- j=`echo "$$i" | sed -e 's;[^/]\{1,\};..;g'`; \ @@\
+ j=`echo "$$i" | $(SED) -e 's;[^/]\{1,\};..;g'`; \ @@\
$(MKDIRHIER) "dir/`dirname $$i`"; \ @@\
echo $(LN) "$$j/$$i/dir" "dir/$$i"; \ @@\
$(LN) "$$j/$$i/dir" "dir/$$i"; \ @@\
#endif
+/*
+ * CopySourceFile - snag source file from some other directory
+ */
+#ifndef CopySourceFile
+#define CopySourceFile(src,dir) @@\
+src: dir/src @@\
+ RemoveFile($@) @@\
+ $(CP) $? $@ @@\
+ @@\
+NoConfigRec(src) @@\
+ @@\
+includes:: src @@\
+ @@\
+depend:: src @@\
+ @@\
+clean:: @@\
+ RemoveFile(src)
+#endif
+
+
/*
* LinkFile - link a file
*/
#ifndef MakeSubincludesForBuild
#define MakeSubincludesForBuild(step,dir,srclist) @@\
step:: dir srclist @@\
- @-(list=`echo srclist | sed -e 's/[^ ]*\///g'`; \ @@\
+ @-(list=`echo srclist | $(SED) -e 's/[^ ]*\///g'`; \ @@\
set -x; cd dir; RemoveFiles($$list)) @@\
@for i in srclist; do \ @@\
(set -x; cd dir; $(LN) ../$$i .); \ @@\
@@\
clean:: @@\
@-(if [ -d dir ]; then \ @@\
- list=`echo srclist | sed -e 's/[^ ]*\///g'`; \ @@\
+ list=`echo srclist | $(SED) -e 's/[^ ]*\///g'`; \ @@\
set -x; cd dir; RemoveFile($$list); else exit 0; fi)
#endif
#endif /* MakeLintLibSubdirs */
+/*
+ * MakeMakeOneSubdirs - generate rules to recreate $(ONESUBDIR)/Makefile
+ * as part of the specified step in the build. This separate, explicit target
+ * exists so that clearmake will know what its goal is and do wink-in.
+ */
+#ifndef MakeMakeOneSubdirs
+#define MakeMakeOneSubdirs() @@\
+$(ONESUBDIR)/Makefile: @@\
+ @MakeFlagsToShellFlags(n,executeit="no"); \ @@\
+ cd $(ONESUBDIR); \ @@\
+ if [ "$$executeit" != "no" ]; then \ @@\
+ ImakeSubCmdHelper -DTOPDIR=$(IMAKETOP) -DCURDIR=$(ONECURDIR)$(ONESUBDIR); \ @@\
+ fi;
+#endif /* MakeMakeOneSubdirs */
+
+
/*
* MakeMakeSubdirs - generate rules to recursively recreate Makefiles as part
* of the specified step in the build. If $(TOP) is set to an absolute path,
* do not prepend the ../ prefix. This makes running things outside of the
* source tree much easier.
- * $(ONESUBDIR)/Makefile exists as a separate, explicit target so that
- * clearmake will know what its goal is and do wink-in.
*/
#ifndef MakeMakeSubdirs
#define MakeMakeSubdirs(dirs,target) @@\
-$(ONESUBDIR)/Makefile: @@\
- @MakeFlagsToShellFlags(n,executeit="no"); \ @@\
- cd $(ONESUBDIR); \ @@\
- if [ "$$executeit" != "no" ]; then \ @@\
- ImakeSubCmdHelper -DTOPDIR=$(IMAKETOP) -DCURDIR=$(ONECURDIR)$(ONESUBDIR); \ @@\
- fi; @@\
- @@\
target:: @@\
-@MakeFlagsToShellFlags(ik,set +e); \ @@\
MakeFlagsToShellFlags(n,executeit="no"); \ @@\
*) curdir=$(CURRENT_DIR)/ ;; \ @@\
esac; \ @@\
echo "making Makefiles in $$curdir$$i..."; \ @@\
- itmp=`echo $$i | sed -e 's;^\./;;g' -e 's;/\./;/;g'`; \ @@\
+ itmp=`echo $$i | $(SED) -e 's;^\./;;g' -e 's;/\./;/;g'`; \ @@\
curtmp="$(CURRENT_DIR)" \ @@\
toptmp=""; \ @@\
case "$$itmp" in \ @@\
do \ @@\
toptmp="/`basename $$curtmp`$$toptmp"; \ @@\
curtmp="`dirname $$curtmp`"; \ @@\
- itmp="`echo $$itmp | sed 's;\.\./;;'`"; \ @@\
+ itmp="`echo $$itmp | $(SED) 's;\.\./;;'`"; \ @@\
done \ @@\
;; \ @@\
esac; \ @@\
*/
#ifndef MakefileSubdirs
#define MakefileSubdirs(dirs) @@\
+MakeMakeOneSubdirs() @@\
MakeMakeSubdirs(dirs,Makefiles)
#endif /* MakefileSubdirs */
* Also delete line numbers from the cpp output (-P is not portable, I guess).
*/
#ifndef CppSedMagic
-#define CppSedMagic sed -e '/^# *[0-9][0-9]* *.*$$/d' -e '/^XCOMM$$/s//#/' -e '/^XCOMM[^a-zA-Z0-9_]/s/^XCOMM/#/'
+#define CppSedMagic $(SED) -e '/^#[line]* *[0-9][0-9]* *.*$$/d' -e '/^XCOMM$$/s//#/' -e '/^XCOMM[^a-zA-Z0-9_]/s/^XCOMM/#/'
#endif /* CppSedMagic */
#ifndef CppFileTarget
RemoveFile($@) @@\
ClearmakeOSName \
echo \: >$@ @@\
- sed '1d' src | $(CPP) CppNoLineInfoOption defs | CppSedMagic >>$@ @@\
+ $(SED) '1d' src | $(CPP) CppNoLineInfoOption defs | CppSedMagic >>$@ @@\
chmod a+x $@ @@\
@@\
clean:: @@\
includes:: dst @@\
@@\
depend:: dst
-#endif /* CppFileTarget */
+#endif /* CppSourceFile */
+
+
+/*
+ * SedFileTarget - generate rules to create a file by running the
+ * input through sed.
+ */
+#ifndef SedFileTarget
+#define SedFileTarget(dst,src,cmds) @@\
+dst:: src @@\
+ RemoveFile($@) @@\
+ $(SED) cmds src >$@ @@\
+ chmod a+x $@ @@\
+ @@\
+clean:: @@\
+ RemoveFiles(dst)
+#endif /* SedFileTarget */
+
+#ifndef SedSourceFile
+#define SedSourceFile(dst,src,cmds) @@\
+SedFileTarget(dst,src,cmds) @@\
+ @@\
+includes:: dst @@\
+ @@\
+depend:: dst
+#endif /* SedSourceFile */
+
/*
* MakeDirectories - generate rules to create a hierarchy of directories.
all:: depends
#endif /* AllTarget */
+
+/*
+ * MakeImakeDir - call make in imake directory.
+ */
+#ifndef MakeImakeDir
+#define MakeImakeDir() cd $(IMAKESRC) && \ @@\
+ if [ -f Makefile ]; then \ @@\
+ $(MAKE) $(MFLAGS) BOOTSTRAPCFLAGS="$(BOOTSTRAPCFLAGS)"; \ @@\
+ else \ @@\
+ $(MAKE) $(MFLAGS) -f Makefile.ini BOOTSTRAPCFLAGS="$(BOOTSTRAPCFLAGS)"; \ @@\
+ fi
+#endif /* MakeImakeDir */
+
+
+/*
+ * DoUDB_SCRIPT3 - macro for creation of udb scripts for installation
+ */
+#ifndef DoUDB_SCRIPT3
+#define DoUDB_SCRIPT3(target, file, script, build) @@\
+target:: $(DATABASE_DIR)/file.udb @@\
+ script -toLst -ReleaseStream $(PLATFORM) \ @@\
+ $(DATABASE_DIR)/file.udb > file.lst @@\
+ build file ../../..
+#endif
+
+
+/*
+ * DoUDB_SCRIPT4 - macro for creation of udb scripts for installation
+ */
+#ifndef DoUDB_SCRIPT4
+#define DoUDB_SCRIPT4(target, file, script, build) @@\
+target:: $(DATABASE_DIR)/file.udb @@\
+ script -toLst -ReleaseStream $(PLATFORM) \ @@\
+ $(DATABASE_DIR)/file.udb > file.lst @@\
+ build file ../../../..
+#endif
+
+
#ifdef DefineOldLibraryRules
#include <oldlib.rules>
#endif