From bdc95f23aa74d1ae82e6e6a07587bd1a8009f0c2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?S=C3=A9bastien=20Villemot?= <sebastien@dynare.org>
Date: Fri, 5 Apr 2019 16:53:59 +0200
Subject: [PATCH] Make MEX build system forward-compatible with Automake 2.0

We now use a symbolic link farm to make source file accessible from build
directories.

Closes #466
---
 .gitignore                                |   6 +
 mex/build/block_kalman_filter.am          |  12 +-
 mex/build/bytecode.am                     |  24 +--
 mex/build/dynare_simul_.am                |  10 +-
 mex/build/gensylv.am                      |  10 +-
 mex/build/k_order_perturbation.am         |  24 +--
 mex/build/kalman_steady_state.am          |   8 +-
 mex/build/kronecker.am                    |  10 +-
 mex/build/libdynare++.am                  | 201 +++++++++-------------
 mex/build/local_state_space_iterations.am |   8 +-
 mex/build/mjdgges.am                      |   8 +-
 mex/build/ms_sbvar.am                     | 110 +++++++-----
 mex/build/qmc_sequence.am                 |  12 +-
 13 files changed, 244 insertions(+), 199 deletions(-)

diff --git a/.gitignore b/.gitignore
index 8d31f229c2..b965d94c23 100644
--- a/.gitignore
+++ b/.gitignore
@@ -88,6 +88,12 @@ doc/internals/ltxpng
 /mex/matlab/
 /mex/octave/
 
+# Symbolic links created for building MEX files
+/mex/build/matlab/*/*.c
+/mex/build/matlab/*/*.cc
+/mex/build/octave/*/*.c
+/mex/build/octave/*/*.cc
+
 # Dynare++
 /dynare++/integ/src/quadrature-points.dSYM/
 /dynare++/src/dynare++.dSYM/
diff --git a/mex/build/block_kalman_filter.am b/mex/build/block_kalman_filter.am
index 0d0a6ef066..381d3a874d 100644
--- a/mex/build/block_kalman_filter.am
+++ b/mex/build/block_kalman_filter.am
@@ -1,3 +1,13 @@
 mex_PROGRAMS = block_kalman_filter
 
-nodist_block_kalman_filter_SOURCES = $(top_srcdir)/../../sources/block_kalman_filter/block_kalman_filter.cc
+TOPDIR = $(top_srcdir)/../../sources/block_kalman_filter
+
+block_kalman_filter_CPPFLAGS = $(AM_CPPFLAGS) -I$(TOPDIR)
+
+nodist_block_kalman_filter_SOURCES = block_kalman_filter.cc
+
+BUILT_SOURCES = $(nodist_block_kalman_filter_SOURCES)
+CLEANFILES = $(nodist_block_kalman_filter_SOURCES)
+
+%.cc: $(TOPDIR)/%.cc
+	$(LN_S) -f $< $@
diff --git a/mex/build/bytecode.am b/mex/build/bytecode.am
index 8720c316a3..117eef0c9b 100644
--- a/mex/build/bytecode.am
+++ b/mex/build/bytecode.am
@@ -1,18 +1,18 @@
 mex_PROGRAMS = bytecode
 
-bytecode_CPPFLAGS =  -Wno-maybe-uninitialized $(AM_CPPFLAGS) -I$(top_srcdir)/../../sources -I$(top_srcdir)/../../sources/bytecode -I$(top_srcdir)/../../../preprocessor/src
-
 TOPDIR = $(top_srcdir)/../../sources/bytecode
 
+bytecode_CPPFLAGS =  -Wno-maybe-uninitialized $(AM_CPPFLAGS) -I$(TOPDIR) -I$(top_srcdir)/../../../preprocessor/src
+
 nodist_bytecode_SOURCES = \
-	$(TOPDIR)/bytecode.cc \
-	$(TOPDIR)/Interpreter.cc \
-	$(TOPDIR)/Mem_Mngr.cc \
-	$(TOPDIR)/SparseMatrix.cc \
-	$(TOPDIR)/Evaluate.cc \
-	$(TOPDIR)/Interpreter.hh \
-	$(TOPDIR)/Mem_Mngr.hh \
-	$(TOPDIR)/SparseMatrix.hh \
-	$(TOPDIR)/Evaluate.hh \
-	$(TOPDIR)/ErrorHandling.hh
+	bytecode.cc \
+	Interpreter.cc \
+	Mem_Mngr.cc \
+	SparseMatrix.cc \
+	Evaluate.cc
+
+BUILT_SOURCES = $(nodist_bytecode_SOURCES)
+CLEANFILES = $(nodist_bytecode_SOURCES)
 
