Add more aliases
[openmx:openmx.git] / Makefile
1 REXEC = R
2 RCOMMAND = CMD
3 RBUILD = build
4 RINSTALL = INSTALL
5 BUILDARGS = --dsym  # need for MacOS debug symbols
6 RCHECK = check
7 RPDF = Rd2pdf
8 BUILDPRE = 999.0.0
9 BUILDNO = $(shell ./inst/tools/findBuildNum.sh)
10 TARGET = OpenMx_$(BUILDPRE)-$(BUILDNO).tar.gz 
11 PDFFILE = $(RBUILD)/OpenMx.pdf
12 DOCTESTGEN = inst/tools/docTestGenerator.sh
13 DOCTESTFILE = inst/tools/testDocs.R
14 ifdef CPUS
15    # snowfall
16    TESTFILE = inst/tools/parallelTestModels.R
17 else
18    TESTFILE = inst/tools/testModels.R
19 endif
20 NIGHTLYPPMLFILE = inst/tools/testNightlyPPML.R
21 RPROFTESTFILE = inst/tools/rprofTestModels.R
22 FAILTESTFILE = inst/tools/failTestModels.R
23 MEMORYTESTFILE = inst/tools/memoryTestModels.sh
24
25 INSTALLMAKEFLAGS=""
26 #INSTALLMAKEFLAGS="-j 8"   #much faster compiles
27
28 # subdirectories
29 RSOURCE = R
30 RDOCUMENTS = man
31 RDATA = data
32 ROXDOC = man/genericFitDependencies.Rd man/imxAddDependency.Rd man/MxAlgebraFunction.Rd \
33         man/omxCheckCloseEnough.Rd \
34         man/mxExpectationBA81.Rd man/imxPPML.Rd man/imxPPML.Test.Battery.Rd \
35         man/imxCheckVariables.Rd \
36         man/imxCheckMatrices.Rd \
37         man/imxCheckVariables.Rd \
38         man/imxConstraintRelations.Rd \
39         man/imxConvertIdentifier.Rd \
40         man/imxConvertLabel.Rd \
41         man/imxConvertSubstitution.Rd \
42         man/imxExtractNames.Rd \
43         man/imxExtractReferences.Rd \
44         man/imxGenerateNamespace.Rd \
45         man/imxIdentifier.Rd \
46         man/imxIsDefinitionVariable.Rd \
47         man/imxLocateIndex.Rd \
48         man/imxLocateLabel.Rd \
49         man/imxPreprocessModel.Rd \
50         man/imxReverseIdentifier.Rd \
51         man/imxSeparatorChar.Rd \
52         man/imxVerifyName.Rd \
53         man/imxVerifyReference.Rd \
54         man/imxCheckMatrices.Rd \
55         man/imxCheckVariables.Rd \
56         man/imxConstraintRelations.Rd \
57         man/imxConvertIdentifier.Rd \
58         man/imxConvertLabel.Rd \
59         man/imxConvertSubstitution.Rd \
60         man/imxCreateMatrix.Rd \
61         man/imxDataTypes.Rd \
62         man/imxDeparse.Rd \
63         man/imxDependentModels.Rd \
64         man/imxDiff.Rd \
65         man/imxDmvnorm.Rd \
66         man/imxEvalByName.Rd \
67         man/imxExtractMethod.Rd \
68         man/imxExtractNames.Rd \
69         man/imxExtractReferences.Rd \
70         man/imxFilterDefinitionVariables.Rd \
71         man/imxFlattenModel.Rd \
72         man/imxFreezeModel.Rd \
73         man/imxGenSwift.Rd \
74         man/imxGenerateLabels.Rd \
75         man/imxGenerateNamespace.Rd \
76         man/imxGenericModelBuilder.Rd \
77         man/imxHasNPSOL.Rd \
78         man/imxIdentifier.Rd \
79         man/imxIndependentModels.Rd \
80         man/imxInitModel.Rd \
81         man/imxIsDefinitionVariable.Rd \
82         man/imxIsPath.Rd \
83         man/imxLocateFunction.Rd \
84         man/imxLocateIndex.Rd \
85         man/imxLocateLabel.Rd \
86         man/imxLookupSymbolTable.Rd \
87         man/imxModelBuilder.Rd \
88         man/imxModelTypes.Rd \
89         man/imxMpiWrap.Rd \
90         man/imxOriginalMx.Rd \
91         man/imxPPML.Rd \
92         man/imxPPML.Test.Battery.Rd \
93         man/imxPreprocessModel.Rd \
94         man/imxReplaceMethod.Rd \
95         man/imxReplaceModels.Rd \
96         man/imxReservedNames.Rd \
97         man/imxReverseIdentifier.Rd \
98         man/imxSameType.Rd \
99         man/imxSeparatorChar.Rd \
100         man/imxSfClient.Rd \
101         man/imxSimpleRAMPredicate.Rd \
102         man/imxSquareMatrix.Rd \
103         man/imxSymmetricMatrix.Rd \
104         man/imxTypeName.Rd \
105         man/imxVerifyMatrix.Rd \
106         man/imxVerifyModel.Rd \
107         man/imxVerifyName.Rd \
108         man/imxVerifyReference.Rd \
109         man/MxFlatModel.Rd \
110         man/MxLISRELModel.Rd \
111         man/MxRAMModel.Rd \
112         man/MxCharOrList-class.Rd \
113         man/MxCharOrNumber-class.Rd \
114         man/MxListOrNull-class.Rd \
115         man/MxOptionalChar-class.Rd \
116         man/MxOptionalCharOrNumber-class.Rd \
117         man/MxOptionalLogical-class.Rd \
118         man/MxOptionalMatrix-class.Rd
119
120 # file types
121 RFILES = $(wildcard R/*.R)
122
123 help:
124         @echo "Please use \`make <target>' where <target> is one of"
125         @echo ""        
126         @echo "BUILDS"
127         @echo ""
128         @echo "  build         create an OpenMx binary for unix systems (no cross-compilation)"
129         @echo "  build32       create an OpenMx binary for i386 systems"
130         @echo "  build64       create an OpenMx binary for x86_64 systems"
131         @echo "  buildppc      create an OpenMx binary for ppc systems"
132         @echo "  srcbuild      create an OpenMx source release (alias for 'internal-build')"
133         @echo "  winbuild      create an OpenMx binary on windows systems (no cross-compilation)"
134         @echo "  winbuild-biarch  create an OpenMx binary for [32|64] bit windows systems"
135         @echo "  cran-check    build OpenMx without NPSOL and run CRAN check"
136         @echo "  cran-build    build OpenMx without NPSOL"
137         @echo "  cran-winbuild build OpenMx without NPSOL and build a binary package"
138         @echo ""                
139         @echo "INSTALL"
140         @echo ""        
141         @echo "  install       build and install OpenMx with NPSOL"
142         @echo "  cran-install  build and install OpenMx without NPSOL"
143         @echo ""
144         @echo "DOCUMENTATION"
145         @echo ""        
146         @echo "  pdf           create a pdf file (in build) of the OpenMx R documentation"
147         @echo "  html          create Sphinx documentation (in docs/build/html) in html format"
148         @echo ""
149         @echo "TESTING"
150         @echo ""        
151         @echo "  test          run the test suite"
152         @echo "  torture       run the test suite with gctorture(TRUE)"
153         @echo "  check         run the R package checking system on the OpenMx package"         
154         @echo "  nightly       run the nightly test suite"                      
155         @echo "  nightlyPPML   run the nightly test suite with PPML"                    
156         @echo "  testdocs      test the examples in the Sphinx documentation"   
157         @echo "  failtest      run the failing test suite"
158         @echo "  memorytest    run the test suite under the Valgrind memory debugger"
159         @echo "  rproftest     run the test suite under the Rprof R profiler"
160         @echo ""
161         @echo "CLEANING"
162         @echo ""        
163         @echo "  clean      remove all files from the build directory"
164         @echo "  veryclean  remove all files from the build directory and all *~ files"
165
166 r-libs-user-dir:
167         ./inst/tools/mk-r-libs-user-dir
168
169 internal-build: build/$(TARGET)
170
171 dev-doc:
172         ./util/rox
173
174 code-style:
175         @echo "Checking code style"
176         @if grep Rprintf src/*.cpp; then echo "*** Rprintf is not thread-safe. Use mxLog or mxLogBig."; exit 1; fi
177         @if [ `grep setFinalReturns src/*.cpp | wc -l` -gt 3 ]; then echo "*** setFinalReturns is deprecated. Use populateAttrFun or addOutput."; exit 1; fi
178
179 build/$(TARGET): $(RFILES) src/omxSymbolTable.h src/omxSymbolTable.cpp code-style
180         rm -f inst/no-npsol
181         cp DESCRIPTION DESCRIPTION.bak
182         sed '/Version:/d' DESCRIPTION.bak > DESCRIPTION
183         echo "Version: "$(BUILDPRE)"-"$(BUILDNO) >> DESCRIPTION 
184         echo 'NPSOL_DIR= "..\inst"' > src/Makevars.win
185         echo 'NPSOL=-lnpsol$$(WIN) -L$$(NPSOL_DIR)' >> src/Makevars.win
186         echo 'NPSOL_LIBS=$$(NPSOL)' >> src/Makevars.win
187         cat src/Makevars.win.in >> src/Makevars.win
188         echo '#define HAS_NPSOL 1' > src/npsolswitch.h
189         cp .Rbuildignore-npsol .Rbuildignore
190         mkdir -p build
191         cd $(RBUILD); $(REXEC) $(RCOMMAND) build ..
192         mv DESCRIPTION.bak DESCRIPTION
193         rm -f $(ROXDOC)
194
195 cran: $(RFILES) src/omxSymbolTable.h src/omxSymbolTable.cpp clean code-style
196         touch inst/no-npsol
197         cp DESCRIPTION DESCRIPTION.bak
198         sed '/Version:/d' DESCRIPTION.bak > DESCRIPTION
199         echo "Version: "$(BUILDPRE)"-"$(BUILDNO) >> DESCRIPTION 
200         echo '#define HAS_NPSOL 0' > src/npsolswitch.h
201         echo 'NPSOL_LIBS=' > src/Makevars.win
202         cat src/Makevars.win.in >> src/Makevars.win
203         cp .Rbuildignore-cran .Rbuildignore
204         ./util/rox
205         mkdir -p build
206         cd $(RBUILD); $(REXEC) $(RCOMMAND) build ..
207         mv DESCRIPTION.bak DESCRIPTION
208
209 cran-build: cran
210         rm -f $(ROXDOC)
211         ls -lh $(RBUILD)/OpenMx_*.tar.gz
212
213 cran-winbuild: cran
214         rm -f $(ROXDOC)
215         cd $(RBUILD) && R CMD INSTALL --build OpenMx_*.tar.gz
216
217 cran-check: cran
218         cd $(RBUILD) && R CMD check OpenMx_*.tar.gz
219         rm -f $(ROXDOC)
220
221 pdf:
222         rm -rf $(PDFFILE); $(REXEC) $(RCOMMAND) $(RPDF) --title="OpenMx Reference Manual" --output=$(PDFFILE) .
223         cd docs; make latex; cd build/latex; make all-pdf
224
225 src/omxSymbolTable.h: data/omxSymbolTable.tab inst/tools/genSymbolTableHeader.R
226         $(REXEC) --slave --vanilla -f inst/tools/genSymbolTableHeader.R  > src/omxSymbolTable.h
227
228 src/omxSymbolTable.cpp: data/omxSymbolTable.tab inst/tools/genSymbolTableSource.R
229         $(REXEC) --slave --vanilla -f inst/tools/genSymbolTableSource.R  > src/omxSymbolTable.cpp
230
231 html: internal-build
232         cd $(RBUILD); $(REXEC) $(RCOMMAND) $(RINSTALL) --html --build $(TARGET)
233         rm -f build/$(TARGET)
234         cd $(RBUILD); tar -zxf *gz
235         mv build/OpenMx/html build/html
236         mv build/OpenMx/demo build/demo
237         cp build/html/* docs/source/static/Rdoc
238         cp build/demo/* docs/source/static/demo
239         cd docs; make clean; make html
240
241 common-build: clean internal-build
242         cd $(RBUILD); $(REXEC) $(RCOMMAND) $(RINSTALL) $(BUILDARGS) --build $(TARGET)
243
244 common-build32: clean internal-build
245         cd $(RBUILD); $(REXEC) --arch i386 $(RCOMMAND) $(RINSTALL) $(BUILDARGS) --build $(TARGET)
246
247 common-build64: clean internal-build
248         cd $(RBUILD); $(REXEC) --arch x86_64 $(RCOMMAND) $(RINSTALL) $(BUILDARGS) --build $(TARGET)
249
250 common-buildppc: clean internal-build
251         cd $(RBUILD); $(REXEC) --arch ppc $(RCOMMAND) $(RINSTALL) $(BUILDARGS) --build $(TARGET)
252
253 post-build:
254         rm -f $(RBUILD)/$(TARGET)
255         cd $(RBUILD); gunzip *;\
256         tar --delete --file=`ls` OpenMx/npsol;\
257         gzip *.tar
258
259
260 build32: common-build32 post-build
261
262 build64: common-build64 post-build
263
264 buildppc: common-buildppc post-build
265
266 build: common-build post-build
267
268 srcbuild: clean internal-build
269
270 winbuild: common-build
271
272 winbuild-biarch:
273         cd $(RBUILD); $(REXEC) $(RCOMMAND) $(RINSTALL) --force-biarch --build $(TARGET)
274
275 install: clean internal-build
276         cd $(RBUILD); MAKEFLAGS=$(INSTALLMAKEFLAGS) $(REXEC) $(RCOMMAND) $(RINSTALL) $(BUILDARGS) $(TARGET) 
277
278 cran-install: clean cran-build
279         cd $(RBUILD); MAKEFLAGS=$(INSTALLMAKEFLAGS) $(REXEC) $(RCOMMAND) $(RINSTALL) $(BUILDARGS) $(TARGET) 
280
281 check: internal-build
282         cd $(RBUILD); $(REXEC) $(RCOMMAND) $(RCHECK) $(TARGET)
283
284 rproftest:
285         $(REXEC) --vanilla --slave < $(RPROFTESTFILE)
286
287 testdocs:
288         $(DOCTESTGEN)
289         $(REXEC) --vanilla --slave < $(DOCTESTFILE)
290
291 test:
292         $(REXEC) --vanilla --slave -f $(TESTFILE)
293
294 test-lisrel:
295         $(REXEC) --vanilla --slave -f $(TESTFILE) --args lisrel
296
297 test-csolnp:
298         IMX_OPT_ENGINE=CSOLNP $(REXEC) --vanilla --slave -f $(TESTFILE) --args csolnp
299
300 torture:
301         $(REXEC) -d "gdb --batch --command util/gdb-where" --vanilla --slave -f $(TESTFILE) --args gctorture
302
303 nightly:
304         $(REXEC) --vanilla --slave -f $(TESTFILE) --args nightly
305
306 nightlyPPML:
307         $(REXEC) --vanilla --slave < $(NIGHTLYPPMLFILE) 
308
309 failtest:
310         $(REXEC) --vanilla --slave < $(FAILTESTFILE)
311
312 memorytest:
313         $(MEMORYTESTFILE)
314
315 clean:
316         rm -rf $(RBUILD)/*
317
318 veryclean: clean
319         find . -name "*~" -exec rm -rf '{}' \;
320         rm -f $(ROXDOC)