# অষ্টম অধ্যায় - প্রোগ্রাম কম্পাইলেশন

### অধ্যায় - আট

## প্রোগ্রাম কম্পাইলেশন

কম্পাইলেশন অর্থ কোনো প্রোগ্রামের সোর্সকোড থেকে ব্যবহারযোগ্য বাইনারীতে রূপান্তরিত করা। আমরা হরহামেশাই কম্পাইল করি তার কারন এই না যে এটা করার মধ্যে ভাব আছে, বলা যেতে পারে বাধ্য হয়েই। কখনো কখনো কোনো সফটওয়্যার আপনার ডিস্ট্রিবিউশনের রিপোজিটরিতে না থাকতে পারে। অথবা লেটেস্ট ভার্শনটি এখনো আসেনি, কম্পাইল করা ছাড়া উপায় নেই।

প্রত্যেকটি প্রোগ্রাম একইভাবে কম্পাইল করা যায় না। একটুআধটু পার্থক্য থাকে। আসলে একটা কম্পাইলড প্রোগ্রাম আর বাইনারির মাঝের অংশটুকু কমনসেন্স।

এবার আমরা বাঙলা লেখার অন্যতম জনপ্রিয় প্রোগ্রাম অভ্র কীবোর্ডের লিনাক্স ভার্শন আইবাস-অভ্র (ibus-avro) কম্পাইল করবো। কম্পাইল করার জন্য আমি আর্চ লিনাক্স ৬৪বিট ব্যবহার করছি।

### সোর্সকোড সংগ্রহ

কম্পাইল করতে গেলে প্রথমে আপনার সোর্সকোড প্রয়োজন। গুগলে ibus-avro লিখে সার্চ দিলে আপনি এর গিটহাব রিপোজিটরি পাবেন যেখানে সোর্সকোড রাখা আছে। সোর্সকোড সংগ্রহের বিভিন্ন উপায় আছে। আপনি অনেকসময় tar.gz আর্কাইভ হিসেবে পেতে পারেন। তো, গিট থেকে ক্লোন করতে আমাদের `git` ইন্সটলড থাকতে হবে। রিপোজিটরির বামপাশে একটি বক্সে ক্লোন ইউআরএল পাবেন। এবার আমরা ক্লোন করবো এভাবে:

```
me@howtocode-pc:~$ git clone https://github.com/sarim/ibus-avro.git
Cloning into 'ibus-avro'...
remote: Counting objects: 1061, done.
remote: Total 1061 (delta 0), reused 0 (delta 0), pack-reused 1061
Receiving objects: 100% (1061/1061), 10.55 MiB | 54.00 KiB/s, done.
Resolving deltas: 100% (491/491), done.
Checking connectivity... done.
```

### কনফিগার, কম্পাইল ও ইন্সটল

এবার আমরা ক্লোন করা সোর্সকোডের ফোল্ডারে ঢুকবো এবং সবার আগে Readme ফাইলটা পড়বো। সাধারণত রিডমি ফাইলে কম্পাইল করার পদ্ধতি বলা থাকে:

```
me@howtocode-pc:~$ cd ibus-avro
me@howtocode-pc:~$ less README.md
```

ইন্সট্রাকশনের প্রথম ধাপটি এরকম:

```
1. Open terminal/package manager and install following packages:

               git
           libibus-1.0-0
           libibus-1.0-dev
           ibus
           automake                                                         autoconf
           gjs
           gir1.2-gjsdbus-1.0
               gir1.2-ibus-1.0

    __For Ubuntu 12.04__

        sudo apt-get install git ibus libibus-1.0-dev automake autoconf gjs gir1.2-gjsdbus-1.0 gir1.2-ibus-1.0


    __For other linux distributions__

    You'll need all related build tools like `automake`, `autoconf` etc...
        and Latest __IBus__ from _git_ compiled with _gobject-introspection_ support enabled.
```

তো আমরা দেখছি যে, অভ্র ইন্সটল করতে গেলে আমাদের কিছু ডিপেন্ডেন্সি ইন্সটল করতে হবে। উবুন্টু ১২.০৪ এর জন্য সরাসরি কমান্ডই দেওয়া আছে। আমরা ইতমধ্যে git ইন্সটল করেছি। আইবাসের লেটেস্ট ভার্শনে gir লাইব্রেরী দুটি দেওয়াই থাকে। আমরা তাই libibus, ibus, automake, autoconf gjs ইন্সটল করলেই হবে। আপনাকে gir লাইব্রেরী দুটি ইন্সটল করতে হবে যদি উবুন্টু ব্যবহার করে থাকেন। ডেবিয়ান, আর্চ লিনাক্স এগুলোতে প্রয়োজন হবে না।

তারপর আমরা দ্বিতীয় ধাপে দেখছি:

```
2. Now give the following commands step-by-step:

                git clone git://github.com/sarim/ibus-avro.git
        cd ibus-avro
        aclocal && autoconf && automake --add-missig
        ./configure --prefix=/usr
        sudo make install
```

আমরা ইতমধ্যে সোর্সকোড ক্লোন করেছি ও সেই ডিরেক্টরিতেই আছি। অতএব প্রথম দুইলাইন দ্বিতীয়বার করতে হবে না। তারপরই এই কমান্ডটি দিতে হবে:

```
aclocal && autoconf && automake --add-missig
```

এই কমান্ডটির মাধ্যমে আমরা Makefile তৈরী করবো। তারপর কনফিগার করবো এই কমান্ড দিয়ে:

```
./configure --prefix=/usr
```

`--prefix=/usr` দিয়ে আমরা বলছি যে কম্পাইল করার পর তা `/usr` ডিরেক্টরিতে ইন্সটল করতে।

সবশেষে `sudo make install` দিয়ে আমরা কম্পাইল করে ইন্সটল করলাম।

সম্পূর্ণ কম্পাইলেশনে আসলে আমাদের মাথা খাটানোর কিছু নেই। রিডমি ফাইল পড়লে সহজেই বোঝা যায় কীভাবে কী করতে হবে।


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://sh.howtocode.dev/3.0.0.part3intro/3.8.0.compilation.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