+%.cc: $(TOPDIR)/%.cc
+	$(LN_S) -f $< $@
diff --git a/mex/build/dynare_simul_.am b/mex/build/dynare_simul_.am
index 9de5473510..83173a180d 100644
--- a/mex/build/dynare_simul_.am
+++ b/mex/build/dynare_simul_.am
@@ -1,10 +1,16 @@
 mex_PROGRAMS = dynare_simul_
 
-dynare_simul__CPPFLAGS = $(AM_CPPFLAGS) -I$(top_srcdir)/../../../dynare++/sylv/cc -I$(top_srcdir)/../../../dynare++/tl/cc -I$(top_srcdir)/../../../dynare++/kord -I$(top_srcdir)/../../../dynare++/utils/cc -I$(top_srcdir)/../../sources $(CPPFLAGS_MATIO)
+dynare_simul__CPPFLAGS = $(AM_CPPFLAGS) -I$(top_srcdir)/../../../dynare++/sylv/cc -I$(top_srcdir)/../../../dynare++/tl/cc -I$(top_srcdir)/../../../dynare++/kord -I$(top_srcdir)/../../../dynare++/utils/cc $(CPPFLAGS_MATIO)
 
 dynare_simul__CXXFLAGS = $(AM_CXXFLAGS) $(THREAD_CXXFLAGS)
 
 dynare_simul__LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MATIO)
 dynare_simul__LDADD = ../libdynare++/libdynare++.a $(LIBADD_MATIO)
 
-nodist_dynare_simul__SOURCES = $(top_srcdir)/../../../dynare++/extern/matlab/dynare_simul.cc
+nodist_dynare_simul__SOURCES = dynare_simul.cc
+
+BUILT_SOURCES = $(nodist_dynare_simul__SOURCES)
+CLEANFILES = $(nodist_dynare_simul__SOURCES)
+
+%.cc: $(top_srcdir)/../../../dynare++/extern/matlab/%.cc
+	$(LN_S) -f $< $@
diff --git a/mex/build/gensylv.am b/mex/build/gensylv.am
index fc562fc519..34f2cd682f 100644
--- a/mex/build/gensylv.am
+++ b/mex/build/gensylv.am
@@ -1,7 +1,13 @@
 mex_PROGRAMS = gensylv
 
-gensylv_CPPFLAGS = $(AM_CPPFLAGS) -I$(top_srcdir)/../../../dynare++/sylv/cc -I$(top_srcdir)/../../../dynare++/utils/cc -I$(top_srcdir)/../../sources
+gensylv_CPPFLAGS = $(AM_CPPFLAGS) -I$(top_srcdir)/../../../dynare++/sylv/cc -I$(top_srcdir)/../../../dynare++/utils/cc
 
 gensylv_LDADD = ../libdynare++/libdynare++.a
 
-nodist_gensylv_SOURCES = $(top_srcdir)/../../../dynare++/sylv/matlab/gensylv.cc
+nodist_gensylv_SOURCES = gensylv.cc
+
+BUILT_SOURCES = $(nodist_gensylv_SOURCES)
+CLEANFILES = $(nodist_gensylv_SOURCES)
+
+%.cc: $(top_srcdir)/../../../dynare++/sylv/matlab/%.cc
+	$(LN_S) -f $< $@
diff --git a/mex/build/k_order_perturbation.am b/mex/build/k_order_perturbation.am
index e58d0ce438..5492a6e913 100644
--- a/mex/build/k_order_perturbation.am
+++ b/mex/build/k_order_perturbation.am
@@ -1,20 +1,22 @@
 mex_PROGRAMS = k_order_perturbation
 
-k_order_perturbation_CPPFLAGS = $(AM_CPPFLAGS) -I$(top_srcdir)/../../../dynare++/src -I$(top_srcdir)/../../../dynare++/kord -I$(top_srcdir)/../../../dynare++/tl/cc -I$(top_srcdir)/../../../dynare++/utils/cc -I$(top_srcdir)/../../../dynare++/sylv/cc -I$(top_srcdir)/../../../dynare++/integ/cc -I$(top_srcdir)/../../sources $(CPPFLAGS_MATIO)
+TOPDIR = $(top_srcdir)/../../sources/k_order_perturbation
+
+k_order_perturbation_CPPFLAGS = $(AM_CPPFLAGS) -I$(top_srcdir)/../../../dynare++/src -I$(top_srcdir)/../../../dynare++/kord -I$(top_srcdir)/../../../dynare++/tl/cc -I$(top_srcdir)/../../../dynare++/utils/cc -I$(top_srcdir)/../../../dynare++/sylv/cc -I$(top_srcdir)/../../../dynare++/integ/cc -I$(TOPDIR) $(CPPFLAGS_MATIO)
 
 k_order_perturbation_CXXFLAGS = $(AM_CXXFLAGS) $(THREAD_CXXFLAGS)
 
 k_order_perturbation_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_MATIO)
 k_order_perturbation_LDADD = ../libdynare++/libdynare++.a $(LIBADD_DLOPEN) $(LIBADD_MATIO)
 
