--- as/driver.c.orig 2019-05-25 16:26:59.000000000 +0100 +++ as/driver.c 2020-03-13 11:22:45.000000000 +0000 @@ -31,15 +31,15 @@ const char *LOCALLIB = "../local/libexec/as/"; const char *AS = "/as"; - int i, j; - uint32_t count, verbose, run_clang; - char *p, c, *arch_name, *as, *as_local; + int i=0, j=0; + uint32_t count=0, verbose=0, run_clang=0; + char *p=NULL, c=NULL, *arch_name=NULL, *as=NULL, *as_local=NULL; char **new_argv; const char *CLANG = "clang"; - char *prefix, buf[MAXPATHLEN], resolved_name[PATH_MAX]; - uint32_t bufsize; + char *prefix=NULL, buf[MAXPATHLEN], resolved_name[PATH_MAX]; + uint32_t bufsize=0; struct arch_flag arch_flag; - const struct arch_flag *arch_flags, *family_arch_flag; + const struct arch_flag *arch_flags=NULL, *family_arch_flag=NULL; enum bool oflag_specified, qflag, Qflag, some_input_files; progname = argv[0]; @@ -295,11 +295,28 @@ arch_flag.cputype == CPU_TYPE_ARM64 || arch_flag.cputype == CPU_TYPE_ARM64_32 || arch_flag.cputype == CPU_TYPE_ARM)){ - as = makestr(prefix, CLANG, NULL); - if(access(as, F_OK) != 0){ - printf("%s: assembler (%s) not installed\n", progname, as); - exit(1); - } + if ( NULL == getenv("DISABLE_MACPORTS_AS_CLANG_SEARCH") ) { + const char * mp_comps[] = { __MP_CLANG_NAMES__ }; + const size_t n_comps = sizeof(mp_comps) / sizeof(mp_comps[0]); + for ( size_t i = 0; i < n_comps; ++i ) { + as = makestr(prefix, mp_comps[i], NULL); + if(access(as, F_OK) == 0){ + // found working compiler so break + break; + } else { + as = NULL; + } + } + } +#if __TRY_SYSTEM_CLANG__ + if ( NULL == as && NULL == getenv("DISABLE_XCODE_AS_CLANG_SEARCH") ) { + as = "/usr/bin/clang"; + if(access(as, F_OK) != 0){ + as = NULL; + } + } +#endif + if (as != NULL) { new_argv = allocate((argc + 8) * sizeof(char *)); new_argv[0] = as; j = 1; @@ -360,6 +377,7 @@ exit(0); else exit(1); + } /* as != NULL */ } /*