{$ifndef ALLPACKAGES} {$mode objfpc}{$H+} program fpmake; uses fpmkunit, sysutils, classes; {$endif ALLPACKAGES} function IdeGetApplicationName: string; begin result := 'lazarus'; end; procedure IdeBeforeCompileProc(Sender: TObject); var P : TPackage; BE: TBuildEngine; Inst : TCustomInstaller; StoreAppName : TGetAppNameEvent; StaticPackages : TStringList; StaticPackagesFilename: string; i : integer; S: String; AStream: TFileStream; procedure AddDesignPackage(APackageName: string; AStaticPackages: TStrings); begin BE.Log(vlCommand,' Package '+APackageName+' added to designtime-packages.'); P.Dependencies.Add(APackageName); AStaticPackages.Add(APackageName); end; procedure ScanForInstalledDesignPackages(AStartPath: string; AStaticPackages: TStrings); var sr: TSearchRec; res: LongInt; APackage : TPackage; AFile: string; begin if AStartPath='' then Exit; APackage := TPackage.Create(nil); try // Scan for Designtime-packages within the installed packages AStartPath:=IncludeTrailingPathDelimiter(AStartPath)+'fpmkinst'+PathDelim+Defaults.Target+PathDelim; res := FindFirst(AStartPath+'*'+FpmkExt,faAnyFile-faDirectory,sr); while res=0 do begin AFile:=AStartPath+sr.Name; APackage.LoadUnitConfigFromFile(AFile); if APackage.Flags.IndexOf('LazarusDsgnPkg')>-1 then AddDesignPackage(ChangeFileExt(sr.Name, ''),AStaticPackages); res := FindNext(sr); end; finally APackage.Free; end; end; begin // Search in all available packages fo packages with the 'LazasurDsgnPkg'-flag. // Add those packages to the staticpackages.inc include file so that they are // linked into the IDE. Inst := sender as TCustomInstaller; P := Inst.Packages.Packages['lazaruside']; BE := Inst.BuildEngine; BE.Log(vlCommand,'Start searching for designtime packages.'); StoreAppName:=OnGetApplicationName; OnGetApplicationName:=@IdeGetApplicationName; ForceDirectories(GetAppConfigDir(false)); StaticPackagesFilename:=GetAppConfigDir(false)+'staticpackages.inc'; OnGetApplicationName:=StoreAppName; P.IncludePath.Add(ExtractFilePath(StaticPackagesFilename)); // Search for Designtime-packages and add those to the dependencies and // staticpackages.inc StaticPackages := TStringList.Create; StaticPackages.Sorted:=true; StaticPackages.Duplicates:=dupIgnore; try // Scan for Designtime-packages within the set of packages being compiled for i := 0 to Inst.Packages.Count-1 do begin if Inst.Packages.PackageItems[i].Flags.IndexOf('LazarusDsgnPkg')>-1 then AddDesignPackage(Inst.Packages.PackageItems[i].Name, StaticPackages); end; ScanForInstalledDesignPackages(Defaults.LocalUnitDir, StaticPackages); ScanForInstalledDesignPackages(Defaults.GlobalUnitDir, StaticPackages); // Write staticpackages.inc S:=StaticPackages.DelimitedText; AStream := TFileStream.Create(StaticPackagesFilename,fmCreate); try if length(s)>0 then begin AStream.WriteBuffer(s[1],length(S)); AStream.WriteByte(ord(',')); end; finally AStream.Free; end; finally StaticPackages.Free; end; end; procedure add_ide(const ADirectory: string); var P : TPackage; T : TTarget; begin with Installer do begin P:=AddPAckage('lazaruside'); P.Version:='1.3'; NotifyEventCollection.AppendProcEvent(neaBeforeCompile, @IdeBeforeCompileProc); P.Directory:=ADirectory; P.Dependencies.Add('fcl'); P.Dependencies.Add('lazutils'); P.Dependencies.Add('buildintf'); P.Dependencies.Add('lcl'); P.Dependencies.Add('codetools'); P.Dependencies.Add('lazcontrols'); P.Dependencies.Add('ideintf'); P.Dependencies.Add('synedit'); P.Dependencies.Add('debuggerintf'); P.Dependencies.Add('lazdebuggergdbmi'); P.Dependencies.Add('ideutilspkg'); P.Dependencies.Add('ideconfig'); P.Dependencies.Add('idepackager'); P.Dependencies.Add('ideproject'); P.Dependencies.Add('idedebugger'); P.Options.Add('-MObjFPC'); P.Options.Add('-Scghi'); P.Options.Add('-O1'); P.Options.Add('-gl'); P.Options.Add('-vewnhi'); P.Options.Add('-l'); P.Options.Add('-dLCL'); P.Options.Add('-dLCL$(LCLWidgetType)'); P.Options.Add('-dAddStaticPkgs'); P.IncludePath.Add('include'); P.IncludePath.Add('include/$(OS)'); P.UnitPath.Add('.'); P.UnitPath.Add('../designer'); P.UnitPath.Add('../debugger'); P.UnitPath.Add('../debugger/frames'); P.UnitPath.Add('../converter'); P.UnitPath.Add('../packager'); P.UnitPath.Add('../packager/frames'); P.UnitPath.Add('frames'); T := P.Targets.AddProgram('lazarus.pp'); t.Dependencies.AddUnit('packagesystem'); t.Dependencies.AddUnit('addfiletoapackagedlg'); t.Dependencies.AddUnit('addtopackagedlg'); t.Dependencies.AddUnit('basepkgmanager'); t.Dependencies.AddUnit('brokendependenciesdlg'); t.Dependencies.AddUnit('confirmpkglistdlg'); t.Dependencies.AddUnit('package_description_options'); t.Dependencies.AddUnit('package_i18n_options'); t.Dependencies.AddUnit('package_integration_options'); t.Dependencies.AddUnit('package_provides_options'); t.Dependencies.AddUnit('package_usage_options'); t.Dependencies.AddUnit('installpkgsetdlg'); t.Dependencies.AddUnit('missingpkgfilesdlg'); t.Dependencies.AddUnit('openinstalledpkgdlg'); t.Dependencies.AddUnit('packagedefs'); t.Dependencies.AddUnit('packageeditor'); t.Dependencies.AddUnit('packagelinks'); t.Dependencies.AddUnit('pkggraphexplorer'); t.Dependencies.AddUnit('pkglinksdlg'); t.Dependencies.AddUnit('pkgmanager'); t.Dependencies.AddUnit('pkgvirtualuniteditor'); t.Dependencies.AddUnit('assemblerdlg'); t.Dependencies.AddUnit('breakpointsdlg'); t.Dependencies.AddUnit('breakpropertydlg'); t.Dependencies.AddUnit('breakpropertydlggroups'); t.Dependencies.AddUnit('callstackdlg'); t.Dependencies.AddUnit('debugeventsform'); t.Dependencies.AddUnit('debugger'); t.Dependencies.AddUnit('debuggerdlg'); t.Dependencies.AddUnit('debugoutputform'); t.Dependencies.AddUnit('evaluatedlg'); t.Dependencies.AddUnit('exceptiondlg'); t.Dependencies.AddUnit('feedbackdlg'); t.Dependencies.AddUnit('historydlg'); t.Dependencies.AddUnit('inspectdlg'); t.Dependencies.AddUnit('localsdlg'); t.Dependencies.AddUnit('processdebugger'); t.Dependencies.AddUnit('processlist'); t.Dependencies.AddUnit('pseudoterminaldlg'); t.Dependencies.AddUnit('registersdlg'); t.Dependencies.AddUnit('threaddlg'); t.Dependencies.AddUnit('watchesdlg'); t.Dependencies.AddUnit('watchpropertydlg'); P.Sources.AddSrc('aboutfrm.pas'); P.Sources.AddSrc('abstractsmethodsdlg.pas'); P.Sources.AddSrc('addprofiledialog.pas'); P.Sources.AddSrc('addtoprojectdlg.pas'); P.Sources.AddSrc('applicationbundle.pas'); P.Sources.AddSrc('basebuildmanager.pas'); P.Sources.AddSrc('basedebugmanager.pas'); P.Sources.AddSrc('buildfiledlg.pas'); P.Sources.AddSrc('buildlazdialog.pas'); P.Sources.AddSrc('buildmanager.pas'); P.Sources.AddSrc('buildmodediffdlg.pas'); P.Sources.AddSrc('buildprofilemanager.pas'); // P.Sources.AddSrc('charactermapdlg.pas'); P.Sources.AddSrc('checkcompileropts.pas'); P.Sources.AddSrc('checklfmdlg.pas'); P.Sources.AddSrc('cleandirdlg.pas'); P.Sources.AddSrc('clipboardhistory.pas'); P.Sources.AddSrc('codebrowser.pas'); P.Sources.AddSrc('codecontextform.pas'); P.Sources.AddSrc('codeexplopts.pas'); P.Sources.AddSrc('codeexplorer.pas'); P.Sources.AddSrc('codehelp.pas'); P.Sources.AddSrc('codemacroprompt.pas'); P.Sources.AddSrc('codemacroselect.pas'); P.Sources.AddSrc('codetemplatesdlg.pas'); P.Sources.AddSrc('codetoolsdefines.pas'); P.Sources.AddSrc('codetoolsdefpreview.pas'); P.Sources.AddSrc('codetoolsoptions.pas'); P.Sources.AddSrc('compatibilityrestrictions.pas'); P.Sources.AddSrc('compiler.pp'); P.Sources.AddSrc('componentlist.pas'); P.Sources.AddSrc('componentpalette.pas'); P.Sources.AddSrc('customformeditor.pp'); P.Sources.AddSrc('debugmanager.pas'); P.Sources.AddSrc('dialogprocs.pas'); P.Sources.AddSrc('diffdialog.pas'); P.Sources.AddSrc('diffpatch.pas'); P.Sources.AddSrc('diskdiffsdialog.pas'); P.Sources.AddSrc('editdefinetree.pas'); P.Sources.AddSrc('editmsgscannersdlg.pas'); P.Sources.AddSrc('editoroptions.pp'); P.Sources.AddSrc('emptymethodsdlg.pas'); P.Sources.AddSrc('encloseifdef.pas'); P.Sources.AddSrc('encloseselectiondlg.pas'); P.Sources.AddSrc('extractprocdlg.pas'); P.Sources.AddSrc('exttooldialog.pas'); P.Sources.AddSrc('exttooleditdlg.pas'); P.Sources.AddSrc('findinfilesdlg.pas'); P.Sources.AddSrc('findoverloadsdlg.pas'); P.Sources.AddSrc('findpalettecomp.pas'); P.Sources.AddSrc('findrenameidentifier.pas'); P.Sources.AddSrc('findreplacedialog.pp'); P.Sources.AddSrc('findunitdlg.pas'); P.Sources.AddSrc('formeditor.pp'); P.Sources.AddSrc('fpcsrcscan.pas'); P.Sources.AddSrc('fpdoceditwindow.pas'); P.Sources.AddSrc('fpdochints.pas'); P.Sources.AddSrc('fpdocselectinherited.pas'); P.Sources.AddSrc('fpdocselectlink.pas'); P.Sources.AddSrc('frames/atom_checkboxes_options.pas'); P.Sources.AddSrc('frames/backup_options.pas'); P.Sources.AddSrc('frames/buildmodeseditor.pas'); P.Sources.AddSrc('frames/codeexplorer_categories_options.pas'); P.Sources.AddSrc('frames/codeexplorer_update_options.pas'); P.Sources.AddSrc('frames/codeobserver_options.pas'); P.Sources.AddSrc('frames/codetools_classcompletion_options.pas'); P.Sources.AddSrc('frames/codetools_codecreation_options.pas'); P.Sources.AddSrc('frames/codetools_general_options.pas'); P.Sources.AddSrc('frames/codetools_identifiercompletion_options.pas'); P.Sources.AddSrc('frames/codetools_linesplitting_options.pas'); P.Sources.AddSrc('frames/codetools_space_options.pas'); P.Sources.AddSrc('frames/codetools_wordpolicy_options.pas'); P.Sources.AddSrc('frames/compiler_buildmacro_options.pas'); P.Sources.AddSrc('frames/compiler_codegen_options.pas'); P.Sources.AddSrc('frames/compiler_compilation_options.pas'); P.Sources.AddSrc('frames/compiler_config_target.pas'); P.Sources.AddSrc('frames/compiler_debugging_options.pas'); P.Sources.AddSrc('frames/compiler_messages_options.pas'); P.Sources.AddSrc('frames/compiler_other_options.pas'); P.Sources.AddSrc('frames/compiler_parsing_options.pas'); P.Sources.AddSrc('frames/compiler_path_options.pas'); P.Sources.AddSrc('frames/compiler_verbosity_options.pas'); P.Sources.AddSrc('frames/desktop_options.pas'); P.Sources.AddSrc('frames/editor_codefolding_options.pas'); P.Sources.AddSrc('frames/editor_codetools_options.pas'); P.Sources.AddSrc('frames/editor_color_options.pas'); P.Sources.AddSrc('frames/editor_display_options.pas'); P.Sources.AddSrc('frames/editor_dividerdraw_options.pas'); P.Sources.AddSrc('frames/editor_general_misc_options.pas'); P.Sources.AddSrc('frames/editor_general_options.pas'); P.Sources.AddSrc('frames/editor_keymapping_options.pas'); P.Sources.AddSrc('frames/editor_mouseaction_options.pas'); P.Sources.AddSrc('frames/editor_mouseaction_options_advanced.pas'); P.Sources.AddSrc('frames/editor_multiwindow_options.pas'); P.Sources.AddSrc('frames/files_options.pas'); P.Sources.AddSrc('frames/componentpalette_options.pas'); P.Sources.AddSrc('frames/formed_options.pas'); P.Sources.AddSrc('frames/fpdoc_options.pas'); P.Sources.AddSrc('frames/help_general_options.pas'); P.Sources.AddSrc('frames/naming_options.pas'); P.Sources.AddSrc('frames/oi_options.pas'); P.Sources.AddSrc('frames/project_application_options.pas'); P.Sources.AddSrc('frames/project_forms_options.pas'); P.Sources.AddSrc('frames/project_i18n_options.pas'); P.Sources.AddSrc('frames/project_lazdoc_options.pas'); P.Sources.AddSrc('frames/project_misc_options.pas'); P.Sources.AddSrc('frames/project_save_options.pas'); P.Sources.AddSrc('frames/project_versioninfo_options.pas'); P.Sources.AddSrc('frames/window_options.pas'); P.Sources.AddSrc('frmcustomapplicationoptions.pas'); P.Sources.AddSrc('gotofrm.pas'); P.Sources.AddSrc('helpfpcmessages.pas'); P.Sources.AddSrc('helpoptions.pas'); P.Sources.AddSrc('idecontexthelpedit.pas'); P.Sources.AddSrc('idedefs.pas'); P.Sources.AddSrc('idefpcinfo.pas'); P.Sources.AddSrc('ideoptiondefs.pas'); P.Sources.AddSrc('ideoptionsdlg.pas'); P.Sources.AddSrc('ideprotocol.pas'); P.Sources.AddSrc('idetranslations.pas'); P.Sources.AddSrc('idewindowhelp.pas'); P.Sources.AddSrc('imexportcompileropts.pas'); P.Sources.AddSrc('infobuild.pp'); P.Sources.AddSrc('initialsetupdlgs.pas'); P.Sources.AddSrc('inputfiledialog.pas'); P.Sources.AddSrc('inputhistory.pas'); P.Sources.AddSrc('invertassigntool.pas'); P.Sources.AddSrc('jumphistoryview.pas'); P.Sources.AddSrc('keymapping.pp'); P.Sources.AddSrc('keymapschemedlg.pas'); P.Sources.AddSrc('keymapshortcutdlg.pas'); P.Sources.AddSrc('lazarus.pp'); P.Sources.AddSrc('lazarusmanager.pas'); P.Sources.AddSrc('lazconf.pp'); P.Sources.AddSrc('macropromptdlg.pas'); P.Sources.AddSrc('main.pp'); P.Sources.AddSrc('mainbar.pas'); P.Sources.AddSrc('mainbase.pas'); P.Sources.AddSrc('mainintf.pas'); P.Sources.AddSrc('makeresstrdlg.pas'); P.Sources.AddSrc('miscoptions.pas'); P.Sources.AddSrc('mouseactiondialog.pas'); P.Sources.AddSrc('msgquickfixes.pas'); P.Sources.AddSrc('msgview.pp'); P.Sources.AddSrc('msgvieweditor.pas'); P.Sources.AddSrc('newdialog.pas'); P.Sources.AddSrc('newprojectdlg.pp'); P.Sources.AddSrc('outputfilter.pas'); P.Sources.AddSrc('patheditordlg.pas'); P.Sources.AddSrc('procedurelist.pas'); P.Sources.AddSrc('progressdlg.pas'); P.Sources.AddSrc('progresswnd.pas'); P.Sources.AddSrc('project.pp'); P.Sources.AddSrc('projectdefs.pas'); P.Sources.AddSrc('projecticon.pas'); P.Sources.AddSrc('projectinspector.pas'); P.Sources.AddSrc('projectresources.pas'); P.Sources.AddSrc('projectwizarddlg.pas'); P.Sources.AddSrc('publishmoduledlg.pas'); P.Sources.AddSrc('restrictionbrowser.pas'); P.Sources.AddSrc('runparamsopts.pas'); P.Sources.AddSrc('searchfrm.pas'); P.Sources.AddSrc('searchresultview.pp'); P.Sources.AddSrc('showcompileropts.pas'); P.Sources.AddSrc('showdeletingfilesdlg.pas'); P.Sources.AddSrc('sortselectiondlg.pas'); P.Sources.AddSrc('sourceeditor.pp'); P.Sources.AddSrc('sourceeditprocs.pas'); P.Sources.AddSrc('sourcemarks.pas'); P.Sources.AddSrc('sourcesyneditor.pas'); P.Sources.AddSrc('splash.pp'); P.Sources.AddSrc('srcedithintfrm.pas'); P.Sources.AddSrc('sysvaruseroverridedlg.pas'); P.Sources.AddSrc('transfermacros.pp'); P.Sources.AddSrc('unitdependencies.pas'); P.Sources.AddSrc('unitinfodlg.pp'); P.Sources.AddSrc('unusedunitsdlg.pas'); P.Sources.AddSrc('viewunit_dlg.pp'); P.Sources.AddSrc('w32manifest.pas'); P.Sources.AddSrc('w32versioninfo.pas'); P.Sources.AddSrc('wordcompletion.pp'); T:=P.Targets.AddUnit('../packager/packagesystem.pas'); T.Dependencies.AddUnit('lazarusidestrconsts'); T.Dependencies.AddUnit('environmentopts'); T.Dependencies.AddUnit('compileroptions'); T.Dependencies.AddUnit('packagedefs'); T:=P.Targets.AddUnit('../packager/adddirtopkgdlg.pas'); T:=P.Targets.AddUnit('../packager/addfiletoapackagedlg.pas'); T:=P.Targets.AddUnit('../packager/addtopackagedlg.pas'); T:=P.Targets.AddUnit('../packager/basepkgmanager.pas'); T:=P.Targets.AddUnit('../packager/brokendependenciesdlg.pas'); T:=P.Targets.AddUnit('../packager/confirmpkglistdlg.pas'); T:=P.Targets.AddUnit('../packager/frames/package_description_options.pas'); T:=P.Targets.AddUnit('../packager/frames/package_i18n_options.pas'); T:=P.Targets.AddUnit('../packager/frames/package_integration_options.pas'); T:=P.Targets.AddUnit('../packager/frames/package_provides_options.pas'); T:=P.Targets.AddUnit('../packager/frames/package_usage_options.pas'); T:=P.Targets.AddUnit('../packager/installpkgsetdlg.pas'); T:=P.Targets.AddUnit('../packager/missingpkgfilesdlg.pas'); T:=P.Targets.AddUnit('../packager/openinstalledpkgdlg.pas'); T:=P.Targets.AddUnit('../packager/packagedefs.pas'); T.Dependencies.AddUnit('projpackcommon'); T:=P.Targets.AddUnit('../packager/packageeditor.pas'); T:=P.Targets.AddUnit('../packager/packagelinks.pas'); T:=P.Targets.AddUnit('../packager/pkggraphexplorer.pas'); T:=P.Targets.AddUnit('../packager/pkglinksdlg.pas'); T:=P.Targets.AddUnit('../packager/pkgmanager.pas'); T:=P.Targets.AddUnit('../packager/pkgvirtualuniteditor.pas'); T:=P.Targets.AddUnit('../debugger/assemblerdlg.pp'); T:=P.Targets.AddUnit('../debugger/breakpointsdlg.pp'); T:=P.Targets.AddUnit('../debugger/breakpropertydlg.pas'); T:=P.Targets.AddUnit('../debugger/breakpropertydlggroups.pas'); T:=P.Targets.AddUnit('../debugger/debugeventsform.pp'); T:=P.Targets.AddUnit('../debugger/evaluatedlg.pp'); T:=P.Targets.AddUnit('../debugger/inspectdlg.pas'); T:=P.Targets.AddUnit('lazarusidestrconsts.pas'); T:=P.Targets.AddUnit('environmentopts.pp'); T:=P.Targets.AddUnit('compileroptions.pp'); T:=P.Targets.AddUnit('../packager/projpackcommon.pas'); // copy the compiled file, so the IDE knows how the package was compiled P.InstallFiles.Add('ide.compiled',AllOSes,'$(unitinstalldir)'); end; end; {$ifndef ALLPACKAGES} begin add_ide(''); Installer.Run; end. {$endif ALLPACKAGES}