-TOPDIR = $(top_srcdir)/../../sources/k_order_perturbation
-
 nodist_k_order_perturbation_SOURCES = \
-	$(TOPDIR)/k_order_perturbation.cc \
-	$(TOPDIR)/k_ord_dynare.cc \
-	$(TOPDIR)/k_ord_dynare.hh \
-	$(TOPDIR)/dynamic_dll.cc \
-	$(TOPDIR)/dynamic_dll.hh \
-	$(TOPDIR)/dynamic_abstract_class.hh \
-	$(TOPDIR)/dynamic_m.cc \
-	$(TOPDIR)/dynamic_m.hh
+	k_order_perturbation.cc \
+	k_ord_dynare.cc \
+	dynamic_dll.cc \
+	dynamic_m.cc
+
+BUILT_SOURCES = $(nodist_k_order_perturbation_SOURCES)
+CLEANFILES = $(nodist_k_order_perturbation_SOURCES)
+
+%.cc: $(TOPDIR)/%.cc
+	$(LN_S) -f $< $@
diff --git a/mex/build/kalman_steady_state.am b/mex/build/kalman_steady_state.am
index 0e037b17e5..21f03ecae8 100644
--- a/mex/build/kalman_steady_state.am
+++ b/mex/build/kalman_steady_state.am
@@ -3,4 +3,10 @@ mex_PROGRAMS = kalman_steady_state
 kalman_steady_state_LDADD = $(LIBADD_SLICOT)
 kalman_steady_state_LDFLAGS = $(AM_LDFLAGS) $(LDFLAGS_SLICOT)
 
-nodist_kalman_steady_state_SOURCES = $(top_srcdir)/../../sources/kalman_steady_state/kalman_steady_state.cc
+nodist_kalman_steady_state_SOURCES = kalman_steady_state.cc
+
+BUILT_SOURCES = $(nodist_kalman_steady_state_SOURCES)
+CLEANFILES = $(nodist_kalman_steady_state_SOURCES)
+
+%.cc: $(top_srcdir)/../../sources/kalman_steady_state/%.cc
+	$(LN_S) -f $< $@
diff --git a/mex/build/kronecker.am b/mex/build/kronecker.am
index dade98e38d..b570bf72a8 100644
--- a/mex/build/kronecker.am
+++ b/mex/build/kronecker.am
@@ -1,4 +1,10 @@
 mex_PROGRAMS = sparse_hessian_times_B_kronecker_C A_times_B_kronecker_C
 
-nodist_sparse_hessian_times_B_kronecker_C_SOURCES = $(top_srcdir)/../../sources/kronecker/sparse_hessian_times_B_kronecker_C.cc
-nodist_A_times_B_kronecker_C_SOURCES = $(top_srcdir)/../../sources/kronecker/A_times_B_kronecker_C.cc
+nodist_sparse_hessian_times_B_kronecker_C_SOURCES = sparse_hessian_times_B_kronecker_C.cc
+nodist_A_times_B_kronecker_C_SOURCES = A_times_B_kronecker_C.cc
+
+BUILT_SOURCES = $(nodist_sparse_hessian_times_B_kronecker_C_SOURCES) $(nodist_A_times_B_kronecker_C_SOURCES)
+CLEANFILES = $(nodist_sparse_hessian_times_B_kronecker_C_SOURCES) $(nodist_A_times_B_kronecker_C_SOURCES)
+
+%.cc: $(top_srcdir)/../../sources/kronecker/%.cc
+	$(LN_S) -f $< $@
diff --git a/mex/build/libdynare++.am b/mex/build/libdynare++.am
index 15a314cee5..4324003c91 100644
--- a/mex/build/libdynare++.am
+++ b/mex/build/libdynare++.am
@@ -1,137 +1,79 @@
 noinst_LIBRARIES = libdynare++.a
 
-libdynare___a_CPPFLAGS = $(AM_CPPFLAGS) -I$(top_srcdir)/../../../dynare++/src -I$(top_srcdir)/../../../dynare++/kord -I$(top_srcdir)/../../../dynare++/tl/cc -I$(top_srcdir)/../../../dynare++/utils/cc -I$(top_srcdir)/../../../dynare++/sylv/cc -I$(top_srcdir)/../../../dynare++/integ/cc -I$(top_srcdir)/../../sources $(CPPFLAGS_MATIO)
+TOPDIR = $(top_srcdir)/../../../dynare++
 
