How can you run a config script when installing a perl module?





.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ height:90px;width:728px;box-sizing:border-box;
}







4















I've been searching for a couple of hours and I'm coming up empty trying to find a solution. I'm using Dist::Zilla. I have a module that uses a simple config file in .ini format located in the module's share/ directory. When my module is installed, I'd like the install script to prompt the user for configuration options and save the user's options in the config file. Then, using File::UserConfig, it will copy the file over to the user's configuration directory where it can be loaded by the module when it runs.



Someone had suggested the Dist::Zilla::Plugin::MakeMaker::Custom module but I know next to nothing about MakeMaker and how I might write a custom one to kick off the configuration script.



I'm surprised I can't find anything that makes this easy to do. Perhaps I'm searching on the wrong keywords?










share|improve this question























  • Crossposted at perlmonks.org/?node_id=1227944 - I wonder if using any templating module would be a good approach to pre-fill a config file for the user?

    – Corion
    Jan 3 at 8:49






  • 1





    You want Dist::Zilla::Plugin::MakeMaker::Awesome, not ::Custom. It still generates the normal Makefile.PL but allows you to hook in and add customizations, whereas the latter requires you to write the whole Makefile.PL.

    – Grinnz
    Jan 10 at 1:02


















4















I've been searching for a couple of hours and I'm coming up empty trying to find a solution. I'm using Dist::Zilla. I have a module that uses a simple config file in .ini format located in the module's share/ directory. When my module is installed, I'd like the install script to prompt the user for configuration options and save the user's options in the config file. Then, using File::UserConfig, it will copy the file over to the user's configuration directory where it can be loaded by the module when it runs.



Someone had suggested the Dist::Zilla::Plugin::MakeMaker::Custom module but I know next to nothing about MakeMaker and how I might write a custom one to kick off the configuration script.



I'm surprised I can't find anything that makes this easy to do. Perhaps I'm searching on the wrong keywords?










share|improve this question























  • Crossposted at perlmonks.org/?node_id=1227944 - I wonder if using any templating module would be a good approach to pre-fill a config file for the user?

    – Corion
    Jan 3 at 8:49






  • 1





    You want Dist::Zilla::Plugin::MakeMaker::Awesome, not ::Custom. It still generates the normal Makefile.PL but allows you to hook in and add customizations, whereas the latter requires you to write the whole Makefile.PL.

    – Grinnz
    Jan 10 at 1:02














4












4








4








I've been searching for a couple of hours and I'm coming up empty trying to find a solution. I'm using Dist::Zilla. I have a module that uses a simple config file in .ini format located in the module's share/ directory. When my module is installed, I'd like the install script to prompt the user for configuration options and save the user's options in the config file. Then, using File::UserConfig, it will copy the file over to the user's configuration directory where it can be loaded by the module when it runs.



Someone had suggested the Dist::Zilla::Plugin::MakeMaker::Custom module but I know next to nothing about MakeMaker and how I might write a custom one to kick off the configuration script.



I'm surprised I can't find anything that makes this easy to do. Perhaps I'm searching on the wrong keywords?










share|improve this question














I've been searching for a couple of hours and I'm coming up empty trying to find a solution. I'm using Dist::Zilla. I have a module that uses a simple config file in .ini format located in the module's share/ directory. When my module is installed, I'd like the install script to prompt the user for configuration options and save the user's options in the config file. Then, using File::UserConfig, it will copy the file over to the user's configuration directory where it can be loaded by the module when it runs.



Someone had suggested the Dist::Zilla::Plugin::MakeMaker::Custom module but I know next to nothing about MakeMaker and how I might write a custom one to kick off the configuration script.



I'm surprised I can't find anything that makes this easy to do. Perhaps I'm searching on the wrong keywords?







perl






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Jan 3 at 4:44









StevieDStevieD

1,019918




1,019918













  • Crossposted at perlmonks.org/?node_id=1227944 - I wonder if using any templating module would be a good approach to pre-fill a config file for the user?

    – Corion
    Jan 3 at 8:49






  • 1





    You want Dist::Zilla::Plugin::MakeMaker::Awesome, not ::Custom. It still generates the normal Makefile.PL but allows you to hook in and add customizations, whereas the latter requires you to write the whole Makefile.PL.

    – Grinnz
    Jan 10 at 1:02



















  • Crossposted at perlmonks.org/?node_id=1227944 - I wonder if using any templating module would be a good approach to pre-fill a config file for the user?

    – Corion
    Jan 3 at 8:49






  • 1





    You want Dist::Zilla::Plugin::MakeMaker::Awesome, not ::Custom. It still generates the normal Makefile.PL but allows you to hook in and add customizations, whereas the latter requires you to write the whole Makefile.PL.

    – Grinnz
    Jan 10 at 1:02

















Crossposted at perlmonks.org/?node_id=1227944 - I wonder if using any templating module would be a good approach to pre-fill a config file for the user?

– Corion
Jan 3 at 8:49





