diff --git a/fpmake.pp b/fpmake.pp index 68b52ac..0d80ec8 100644 --- a/fpmake.pp +++ b/fpmake.pp @@ -17,17 +17,63 @@ begin {$ENDIF} end; +Procedure CreateNamespacedConfigFile(CfgFile : string); + +var + F : Text; + + Procedure AddLn(S : String); + + begin + Writeln(F,S); + end; + +begin + if not ForceDirectories(ExtractFilePath(CfgFile)) then + begin + Writeln(StdErr,'Could not create destination directory ',ExtractFilePath(CfgFile)); + Halt(2); + end; + Assign(F,CfgFile); + try + Rewrite(F); + except + On E : exception do + begin + Writeln(StdErr,'Could not create config file ',CfgFile,' : ',E.Message); + Halt(3); + end; + end; + AddLn('-dUNICODERTL'); + Close(F); +end; + Procedure CreateConfigFile(CfgFile,BaseDir : String; rtl_js_dir: string = ''); Var F : Text; + Procedure AddLn(S : String); begin Writeln(F,S); end; + Procedure AddPath(const aPrefix,aDir,Suffix : String); + + var + aSubDirs : String; + + begin + aSubDirs:=aDir; + if Suffix<>'' then + aSubDirs:=aSubDirs+'*'+PathDelim+Suffix; + if not FilenameIsAbsolute(aDir) then + aSubDirs:='$CfgDir'+aSubDirs; + Addln(aPrefix+aSubDirs); + end; + begin if not ForceDirectories(ExtractFilePath(CfgFile)) then begin @@ -60,15 +106,14 @@ begin Addln('# If you don''t want so much verbosity use'); Addln('#-vw'); Addln(''); - if FilenameIsAbsolute(BaseDir) then - Addln('-Fu'+BaseDir+'*') - else - Addln('-Fu$CfgDir'+PathDelim+BaseDir+'*'); + Addln('#IFDEF FPC_SUBTARGET_NAMESPACED'); + AddPath('-Fu',BaseDir,'namespaced'); + AddPath('-Fi',BaseDir,'src'); + AddLn('#else'); + AddPath('-Fu',BaseDir,'src'); + AddLn('#endif'); if rtl_js_dir<>'' then - if FilenameIsAbsolute(rtl_js_dir) then - AddLn('-Fu'+rtl_js_dir) - else - AddLn('-Fu$CfgDir'+PathDelim+rtl_js_dir); + AddPath('-Fu',rtl_js_dir,''); Addln(''); Addln('#IFDEF nodejs'); Addln('-Jirtl.js'); @@ -128,7 +173,7 @@ end; Var P : TPackage; - UnitDir,DemoDir,BD, TmpCfg: String; + UnitDir,DemoDir,BD, TmpCfg, TmpCfg2: String; T: TTarget; begin @@ -217,12 +262,15 @@ begin BD:=IncludeTrailingPathDelimiter(P.GetBinOutputDir(Defaults.BuildCPU,Defaults.BuildOS)); {$ENDIF} TmpCfg:='compiler/utils/pas2js/dist/pas2js.cfg'; + TmpCfg2:='compiler/utils/pas2js/dist/pas2js-namespaced.cfg'; Case Installer.RunMode of rmCompile,rmBuild: begin if not FileExists(BD+'pas2js.cfg') then CreateConfigFile(BD+'pas2js.cfg',SetDirSeparators('../../packages'), SetDirSeparators('../../compiler/utils/pas2js/dist/')); + if not FileExists(BD+'pas2js-namespaced.cfg') then + CreateNameSpacedConfigFile(BD+'pas2js-namespaced.cfg'); end; rmInstall,rmArchive,rmZipInstall: begin @@ -235,7 +283,9 @@ begin // Config file // Create config file CreateConfigFile(TmpCfg,ExtractRelativePath(IncludeTrailingPathDelimiter(Defaults.BinInstallDir),IncludeTrailingPathDelimiter(UnitDir))); + CreateNamespacedConfigFile(TmpCfg2); P.InstallFiles.Add(TmpCfg,Defaults.BinInstallDir); + P.InstallFiles.Add(TmpCfg2,Defaults.BinInstallDir); P.InstallFiles.Add('compiler/utils/pas2js/dist/rtl.js',IncludeTrailingPathDelimiter(UnitDir)+'rtl'); AddPackageFiles(P.InstallFiles,'chartjs',UnitDir); AddPackageFiles(P.InstallFiles,'dataabstract',UnitDir);