-libdynare___a_CXXFLAGS = $(AM_CXXFLAGS) $(THREAD_CXXFLAGS)
+libdynare___a_CPPFLAGS = $(AM_CPPFLAGS) -I$(TOPDIR)/src -I$(TOPDIR)/kord -I$(TOPDIR)/tl/cc -I$(TOPDIR)/utils/cc -I$(TOPDIR)/sylv/cc -I$(TOPDIR)/integ/cc $(CPPFLAGS_MATIO)
 
-TOPDIR = $(top_srcdir)/../../../dynare++
+libdynare___a_CXXFLAGS = $(AM_CXXFLAGS) $(THREAD_CXXFLAGS)
 
 KORD_SRCS = \
-	$(TOPDIR)/kord/approximation.cc \
-	$(TOPDIR)/kord/approximation.hh \
-	$(TOPDIR)/kord/decision_rule.cc \
-	$(TOPDIR)/kord/decision_rule.hh \
-	$(TOPDIR)/kord/dynamic_model.cc \
-	$(TOPDIR)/kord/dynamic_model.hh \
-	$(TOPDIR)/kord/faa_di_bruno.cc \
-	$(TOPDIR)/kord/faa_di_bruno.hh \
-	$(TOPDIR)/kord/first_order.cc \
-	$(TOPDIR)/kord/first_order.hh \
-	$(TOPDIR)/kord/global_check.cc \
-	$(TOPDIR)/kord/global_check.hh \
-	$(TOPDIR)/kord/kord_exception.hh \
-	$(TOPDIR)/kord/korder.cc \
-	$(TOPDIR)/kord/korder.hh \
-	$(TOPDIR)/kord/korder_stoch.cc \
-	$(TOPDIR)/kord/korder_stoch.hh \
-	$(TOPDIR)/kord/journal.cc \
-	$(TOPDIR)/kord/journal.hh \
-	$(TOPDIR)/kord/normal_conjugate.cc \
-	$(TOPDIR)/kord/normal_conjugate.hh \
-	$(TOPDIR)/kord/seed_generator.cc \
-	$(TOPDIR)/kord/seed_generator.hh
+	approximation.cc \
+	decision_rule.cc \
+	dynamic_model.cc \
+	faa_di_bruno.cc \
+	first_order.cc \
+	global_check.cc \
+	korder.cc \
+	korder_stoch.cc \
+	journal.cc \
+	normal_conjugate.cc \
+	seed_generator.cc
 
 SYLV_SRCS = \
-	$(TOPDIR)/sylv/cc/BlockDiagonal.cc \
-	$(TOPDIR)/sylv/cc/BlockDiagonal.hh \
-	$(TOPDIR)/sylv/cc/GeneralMatrix.cc \
-	$(TOPDIR)/sylv/cc/GeneralMatrix.hh \
-	$(TOPDIR)/sylv/cc/GeneralSylvester.cc \
-	$(TOPDIR)/sylv/cc/GeneralSylvester.hh \
-	$(TOPDIR)/sylv/cc/IterativeSylvester.cc \
-	$(TOPDIR)/sylv/cc/IterativeSylvester.hh \
-	$(TOPDIR)/sylv/cc/KronUtils.cc \
-	$(TOPDIR)/sylv/cc/KronUtils.hh \
-	$(TOPDIR)/sylv/cc/KronVector.cc \
-	$(TOPDIR)/sylv/cc/KronVector.hh \
-	$(TOPDIR)/sylv/cc/QuasiTriangular.cc \
-	$(TOPDIR)/sylv/cc/QuasiTriangular.hh \
-	$(TOPDIR)/sylv/cc/QuasiTriangularZero.cc \
-	$(TOPDIR)/sylv/cc/QuasiTriangularZero.hh \
-	$(TOPDIR)/sylv/cc/SchurDecomp.cc \
-	$(TOPDIR)/sylv/cc/SchurDecomp.hh \
-	$(TOPDIR)/sylv/cc/SchurDecompEig.cc \
-	$(TOPDIR)/sylv/cc/SchurDecompEig.hh \
-	$(TOPDIR)/sylv/cc/SimilarityDecomp.cc \
-	$(TOPDIR)/sylv/cc/SimilarityDecomp.hh \
-	$(TOPDIR)/sylv/cc/SylvException.cc \
-	$(TOPDIR)/sylv/cc/SylvException.hh \
-	$(TOPDIR)/sylv/cc/SylvMatrix.cc \
-	$(TOPDIR)/sylv/cc/SylvMatrix.hh \
-	$(TOPDIR)/sylv/cc/SylvParams.cc \
-	$(TOPDIR)/sylv/cc/SylvParams.hh \
-	$(TOPDIR)/sylv/cc/SylvesterSolver.hh \
-	$(TOPDIR)/sylv/cc/SymSchurDecomp.cc \
-	$(TOPDIR)/sylv/cc/SymSchurDecomp.hh \
-	$(TOPDIR)/sylv/cc/TriangularSylvester.cc \
-	$(TOPDIR)/sylv/cc/TriangularSylvester.hh \
-	$(TOPDIR)/sylv/cc/Vector.cc \
-	$(TOPDIR)/sylv/cc/Vector.hh
+	BlockDiagonal.cc \
+	GeneralMatrix.cc \
+	GeneralSylvester.cc \
+	IterativeSylvester.cc \
+	KronUtils.cc \
+	KronVector.cc \
+	QuasiTriangular.cc \
+	QuasiTriangularZero.cc \
+	SchurDecomp.cc \
+	SchurDecompEig.cc \
+	SimilarityDecomp.cc \
+	SylvException.cc \
+	SylvMatrix.cc \
+	SylvParams.cc \
+	SymSchurDecomp.cc \
+	TriangularSylvester.cc \
+	Vector.cc
 
 TL_SRCS = \