Crossposted at perlmonks.org/?node_id=1227944 - I wonder if using any templating module would be a good approach to pre-fill a config file for the user?

– Corion
Jan 3 at 8:49




1




1





You want Dist::Zilla::Plugin::MakeMaker::Awesome, not ::Custom. It still generates the normal Makefile.PL but allows you to hook in and add customizations, whereas the latter requires you to write the whole Makefile.PL.

– Grinnz
Jan 10 at 1:02





You want Dist::Zilla::Plugin::MakeMaker::Awesome, not ::Custom. It still generates the normal Makefile.PL but allows you to hook in and add customizations, whereas the latter requires you to write the whole Makefile.PL.

– Grinnz
Jan 10 at 1:02












1 Answer
1






active

oldest

votes


















3














You had discussed this in IRC, and the gist is:




  1. You cannot rely on the installation process allowing any interaction, as a large amount of installations are via cpanm which is non-interactive and hides output from Makefile.PL by default. This is because users don't like having to configure things, and as an example, a Carton deployment is frequently non-interactive by its nature. You can allow configuration via environment variables recognized by your Makefile.PL to get around this.


  2. You can document to install using the --interactive option for cpanm in order to respond to prompts in your Makefile.PL, injected into the generated file using the [MakeMaker::Awesome] plugin.


  3. You can include a script with the distribution that will set up the configuration so the user can do it themselves separate from the installation.







share|improve this answer
























    Your Answer






    StackExchange.ifUsing("editor", function () {
    StackExchange.using("externalEditor", function () {
    StackExchange.using("snippets", function () {
    StackExchange.snippets.init();
    });
    });
    }, "code-snippets");

    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "1"
    };
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function() {
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled) {
    StackExchange.using("snippets", function() {
    createEditor();
    });
    }
    else {
    createEditor();
    }
    });

    function createEditor() {
    StackExchange.prepareEditor({
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader: {
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    },
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    });


    }
    });














    draft saved

    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54016471%2fhow-can-you-run-a-config-script-when-installing-a-perl-module%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    3














    You had discussed this in IRC, and the gist is:




    1. You cannot rely on the installation process allowing any interaction, as a large amount of installations are via cpanm which is non-interactive and hides output from Makefile.PL by default. This is because users don't like having to configure things, and as an example, a Carton deployment is frequently non-interactive by its nature. You can allow configuration via environment variables recognized by your Makefile.PL to get around this.


    2. You can document to install using the --interactive option for cpanm in order to respond to prompts in your Makefile.PL, injected into the generated file using the [MakeMaker::Awesome] plugin.


    3. You can include a script with the distribution that will set up the configuration so the user can do it themselves separate from the installation.







    share|improve this answer




























      3














      You had discussed this in IRC, and the gist is:




      1. You cannot rely on the installation process allowing any interaction, as a large amount of installations are via cpanm which is non-interactive and hides output from Makefile.PL by default. This is because users don't like having to configure things, and as an example, a Carton deployment is frequently non-interactive by its nature. You can allow configuration via environment variables recognized by your Makefile.PL to get around this.


      2. You can document to install using the --interactive option for cpanm in order to respond to prompts in your Makefile.PL, injected into the generated file using the [MakeMaker::Awesome] plugin.


      3. You can include a script with the distribution that will set up the configuration so the user can do it themselves separate from the installation.







      share|improve this answer


























        3












        3








        3







        You had discussed this in IRC, and the gist is:




        1. You cannot rely on the installation process allowing any interaction, as a large amount of installations are via cpanm which is non-interactive and hides output from Makefile.PL by default. This is because users don't like having to configure things, and as an example, a Carton deployment is frequently non-interactive by its nature. You can allow configuration via environment variables recognized by your Makefile.PL to get around this.


        2. You can document to install using the --interactive option for cpanm in order to respond to prompts in your Makefile.PL, injected into the generated file using the [MakeMaker::Awesome] plugin.


        3. You can include a script with the distribution that will set up the configuration so the user can do it themselves separate from the installation.







        share|improve this answer













        You had discussed this in IRC, and the gist is:




        1. You cannot rely on the installation process allowing any interaction, as a large amount of installations are via cpanm which is non-interactive and hides output from Makefile.PL by default. This is because users don't like having to configure things, and as an example, a Carton deployment is frequently non-interactive by its nature. You can allow configuration via environment variables recognized by your Makefile.PL to get around this.


        2. You can document to install using the --interactive option for cpanm in order to respond to prompts in your Makefile.PL, injected into the generated file using the [MakeMaker::Awesome] plugin.


        3. You can include a script with the distribution that will set up the configuration so the user can do it themselves separate from the installation.








        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Jan 10 at 1:08









        GrinnzGrinnz

        3,386514




        3,386514
































            draft saved

            draft discarded




















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f54016471%2fhow-can-you-run-a-config-script-when-installing-a-perl-module%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            MongoDB - Not Authorized To Execute Command

            How to fix TextFormField cause rebuild widget in Flutter

            Npm cannot find a required file even through it is in the searched directory