@@ -59,7 +59,7 @@ module fpm_dependency
59
59
use fpm_environment, only: get_os_type, OS_WINDOWS, os_is_unix
60
60
use fpm_error, only: error_t, fatal_error
61
61
use fpm_filesystem, only: exists, join_path, mkdir, canon_path, windows_path, list_files, is_dir, basename, &
62
- os_delete_dir, get_temp_filename
62
+ os_delete_dir, get_temp_filename, parent_dir
63
63
use fpm_git, only: git_target_revision, git_target_default, git_revision, operator (==)
64
64
use fpm_manifest, only: package_config_t, dependency_config_t, get_package_data
65
65
use fpm_manifest_dependency, only: manifest_has_changed
@@ -123,7 +123,11 @@ module fpm_dependency
123
123
type (dependency_node_t), allocatable :: dep(:)
124
124
! > Cache file
125
125
character (len= :), allocatable :: cache
126
+ ! > Custom path to the global config file
127
+ character (len= :), allocatable :: path_to_config
128
+
126
129
contains
130
+
127
131
! > Overload procedure to add new dependencies to the tree
128
132
generic :: add = > add_project, add_project_dependencies, add_dependencies, &
129
133
add_dependency, add_dependency_node
@@ -183,24 +187,24 @@ module fpm_dependency
183
187
contains
184
188
185
189
! > Create a new dependency tree
186
- subroutine new_dependency_tree (self , verbosity , cache )
190
+ subroutine new_dependency_tree (self , verbosity , cache , path_to_config )
187
191
! > Instance of the dependency tree
188
192
type (dependency_tree_t), intent (out ) :: self
189
193
! > Verbosity of printout
190
194
integer , intent (in ), optional :: verbosity
191
195
! > Name of the cache file
192
196
character (len=* ), intent (in ), optional :: cache
197
+ ! > Path to the global config file.
198
+ character (len=* ), intent (in ), optional :: path_to_config
193
199
194
200
call resize(self% dep)
195
201
self% dep_dir = join_path(" build" , " dependencies" )
196
202
197
- if (present (verbosity)) then
198
- self% verbosity = verbosity
199
- end if
203
+ if (present (verbosity)) self% verbosity = verbosity
200
204
201
- if (present (cache)) then
202
- self % cache = cache
203
- end if
205
+ if (present (cache)) self % cache = cache
206
+
207
+ if ( present (path_to_config)) self % path_to_config = path_to_config
204
208
205
209
end subroutine new_dependency_tree
206
210
@@ -311,15 +315,15 @@ subroutine add_project(self, package, error)
311
315
312
316
! After resolving all dependencies, check if we have cached ones to avoid updates
313
317
if (allocated (self% cache)) then
314
- call new_dependency_tree(cached, verbosity= self% verbosity,cache= self% cache)
318
+ call new_dependency_tree(cached, verbosity= self% verbosity, cache= self% cache)
315
319
call cached% load(self% cache, error)
316
320
if (allocated (error)) return
317
321
318
322
! Skip root node
319
- do id= 2 , cached% ndep
320
- cached% dep(id)% cached = .true.
321
- call self% add(cached% dep(id), error)
322
- if (allocated (error)) return
323
+ do id = 2 , cached% ndep
324
+ cached% dep(id)% cached = .true.
325
+ call self% add(cached% dep(id), error)
326
+ if (allocated (error)) return
323
327
end do
324
328
end if
325
329
@@ -443,13 +447,13 @@ subroutine add_dependency_node(self, dependency, error)
443
447
! the manifest has priority
444
448
if (dependency% cached) then
445
449
if (dependency_has_changed(dependency, self% dep(id), self% verbosity, self% unit)) then
446
- if (self% verbosity> 0 ) write (self% unit, out_fmt) " Dependency change detected:" , dependency% name
447
- self% dep(id)% update = .true.
450
+ if (self% verbosity > 0 ) write (self% unit, out_fmt) " Dependency change detected:" , dependency% name
451
+ self% dep(id)% update = .true.
448
452
else
449
- ! Store the cached one
450
- self% dep(id) = dependency
451
- self% dep(id)% update = .false.
452
- endif
453
+ ! Store the cached one
454
+ self% dep(id) = dependency
455
+ self% dep(id)% update = .false.
456
+ end if
453
457
end if
454
458
else
455
459
! New dependency: add from scratch
@@ -498,7 +502,7 @@ subroutine update_dependency(self, name, error)
498
502
499
503
associate (dep = > self% dep(id))
500
504
if (allocated (dep% git) .and. dep% update) then
501
- if (self% verbosity> 0 ) write (self% unit, out_fmt) " Update:" , dep% name
505
+ if (self% verbosity > 0 ) write (self% unit, out_fmt) " Update:" , dep% name
502
506
proj_dir = join_path(self% dep_dir, dep% name)
503
507
call dep% git% checkout(proj_dir, error)
504
508
if (allocated (error)) return
@@ -545,8 +549,24 @@ subroutine resolve_dependencies(self, root, error)
545
549
type (error_t), allocatable , intent (out ) :: error
546
550
547
551
type (fpm_global_settings) :: global_settings
552
+ character (:), allocatable :: parent_directory
548
553
integer :: ii
549
554
555
+ ! Register path to global config file if it was entered via the command line.
556
+ if (allocated (self% path_to_config)) then
557
+ if (len_trim (self% path_to_config) > 0 ) then
558
+ parent_directory = parent_dir(self% path_to_config)
559
+
560
+ if (len_trim (parent_directory) == 0 ) then
561
+ global_settings% path_to_config_folder = " ."
562
+ else
563
+ global_settings% path_to_config_folder = parent_directory
564
+ end if
565
+
566
+ global_settings% config_file_name = basename(self% path_to_config)
567
+ end if
568
+ end if
569
+
550
570
call get_global_settings(global_settings, error)
551
571
if (allocated (error)) return
552
572
@@ -722,7 +742,7 @@ subroutine check_and_read_pkg_data(json, node, download_url, version, error)
722
742
character (:), allocatable :: version_key, version_str, error_message, namespace, name
723
743
724
744
namespace = " "
725
- name = " UNNAMED_NODE"
745
+ name = " UNNAMED_NODE"
726
746
if (allocated (node% namespace)) namespace = node% namespace
727
747
if (allocated (node% name)) name = node% name
728
748
@@ -1199,27 +1219,27 @@ logical function dependency_has_changed(cached, manifest, verbosity, iunit) resu
1199
1219
! > may not have it
1200
1220
if (allocated (cached% version) .and. allocated (manifest% version)) then
1201
1221
if (cached% version /= manifest% version) then
1202
- if (verbosity> 1 ) write (iunit,out_fmt) " VERSION has changed: " // cached% version% s()// " vs. " // manifest% version% s()
1203
- return
1204
- endif
1222
+ if (verbosity > 1 ) write (iunit, out_fmt) " VERSION has changed: " // cached% version% s()// " vs. " // manifest% version% s()
1223
+ return
1224
+ end if
1205
1225
else
1206
- if (verbosity> 1 ) write (iunit,out_fmt) " VERSION has changed presence "
1226
+ if (verbosity > 1 ) write (iunit, out_fmt) " VERSION has changed presence "
1207
1227
end if
1208
1228
if (allocated (cached% revision) .and. allocated (manifest% revision)) then
1209
1229
if (cached% revision /= manifest% revision) then
1210
- if (verbosity> 1 ) write (iunit,out_fmt) " REVISION has changed: " // cached% revision// " vs. " // manifest% revision
1230
+ if (verbosity > 1 ) write (iunit, out_fmt) " REVISION has changed: " // cached% revision// " vs. " // manifest% revision
1211
1231
return
1212
- endif
1232
+ end if
1213
1233
else
1214
- if (verbosity> 1 ) write (iunit,out_fmt) " REVISION has changed presence "
1234
+ if (verbosity > 1 ) write (iunit, out_fmt) " REVISION has changed presence "
1215
1235
end if
1216
1236
if (allocated (cached% proj_dir) .and. allocated (manifest% proj_dir)) then
1217
1237
if (cached% proj_dir /= manifest% proj_dir) then
1218
- if (verbosity> 1 ) write (iunit,out_fmt) " PROJECT DIR has changed: " // cached% proj_dir// " vs. " // manifest% proj_dir
1238
+ if (verbosity > 1 ) write (iunit, out_fmt) " PROJECT DIR has changed: " // cached% proj_dir// " vs. " // manifest% proj_dir
1219
1239
return
1220
- endif
1240
+ end if
1221
1241
else
1222
- if (verbosity> 1 ) write (iunit,out_fmt) " PROJECT DIR has changed presence "
1242
+ if (verbosity > 1 ) write (iunit, out_fmt) " PROJECT DIR has changed presence "
1223
1243
end if
1224
1244
1225
1245
! > All checks passed: the two dependencies have no differences
0 commit comments