-	$(TOPDIR)/tl/cc/equivalence.cc \
-	$(TOPDIR)/tl/cc/equivalence.hh \
-	$(TOPDIR)/tl/cc/fine_container.cc \
-	$(TOPDIR)/tl/cc/fine_container.hh \
-	$(TOPDIR)/tl/cc/fs_tensor.cc \
-	$(TOPDIR)/tl/cc/fs_tensor.hh \
-	$(TOPDIR)/tl/cc/gs_tensor.cc \
-	$(TOPDIR)/tl/cc/gs_tensor.hh \
-	$(TOPDIR)/tl/cc/int_sequence.cc \
-	$(TOPDIR)/tl/cc/int_sequence.hh \
-	$(TOPDIR)/tl/cc/kron_prod.cc \
-	$(TOPDIR)/tl/cc/kron_prod.hh \
-	$(TOPDIR)/tl/cc/normal_moments.cc \
-	$(TOPDIR)/tl/cc/normal_moments.hh \
-	$(TOPDIR)/tl/cc/permutation.cc \
-	$(TOPDIR)/tl/cc/permutation.hh \
-	$(TOPDIR)/tl/cc/ps_tensor.cc \
-	$(TOPDIR)/tl/cc/ps_tensor.hh \
-	$(TOPDIR)/tl/cc/pyramid_prod.cc \
-	$(TOPDIR)/tl/cc/pyramid_prod.hh \
-	$(TOPDIR)/tl/cc/pyramid_prod2.cc \
-	$(TOPDIR)/tl/cc/pyramid_prod2.hh \
-	$(TOPDIR)/tl/cc/rfs_tensor.cc \
-	$(TOPDIR)/tl/cc/rfs_tensor.hh \
-	$(TOPDIR)/tl/cc/sparse_tensor.cc \
-	$(TOPDIR)/tl/cc/sparse_tensor.hh \
-	$(TOPDIR)/tl/cc/stack_container.cc \
-	$(TOPDIR)/tl/cc/stack_container.hh \
-	$(TOPDIR)/tl/cc/sthread.cc \
-	$(TOPDIR)/tl/cc/sthread.hh \
-	$(TOPDIR)/tl/cc/symmetry.cc \
-	$(TOPDIR)/tl/cc/symmetry.hh \
-	$(TOPDIR)/tl/cc/t_container.cc \
-	$(TOPDIR)/tl/cc/t_container.hh \
-	$(TOPDIR)/tl/cc/t_polynomial.cc \
-	$(TOPDIR)/tl/cc/t_polynomial.hh \
-	$(TOPDIR)/tl/cc/tensor.cc \
-	$(TOPDIR)/tl/cc/tensor.hh \
-	$(TOPDIR)/tl/cc/tl_exception.hh \
-	$(TOPDIR)/tl/cc/tl_static.cc \
-	$(TOPDIR)/tl/cc/tl_static.hh \
-	$(TOPDIR)/tl/cc/twod_matrix.cc \
-	$(TOPDIR)/tl/cc/twod_matrix.hh
+	equivalence.cc \
+	fine_container.cc \
+	fs_tensor.cc \
+	gs_tensor.cc \
+	int_sequence.cc \
+	kron_prod.cc \
+	normal_moments.cc \
+	permutation.cc \
+	ps_tensor.cc \
+	pyramid_prod.cc \
+	pyramid_prod2.cc \
+	rfs_tensor.cc \
+	sparse_tensor.cc \
+	stack_container.cc \
+	sthread.cc \
+	symmetry.cc \
+	t_container.cc \
+	t_polynomial.cc \
+	tensor.cc \
+	tl_static.cc \
+	twod_matrix.cc
 
 INTEG_SRCS = \
