scaffold.F90 Source File


This file depends on

sourcefile~~scaffold.f90~~EfferentGraph sourcefile~scaffold.f90 scaffold.F90 sourcefile~julienne_m.f90 julienne_m.f90 sourcefile~scaffold.f90->sourcefile~julienne_m.f90 sourcefile~julienne_assert_m.f90 julienne_assert_m.f90 sourcefile~julienne_m.f90->sourcefile~julienne_assert_m.f90 sourcefile~julienne_bin_m.f90 julienne_bin_m.f90 sourcefile~julienne_m.f90->sourcefile~julienne_bin_m.f90 sourcefile~julienne_command_line_m.f90 julienne_command_line_m.f90 sourcefile~julienne_m.f90->sourcefile~julienne_command_line_m.f90 sourcefile~julienne_file_m.f90 julienne_file_m.f90 sourcefile~julienne_m.f90->sourcefile~julienne_file_m.f90 sourcefile~julienne_formats_m.f90 julienne_formats_m.F90 sourcefile~julienne_m.f90->sourcefile~julienne_formats_m.f90 sourcefile~julienne_github_ci_m.f90 julienne_github_ci_m.f90 sourcefile~julienne_m.f90->sourcefile~julienne_github_ci_m.f90 sourcefile~julienne_one_image_prints_m.f90 julienne_one_image_prints_m.f90 sourcefile~julienne_m.f90->sourcefile~julienne_one_image_prints_m.f90 sourcefile~julienne_string_m.f90 julienne_string_m.F90 sourcefile~julienne_m.f90->sourcefile~julienne_string_m.f90 sourcefile~julienne_test_description_m.f90 julienne_test_description_m.f90 sourcefile~julienne_m.f90->sourcefile~julienne_test_description_m.f90 sourcefile~julienne_test_diagnosis_m.f90 julienne_test_diagnosis_m.F90 sourcefile~julienne_m.f90->sourcefile~julienne_test_diagnosis_m.f90 sourcefile~julienne_test_fixture_m.f90 julienne_test_fixture_m.f90 sourcefile~julienne_m.f90->sourcefile~julienne_test_fixture_m.f90 sourcefile~julienne_test_harness_m.f90 julienne_test_harness_m.f90 sourcefile~julienne_m.f90->sourcefile~julienne_test_harness_m.f90 sourcefile~julienne_test_m.f90 julienne_test_m.F90 sourcefile~julienne_m.f90->sourcefile~julienne_test_m.f90 sourcefile~julienne_test_result_m.f90 julienne_test_result_m.f90 sourcefile~julienne_m.f90->sourcefile~julienne_test_result_m.f90 sourcefile~julienne_test_suite_m.f90 julienne_test_suite_m.f90 sourcefile~julienne_m.f90->sourcefile~julienne_test_suite_m.f90 sourcefile~julienne_assert_m.f90->sourcefile~julienne_test_diagnosis_m.f90 sourcefile~julienne_file_m.f90->sourcefile~julienne_string_m.f90 sourcefile~julienne_one_image_prints_m.f90->sourcefile~julienne_string_m.f90 sourcefile~julienne_test_description_m.f90->sourcefile~julienne_string_m.f90 sourcefile~julienne_test_description_m.f90->sourcefile~julienne_test_diagnosis_m.f90 sourcefile~julienne_test_description_m.f90->sourcefile~julienne_test_result_m.f90 sourcefile~julienne_test_diagnosis_m.f90->sourcefile~julienne_string_m.f90 sourcefile~julienne_test_fixture_m.f90->sourcefile~julienne_test_m.f90 sourcefile~julienne_test_harness_m.f90->sourcefile~julienne_test_fixture_m.f90 sourcefile~julienne_test_m.f90->sourcefile~julienne_command_line_m.f90 sourcefile~julienne_test_m.f90->sourcefile~julienne_test_description_m.f90 sourcefile~julienne_test_m.f90->sourcefile~julienne_test_result_m.f90 sourcefile~julienne_user_defined_collectives_m.f90 julienne_user_defined_collectives_m.f90 sourcefile~julienne_test_m.f90->sourcefile~julienne_user_defined_collectives_m.f90 sourcefile~julienne_test_result_m.f90->sourcefile~julienne_string_m.f90 sourcefile~julienne_test_result_m.f90->sourcefile~julienne_test_diagnosis_m.f90 sourcefile~julienne_test_suite_m.f90->sourcefile~julienne_file_m.f90 sourcefile~julienne_test_suite_m.f90->sourcefile~julienne_string_m.f90

Source Code

! Copyright (c) 2024-2025, The Regents of the University of California and Sourcery Institute
! Terms of use are as specified in LICENSE.txt

program scaffold
  use julienne_m, only : command_line_t, file_t, test_suite_t
  implicit none
  type(command_line_t) command_line
  integer i

  if (help_requested()) call print_usage_info_and_stop

#ifndef __GNUC__
  associate(subjects_file_name => command_line%flag_value("--json-file"))
    if (len(subjects_file_name) == 0) call print_usage_info_and_stop
    print '(*(a))', "Reading test subject information from " // subjects_file_name
    associate(test_suite => test_suite_t(file_t(subjects_file_name)))
      associate(path => command_line%flag_value("--suite-path"))
        print '(*(a))', "Writing test-suite scaffolding in " // path
        if (len(path) == 0) call print_usage_info_and_stop
        associate(driver => test_suite%driver_file())
          call driver%write_lines(path // "/driver.f90")
        end associate
        associate(subjects => test_suite%test_subjects(), modules => test_suite%test_modules())
          do i = 1, size(subjects)
            associate(stub => test_suite%stub_file(subjects(i)))
              call stub%write_lines(path // "/" // modules(i) // ".f90")
            end associate
          end do
        end associate
      end associate
    end associate
  end associate
#else
  block
    character(len=:), allocatable ::  path, subjects_file_name
    type(file_t) driver
    subjects_file_name = command_line%flag_value("--json-file")
    if (len(subjects_file_name) == 0) call print_usage_info_and_stop
    print '(*(a))', "Reading test subject information from " // subjects_file_name
    associate(test_suite => test_suite_t(file_t(subjects_file_name)))
      path = command_line%flag_value("--suite-path")
      if (len(path) == 0) call print_usage_info_and_stop
      print '(*(a))', "Writing test-suite scaffolding in " // path
      call test_suite%write_driver(path // "/driver.f90")
    end associate
  end block
#endif

contains

    logical function help_requested()
      character(len=:), allocatable :: file_name
      type(command_line_t) command_line
      help_requested = command_line%argument_present([character(len=len("--help"))::"--help","-h"])
    end function

    subroutine print_usage_info_and_stop
      character(len=*), parameter :: usage = &
        new_line('') // new_line('') //      &
        'Usage: fpm run scaffold -- [--json-file <string> --suite-path <string>] | [--help] | -h]' // &
        new_line('') // new_line('') //      &
        'where square brackets ([]) denote optional arguments, a pipe (|) separates alternative arguments,' // new_line('') // &
        'angular brackets (<>) denote a user-provided value, the --subjects string names a JSON file,'      // new_line('') // &
        'and the --path string names a directory for the new test-suite scaffold.'                          // new_line('')
      stop usage
    end subroutine

end program scaffold