show how to handle timestamps
authorDon Armstrong <don@donarmstrong.com>
Wed, 5 Aug 2015 18:20:32 +0000 (11:20 -0700)
committerDon Armstrong <don@donarmstrong.com>
Wed, 5 Aug 2015 18:20:32 +0000 (11:20 -0700)
using_make_for_science.Rnw

index 4e0ae03..29df376 100644 (file)
@@ -367,18 +367,13 @@ $(SRX)_genes.fpkm_tracking: $(SRX)_star.bam $(BOWTIE_INDEX_DIR)$(GTF)
 
 \begin{frame}[fragile]{Run it on biocluster}
   \begin{minted}{shell}
-for a in SRX*/Makefile; do 
-   (cd $(dirname $a); 
-    MAKE_TARGET=call qsub -q default \
-      -v MAKE_TARGET -S /bin/bash \
-      -d "$(pwd)" -l "nodes=1:ppn=8,mem=70G" \
-      ~donarm/uiuc_igb_scripts/run_make
-    );
-done;
-\end{minted} %$
+~donarm/uiuc_igb_scripts/dqsub --mem 70G \
+   --ppn 8 make call;
+\end{minted}
 \begin{itemize}
-\item Use qsub and some shell scripting to run everything
-\item Uses a special script which calls make with a specific target
+\item dqsub is my own qsub wrapper which avoids me having to write
+  little scripts for everything
+\item \url{http://git.donarmstrong.com/?p=uiuc_igb_scripts.git;a=blob;f=dqsub}
 \end{itemize}
 \end{frame}
 
@@ -394,6 +389,23 @@ done;
 \subsection{Timestamps}
 
 \begin{frame}{Dealing with timestamps}
+  \begin{itemize}
+  \item Make builds things on the basis of timestamps
+  \item But what if the contents haven't changed and it's expensive to
+    rebuild?
+  \item Use md5sum!
+  \end{itemize}
+\begin{minted}[showtabs,breaklines]{make}
+TARGET: PREREQ1 PREREQ1
+       if [ -e $@.target.md5sum ] && [ -e $@ ] && \
+       md5sum --status --check $@.target.md5sum; \
+    then \
+        touch $@; \
+       else \
+           RECIPE FOR $@; \
+               md5sum $^ > $@.target.md5sum; \
+       fi;
+\end{minted}
 \end{frame}
 
 \subsection{Complicated Workflows}