-	$(TOPDIR)/integ/cc/quadrature.cc \
-	$(TOPDIR)/integ/cc/quadrature.hh \
-	$(TOPDIR)/integ/cc/quasi_mcarlo.cc \
-	$(TOPDIR)/integ/cc/quasi_mcarlo.hh \
-	$(TOPDIR)/integ/cc/product.cc \
-	$(TOPDIR)/integ/cc/product.hh \
-	$(TOPDIR)/integ/cc/smolyak.cc \
-	$(TOPDIR)/integ/cc/smolyak.hh \
-	$(TOPDIR)/integ/cc/vector_function.cc \
-	$(TOPDIR)/integ/cc/vector_function.hh \
-	$(TOPDIR)/integ/cc/precalc_quadrature.hh
+	quadrature.cc \
+	quasi_mcarlo.cc \
+	product.cc \
+	smolyak.cc \
+	vector_function.cc
 
 UTILS_SRCS = \
-	$(TOPDIR)/utils/cc/exception.hh \
-	$(TOPDIR)/utils/cc/pascal_triangle.cc \
-	$(TOPDIR)/utils/cc/pascal_triangle.hh \
-	$(TOPDIR)/utils/cc/int_power.cc \
-	$(TOPDIR)/utils/cc/int_power.hh
+	pascal_triangle.cc \
+	int_power.cc
+
+OTHER_SRCS = \
+	nlsolve.cc
 
 nodist_libdynare___a_SOURCES = \
 	$(KORD_SRCS) \
@@ -139,5 +81,20 @@ nodist_libdynare___a_SOURCES = \
 	$(SYLV_SRCS) \
 	$(INTEG_SRCS) \
 	$(UTILS_SRCS) \
-	$(TOPDIR)/src/nlsolve.cc \
-	$(TOPDIR)/src/nlsolve.hh
+	$(OTHER_SRCS)
+
+BUILT_SOURCES = $(nodist_libdynare___a_SOURCES)
+CLEANFILES = $(nodist_libdynare___a_SOURCES)
+
+$(KORD_SRCS): %.cc: $(TOPDIR)/kord/%.cc
+	$(LN_S) -f $< $@
+$(TL_SRCS): %.cc: $(TOPDIR)/tl/cc/%.cc
+	$(LN_S) -f $< $@
+$(SYLV_SRCS): %.cc: $(TOPDIR)/sylv/cc/%.cc
+	$(LN_S) -f $< $@
+$(INTEG_SRCS): %.cc: $(TOPDIR)/integ/cc/%.cc
+	$(LN_S) -f $< $@
+$(UTILS_SRCS): %.cc: $(TOPDIR)/utils/cc/%.cc
+	$(LN_S) -f $< $@
+$(OTHER_SRCS): %.cc: $(TOPDIR)/src/%.cc
+	$(LN_S) -f $< $@
diff --git a/mex/build/local_state_space_iterations.am b/mex/build/local_state_space_iterations.am
index 0b19413258..02641c8e42 100644
--- a/mex/build/local_state_space_iterations.am
+++ b/mex/build/local_state_space_iterations.am
@@ -1,5 +1,9 @@
-vpath %.cc $(top_srcdir)/../../sources/local_state_space_iterations
-
 mex_PROGRAMS = local_state_space_iteration_2
 
 nodist_local_state_space_iteration_2_SOURCES = local_state_space_iteration_2.cc
+
+BUILT_SOURCES = $(nodist_local_state_space_iteration_2_SOURCES)
+CLEANFILES = $(nodist_local_state_space_iteration_2_SOURCES)
+
+%.cc: $(top_srcdir)/../../sources/local_state_space_iterations/%.cc
+	$(LN_S) -f $< $@
diff --git a/mex/build/mjdgges.am b/mex/build/mjdgges.am
index 236bddf85e..d0d072e172 100644
--- a/mex/build/mjdgges.am
+++ b/mex/build/mjdgges.am
@@ -1,3 +1,9 @@
 mex_PROGRAMS = mjdgges
 
-nodist_mjdgges_SOURCES = $(top_srcdir)/../../sources/mjdgges/mjdgges.c
+nodist_mjdgges_SOURCES = mjdgges.c
+
+BUILT_SOURCES = $(nodist_mjdgges_SOURCES)
+CLEANFILES = $(nodist_mjdgges_SOURCES)
+
+%.c: $(top_srcdir)/../../sources/mjdgges/%.c
+	$(LN_S) -f $< $@
diff --git a/mex/build/ms_sbvar.am b/mex/build/ms_sbvar.am
index 501474e2cb..4008020420 100644
--- a/mex/build/ms_sbvar.am
+++ b/mex/build/ms_sbvar.am
@@ -6,59 +6,87 @@ DWUTILITIESDIR = $(top_srcdir)/../../../contrib/ms-sbvar/utilities_dw
 DYNMEXSRCDIR = $(top_srcdir)/../../sources
 MSMEXSRCDIR = $(DYNMEXSRCDIR)/ms-sbvar
 
-AM_CPPFLAGS += $(GSL_CPPFLAGS) -DSTRUCTURED_COLUMN_MAJOR -I$(DYNMEXSRCDIR) -I$(MSMEXSRCDIR) -I$(DWUTILITIESDIR)/include -I$(DWSWITCHDIR)/switching -I$(DWSWITCHDIR)/state_space -I$(DWSWITCHDIR)/state_space/sbvar
+AM_CPPFLAGS += $(GSL_CPPFLAGS) -DSTRUCTURED_COLUMN_MAJOR -I$(MSMEXSRCDIR) -I$(DWUTILITIESDIR)/include -I$(DWSWITCHDIR)/switching -I$(DWSWITCHDIR)/state_space -I$(DWSWITCHDIR)/state_space/sbvar
 
 LIBS += $(GSL_LIBS)
 AM_LDFLAGS += $(GSL_LDFLAGS)
 
 DWUTILS = \
-	$(DWUTILITIESDIR)/arrays/dw_array.c \
-	$(DWUTILITIESDIR)/arrays/dw_matrix_array.c \
-	$(DWUTILITIESDIR)/ascii/dw_ascii.c \
-	$(DWUTILITIESDIR)/ascii/dw_parse_cmd.c \
-	$(DWUTILITIESDIR)/elliptical/dw_elliptical.c \
-	$(DWUTILITIESDIR)/error/dw_error.c \
-	$(DWUTILITIESDIR)/histogram/dw_histogram.c \
-	$(DWUTILITIESDIR)/math/dw_math.c \
-	$(DWUTILITIESDIR)/matrix/dw_matrix.c \
-	$(DWUTILITIESDIR)/matrix/bmatrix.c \
-	$(DWUTILITIESDIR)/sort/dw_matrix_sort.c \
-	$(DWUTILITIESDIR)/stat/dw_rand_gsl.c \
-	$(DWUTILITIESDIR)/stat/dw_matrix_rand.c
+	dw_array.c \
+	dw_matrix_array.c \
+	dw_ascii.c \
+	dw_parse_cmd.c \
+	dw_elliptical.c \
+	dw_error.c \
+	dw_histogram.c \
+	dw_math.c \
+	dw_matrix.c \
+	bmatrix.c \
+	dw_matrix_sort.c \
+	dw_rand_gsl.c \
+	dw_matrix_rand.c
 
 MSMEXSRC = \
-	$(MSMEXSRCDIR)/mex_top_level.cc \
-	$(MSMEXSRCDIR)/modify_for_mex.cc
+	mex_top_level.cc \
+	modify_for_mex.cc
 
 nodist_ms_sbvar_create_init_file_SOURCES = \
-	$(DWSWITCHDIR)/switching/dw_switch.c \
-	$(DWSWITCHDIR)/switching/dw_switchio.c \
-	$(DWSWITCHDIR)/switching/dw_dirichlet_restrictions.c \
-	$(DWSWITCHDIR)/switching/dw_metropolis_theta.c \
-	$(DWSWITCHDIR)/state_space/sbvar/create_init_file.c \
-	$(DWSWITCHDIR)/state_space/sbvar/VARbase.c \
-	$(DWSWITCHDIR)/state_space/sbvar/VARio.c \
-	$(DWSWITCHDIR)/state_space/sbvar/VARio_matlab.c \
+	dw_switch.c \
+	dw_switchio.c \
+	dw_dirichlet_restrictions.c \
+	dw_metropolis_theta.c \
+	create_init_file.c \
+	VARbase.c \
+	VARio.c \
+	VARio_matlab.c \
 	$(DWUTILS) \
 	$(MSMEXSRC)
 
 nodist_ms_sbvar_command_line_SOURCES = \
-	$(DWSWITCHDIR)/switching/dw_switch.c \
-	$(DWSWITCHDIR)/switching/dw_switchio.c \
-	$(DWSWITCHDIR)/switching/dw_dirichlet_restrictions.c \
-	$(DWSWITCHDIR)/switching/dw_metropolis_theta.c \
-	$(DWSWITCHDIR)/switching/dw_switch_opt.c \
-	$(DWSWITCHDIR)/switching/dw_mdd_switch.c \
-	$(DWSWITCHDIR)/state_space/sbvar/VARbase.c \
-	$(DWSWITCHDIR)/state_space/sbvar/VARio.c \
-	$(DWSWITCHDIR)/state_space/sbvar/dw_sbvar_command_line.c \
-	$(DWSWITCHDIR)/state_space/sbvar/sbvar_estimate.c \
-	$(DWSWITCHDIR)/state_space/sbvar/sbvar_simulate.c \
-	$(DWSWITCHDIR)/state_space/sbvar/sbvar_probabilities.c \
-	$(DWSWITCHDIR)/state_space/sbvar/sbvar_mdd.c \
-	$(DWSWITCHDIR)/state_space/sbvar/sbvar_forecast.c \
-	$(DWSWITCHDIR)/state_space/sbvar/sbvar_variance_decomposition.c \
-	$(DWSWITCHDIR)/state_space/sbvar/sbvar_impulse_responses.c \
-	$(DWSWITCHDIR)/state_space/sbvar/dw_csminwel.c \
+	dw_switch.c \
+	dw_switchio.c \
+	dw_dirichlet_restrictions.c \
+	dw_metropolis_theta.c \
+	dw_switch_opt.c \
+	dw_mdd_switch.c \
+	VARbase.c \
+	VARio.c \
+	dw_sbvar_command_line.c \
+	sbvar_estimate.c \
+	sbvar_simulate.c \
+	sbvar_probabilities.c \
+	sbvar_mdd.c \
+	sbvar_forecast.c \
+	sbvar_variance_decomposition.c \
+	sbvar_impulse_responses.c \
+	dw_csminwel.c \
 	$(DWUTILS) \
 	$(MSMEXSRC)
+
+BUILT_SOURCES = $(nodist_ms_sbvar_create_init_file_SOURCES) $(nodist_ms_sbvar_command_line_SOURCES)
+CLEANFILES = $(nodist_ms_sbvar_create_init_file_SOURCES) $(nodist_ms_sbvar_command_line_SOURCES)
+
+dw_array.c dw_matrix_array.c: %.c: $(DWUTILITIESDIR)/arrays/%.c
+	$(LN_S) -f $< $@
+dw_ascii.c dw_parse_cmd.c: %.c: $(DWUTILITIESDIR)/ascii/%.c
+	$(LN_S) -f $< $@
+dw_elliptical.c: %.c: $(DWUTILITIESDIR)/elliptical/%.c
+	$(LN_S) -f $< $@
+dw_error.c: %.c: $(DWUTILITIESDIR)/error/%.c
+	$(LN_S) -f $< $@
+dw_histogram.c: %.c: $(DWUTILITIESDIR)/histogram/%.c
+	$(LN_S) -f $< $@
+dw_math.c: %.c: $(DWUTILITIESDIR)/math/%.c
+	$(LN_S) -f $< $@
+dw_matrix.c bmatrix.c: %.c: $(DWUTILITIESDIR)/matrix/%.c
+	$(LN_S) -f $< $@
+dw_matrix_sort.c: %.c: $(DWUTILITIESDIR)/sort/%.c
+	$(LN_S) -f $< $@
+dw_rand_gsl.c dw_matrix_rand.c: %.c: $(DWUTILITIESDIR)/stat/%.c
+	$(LN_S) -f $< $@
+$(MSMEXSRC): %.cc: $(MSMEXSRCDIR)/%.cc
+	$(LN_S) -f $< $@
+dw_switch.c dw_switchio.c dw_dirichlet_restrictions.c dw_metropolis_theta.c dw_switch_opt.c dw_mdd_switch.c: %.c: $(DWSWITCHDIR)/switching/%.c
+	$(LN_S) -f $< $@
+create_init_file.c VARbase.c VARio.c VARio_matlab.c dw_sbvar_command_line.c sbvar_estimate.c sbvar_simulate.c sbvar_probabilities.c sbvar_mdd.c sbvar_forecast.c sbvar_variance_decomposition.c sbvar_impulse_responses.c dw_csminwel.c: %.c: $(DWSWITCHDIR)/state_space/sbvar/%.c
+	$(LN_S) -f $< $@
diff --git a/mex/build/qmc_sequence.am b/mex/build/qmc_sequence.am
index c1f51d9f9e..d65ea11453 100644
--- a/mex/build/qmc_sequence.am
+++ b/mex/build/qmc_sequence.am
@@ -1,5 +1,13 @@
-vpath %.cc $(top_srcdir)/../../sources/sobol
-
 mex_PROGRAMS = qmc_sequence
 
+TOPDIR = $(top_srcdir)/../../sources/sobol
+
+qmc_sequence_CPPFLAGS = $(AM_CPPFLAGS) -I$(TOPDIR)
+
 nodist_qmc_sequence_SOURCES = qmc_sequence.cc
+
+BUILT_SOURCES = $(nodist_qmc_sequence_SOURCES)
+CLEANFILES = $(nodist_qmc_sequence_SOURCES)
+
+%.cc: $(TOPDIR)/%.cc
+	$(LN_S) -f $< $@
-- 
GitLab